Rulga commited on
Commit
90dc8fa
·
1 Parent(s): c9a896b

Refactor message formatting for OpenAI API and enhance chatbot UI options

Browse files
Files changed (1) hide show
  1. app.py +18 -14
app.py CHANGED
@@ -50,35 +50,35 @@ def respond(
50
  # Получаем контекст из базы знаний
51
  context = get_context(message, conversation_id)
52
 
53
- # Формируем полную системную инструкцию с контекстом
54
- full_system_message = system_message
55
  if context:
56
- full_system_message += f"\n\nКонтекст для ответа:\n{context}"
57
 
58
- # Формируем сообщения для LLM
59
- messages = [{"role": "system", "content": full_system_message}]
60
-
61
- # Преобразуем историю в формат для API
62
- for user_msg, bot_msg in history:
63
- messages.append({"role": "user", "content": user_msg})
64
- messages.append({"role": "assistant", "content": bot_msg})
65
 
66
  # Добавляем текущее сообщение пользователя
67
  messages.append({"role": "user", "content": message})
68
 
69
  # Отправляем запрос к API и стримим ответ
70
  response = ""
71
- for message in client.chat_completion(
72
  messages,
73
  max_tokens=max_tokens,
74
  stream=True,
75
  temperature=temperature,
76
  top_p=top_p,
77
  ):
78
- token = message.choices[0].delta.content
79
  if token:
80
  response += token
81
- yield response, conversation_id
 
82
 
83
  def build_kb():
84
  """Функция для создания базы знаний"""
@@ -96,7 +96,11 @@ with gr.Blocks() as demo:
96
 
97
  with gr.Row():
98
  with gr.Column(scale=3):
99
- chatbot = gr.Chatbot(label="Чат")
 
 
 
 
100
 
101
  with gr.Row():
102
  msg = gr.Textbox(
 
50
  # Получаем контекст из базы знаний
51
  context = get_context(message, conversation_id)
52
 
53
+ # Преобразуем историю из формата Gradio (список кортежей) в формат OpenAI
54
+ messages = [{"role": "system", "content": system_message}]
55
  if context:
56
+ messages[0]["content"] += f"\n\nКонтекст для ответа:\n{context}"
57
 
58
+ # Конвертируем историю в формат OpenAI
59
+ for user_msg, assistant_msg in history:
60
+ messages.extend([
61
+ {"role": "user", "content": user_msg},
62
+ {"role": "assistant", "content": assistant_msg}
63
+ ])
 
64
 
65
  # Добавляем текущее сообщение пользователя
66
  messages.append({"role": "user", "content": message})
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
  def build_kb():
84
  """Функция для создания базы знаний"""
 
96
 
97
  with gr.Row():
98
  with gr.Column(scale=3):
99
+ chatbot = gr.Chatbot(
100
+ label="Чат",
101
+ bubble_full_width=False,
102
+ avatar_images=["user.png", "assistant.png"] # опционально
103
+ )
104
 
105
  with gr.Row():
106
  msg = gr.Textbox(