blago-agent / app.py
RomanMaloev's picture
Update app.py
0ffa73b verified
Raw
History Blame Contribute Delete
3.75 kB
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())