Rifqi Hafizuddin Claude Sonnet 4.6 commited on
Commit ·
23eeb2d
1
Parent(s): 2167a5b
[NOTICKET] pass orchestrator search_query to sql executor for multi-turn context
Browse files- src/api/v1/chat.py +5 -7
src/api/v1/chat.py
CHANGED
|
@@ -202,6 +202,7 @@ async def chat_stream(request: ChatRequest, db: AsyncSession = Depends(get_db)):
|
|
| 202 |
history = await history_task # fast DB query (<100ms), done before orchestrator finishes
|
| 203 |
intent_result = await orchestrator.analyze_message(request.message, history)
|
| 204 |
|
|
|
|
| 205 |
if not intent_result.get("needs_search"):
|
| 206 |
retrieval_task.cancel()
|
| 207 |
try:
|
|
@@ -210,7 +211,6 @@ async def chat_stream(request: ChatRequest, db: AsyncSession = Depends(get_db)):
|
|
| 210 |
pass
|
| 211 |
raw_results = []
|
| 212 |
else:
|
| 213 |
-
search_query = intent_result.get("search_query", request.message)
|
| 214 |
logger.info(f"Searching for: {search_query}")
|
| 215 |
if search_query != request.message:
|
| 216 |
retrieval_task.cancel()
|
|
@@ -233,16 +233,14 @@ async def chat_stream(request: ChatRequest, db: AsyncSession = Depends(get_db)):
|
|
| 233 |
|
| 234 |
source_hint = intent_result.get("source_hint", "both")
|
| 235 |
if source_hint in ("schema", "both"):
|
| 236 |
-
#
|
| 237 |
-
#
|
| 238 |
-
#
|
| 239 |
-
# worse SQL when fed to db_executor. Smoke-test parity with
|
| 240 |
-
# `experiments/test_db_executor.py` requires the raw message.
|
| 241 |
query_results = await query_executor.execute(
|
| 242 |
results=raw_results,
|
| 243 |
user_id=request.user_id,
|
| 244 |
db=db,
|
| 245 |
-
question=
|
| 246 |
)
|
| 247 |
query_context = _format_query_results(query_results)
|
| 248 |
if query_context:
|
|
|
|
| 202 |
history = await history_task # fast DB query (<100ms), done before orchestrator finishes
|
| 203 |
intent_result = await orchestrator.analyze_message(request.message, history)
|
| 204 |
|
| 205 |
+
search_query = intent_result.get("search_query", request.message) or request.message
|
| 206 |
if not intent_result.get("needs_search"):
|
| 207 |
retrieval_task.cancel()
|
| 208 |
try:
|
|
|
|
| 211 |
pass
|
| 212 |
raw_results = []
|
| 213 |
else:
|
|
|
|
| 214 |
logger.info(f"Searching for: {search_query}")
|
| 215 |
if search_query != request.message:
|
| 216 |
retrieval_task.cancel()
|
|
|
|
| 233 |
|
| 234 |
source_hint = intent_result.get("source_hint", "both")
|
| 235 |
if source_hint in ("schema", "both"):
|
| 236 |
+
# Use search_query (orchestrator's standalone rewrite) so follow-up
|
| 237 |
+
# messages like "dive deeper" or "show me last year" resolve correctly.
|
| 238 |
+
# For first-turn questions search_query == request.message, so no change.
|
|
|
|
|
|
|
| 239 |
query_results = await query_executor.execute(
|
| 240 |
results=raw_results,
|
| 241 |
user_id=request.user_id,
|
| 242 |
db=db,
|
| 243 |
+
question=search_query,
|
| 244 |
)
|
| 245 |
query_context = _format_query_results(query_results)
|
| 246 |
if query_context:
|