Spaces:
Running
Running
File size: 4,031 Bytes
56da996 1afab97 ec5fbdc de9a652 56da996 1afab97 56da996 de9a652 db5829b de9a652 db5829b 8cc4d1a de9a652 db5829b de9a652 db5829b 1afab97 db5829b 1afab97 757132d 56da996 1afab97 db5829b 8cc4d1a 1afab97 de9a652 6d96487 d871fbd c481706 360de49 757132d 360de49 b5470b8 8cc4d1a 360de49 757132d de9a652 360de49 8cc4d1a 360de49 8922e87 1afab97 db5829b c02e53f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import gradio as gr
from gradio_client import Client
import requests
import json
# Создаем клиент для взаимодействия с API
client = Client("llamameta/Pixtral-Large-Instruct-2411")
# Функция для загрузки системной роли из JSON файла
def load_system_role(role_name):
with open('system_roles.json', 'r', encoding='utf-8') as file:
roles = json.load(file)
return roles.get(role_name, "Ты помощник по умолчанию.")
# Функция для загрузки названий ролей из JSON файла
def load_role_names():
with open('system_roles.json', 'r', encoding='utf-8') as file:
roles = json.load(file)
return list(roles.keys())
def respond(
message,
history: list[tuple[str, str]],
system_role_name,
max_tokens,
temperature,
top_p,
):
if not message:
return history, ""
system_role = load_system_role(system_role_name)
# Формируем сообщения для отправки в API
messages = [{"role": "system", "content": system_role}]
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
messages.append({"role": "user", "content": message})
# Генерируем ответ от чат-бота
response = client.predict(
message=message,
system_message=system_role,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
api_name="/chat"
)
# Обновляем историю сообщений
history.append((message, response))
return history, ""
# Загрузка названий ролей из JSON файла
role_names = load_role_names()
# Ссылка на файл CSS
css_url = "https://neurixyufi-aihub.static.hf.space/style.css"
# Получение CSS по ссылке
response = requests.get(css_url)
css = response.text + " .gradio-container{max-width: 700px !important} h1{text-align:center} #component-4 { height: 70vh !important; }"
# Создаем интерфейс с использованием gr.Blocks
with gr.Blocks(css=css) as demo:
gr.Markdown("# Помощник")
with gr.Row():
with gr.Column():
chatbot = gr.Chatbot(show_label=False)
message = gr.Textbox(label="Введите ваше сообщение", placeholder="Введите ваше сообщение здесь...", lines=3, container=False)
submit = gr.Button("Отправить")
with gr.Accordion("Настройки помощника", open=False):
with gr.Accordion(label="Помощник", open=False):
helper_role = gr.Radio(show_label=True, label="Выберите помощника", interactive=True, choices=role_names, value=role_names[0])
max_tokens = gr.Slider(minimum=100, maximum=18000, value=18000, step=1, label="Максимальное количество новых токенов")
temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, step=0.1, label="Температура")
top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.95, step=0.05, label="Top-p (нуклеарное сэмплирование)")
# Обработка отправки сообщения
submit.click(
fn=respond,
inputs=[message, chatbot, system_message, max_tokens, temperature, top_p],
outputs=[chatbot, message]
)
# Обработка отправки сообщения при нажатии Ctrl+Enter
message.submit(
fn=respond,
inputs=[message, chatbot, system_message, max_tokens, temperature, top_p],
outputs=[chatbot, message]
)
# Запускаем интерфейс
if __name__ == "__main__":
demo.queue(max_size=250).launch(show_api=False, share=False)
|