import os import gradio as gr from openai import OpenAI SYSTEM_PROMPT = "Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им." BASE_URL = os.getenv("BASE_URL") API_KEY = os.getenv("API_KEY") MODEL_NAME = "IlyaGusev/saiga_nemo_12b_gptq_8bit" CLIENT = OpenAI(base_url=BASE_URL, api_key=API_KEY) def user(message, history): new_history = history + [[message, None]] return "", new_history def bot( history, system_prompt, top_p, temp ): messages = [{"role": "system", "content": SYSTEM_PROMPT}] for user_message, bot_message in history[:-1]: messages.append({"role": "user", "content": user_message}) if bot_message: messages.append({"role": "assistant", "content": bot_message}) last_user_message = history[-1][0] messages.append({"role": "user", "content": last_user_message}) response = CLIENT.chat.completions.create( model=MODEL_NAME, messages=messages, temperature=temp, top_p=top_p, stream=True, ) partial_text = "" for chunk in response: content = chunk.choices[0].delta.content partial_text += content history[-1][1] = partial_text yield history with gr.Blocks( theme=gr.themes.Soft() ) as demo: favicon = '' gr.Markdown( f"""

{favicon}Saiga Nemo 12B GPTQ 8 bit

This is a demo of a **Russian**-speaking Mistral Nemo based model. Это демонстрационная версия [Сайги Немо с 12 миллиардами параметров](https://huggingface.co/IlyaGusev/saiga_nemo_12b). """ ) with gr.Row(): with gr.Column(scale=5): system_prompt = gr.Textbox(label="Системный промпт", placeholder="", value=SYSTEM_PROMPT, interactive=False) chatbot = gr.Chatbot(label="Диалог") with gr.Column(min_width=80, scale=1): with gr.Tab(label="Параметры генерации"): top_p = gr.Slider( minimum=0.0, maximum=1.0, value=0.9, step=0.05, interactive=True, label="Top-p", ) temp = gr.Slider( minimum=0.0, maximum=2.0, value=0.01, step=0.01, interactive=True, label="Температура" ) with gr.Row(): with gr.Column(): msg = gr.Textbox( label="Отправить сообщение", placeholder="Отправить сообщение", show_label=False, ) with gr.Column(): with gr.Row(): submit = gr.Button("Отправить") stop = gr.Button("Остановить") clear = gr.Button("Очистить") with gr.Row(): gr.Markdown( """ПРЕДУПРЕЖДЕНИЕ: Модель может генерировать фактически или этически некорректные тексты. Мы не несём за это ответственность.""" ) # Pressing Enter submit_event = msg.submit( fn=user, inputs=[msg, chatbot], outputs=[msg, chatbot], queue=False, ).success( fn=bot, inputs=[ chatbot, system_prompt, top_p, temp ], outputs=chatbot, queue=True, ) # Pressing the button submit_click_event = submit.click( fn=user, inputs=[msg, chatbot], outputs=[msg, chatbot], queue=False, ).success( fn=bot, inputs=[ chatbot, system_prompt, top_p, temp ], outputs=chatbot, queue=True, ) # Stop generation stop.click( fn=None, inputs=None, outputs=None, cancels=[submit_event, submit_click_event], queue=False, ) # Clear history clear.click(lambda: None, None, chatbot, queue=False) demo.queue(max_size=128) demo.launch(show_error=True)