Part of the ADR-0003 epic #1105. Plan: docs/operations/proposals/advisor-qp-direct-retrieval.md (PR #1104). Decision: ADR-0003.
Goal: Fix the blocking synchronous reframe that stalls the single uvicorn worker (concurrency precursor for both regimes).
Scope:
reframe_query_with_identifiers is a sync def running a blocking llm.invoke (components/lif/langchain_agent/core.py:238,248-249), called without await/threadpool from async ask_agent (core.py:177) on a single uvicorn worker (projects/lif_advisor_api/Dockerfile2:49) — it serializes concurrent conversations.
- Make it
async or wrap in run_in_threadpool.
- Note the single-worker + in-memory
conversation_states scaling limits.
Size: S · Depends on: — (may fold into #970)
Part of the ADR-0003 epic #1105. Plan:
docs/operations/proposals/advisor-qp-direct-retrieval.md(PR #1104). Decision: ADR-0003.Goal: Fix the blocking synchronous reframe that stalls the single uvicorn worker (concurrency precursor for both regimes).
Scope:
reframe_query_with_identifiersis a syncdefrunning a blockingllm.invoke(components/lif/langchain_agent/core.py:238,248-249), called withoutawait/threadpool from asyncask_agent(core.py:177) on a single uvicorn worker (projects/lif_advisor_api/Dockerfile2:49) — it serializes concurrent conversations.asyncor wrap inrun_in_threadpool.conversation_statesscaling limits.Size: S · Depends on: — (may fold into #970)