fix: handle None user_id — skip DB persistence, use in-memory ctx only

This commit is contained in:
ymq 2026-08-10 00:04:13 +08:00
parent 7cb23c7f88
commit b494b242db

View File

@ -79,6 +79,8 @@ async def _find_project(sor, name):
return recs[0] if recs else None
async def _load_ctx(sor, uid):
if not uid:
return {'pid':'','pname':'','ws':'','skills_dir':'','repos':[]}
recs = await sor.sqlExe("SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$",{"u":uid})
ctx = {'pid':'','pname':'','ws':'','skills_dir':'','repos':[]}
if not recs: return ctx
@ -101,6 +103,8 @@ async def _load_ctx(sor, uid):
return ctx
async def _save_ctx(sor, uid, pid):
if not uid:
return
try:
await sor.sqlExe("UPDATE pipeline_agent_settings SET current_project_id=${p}$ WHERE user_id=${u}$",{"p":pid or '','u':uid})
ex = await sor.sqlExe("SELECT id FROM pipeline_agent_settings WHERE user_id=${u}$",{"u":uid})
@ -465,6 +469,7 @@ if action == 'send_message':
uid = await get_user()
org_id = await get_userorgid() or '0'
debug(f"AUTH: uid={uid}, org_id={org_id}")
async def agent_stream():
async with DBPools().sqlorContext(dbname) as sor:
@ -497,7 +502,8 @@ if action == 'send_message':
continue
msgs.append({"role":'user' if r=='user' else 'assistant',"content":c})
msgs.append({"role":"user","content":message_text})
await sor.C('pipeline_conversations',{'id':getID(),'role':'user','content':message_text,'msg_type':'text','org_id':org_id,'created_by':uid,'iteration_id':ctx['pid'] or ''})
if uid:
await sor.C('pipeline_conversations',{'id':getID(),'role':'user','content':message_text,'msg_type':'text','org_id':org_id,'created_by':uid,'iteration_id':ctx['pid'] or ''})
agent_reply = ''
for turn in range(10):
@ -535,7 +541,8 @@ if action == 'send_message':
d = json.dumps(_w_text(agent_reply), ensure_ascii=False)+'\n'
debug(f"YIELD final: {d[:60]}")
yield d
await sor.C('pipeline_conversations',{'id':getID(),'role':'agent','content':agent_reply,'msg_type':'text','org_id':org_id,'created_by':'system','iteration_id':ctx['pid'] or ''})
if uid:
await sor.C('pipeline_conversations',{'id':getID(),'role':'agent','content':agent_reply,'msg_type':'text','org_id':org_id,'created_by':'system','iteration_id':ctx['pid'] or ''})
return await stream_response(request, agent_stream, 'text/plain; charset=utf-8')