Rooni commited on
Commit
9f5c6b7
·
verified ·
1 Parent(s): 1d54561

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -19
app.py CHANGED
@@ -1,18 +1,24 @@
1
  import gradio as gr
2
- from gradio_client import Client
3
  import requests
4
  import json
 
 
 
 
5
 
6
- # Создаем клиент для взаимодействия с API
7
- client = Client("llamameta/Pixtral-Large-Instruct-2411")
 
 
 
 
8
 
9
- # Функция для загрузки системной роли из JSON файла
10
  def load_system_role(role_name):
11
  with open('system_roles.json', 'r', encoding='utf-8') as file:
12
  roles = json.load(file)
13
  return roles.get(role_name, "Ты помощник по умолчанию.")
14
 
15
- # Функция для загрузки названий ролей из JSON файла
16
  def load_role_names():
17
  with open('system_roles.json', 'r', encoding='utf-8') as file:
18
  roles = json.load(file)
@@ -28,30 +34,57 @@ def respond(
28
  ):
29
  if not message:
30
  return history, ""
 
 
 
 
 
 
31
  system_role = load_system_role(system_role_name)
32
  # Формируем сообщения для отправки в API
33
  messages = [{"role": "system", "content": system_role}]
34
 
35
  for val in history:
36
  if val[0]:
37
- messages.append({"role": "user", "content": val[0]})
 
 
 
 
 
 
38
  if val[1]:
39
- messages.append({"role": "assistant", "content": val[1]})
 
 
 
 
 
 
40
 
41
  messages.append({"role": "user", "content": message})
42
 
 
 
 
 
43
  # Генерируем ответ от чат-бота
44
- response = client.predict(
45
- message=message,
46
- system_message=system_role,
47
  max_tokens=max_tokens,
48
  temperature=temperature,
49
- top_p=top_p,
50
- api_name="/chat"
51
  )
52
 
 
 
 
 
 
 
53
  # Обновляем историю сообщений
54
- history.append((message, response))
55
 
56
  return history, ""
57
 
@@ -62,8 +95,13 @@ role_names = load_role_names()
62
  css_url = "https://neurixyufi-aihub.static.hf.space/style.css"
63
 
64
  # Получение CSS по ссылке
65
- response = requests.get(css_url)
66
- css = response.text + " .gradio-container{max-width: 700px !important} h1{text-align:center} #component-4 { height: 70vh !important; }"
 
 
 
 
 
67
 
68
  # Создаем интерфейс с использованием gr.Blocks
69
  with gr.Blocks(css=css) as demo:
@@ -73,7 +111,7 @@ with gr.Blocks(css=css) as demo:
73
  with gr.Column():
74
  chatbot = gr.Chatbot(show_label=False)
75
  message = gr.Textbox(label="Введите ваше сообщение", placeholder="Введите ваше сообщение здесь...", lines=3, container=False)
76
- submit = gr.Button("Отправить")
77
 
78
  with gr.Accordion("Настройки помощника", open=False):
79
  with gr.Accordion(label="Помощник", open=False):
@@ -86,16 +124,18 @@ with gr.Blocks(css=css) as demo:
86
  submit.click(
87
  fn=respond,
88
  inputs=[message, chatbot, helper_role, max_tokens, temperature, top_p],
89
- outputs=[chatbot, message]
 
90
  )
91
 
92
  # Обработка отправки сообщения при нажатии Ctrl+Enter
93
  message.submit(
94
  fn=respond,
95
  inputs=[message, chatbot, helper_role, max_tokens, temperature, top_p],
96
- outputs=[chatbot, message]
 
97
  )
98
 
99
  # Запускаем интерфейс
100
  if __name__ == "__main__":
101
- demo.queue(max_size=250).launch(show_api=False, share=False)
 
1
  import gradio as gr
2
+ from huggingface_hub import InferenceClient
3
  import requests
4
  import json
5
+ import os
6
+ import random
7
+ from deep_translator import GoogleTranslator
8
+ from langdetect import detect
9
 
10
+ def get_random_api_key():
11
+ keys = os.getenv("KEYS", "").split(",")
12
+ if keys and keys[0]: # Check if KEYS is set and not empty
13
+ return random.choice(keys).strip()
14
+ else:
15
+ raise ValueError("API keys not found. Please set the KEYS environment variable.")
16
 
 
17
  def load_system_role(role_name):
18
  with open('system_roles.json', 'r', encoding='utf-8') as file:
