HeavensHackDev commited on
Commit
f35bde9
·
verified ·
1 Parent(s): 09b67f2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +96 -0
app.py CHANGED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+
3
+ import gradio as gr
4
+ from transformers import pipeline, set_seed
5
+ import random
6
+
7
+ # Загружаем модель для генерации текста (text-generation pipeline)
8
+ # Выберите модель:
9
+ # 'distilgpt2' - маленькая английская модель GPT-2
10
+ # 'sberbank-ai/rugpt3small_based_on_gpt2' - маленькая русская модель (может требовать больше ресурсов)
11
+ # 'bigscience/bloomz-560m' - многоязычная модель поменьше (может быть медленной на CPU)
12
+
13
+ # Попробуем с distilgpt2 для начала, т.к. она легче всего запустится на CPU
14
+ # Если хотите русскую, раскомментируйте строку с 'sberbank-ai...' и закомментируйте distilgpt2
15
+ # generator = pipeline('text-generation', model='distilgpt2', max_new_tokens=50) # Ограничим длину генерации
16
+ # generator = pipeline('text-generation', model='sberbank-ai/rugpt3small_based_on_gpt2', max_new_tokens=50)
17
+ generator = pipeline('text-generation', model='distilgpt2', max_length=70, num_return_sequences=1, truncation=True) # Альтернативные параметры
18
+
19
+ print("Модель загружена!") # Для отладки в логах
20
+
21
+ # Установка зерна для воспроизводимости (опционально)
22
+ # set_seed(random.randint(0, 10000)) # Используем случайное зерно для разнообразия
23
+
24
+ # Функция, которая будет обрабатывать ввод пользователя и историю чата
25
+ def respond(message, chat_history):
26
+ """
27
+ Принимает сообщение пользователя и историю чата, возвращает ответ бота.
28
+ """
29
+ print(f"Получено сообщение: {message}")
30
+ print(f"История чата: {chat_history}")
31
+
32
+ # Формируем промпт для модели (можно экспериментировать)
33
+ # Вариант 1: Просто сообщение пользователя
34
+ prompt = message
35
+
36
+ # Вариант 2: Добавляем немного истории (простой)
37
+ # history_text = "\n".join([f"User: {m}\nBot: {b}" for m, b in chat_history[-2:]]) # Последние 2 обмена
38
+ # prompt = f"{history_text}\nUser: {message}\nBot:"
39
+
40
+ try:
41
+ # Генерируем ответ
42
+ # Обратите внимание: 'text-generation' часто лучше работает, если ей дать начало фразы
43
+ # Попробуем сделать так, чтобы она просто продолжила мысль или ответила.
44
+ # Можно добавить "Ответ:", "Бот:", и т.п. в конец prompt, если модель так лучше реагирует.
45
+
46
+ bot_response = generator(prompt)[0]['generated_text']
47
+
48
+ # Очистка ответа: убираем исходный промпт из сгенерированного текста
49
+ # (pipeline часто возвращает промпт + генерацию)
50
+ if bot_response.startswith(prompt):
51
+ bot_response = bot_response[len(prompt):].strip()
52
+
53
+ # Иногда модели могут генерировать пустые ответы или спецсимволы, добавим проверку
54
+ if not bot_response or len(bot_response.strip()) == 0:
55
+ bot_response = "... (модель не сгенерировала ответ)"
56
+
57
+ print(f"Сгенерированный ответ: {bot_response}")
58
+
59
+ except Exception as e:
60
+ print(f"Ошибка при генерации: {e}")
61
+ bot_response = f"Ой, произошла ошибка при генерации ответа: {e}"
62
+
63
+ # Добавляем пару (сообщение пользователя, ответ бота) в историю
64
+ chat_history.append((message, bot_response))
65
+
66
+ # Возвращаем пустую строку для очистки поля ввода и обновленную историю
67
+ return "", chat_history
68
+
69
+ # --- Создание интерфейса Gradio ---
70
+ with gr.Blocks() as demo:
71
+ gr.Markdown("# Простой Чат-Бот на Hugging Face")
72
+ gr.Markdown("Введите ваше сообщение и нажмите Enter.")
73
+
74
+ # Компонент чат-бота
75
+ chatbot = gr.Chatbot(label="Диалог")
76
+
77
+ # Поле ввода текста
78
+ msg = gr.Textbox(label="Ваше сообщение", placeholder="Напишите что-нибудь...")
79
+
80
+ # Кнопка очистки (опционально)
81
+ clear = gr.Button("Очистить диалог")
82
+
83
+ # Связываем компоненты:
84
+ # Когда пользователь отправляет сообщен��е (нажатием Enter в Textbox или Button, если бы она была)
85
+ # вызывается функция respond с текущим сообщением и историей чата.
86
+ # Результат функции (пустая строка и новая история) обновляет Textbox (msg) и Chatbot (chatbot).
87
+ msg.submit(respond, [msg, chatbot], [msg, chatbot])
88
+
89
+ # Связываем кнопку очистки
90
+ clear.click(lambda: (None, None), None, [msg, chatbot], queue=False)
91
+
92
+ # Запускаем демо
93
+ # concurrency_count - сколько запросов может обрабатывать одновременно
94
+ # share=True - если хотите получить временную публичную ссылку (не нужно для Spaces)
95
+ demo.launch(debug=True) # Включаем debug для логов в интерфейсе Spaces
96
+ # demo.launch(server_name="0.0.0.0", server_port=7860) # Для запуска на некоторых платформах