zelk12 commited on
Commit
deaa087
·
verified ·
1 Parent(s): bfb5ba5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -26
app.py CHANGED
@@ -47,53 +47,80 @@ def model_response(message, history):
47
 
48
  message = message["text"]
49
 
 
 
 
50
  # --- Преобразование формата истории Gradio в формат Google GenAI ---
51
  gemini_history = []
52
- # Итерация по истории Gradio. Каждый элемент должен быть [user, bot].
53
- # Сделаем проверку на формат элемента.
54
  for turn in history:
55
- # Проверяем, является ли элемент списком/кортежем и содержит ли ровно 2 элемента
56
  if isinstance(turn, (list, tuple)) and len(turn) == 2:
57
- human, assistant = turn # Теперь распаковка безопасна
58
-
59
- # Добавляем сообщение пользователя, если оно есть
60
- if human is not None and str(human).strip() != "": # Добавим проверку на пустую строку
61
- gemini_history.append({'role': 'user', 'parts': [{'text': str(human).strip()}]})
62
-
63
- # Добавляем сообщение ассистента, если оно есть (для предыдущих ходов)
64
- # Проверяем assistant, так как для последнего хода бота его еще нет (None)
65
- if assistant is not None and str(assistant).strip() != "": # Добавим проверку на пустую строку
66
- gemini_history.append({'role': 'model', 'parts': [{'text': str(assistant).strip()}]})
 
 
 
 
 
 
 
 
67
  else:
68
- # Если формат неожиданный, можно пропустить эту запись или вывести предупреждение
69
- print(f"Warning: Skipping malformed history entry: {turn}")
70
- # При необходимости можно сгенерировать ошибку, если такой формат не должен встречаться:
71
- # raise ValueError(f"Unexpected history format received from Gradio: {turn}")
72
 
73
 
74
- print(f"Отформатированная история для Gemini: {gemini_history}")
75
 
76
  try:
 
 
 
77
  # Создать новую сессию чата с историческим контекстом
78
- # Вместо client.chats.create используем client.start_chat
79
- # Если gemini_history пуста, это будет новый чат без истории, что нормально для первого сообщения
80
- chat = client.chats.create(model=used_model, history=gemini_history)
81
 
82
  # Отправить *текущее* сообщение пользователя
83
- # Текущее сообщение `message` всегда отправляется отдельно методом send_message
84
- response = chat.send_message(message)
 
 
 
 
 
85
 
86
  # Извлечь текстовый ответ
87
- response_text = response.text
 
 
 
 
 
 
 
 
 
88
 
89
  print(f"Ответ модели: {response_text}")
90
 
91
  return response_text
92
 
93
  except Exception as e:
94
- print(f"Ошибка вызова Google GenAI API: {e}")
95
  # Обработка потенциальных ошибок
96
- return f"Произошла ошибка при генерации ответа: {e}"
 
 
 
97
 
98
  print("Define test1 response work")
99
  def random_response(message, history):
 
47
 
48
  message = message["text"]
49
 
50
+ print(f"Получено сообщение: {message}")
51
+ print(f"Получена история Gradio: {history}") # Выводим историю для отладки
52
+
53
  # --- Преобразование формата истории Gradio в формат Google GenAI ---
54
  gemini_history = []
55
+ # Итерация по истории Gradio. Ищем только завершенные пары [пользователь, бот].
 
56
  for turn in history:
57
+ # Проверяем, является ли элемент списком/кортежем из 2 элементов
58
  if isinstance(turn, (list, tuple)) and len(turn) == 2:
59
+ human, assistant = turn # Распаковка безопасна
60
+
61
+ # Добавляем ПРЕДЫДУЩИЙ ход только если он ПОЛНОСТЬЮ завершен (есть и пользователь, и бот)
62
+ # И сообщения не пустые после удаления пробелов
63
+ human_text = str(human).strip() if human is not None else ""
64
+ assistant_text = str(assistant).strip() if assistant is not None else ""
65
+
66
+ if human_text != "" and assistant_text != "":
67
+ gemini_history.append({'role': 'user', 'parts': [{'text': human_text}]})
68
+ gemini_history.append({'role': 'model', 'parts': [{'text': assistant_text}]})
69
+ elif human_text != "" and assistant_text == "":
70
+ # Это может быть незавершенный последний ход пользователя.
71
+ # Его не добавляем в history для start_chat, т.к. текущий message уже содержит последний ввод.
72
+ # Можно вывести предупреждение, если это неожиданно
73
+ print(f"Warning: Skipping incomplete user turn in history: {turn}")
74
+ # Если ни human, ни assistant не содержат текста, просто пропускаем.
75
+ # Если assistant есть, а human нет, это тоже странно, пропускаем.
76
+
77
  else:
78
+ # Если формат неожиданный (не пара [user, bot]), пропускаем
79
+ print(f"Warning: Skipping non-[user, bot] history entry: {turn}")
 
 
80
 
81
 
82
+ print(f"Отформатированная история для Gemini (для start_chat): {gemini_history}")
83
 
84
  try:
85
+ # Инициализируем модель здесь, чтобы использовать ее объект
86
+ model = genai.GenerativeModel(used_model)
87
+
88
  # Создать новую сессию чата с историческим контекстом
89
+ # Передаем только завершенные предыдущие ходы.
90
+ chat = model.start_chat(history=gemini_history)
 
91
 
92
  # Отправить *текущее* сообщение пользователя
93
+ # Текущее сообщение 'message' всегда отправляется отдельно методом send_message
94
+ # Убедимся, что текущее сообщение не пустое
95
+ current_message_text = str(message).strip()
96
+ if current_message_text == "":
97
+ return "Пожалуйста, введите ваше сообщение." # Вернуть сообщение, если пользователь отправил пустое
98
+
99
+ response = chat.send_message(current_message_text)
100
 
101
  # Извлечь текстовый ответ
102
+ # Проверим, что ответ не пустой и что он вообще есть
103
+ response_text = ""
104
+ if response and response.text:
105
+ response_text = response.text.strip()
106
+ else:
107
+ # Если ответ пустой или произошла другая проблема с ответом
108
+ print(f"Warning: Received empty or invalid response from model for message: {current_message_text}")
109
+ # Можно попытаться получить дополнительную информацию из response, если доступно
110
+ # print(f"Full response object: {response}")
111
+ return "Извините, я не смог сгенерировать ответ." # Или другое сообщение об ошибке
112
 
113
  print(f"Ответ модели: {response_text}")
114
 
115
  return response_text
116
 
117
  except Exception as e:
118
+ print(f"Error calling Google GenAI API: {e}")
119
  # Обработка потенциальных ошибок
120
+ # Можно попробовать получить детали ошибки из API, если они есть в исключении e
121
+ error_message = f"Произошла ошибка при генерации ответа: {e}"
122
+ # TODO: Парсить e, чтобы дать более конкретное сообщение, например, о модерации
123
+ return error_message
124
 
125
  print("Define test1 response work")
126
  def random_response(message, history):