import os import requests import gradio as gr # Токен берётся из Secrets Hugging Face HF_TOKEN = os.environ.get("HF_TOKEN") if not HF_TOKEN: raise ValueError("❌ Токен не найден. Добавьте HF_TOKEN в Secrets!") # Настройки модели (используем облегчённую версию для стабильности) MODEL_NAME = "IlyaGusev/saiga_mistral_7b-lora" # Альтернатива: "IlyaGusev/saiga_mistral_7b" API_URL = f"https://api-inference.huggingface.co/models/{MODEL_NAME}" headers = {"Authorization": f"Bearer {HF_TOKEN}"} def generate_response(prompt, history): """Генерация ответа с учётом истории диалога""" try: # Форматируем историю для модели (если нужно) formatted_prompt = f"Диалог:\n{history}\nПользователь: {prompt}\nАссистент:" payload = { "inputs": formatted_prompt, "parameters": { "max_new_tokens": 500, "temperature": 0.7, "do_sample": True, } } response = requests.post(API_URL, headers=headers, json=payload) if response.status_code == 200: return response.json()[0]["generated_text"] else: return f"⚠️ Ошибка API: {response.text}" except Exception as e: return f"❌ Ошибка: {str(e)}" # Интерфейс Gradio (аналог ChatGPT) with gr.Blocks(title="🇷🇺 Russian Saiga Chat") as demo: gr.Markdown("## 💬 Чат с Saiga Mistral 7B (через HF API)") chatbot = gr.Chatbot(label="Диалог") msg = gr.Textbox(label="Сообщение", placeholder="Напишите что-то...") clear = gr.Button("Очистить") def respond(message, chat_history): bot_message = generate_response(message, chat_history) chat_history.append((message, bot_message)) return "", chat_history msg.submit(respond, [msg, chatbot], [msg, chatbot]) clear.click(lambda: None, None, chatbot, queue=False) demo.launch(debug=True)