Kevin Hu commited on
Commit
a4802a2
·
1 Parent(s): 6430aeb

Fix chat listing error. (#4270)

Browse files

### What problem does this PR solve?

#4220
### Type of change

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

Files changed (1) hide show
  1. api/apps/sdk/chat.py +36 -30
api/apps/sdk/chat.py CHANGED
@@ -18,23 +18,22 @@ from api import settings
18
  from api.db import StatusEnum
19
  from api.db.services.dialog_service import DialogService
20
  from api.db.services.knowledgebase_service import KnowledgebaseService
21
- from api.db.services.llm_service import TenantLLMService
22
  from api.db.services.user_service import TenantService
23
  from api.utils import get_uuid
24
  from api.utils.api_utils import get_error_data_result, token_required
25
  from api.utils.api_utils import get_result
26
 
27
 
28
-
29
  @manager.route('/chats', methods=['POST']) # noqa: F821
30
  @token_required
31
  def create(tenant_id):
32
- req=request.json
33
- ids= req.get("dataset_ids")
34
  if not ids:
35
  return get_error_data_result(message="`dataset_ids` is required")
36
  for kb_id in ids:
37
- kbs = KnowledgebaseService.accessible(kb_id=kb_id,user_id=tenant_id)
38
  if not kbs:
39
  return get_error_data_result(f"You don't own the dataset {kb_id}")
40
  kbs = KnowledgebaseService.query(id=kb_id)
@@ -44,14 +43,15 @@ def create(tenant_id):
44
  kbs = KnowledgebaseService.get_by_ids(ids)
45
  embd_count = list(set([kb.embd_id for kb in kbs]))
46
  if len(embd_count) != 1:
47
- return get_result(message='Datasets use different embedding models."',code=settings.RetCode.AUTHENTICATION_ERROR)
 
48
  req["kb_ids"] = ids
49
  # llm
50
  llm = req.get("llm")
51
  if llm:
52
  if "model_name" in llm:
53
  req["llm_id"] = llm.pop("model_name")
54
- if not TenantLLMService.query(tenant_id=tenant_id,llm_name=req["llm_id"],model_type="chat"):
55
  return get_error_data_result(f"`model_name` {req.get('llm_id')} doesn't exist")
56
  req["llm_setting"] = req.pop("llm")
57
  e, tenant = TenantService.get_by_id(tenant_id)
@@ -82,8 +82,10 @@ def create(tenant_id):
82
  req["top_k"] = req.get("top_k", 1024)
83
  req["rerank_id"] = req.get("rerank_id", "")
84
  if req.get("rerank_id"):
85
- value_rerank_model = ["BAAI/bge-reranker-v2-m3","maidalun1020/bce-reranker-base_v1"]
86
- if req["rerank_id"] not in value_rerank_model and not TenantLLMService.query(tenant_id=tenant_id,llm_name=req.get("rerank_id"),model_type="rerank"):
 
 
87
  return get_error_data_result(f"`rerank_model` {req.get('rerank_id')} doesn't exist")
88
  if not req.get("llm_id"):
89
  req["llm_id"] = tenant.llm_id
@@ -106,11 +108,11 @@ def create(tenant_id):
106
  {"key": "knowledge", "optional": False}
107
  ],
108
  "empty_response": "Sorry! No relevant content was found in the knowledge base!",
109
- "quote":True,
110
- "tts":False,
111
- "refine_multiturn":True
112
  }
113
- key_list_2 = ["system", "prologue", "parameters", "empty_response","quote","tts","refine_multiturn"]
114
  if "prompt_config" not in req:
115
  req['prompt_config'] = {}
116
  for key in key_list_2:
@@ -151,15 +153,16 @@ def create(tenant_id):
151
  res["avatar"] = res.pop("icon")
152
  return get_result(data=res)
153
 
 
154
  @manager.route('/chats/<chat_id>', methods=['PUT']) # noqa: F821
155
  @token_required
156
- def update(tenant_id,chat_id):
157
  if not DialogService.query(tenant_id=tenant_id, id=chat_id, status=StatusEnum.VALID.value):
