fix: session handling and SDK async iteration
- Add sdk_conversation_id column to track SDK conversation separately from user session_id - Queue processor looks up SDK conversation ID for resume instead of passing user session_id - session_id "new" stores NULL initially, gets set from SDK on completion - Custom session_ids are preserved (not overwritten by SDK) - Worker catches SDK process exit error after messages are collected Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@ from src.backend.db.database import (
|
||||
complete_request,
|
||||
fail_request,
|
||||
append_topic_summary,
|
||||
get_session_sdk_id,
|
||||
)
|
||||
from src.backend.services.worker_client import WorkerClient
|
||||
|
||||
@@ -38,6 +39,11 @@ async def process_one(worker: WorkerClient) -> bool:
|
||||
return True
|
||||
|
||||
model = resolve_model(req["model"], topic["model"])
|
||||
|
||||
# Only resume if there's a previous completed request with an SDK conversation ID
|
||||
resume_id = None
|
||||
if req["session_id"]:
|
||||
resume_id = await get_session_sdk_id(db, req["session_id"])
|
||||
finally:
|
||||
await db.close()
|
||||
|
||||
@@ -46,7 +52,7 @@ async def process_one(worker: WorkerClient) -> bool:
|
||||
prompt=req["prompt"],
|
||||
system_prompt=topic["system_prompt"],
|
||||
model=model,
|
||||
session_id=req["session_id"],
|
||||
session_id=resume_id,
|
||||
)
|
||||
except Exception as e:
|
||||
db = await get_db()
|
||||
@@ -63,7 +69,7 @@ async def process_one(worker: WorkerClient) -> bool:
|
||||
db,
|
||||
req["id"],
|
||||
result["result"],
|
||||
session_id=result.get("session_id"),
|
||||
sdk_conversation_id=result.get("session_id"),
|
||||
)
|
||||
|
||||
if req["summarize"]:
|
||||
|
||||
Reference in New Issue
Block a user