SimrusDenuvo commited on
Commit
1267d48
·
verified ·
1 Parent(s): 8fab447

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -114
app.py CHANGED
@@ -1,124 +1,53 @@
1
- import os
2
- import requests
3
  import gradio as gr
4
-
5
- # Общая функция для вызова разных моделей
6
-
7
- def call_model(api_url, api_key, model_name, text, history, service):
8
- # Инициализируем историю одним system-сообщением при первом обращении
9
- if not history:
10
- history = [{
11
- "role": "system",
12
- "content": "Вы — ассистент банка, отвечаете на вопросы клиентов про проблемы со снятием денег с карты."
13
- }]
14
- # Добавляем запрос пользователя
15
- history.append({"role": "user", "content": text})
16
-
17
- # Подбираем URL и заголовки в зависимости от сервиса
18
- if service == "openai":
19
- url = api_url
20
- headers = {
21
- "Authorization": f"Bearer {api_key}",
22
- "Content-Type": "application/json"
23
- }
24
- elif service == "deepseek":
25
- url = api_url
26
- headers = {
27
- "Authorization": f"Bearer {api_key}",
28
- "Content-Type": "application/json"
29
- }
30
- elif service == "gigachat":
31
- url = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"
32
- headers = {
33
- "Authorization": f"Bearer {api_key}",
34
- "X-API-Scope": os.getenv("GIGACHAT_SCOPE", ""),
35
- "Content-Type": "application/json"
36
- }
37
- else:
38
- raise ValueError(f"Unknown service: {service}")
39
-
40
- payload = {
41
- "model": model_name,
42
- "messages": history
43
  }
 
 
 
44
 
45
- response = requests.post(url, headers=headers, json=payload)
46
- response.raise_for_status()
47
- data = response.json()
48
- content = data["choices"][0]["message"]["content"]
49
-
50
- # Сохраняем ответ в историю
51
- history.append({"role": "assistant", "content": content})
52
- return content, history
53
-
54
-
55
- # Основная функция обработки ввода и вывода во всех трёх чатах
56
-
57
- def process_all(text, h1, h2, h3):
58
- # ChatGPT (OpenAI)
59
- out1, h1 = call_model(
60
- api_url="https://api.openai.com/v1/chat/completions",
61
- api_key=os.getenv("OPENAI_API_KEY"),
62
- model_name="gpt-3.5-turbo",
63
- text=text,
64
- history=h1,
65
- service="openai"
66
- )
67
- # DeepSeek (через собственный API)
68
- out2, h2 = call_model(
69
- api_url="https://api.deepseek.com/chat/completions",
70
- api_key=os.getenv("DEEPSEEK_KEY"),
71
- model_name="deepseek-chat-v3",
72
- text=text,
73
- history=h2,
74
- service="deepseek"
75
- )
76
- # GigaChat (Сбер)
77
- out3, h3 = call_model(
78
- api_url=None, # будет переопределён внутри
79
- api_key=os.getenv("GIGACHAT_TOKEN"),
80
- model_name="giga-chat-lite",
81
- text=text,
82
- history=h3,
83
- service="gigachat"
84
- )
85
-
86
- # Возвращаем обновлённые состояния и содержимое чатботов
87
- # Chatbot ждёт список кортежей (запрос, ответ)
88
- return (
89
- h1,
90
- h2,
91
- h3,
92
- [(None, out1)],
93
- [(None, out2)],
94
- [(None, out3)]
95
- )
96
 
 
 
 
 
 
 
 
97
 
 
98
  if __name__ == "__main__":
99
- # Создаём интерфейс Gradio
100
- with gr.Blocks() as demo:
101
- gr.Markdown("## Мульти-чат: ChatGPT, DeepSeek и GigaChat в одном окне")
102
- txt = gr.Textbox(label="Ваш запрос", placeholder="Напишите ваш вопрос...", lines=2)
103
-
104
- # Состояния для истории каждого бота
105
- s1 = gr.State([])
106
- s2 = gr.State([])
107
- s3 = gr.State([])
108
-
109
- # Сам чат-интерфейс
110
- c1 = gr.Chatbot(label="ChatGPT")
111
- c2 = gr.Chatbot(label="DeepSeek")
112
- c3 = gr.Chatbot(label="GigaChat")
113
-
114
- btn = gr.Button("Отправить")
115
- btn.click(
116
- fn=process_all,
117
- inputs=[txt, s1, s2, s3],
118
- outputs=[s1, s2, s3, c1, c2, c3]
119
- )
120
-
121
  demo.launch()
122
 
123
 
124
 
 
 
 
 
1
  import gradio as gr
2
+ from transformers import pipeline
3
+
4
+ # Инициализация двух бесплатных русскоязычных моделей из Hugging Face
5
+ # 1) ruDialoGPT-small диалоговая модель на GPT-2 (MIT-лицензия) ([huggingface.co](https://huggingface.co/t-bank-ai/ruDialoGPT-small?utm_source=chatgpt.com))
6
+ # 2) ruGPT3-small семейство русскоязычных GPT-3 моделей от SberDevices (open-source) ([huggingface.co](https://huggingface.co/ai-forever/rugpt3small_based_on_gpt2?utm_source=chatgpt.com))
7
+
8
+ pipe_dialo = pipeline(
9
+ task="text-generation",
10
+ model="t-bank-ai/ruDialoGPT-small",
11
+ tokenizer="t-bank-ai/ruDialoGPT-small",
12
+ device=-1 # CPU
13
+ )
14
+
15
+ pipe_rugpt3 = pipeline(
16
+ task="text-generation",
17
+ model="ai-forever/rugpt3small_based_on_gpt2",
18
+ tokenizer="ai-forever/rugpt3small_based_on_gpt2",
19
+ device=-1 # CPU
20
+ )
21
+
22
+ # Функция обработки пользовательского запроса
23
+ # Возвращает генерацию от обеих моделей
24
+
25
+ def generate_responses(prompt: str):
26
+ # Настройки генерации можно подкорректировать по потребностям
27
+ kwargs = {
28
+ "max_length": 200,
29
+ "do_sample": True,
30
+ "top_p": 0.9,
31
+ "temperature": 0.7
 
 
 
 
 
 
 
 
 
32
  }
33
+ out1 = pipe_dialo(prompt, **kwargs)[0]["generated_text"]
34
+ out2 = pipe_rugpt3(prompt, **kwargs)[0]["generated_text"]
35
+ return out1, out2
36
 
37
+ # Gradio-интерфейс
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
+ with gr.Blocks() as demo:
40
+ gr.Markdown("## Русскоязычный чат с бесплатными моделями")
41
+ txt = gr.Textbox(label="Ваш вопрос", placeholder="Введите те��ст на русском языке...", lines=2)
42
+ out1 = gr.Textbox(label="ruDialoGPT-small")
43
+ out2 = gr.Textbox(label="ruGPT3-small")
44
+ btn = gr.Button("Сгенерировать ответы")
45
+ btn.click(fn=generate_responses, inputs=txt, outputs=[out1, out2])
46
 
47
+ # Запуск (для локального запуска и в Hugging Face Spaces)
48
  if __name__ == "__main__":
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  demo.launch()
50
 
51
 
52
 
53
+