fix bug of chat without stream (#830)

### What problem does this PR solve?

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
KevinHuSh 2024-05-17 20:03:00 +08:00 committed by GitHub
parent 2bfacd0469
commit 673a28e492
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 17 additions and 13 deletions

View File

@ -222,10 +222,13 @@ def completion():
resp.headers.add_header("Content-Type", "text/event-stream; charset=utf-8") resp.headers.add_header("Content-Type", "text/event-stream; charset=utf-8")
return resp return resp
else: else:
ans = chat(dia, msg, **req) answer = None
fillin_conv(ans) for ans in chat(dia, msg, **req):
API4ConversationService.append_message(conv.id, conv.to_dict()) answer = ans
return get_json_result(data=ans) fillin_conv(ans)
API4ConversationService.append_message(conv.id, conv.to_dict())
break
return get_json_result(data=answer)
except Exception as e: except Exception as e:
return server_error_response(e) return server_error_response(e)

View File

@ -162,10 +162,13 @@ def completion():
return resp return resp
else: else:
ans = chat(dia, msg, **req) answer = None
fillin_conv(ans) for ans in chat(dia, msg, **req):
ConversationService.update_by_id(conv.id, conv.to_dict()) answer = ans
return get_json_result(data=ans) fillin_conv(ans)
ConversationService.update_by_id(conv.id, conv.to_dict())
break
return get_json_result(data=answer)
except Exception as e: except Exception as e:
return server_error_response(e) return server_error_response(e)

View File

@ -84,8 +84,7 @@ def chat(dialog, messages, stream=True, **kwargs):
kbs = KnowledgebaseService.get_by_ids(dialog.kb_ids) kbs = KnowledgebaseService.get_by_ids(dialog.kb_ids)
embd_nms = list(set([kb.embd_id for kb in kbs])) embd_nms = list(set([kb.embd_id for kb in kbs]))
if len(embd_nms) != 1: if len(embd_nms) != 1:
if stream: yield {"answer": "**ERROR**: Knowledge bases use different embedding models.", "reference": []}
yield {"answer": "**ERROR**: Knowledge bases use different embedding models.", "reference": []}
return {"answer": "**ERROR**: Knowledge bases use different embedding models.", "reference": []} return {"answer": "**ERROR**: Knowledge bases use different embedding models.", "reference": []}
questions = [m["content"] for m in messages if m["role"] == "user"] questions = [m["content"] for m in messages if m["role"] == "user"]
@ -126,8 +125,7 @@ def chat(dialog, messages, stream=True, **kwargs):
"{}->{}".format(" ".join(questions), "\n->".join(knowledges))) "{}->{}".format(" ".join(questions), "\n->".join(knowledges)))
if not knowledges and prompt_config.get("empty_response"): if not knowledges and prompt_config.get("empty_response"):
if stream: yield {"answer": prompt_config["empty_response"], "reference": kbinfos}
yield {"answer": prompt_config["empty_response"], "reference": kbinfos}
return {"answer": prompt_config["empty_response"], "reference": kbinfos} return {"answer": prompt_config["empty_response"], "reference": kbinfos}
kwargs["knowledge"] = "\n".join(knowledges) kwargs["knowledge"] = "\n".join(knowledges)
@ -177,7 +175,7 @@ def chat(dialog, messages, stream=True, **kwargs):
**kwargs), msg, gen_conf) **kwargs), msg, gen_conf)
chat_logger.info("User: {}|Assistant: {}".format( chat_logger.info("User: {}|Assistant: {}".format(
msg[-1]["content"], answer)) msg[-1]["content"], answer))
return decorate_answer(answer) yield decorate_answer(answer)
def use_sql(question, field_map, tenant_id, chat_mdl, quota=True): def use_sql(question, field_map, tenant_id, chat_mdl, quota=True):