import gradio as gr import requests import os HF_API_TOKEN = os.environ.get("HF_API_TOKEN", "") if not HF_API_TOKEN: raise ValueError("HF_API_TOKEN not set") API_URL = "https://api-inference.huggingface.co/models/microsoft/DialoGPT-small" headers = {"Authorization": f"Bearer {HF_API_TOKEN}"} SYSTEM_PROMPT = """Ты — AI-помощник BLAGO. BLAGO — открытая система координации человеческих потребностей, основанная на равенстве, прозрачности и заботе. Твоя задача — быть добрым, понимающим собеседником. Ты помогаешь человеку разобраться в его мыслях, поддерживаешь и направляешь. Ты отвечаешь на русском языке, если пользователь пишет по-русски, и на английском, если пишет по-английски. Твои ответы должны быть краткими, человечными и тёплыми.""" def query_hf_api(prompt: str) -> str: payload = { "inputs": prompt, "parameters": { "max_length": 150, "temperature": 0.7, "do_sample": True, "top_p": 0.9, "repetition_penalty": 1.1 } } try: response = requests.post(API_URL, headers=headers, json=payload, timeout=30) if response.status_code == 200: result = response.json() if isinstance(result, list) and len(result) > 0: return result[0].get("generated_text", "").replace(prompt, "").strip() elif isinstance(result, dict): return result.get("generated_text", "").replace(prompt, "").strip() else: return "Извините, я не смог сформулировать ответ." else: return f"Ошибка API: {response.status_code}" except Exception as e: return f"Ошибка подключения: {str(e)}" def chat(message: str, history): context = SYSTEM_PROMPT + "\n" for turn in history[-10:]: if turn["role"] == "user": context += f"Пользователь: {turn['content']}\n" else: context += f"BLAGO: {turn['content']}\n" context += f"Пользователь: {message}\nBLAGO:" response = query_hf_api(context) if not response: response = "Извините, я временно не могу ответить. Попробуйте ещё раз." history.append({"role": "user", "content": message}) history.append({"role": "assistant", "content": response}) return response, history with gr.Blocks(title="BLAGO Assistant") as demo: gr.Markdown("# 🧠 BLAGO Assistant") gr.Markdown("Ваш персональный помощник в мире осознанного взаимодействия.") chatbot = gr.Chatbot() msg = gr.Textbox(label="Ваше сообщение", placeholder="Напишите что-нибудь...") clear = gr.ClearButton([msg, chatbot]) state = gr.State([]) def respond(message, chat_history, state_history): if not message: return "", chat_history, state_history response, new_state = chat(message, state_history) chat_history.append({"role": "user", "content": message}) chat_history.append({"role": "assistant", "content": response}) return "", chat_history, new_state msg.submit(respond, [msg, chatbot, state], [msg, chatbot, state]) clear.click(lambda: ([], []), None, [chatbot, state]) demo.launch(theme=gr.themes.Soft())