Spaces:
Sleeping
Sleeping
| 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()) |