KevinHuSh commited on
Commit
56f682d
·
1 Parent(s): 719cc35

fix bug of chat without stream (#830)

Browse files

### What problem does this PR solve?

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)

api/apps/api_app.py CHANGED
@@ -222,10 +222,13 @@ def completion():
222
  resp.headers.add_header("Content-Type", "text/event-stream; charset=utf-8")
223
  return resp
224
  else:
225
- ans = chat(dia, msg, **req)
226
- fillin_conv(ans)
227
- API4ConversationService.append_message(conv.id, conv.to_dict())
228
- return get_json_result(data=ans)
 
 
 
229
 
230
  except Exception as e:
231
  return server_error_response(e)
 
222
  resp.headers.add_header("Content-Type", "text/event-stream; charset=utf-8")
223
  return resp
224
  else:
225
+ answer = None
226
+ for ans in chat(dia, msg, **req):
227
+ answer = ans
228
+ fillin_conv(ans)
229
+ API4ConversationService.append_message(conv.id, conv.to_dict())
230
+ break
231
+ return get_json_result(data=answer)
232
 
233
  except Exception as e:
234
  return server_error_response(e)
api/apps/conversation_app.py CHANGED
@@ -162,10 +162,13 @@ def completion():
162
  return resp
163
 
164
  else:
165
- ans = chat(dia, msg, **req)
166
- fillin_conv(ans)
167
- ConversationService.update_by_id(conv.id, conv.to_dict())
168
- return get_json_result(data=ans)
 
 
 
169
  except Exception as e:
170
  return server_error_response(e)
171
 
 
162
  return resp
163
 
164
  else:
165
+ answer = None
166
+ for ans in chat(dia, msg, **req):
167
+ answer = ans
168
+ fillin_conv(ans)
169
+ ConversationService.update_by_id(conv.id, conv.to_dict())
170
+ break
171
+ return get_json_result(data=answer)
172
  except Exception as e:
173
  return server_error_response(e)
174
 
api/db/services/dialog_service.py CHANGED
@@ -84,8 +84,7 @@ def chat(dialog, messages, stream=True, **kwargs):
84
  kbs = KnowledgebaseService.get_by_ids(dialog.kb_ids)
85
  embd_nms = list(set([kb.embd_id for kb in kbs]))
86
  if len(embd_nms) != 1:
87
- if stream:
88
- yield {"answer": "**ERROR**: Knowledge bases use different embedding models.", "reference": []}
89
  return {"answer": "**ERROR**: Knowledge bases use different embedding models.", "reference": []}
90
 
91
  questions = [m["content"] for m in messages if m["role"] == "user"]
@@ -126,8 +125,7 @@ def chat(dialog, messages, stream=True, **kwargs):
126
  "{}->{}".format(" ".join(questions), "\n->".join(knowledges)))
127
 
128
  if not knowledges and prompt_config.get("empty_response"):
129
- if stream:
130
- yield {"answer": prompt_config["empty_response"], "reference": kbinfos}
131
  return {"answer": prompt_config["empty_response"], "reference": kbinfos}
132
 
133
  kwargs["knowledge"] = "\n".join(knowledges)
@@ -177,7 +175,7 @@ def chat(dialog, messages, stream=True, **kwargs):
177
  **kwargs), msg, gen_conf)
178
  chat_logger.info("User: {}|Assistant: {}".format(
179
  msg[-1]["content"], answer))
180
- return decorate_answer(answer)
181
 
182
 
183
  def use_sql(question, field_map, tenant_id, chat_mdl, quota=True):
 
84
  kbs = KnowledgebaseService.get_by_ids(dialog.kb_ids)
85
  embd_nms = list(set([kb.embd_id for kb in kbs]))
86
  if len(embd_nms) != 1:
87
+ yield {"answer": "**ERROR**: Knowledge bases use different embedding models.", "reference": []}
 
88
  return {"answer": "**ERROR**: Knowledge bases use different embedding models.", "reference": []}
89
 
90
  questions = [m["content"] for m in messages if m["role"] == "user"]
 
125
  "{}->{}".format(" ".join(questions), "\n->".join(knowledges)))
126
 
127
  if not knowledges and prompt_config.get("empty_response"):
128
+ yield {"answer": prompt_config["empty_response"], "reference": kbinfos}
 
129
  return {"answer": prompt_config["empty_response"], "reference": kbinfos}
130
 
131
  kwargs["knowledge"] = "\n".join(knowledges)
 
175
  **kwargs), msg, gen_conf)
176
  chat_logger.info("User: {}|Assistant: {}".format(
177
  msg[-1]["content"], answer))
178
+ yield decorate_answer(answer)
179
 
180
 
181
  def use_sql(question, field_map, tenant_id, chat_mdl, quota=True):