158
  return get_error_data_result(message='You do not own the chat')
159
- req =request.json
160
  ids = req.get("dataset_ids")
161
  if "show_quotation" in req:
162
- req["do_refer"]=req.pop("show_quotation")
163
  if "dataset_ids" in req:
164
  if not ids:
165
  return get_error_data_result("`dataset_ids` can't be empty")
@@ -173,8 +176,8 @@ def update(tenant_id,chat_id):
173
  if kb.chunk_num == 0:
174
  return get_error_data_result(f"The dataset {kb_id} doesn't own parsed file")
175
  kbs = KnowledgebaseService.get_by_ids(ids)
176
- embd_count=list(set([kb.embd_id for kb in kbs]))
177
- if len(embd_count) != 1 :
178
  return get_result(
179
  message='Datasets use different embedding models."',
180
  code=settings.RetCode.AUTHENTICATION_ERROR)
@@ -183,7 +186,7 @@ def update(tenant_id,chat_id):
183
  if llm:
184
  if "model_name" in llm:
185
  req["llm_id"] = llm.pop("model_name")
186
- if not TenantLLMService.query(tenant_id=tenant_id,llm_name=req["llm_id"],model_type="chat"):
187
  return get_error_data_result(f"`model_name` {req.get('llm_id')} doesn't exist")
188
  req["llm_setting"] = req.pop("llm")
189
  e, tenant = TenantService.get_by_id(tenant_id)
@@ -209,8 +212,10 @@ def update(tenant_id,chat_id):
209
  e, res = DialogService.get_by_id(chat_id)
210
  res = res.to_json()
211
  if req.get("rerank_id"):
212
- value_rerank_model = ["BAAI/bge-reranker-v2-m3","maidalun1020/bce-reranker-base_v1"]
213
- if req["rerank_id"] not in value_rerank_model and not TenantLLMService.query(tenant_id=tenant_id,llm_name=req.get("rerank_id"),model_type="rerank"):
 
 
214
  return get_error_data_result(f"`rerank_model` {req.get('rerank_id')} doesn't exist")
215
  if "name" in req:
216
  if not req.get("name"):
@@ -245,16 +250,16 @@ def update(tenant_id,chat_id):
245
  def delete(tenant_id):
246
  req = request.json
247
  if not req:
248
- ids=None
249
  else:
250
- ids=req.get("ids")
251
  if not ids:
252
  id_list = []
253
- dias=DialogService.query(tenant_id=tenant_id,status=StatusEnum.VALID.value)
254
  for dia in dias:
255
  id_list.append(dia.id)
256
  else:
257
- id_list=ids
258
  for id in id_list:
259
  if not DialogService.query(tenant_id=tenant_id, id=id, status=StatusEnum.VALID.value):
260
  return get_error_data_result(message=f"You don't own the chat {id}")
@@ -262,6 +267,7 @@ def delete(tenant_id):
262
  DialogService.update_by_id(id, temp_dict)
263
  return get_result()
264
 
 
265
  @manager.route('/chats', methods=['GET']) # noqa: F821
266
  @token_required
267
  def list_chat(tenant_id):
@@ -278,20 +284,20 @@ def list_chat(tenant_id):
278
  desc = False
279
  else:
280
  desc = True
281
- chats = DialogService.get_list(tenant_id,page_number,items_per_page,orderby,desc,id,name)
282
  if not chats:
283
  return get_result(data=[])
284
  list_assts = []
285
- renamed_dict = {}
286
  key_mapping = {"parameters": "variables",
287
  "prologue": "opener",
288
  "quote": "show_quote",
289
  "system": "prompt",
290
  "rerank_id": "rerank_model",
291
  "vector_similarity_weight": "keywords_similarity_weight",
292
- "do_refer":"show_quotation"}
293
  key_list = ["similarity_threshold", "vector_similarity_weight", "top_n", "rerank_id"]
294
  for res in chats:
 
295
  for key, value in res["prompt_config"].items():
296
  new_key = key_mapping.get(key, key)
297
  renamed_dict[new_key] = value
@@ -309,11 +315,11 @@ def list_chat(tenant_id):
309
  kb_list = []
