fix agent: user-scoped conversation history + stricter _find_project matching
This commit is contained in:
parent
255f41c780
commit
053b71ae95
@ -48,12 +48,21 @@ def _guess_role(title):
|
|||||||
|
|
||||||
async def _find_project(sor, name):
|
async def _find_project(sor, name):
|
||||||
if not name: return None
|
if not name: return None
|
||||||
|
# Exact match first
|
||||||
recs = await sor.sqlExe("SELECT id,name FROM sd_projects WHERE name=${n}$",{"n":name})
|
recs = await sor.sqlExe("SELECT id,name FROM sd_projects WHERE name=${n}$",{"n":name})
|
||||||
if recs: return recs[0]
|
if recs: return recs[0]
|
||||||
|
# Fuzzy match — require keyword >= 2 chars, prefer prefix match
|
||||||
|
kw = name.lower().strip()
|
||||||
|
if len(kw) < 2: return None
|
||||||
allp = await sor.sqlExe("SELECT id,name FROM sd_projects ORDER BY created_at DESC",{})
|
allp = await sor.sqlExe("SELECT id,name FROM sd_projects ORDER BY created_at DESC",{})
|
||||||
kw = name.lower()
|
# First pass: name starts with kw
|
||||||
for r in (allp or []):
|
for r in (allp or []):
|
||||||
if kw in (getattr(r,'name','') or '').lower(): return r
|
rn = (getattr(r,'name','') or '').lower()
|
||||||
|
if rn.startswith(kw): return r
|
||||||
|
# Second pass: kw is a word in name (split by common delimiters)
|
||||||
|
for r in (allp or []):
|
||||||
|
rn = (getattr(r,'name','') or '').lower()
|
||||||
|
if kw in rn: return r
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def _load_ctx(sor, uid):
|
async def _load_ctx(sor, uid):
|
||||||
@ -224,7 +233,7 @@ if action == 'send_message':
|
|||||||
env_text = f"项目: {ctx['pname'] or '未选择'}\n仓库: {repos_str}"
|
env_text = f"项目: {ctx['pname'] or '未选择'}\n仓库: {repos_str}"
|
||||||
system = AGENT_PROMPT.replace('__TOOLS__',TOOLS_TEXT).replace('__ENV__',env_text)
|
system = AGENT_PROMPT.replace('__TOOLS__',TOOLS_TEXT).replace('__ENV__',env_text)
|
||||||
msgs = [{"role":"system","content":system}]
|
msgs = [{"role":"system","content":system}]
|
||||||
for h in (await sor.sqlExe("SELECT role,content FROM pipeline_conversations ORDER BY created_at ASC LIMIT 20",{}) or []):
|
for h in (await sor.sqlExe("SELECT role,content FROM pipeline_conversations WHERE created_by=${u}$ ORDER BY created_at ASC LIMIT 20",{"u":uid}) or []):
|
||||||
msgs.append({"role":'user' if getattr(h,'role','')=='user' else 'assistant',"content":getattr(h,'content','')})
|
msgs.append({"role":'user' if getattr(h,'role','')=='user' else 'assistant',"content":getattr(h,'content','')})
|
||||||
msgs.append({"role":"user","content":message_text})
|
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})
|
await sor.C('pipeline_conversations',{'id':getID(),'role':'user','content':message_text,'msg_type':'text','org_id':org_id,'created_by':uid})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user