19
  roles = json.load(file)
20
  return roles.get(role_name, "Ты помощник по умолчанию.")
21
 
 
22
  def load_role_names():
23
  with open('system_roles.json', 'r', encoding='utf-8') as file:
24
  roles = json.load(file)
 
34
  ):
35
  if not message:
36
  return history, ""
37
+
38
+ # Переводим сообщение на английский, если оно не на английском
39
+ language = detect(message)
40
+ if language != 'en':
41
+ message = GoogleTranslator(source=language, target='en').translate(message)
42
+
43
  system_role = load_system_role(system_role_name)
44
  # Формируем сообщения для отправки в API
45
  messages = [{"role": "system", "content": system_role}]
46
 
47
  for val in history:
48
  if val[0]:
49
+ # Переводим сообщение пользователя на английский, если оно не на английском
50
+ user_language = detect(val[0])
51
+ if user_language != 'en':
52
+ user_message = GoogleTranslator(source=user_language, target='en').translate(val[0])
53
+ else:
54
+ user_message = val[0]
55
+ messages.append({"role": "user", "content": user_message})
56
  if val[1]:
57
+ # Переводим ответ ассистента на английский, если он не на английском
58
+ assistant_language = detect(val[1])
59
+ if assistant_language != 'en':
60
+ assistant_message = GoogleTranslator(source=assistant_language, target='en').translate(val[1])
61
+ else:
62
+ assistant_message = val[1]
63
+ messages.append({"role": "assistant", "content": assistant_message})
64
 
65
  messages.append({"role": "user", "content": message})
66
 
67
+ # Получаем рандомный API ключ
68
+ api_key = get_random_api_key()
69
+ client = InferenceClient(api_key=api_key)
70
+
71
  # Генерируем ответ от чат-бота
72
+ response = client.chat.completions.create(
73
+ model="Qwen/Qwen2.5-Coder-32B-Instruct",
74
+ messages=messages,
75
  max_tokens=max_tokens,
76
  temperature=temperature,
77
+ top_p=top_p
 
78
  )
79
 
80
+ # Переводим ответ ассистента на русский, если он не на русском
81
+ response_text = response.choices[0].message.content
82
+ response_language = detect(response_text)
83
+ if response_language != 'ru':
84
+ response_text = GoogleTranslator(source=response_language, target='ru').translate(response_text)
85
+
86
  # Обновляем историю сообщений
87
+ history.append((message, response_text))
88
 
89
  return history, ""
90
 
 
95
  css_url = "https://neurixyufi-aihub.static.hf.space/style.css"
96
 
97
  # Получение CSS по ссылке
98
+ try:
99
+ response = requests.get(css_url)
100
+ response.raise_for_status() # Поднимаем исключение, если статус ответа не 200
101
+ css = response.text + " .gradio-container{max-width: 700px !important} h1{text-align:center} #component-4 { height: 70vh !important; }"
102
+ except requests.exceptions.RequestException as e:
103
+ print(f"Ошибка при загрузке CSS: {e}")
104
+ css = " .gradio-container{max-width: 700px !important} h1{text-align:center} #component-4 { height: 70vh !important; }" # Используем базовый стиль, если загрузка CSS не удалась
105
 
106
  # Создаем интерфейс с использованием gr.Blocks
107
  with gr.Blocks(css=css) as demo:
 
111
  with gr.Column():
112
  chatbot = gr.Chatbot(show_label=False)
113
  message = gr.Textbox(label="Введите ваше сообщение", placeholder="Введите ваше сообщение здесь...", lines=3, container=False)
114
+ submit = gr.Button("Отправить", variant='primary')
115
 
116
  with gr.Accordion("Настройки помощника", open=False):
117
  with gr.Accordion(label="Помощник", open=False):
 
124
  submit.click(
125
  fn=respond,
126
  inputs=[message, chatbot, helper_role, max_tokens, temperature, top_p],
127
+ outputs=[chatbot, message],
128
+ concurrency_limit=250
129
  )
130
 
131
  # Обработка отправки сообщения при нажатии Ctrl+Enter
132
  message.submit(
133
  fn=respond,
134
  inputs=[message, chatbot, helper_role, max_tokens, temperature, top_p],
135
+ outputs=[chatbot, message],
136
+ concurrency_limit=250
137
  )
138
 
139
  # Запускаем интерфейс
140
  if __name__ == "__main__":
141
+ demo.queue(max_size=250).launch(show_api=False, share=False)