Makaria commited on
Commit
0adbdde
1 Parent(s): ebe39b9
Files changed (1) hide show
  1. app.py +33 -63
app.py CHANGED
@@ -1,70 +1,40 @@
1
- import os
2
- import gradio as gr
3
- from transformers import AutoTokenizer, AutoModelForCausalLM
4
  import torch
5
- import random
6
-
7
- # Импортируем токены из переменных окружения
8
- HUGGINGFACE_TOKEN = os.getenv("HUGGINGFACE_TOKEN")
9
-
10
- # Загрузка модели и токенизатора DialoGPT
11
- model_name = "microsoft/DialoGPT-medium" # Можно использовать small или large версии
12
- tokenizer = AutoTokenizer.from_pretrained(model_name, token=HUGGINGFACE_TOKEN, padding_side='left')
13
- model = AutoModelForCausalLM.from_pretrained(model_name, token=HUGGINGFACE_TOKEN)
14
-
15
- # Список саркастических фраз
16
- sarcastic_phrases = [
17
- "О, да, я в полном восторге от твоего вопроса!",
18
- "Конечно, я это именно так и ожидал.",
19
- "Как же я давно не слышал чего-то столь оригинального!",
20
- "Ух ты, ты просто гений, не так ли?",
21
- "Да, да, именно это я и хотел услышать. Неужели ты прав?"
22
- ]
23
-
24
- # Функция для ведения диалога
25
- def chat_with_model(user_input, chat_history=[]):
26
- # Добавляем немного абсурда в вопрос
27
- absurd_input = user_input + " И как насчет того, чтобы обсудить синий единорог, который варит кофе?"
28
-
29
- # Кодируем входное сообщение и добавляем к истории
30
- new_user_input_ids = tokenizer.encode(absurd_input + tokenizer.eos_token, return_tensors='pt')
31
-
32
- # Объединяем новую информацию с историей
33
- bot_input_ids = torch.cat([torch.tensor(chat_history), new_user_input_ids], dim=-1) if chat_history else new_user_input_ids
34
-
35
- # Генерируем ответ
36
- chat_history_ids = model.generate(
37
- bot_input_ids,
38
- max_length=100,
39
- do_sample=True, # Включаем выборку
40
- num_return_sequences=1,
41
- pad_token_id=tokenizer.eos_token_id,
42
- temperature=1.2, # Увеличиваем температуру для абсурдных ответов
43
- top_k=50,
44
- top_p=0.95
45
- )
46
-
47
- # Декодируем ответ
48
- bot_response = tokenizer.decode(chat_history_ids[:, bot_input_ids.shape[-1]:][0], skip_special_tokens=True)
49
-
50
- # Добавляем сарказм, если это уместно
51
- if random.random() < 0.5: # 50% шанс на сарказм
52
- bot_response += " " + random.choice(sarcastic_phrases)
53
-
54
- # Обновляем историю
55
- chat_history.append(new_user_input_ids)
56
- chat_history.append(chat_history_ids[:, bot_input_ids.shape[-1]:])
57
-
58
- return bot_response, chat_history
59
 
60
- # Создание интерфейса Gradio
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  iface = gr.Interface(
62
  fn=chat_with_model,
63
- inputs="text",
64
- outputs="text",
65
- title="Чатбот на DialoGPT с сарказмом",
66
- description="Поболтай со своим саркастичным чатботом!"
67
  )
68
 
69
- # Запуск интерфейса
70
  iface.launch()
 
 
 
 
1
  import torch
2
+ from transformers import AutoModelForCausalLM, AutoTokenizer
3
+ import gradio as gr
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
+ # Загрузка модели и токенизатора
6
+ model_name = "DialoGPT-medium" # Используем Diálogo GPT для диалогов
7
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
8
+ model = AutoModelForCausalLM.from_pretrained(model_name)
9
+
10
+ # Функция для общения с моделью
11
+ def chat_with_model(user_input, chat_history):
12
+ # Токенизация пользовательского ввода
13
+ new_user_input_ids = tokenizer.encode(user_input + tokenizer.eos_token, return_tensors='pt')
14
+
15
+ # Объединение истории чата и нового ввода
16
+ if chat_history:
17
+ bot_input_ids = torch.cat([torch.tensor(chat_history), new_user_input_ids], dim=-1)
18
+ else:
19
+ bot_input_ids = new_user_input_ids
20
+
21
+ # Генерация ответа от модели
22
+ chat_history_ids = model.generate(bot_input_ids, max_length=1000, pad_token_id=tokenizer.eos_token_id,
23
+ temperature=0.8, top_p=0.9, do_sample=True)
24
+
25
+ # Получаем ответ бота и обновляем историю чата
26
+ bot_output = tokenizer.decode(chat_history_ids[:, bot_input_ids.shape[-1]:][0], skip_special_tokens=True)
27
+
28
+ # Возвращаем новый ввод и обновлённую историю чата без лишних цифр
29
+ return bot_output, chat_history_ids.tolist()
30
+
31
+ # Интерфейс Gradio
32
  iface = gr.Interface(
33
  fn=chat_with_model,
34
+ inputs=[gr.inputs.Textbox(label="Ваше сообщение"), gr.inputs.State()],
35
+ outputs=[gr.outputs.Textbox(label="Ответ бота"), gr.outputs.State()],
36
+ title="Чат-бот с сарказмом и абсурдом",
37
+ description="Побеседуй со своим ботом, который использует сарказм �� немного абсурда. Напиши ему что угодно!",
38
  )
39
 
 
40
  iface.launch()