310
  for kb_id in res["kb_ids"]:
311
  kb = KnowledgebaseService.query(id=kb_id)
312
- if not kb :
313
  return get_error_data_result(message=f"Don't exist the kb {kb_id}")
314
  kb_list.append(kb[0].to_json())
315
  del res["kb_ids"]
316
  res["datasets"] = kb_list
317
  res["avatar"] = res.pop("icon")
318
  list_assts.append(res)
319
- return get_result(data=list_assts)
 
18
  from api.db import StatusEnum
19
  from api.db.services.dialog_service import DialogService
20
  from api.db.services.knowledgebase_service import KnowledgebaseService
21
+ from api.db.services.llm_service import TenantLLMService
22
  from api.db.services.user_service import TenantService
23
  from api.utils import get_uuid
24
  from api.utils.api_utils import get_error_data_result, token_required
25
  from api.utils.api_utils import get_result
26
 
27
 
 
28
  @manager.route('/chats', methods=['POST']) # noqa: F821
29
  @token_required
30
  def create(tenant_id):
31
+ req = request.json
32
+ ids = req.get("dataset_ids")
33
  if not ids:
34
  return get_error_data_result(message="`dataset_ids` is required")
35
  for kb_id in ids:
36
+ kbs = KnowledgebaseService.accessible(kb_id=kb_id, user_id=tenant_id)
37
  if not kbs:
38
  return get_error_data_result(f"You don't own the dataset {kb_id}")
39
  kbs = KnowledgebaseService.query(id=kb_id)
 
43
  kbs = KnowledgebaseService.get_by_ids(ids)
44
  embd_count = list(set([kb.embd_id for kb in kbs]))
45
  if len(embd_count) != 1:
46
+ return get_result(message='Datasets use different embedding models."',
47
+ code=settings.RetCode.AUTHENTICATION_ERROR)
48
  req["kb_ids"] = ids
49
  # llm
50
  llm = req.get("llm")
51
  if llm:
52
  if "model_name" in llm:
53
  req["llm_id"] = llm.pop("model_name")
54
+ if not TenantLLMService.query(tenant_id=tenant_id, llm_name=req["llm_id"], model_type="chat"):
55
  return get_error_data_result(f"`model_name` {req.get('llm_id')} doesn't exist")
56
  req["llm_setting"] = req.pop("llm")
57
  e, tenant = TenantService.get_by_id(tenant_id)
 
82
  req["top_k"] = req.get("top_k", 1024)
83
  req["rerank_id"] = req.get("rerank_id", "")
84
  if req.get("rerank_id"):
85
+ value_rerank_model = ["BAAI/bge-reranker-v2-m3", "maidalun1020/bce-reranker-base_v1"]
86
+ if req["rerank_id"] not in value_rerank_model and not TenantLLMService.query(tenant_id=tenant_id,
87
+ llm_name=req.get("rerank_id"),
88
+ model_type="rerank"):
89
  return get_error_data_result(f"`rerank_model` {req.get('rerank_id')} doesn't exist")
90
  if not req.get("llm_id"):
91
  req["llm_id"] = tenant.llm_id
 
108
  {"key": "knowledge", "optional": False}
109
  ],
110
  "empty_response": "Sorry! No relevant content was found in the knowledge base!",
111
+ "quote": True,
112
+ "tts": False,
113
+ "refine_multiturn": True
114
  }
115
+ key_list_2 = ["system", "prologue", "parameters", "empty_response", "quote", "tts", "refine_multiturn"]
116
  if "prompt_config" not in req:
117
  req['prompt_config'] = {}
118
  for key in key_list_2:
 
153
  res["avatar"] = res.pop("icon")
154
  return get_result(data=res)
155
 
156
+
157
  @manager.route('/chats/<chat_id>', methods=['PUT']) # noqa: F821
158
  @token_required
159
+ def update(tenant_id, chat_id):
160
  if not DialogService.query(tenant_id=tenant_id, id=chat_id, status=StatusEnum.VALID.value):
161
  return get_error_data_result(message='You do not own the chat')
