Rulga commited on
Commit
e486f13
·
1 Parent(s): 3ea5339

Improve response generation by ensuring complete sentences and enhancing chat history saving

Browse files
Files changed (1) hide show
  1. app.py +34 -21
app.py CHANGED
@@ -67,30 +67,43 @@ def respond(
67
 
68
  # Отправляем запрос к API и стримим ответ
69
  response = ""
70
- for chunk in client.chat_completion(
71
- messages,
72
- max_tokens=max_tokens,
73
- stream=True,
74
- temperature=temperature,
75
- top_p=top_p,
76
- ):
77
- token = chunk.choices[0].delta.content
78
- if token:
79
- response += token
80
- # Возвращаем в формате, который ожидает Gradio Chatbot: (user_message, assistant_message)
81
- yield [(message, response)], conversation_id
82
-
83
- # После завершения генерации ответа сохраняем историю
84
- messages.append({"role": "assistant", "content": response})
85
 
86
  try:
87
- from src.knowledge_base.dataset import DatasetManager
88
- dataset = DatasetManager()
89
- success, msg = dataset.save_chat_history(conversation_id, messages)
90
- if not success:
91
- print(f"Ошибка при сохранении истории чата: {msg}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  except Exception as e:
93
- print(f"Ошибка при сохранении истории чата: {str(e)}")
 
94
 
95
  def build_kb():
96
  """Функция для создания базы знаний"""
 
67
 
68
  # Отправляем запрос к API и стримим ответ
69
  response = ""
70
+ last_token = ""
71
+ sentence_end_chars = {'.', '!', '?', '\n'}
 
 
 
 
 
 
 
 
 
 
 
 
 
72
 
73
  try:
74
+ for chunk in client.chat_completion(
75
+ messages,
76
+ max_tokens=max_tokens,
77
+ stream=True,
78
+ temperature=temperature,
79
+ top_p=top_p,
80
+ ):
81
+ token = chunk.choices[0].delta.content
82
+ if token:
83
+ response += token
84
+ last_token = token
85
+ yield [(message, response)], conversation_id
86
+
87
+ # Проверяем, завершено ли последнее предложение
88
+ if last_token and last_token[-1] not in sentence_end_chars:
89
+ # Добавляем точку, если предложение не завершено
90
+ response += "."
91
+ yield [(message, response)], conversation_id
92
+
93
+ # Сохраняем историю после полного ответа
94
+ messages.append({"role": "assistant", "content": response})
95
+ try:
96
+ from src.knowledge_base.dataset import DatasetManager
97
+ dataset = DatasetManager()
98
+ success, msg = dataset.save_chat_history(conversation_id, messages)
99
+ if not success:
100
+ print(f"Ошибка при сохранении истории чата: {msg}")
101
+ except Exception as e:
102
+ print(f"Ошибка при сохранении истории чата: {str(e)}")
103
+
104
  except Exception as e:
105
+ print(f"Ошибка при генерации ответа: {str(e)}")
106
+ yield [(message, "Произошла ошибка при генерации ответа.")], conversation_id
107
 
108
  def build_kb():
109
  """Функция для создания базы знаний"""