Kevin Hu
commited on
Commit
·
5bf3fb9
1
Parent(s):
28a7a7b
Fix agent api invokation issue (#3581)
Browse files### What problem does this PR solve?
#3570
### Type of change
- [x] Bug Fix (non-breaking change which fixes an issue)
- api/apps/sdk/session.py +26 -19
api/apps/sdk/session.py
CHANGED
@@ -317,17 +317,18 @@ def agent_completion(tenant_id, agent_id):
|
|
317 |
|
318 |
canvas.messages.append(msg[-1])
|
319 |
canvas.add_user_input(msg[-1]["content"])
|
320 |
-
answer = canvas.run(stream=stream)
|
321 |
-
|
322 |
-
assert answer is not None, "Nothing. Is it over?"
|
323 |
|
324 |
if stream:
|
325 |
-
assert isinstance(answer, partial), "Nothing. Is it over?"
|
326 |
-
|
327 |
def sse():
|
328 |
-
nonlocal answer, cvs
|
329 |
try:
|
330 |
-
for ans in
|
|
|
|
|
|
|
|
|
|
|
|
|
331 |
for k in ans.keys():
|
332 |
final_ans[k] = ans[k]
|
333 |
ans = {"answer": ans["content"], "reference": ans.get("reference", [])}
|
@@ -337,15 +338,18 @@ def agent_completion(tenant_id, agent_id):
|
|
337 |
ensure_ascii=False) + "\n\n"
|
338 |
|
339 |
canvas.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id})
|
|
|
340 |
if final_ans.get("reference"):
|
341 |
canvas.reference.append(final_ans["reference"])
|
342 |
cvs.dsl = json.loads(str(canvas))
|
343 |
API4ConversationService.append_message(conv.id, conv.to_dict())
|
344 |
except Exception as e:
|
|
|
|
|
345 |
yield "data:" + json.dumps({"code": 500, "message": str(e),
|
346 |
"data": {"answer": "**ERROR**: " + str(e), "reference": []}},
|
347 |
ensure_ascii=False) + "\n\n"
|
348 |
-
yield "data:" + json.dumps({"code": 0, "data": True}, ensure_ascii=False) + "\n\n"
|
349 |
|
350 |
resp = Response(sse(), mimetype="text/event-stream")
|
351 |
resp.headers.add_header("Cache-control", "no-cache")
|
@@ -354,17 +358,20 @@ def agent_completion(tenant_id, agent_id):
|
|
354 |
resp.headers.add_header("Content-Type", "text/event-stream; charset=utf-8")
|
355 |
return resp
|
356 |
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
canvas.
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
|
|
|
|
|
|
368 |
|
369 |
|
370 |
@manager.route('/chats/<chat_id>/sessions', methods=['GET'])
|
|
|
317 |
|
318 |
canvas.messages.append(msg[-1])
|
319 |
canvas.add_user_input(msg[-1]["content"])
|
|
|
|
|
|
|
320 |
|
321 |
if stream:
|
|
|
|
|
322 |
def sse():
|
323 |
+
nonlocal answer, cvs
|
324 |
try:
|
325 |
+
for ans in canvas.run(stream=True):
|
326 |
+
if ans.get("running_status"):
|
327 |
+
yield "data:" + json.dumps({"code": 0, "message": "",
|
328 |
+
"data": {"answer": ans["content"],
|
329 |
+
"running_status": True}},
|
330 |
+
ensure_ascii=False) + "\n\n"
|
331 |
+
continue
|
332 |
for k in ans.keys():
|
333 |
final_ans[k] = ans[k]
|
334 |
ans = {"answer": ans["content"], "reference": ans.get("reference", [])}
|
|
|
338 |
ensure_ascii=False) + "\n\n"
|
339 |
|
340 |
canvas.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id})
|
341 |
+
canvas.history.append(("assistant", final_ans["content"]))
|
342 |
if final_ans.get("reference"):
|
343 |
canvas.reference.append(final_ans["reference"])
|
344 |
cvs.dsl = json.loads(str(canvas))
|
345 |
API4ConversationService.append_message(conv.id, conv.to_dict())
|
346 |
except Exception as e:
|
347 |
+
cvs.dsl = json.loads(str(canvas))
|
348 |
+
UserCanvasService.update_by_id(req["id"], cvs.to_dict())
|
349 |
yield "data:" + json.dumps({"code": 500, "message": str(e),
|
350 |
"data": {"answer": "**ERROR**: " + str(e), "reference": []}},
|
351 |
ensure_ascii=False) + "\n\n"
|
352 |
+
yield "data:" + json.dumps({"code": 0, "message": "", "data": True}, ensure_ascii=False) + "\n\n"
|
353 |
|
354 |
resp = Response(sse(), mimetype="text/event-stream")
|
355 |
resp.headers.add_header("Cache-control", "no-cache")
|
|
|
358 |
resp.headers.add_header("Content-Type", "text/event-stream; charset=utf-8")
|
359 |
return resp
|
360 |
|
361 |
+
for answer in canvas.run(stream=False):
|
362 |
+
if answer.get("running_status"): continue
|
363 |
+
final_ans["content"] = "\n".join(answer["content"]) if "content" in answer else ""
|
364 |
+
canvas.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id})
|
365 |
+
if final_ans.get("reference"):
|
366 |
+
canvas.reference.append(final_ans["reference"])
|
367 |
+
cvs.dsl = json.loads(str(canvas))
|
368 |
+
UserCanvasService.update_by_id(req["id"], cvs.to_dict())
|
369 |
+
|
370 |
+
result = {"answer": final_ans["content"], "reference": final_ans.get("reference", [])}
|
371 |
+
fillin_conv(result)
|
372 |
+
API4ConversationService.append_message(conv.id, conv.to_dict())
|
373 |
+
rename_field(result)
|
374 |
+
return get_result(data=result)
|
375 |
|
376 |
|
377 |
@manager.route('/chats/<chat_id>/sessions', methods=['GET'])
|