162
+ req = request.json
163
  ids = req.get("dataset_ids")
164
  if "show_quotation" in req:
165
+ req["do_refer"] = req.pop("show_quotation")
166
  if "dataset_ids" in req:
167
  if not ids:
168
  return get_error_data_result("`dataset_ids` can't be empty")
 
176
  if kb.chunk_num == 0:
177
  return get_error_data_result(f"The dataset {kb_id} doesn't own parsed file")
178
  kbs = KnowledgebaseService.get_by_ids(ids)
179
+ embd_count = list(set([kb.embd_id for kb in kbs]))
180
+ if len(embd_count) != 1:
181
  return get_result(
182
  message='Datasets use different embedding models."',
183
  code=settings.RetCode.AUTHENTICATION_ERROR)
 
186
  if llm:
187
  if "model_name" in llm:
188
  req["llm_id"] = llm.pop("model_name")
189
+ if not TenantLLMService.query(tenant_id=tenant_id, llm_name=req["llm_id"], model_type="chat"):
190
  return get_error_data_result(f"`model_name` {req.get('llm_id')} doesn't exist")
191
  req["llm_setting"] = req.pop("llm")
192
  e, tenant = TenantService.get_by_id(tenant_id)
 
212
  e, res = DialogService.get_by_id(chat_id)
213
  res = res.to_json()
214
  if req.get("rerank_id"):
215
+ value_rerank_model = ["BAAI/bge-reranker-v2-m3", "maidalun1020/bce-reranker-base_v1"]
216
+ if req["rerank_id"] not in value_rerank_model and not TenantLLMService.query(tenant_id=tenant_id,
217
+ llm_name=req.get("rerank_id"),
218
+ model_type="rerank"):
219
  return get_error_data_result(f"`rerank_model` {req.get('rerank_id')} doesn't exist")
220
  if "name" in req:
221
  if not req.get("name"):
 
250
  def delete(tenant_id):
251
  req = request.json
252
  if not req:
253
+ ids = None
254
  else:
255
+ ids = req.get("ids")
256
  if not ids:
257
  id_list = []
258
+ dias = DialogService.query(tenant_id=tenant_id, status=StatusEnum.VALID.value)
259
  for dia in dias:
260
  id_list.append(dia.id)
261
  else:
262
+ id_list = ids
263
  for id in id_list:
264
  if not DialogService.query(tenant_id=tenant_id, id=id, status=StatusEnum.VALID.value):
265
  return get_error_data_result(message=f"You don't own the chat {id}")
 
267
  DialogService.update_by_id(id, temp_dict)
268
  return get_result()
269
 
270
+
271
  @manager.route('/chats', methods=['GET']) # noqa: F821
272
  @token_required
273
  def list_chat(tenant_id):
 
284
  desc = False
285
  else:
286
  desc = True
287
+ chats = DialogService.get_list(tenant_id, page_number, items_per_page, orderby, desc, id, name)
288
  if not chats:
289
  return get_result(data=[])
290
  list_assts = []
 
291
  key_mapping = {"parameters": "variables",
292
  "prologue": "opener",
293
  "quote": "show_quote",
294
  "system": "prompt",
295
  "rerank_id": "rerank_model",
296
  "vector_similarity_weight": "keywords_similarity_weight",
297
+ "do_refer": "show_quotation"}
298
  key_list = ["similarity_threshold", "vector_similarity_weight", "top_n", "rerank_id"]
299
  for res in chats:
300
+ renamed_dict = {}
301
  for key, value in res["prompt_config"].items():
302
  new_key = key_mapping.get(key, key)
303
  renamed_dict[new_key] = value
 
315
  kb_list = []
316
  for kb_id in res["kb_ids"]:
317
  kb = KnowledgebaseService.query(id=kb_id)
318
+ if not kb:
319
  return get_error_data_result(message=f"Don't exist the kb {kb_id}")
320
  kb_list.append(kb[0].to_json())
321
  del res["kb_ids"]
322
  res["datasets"] = kb_list
323
  res["avatar"] = res.pop("icon")
324
  list_assts.append(res)
325
+ return get_result(data=list_assts)