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)

Files changed (1) hide show
  1. 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, conv
329
  try:
330
- for ans in answer():
 
 
 
 
 
 
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
- final_ans["content"] = "\n".join(answer["content"]) if "content" in answer else ""
358
- canvas.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id})
359
- if final_ans.get("reference"):
360
- canvas.reference.append(final_ans["reference"])
361
- cvs.dsl = json.loads(str(canvas))
362
-
363
- result = {"answer": final_ans["content"], "reference": final_ans.get("reference", [])}
364
- fillin_conv(result)
365
- API4ConversationService.append_message(conv.id, conv.to_dict())
366
- rename_field(result)
367
- return get_result(data=result)
 
 
 
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'])