dim014 commited on
Commit
ba3277a
·
verified ·
1 Parent(s): 2c384fe

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -28
app.py CHANGED
@@ -1,28 +1,61 @@
1
- import gradio as gr
2
- from agent.retriever import Retriever
3
- from agent.generator import call_mcp
4
-
5
- retriever = Retriever()
6
-
7
- PROMPT_TEMPLATE = """context: {context}
8
-
9
- question: {question}
10
-
11
- answer:"""
12
-
13
- def respond(message, history):
14
- context = retriever.retrieve(message)
15
- if not context.strip():
16
- return "Недостаточно данных для ответа."
17
- prompt = PROMPT_TEMPLATE.format(context=context.strip(), question=message.strip())
18
- response = call_mcp(prompt)
19
- return response
20
-
21
- demo = gr.ChatInterface(
22
- fn=respond,
23
- title="TaskFlow AI Agent",
24
- description="Задайте вопрос о продукте"
25
- )
26
-
27
- if __name__ == "__main__":
28
- demo.launch(share=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ import gradio as gr
3
+ import requests
4
+ import threading
5
+ import time
6
+ import uvicorn
7
+ from fastapi import FastAPI, Request
8
+
9
+ # === Встроенный MCP-сервер ===
10
+ mcp_app = FastAPI()
11
+
12
+ @mcp_app.post("/generate")
13
+ async def generate(request: Request):
14
+ try:
15
+ body = await request.json()
16
+ prompt = body.get("prompt", "").lower()
17
+ except Exception:
18
+ return {"text": "Ошибка обработки запроса."}
19
+
20
+ if "question:" in prompt:
21
+ question = prompt.split("question:")[-1].strip()
22
+ else:
23
+ question = prompt
24
+
25
+ # Правила ответов
26
+ if any(kw in question for kw in ["оплат", "тариф", "plan", "pricing"]):
27
+ return {"text": "Доступны планы: Free, Pro, Enterprise. Pro включает аналитику и расширенные права. Enterprise — SLA 99.9%, SSO."}
28
+ elif any(kw in question for kw in ["api", "интеграц", "rest", "integration"]):
29
+ return {"text": "API доступен по /v1/, аутентификация через Bearer-токен. Лимит — 1000 запросов в час. Документация по /docs/v1/."}
30
+ elif any(kw in question for kw in ["вход", "аутентиф", "login", "auth"]):
31
+ return {"text": "Вход через почту и пароль. Поддерживается 2FA (TOTP), OAuth2, SAML 2.0 для SSO."}
32
+ elif any(kw in question for kw in ["бэкап", "backup", "восстановлени", "restore"]):
33
+ return {"text": "Резервное копирование — ежедневное. Восстановление до точки во времени (PITR) через WAL-архивацию."}
34
+ elif any(kw in question for kw in ["задач", "task", "проект", "project"]):
35
+ return {"text": "Задачи группируются в проекты, проекты — в workspace. Поддержка меток, этапов, приоритетов: low, medium, high, urgent."}
36
+ else:
37
+ return {"text": "Функция поддерживается. Для деталей обратитесь к администратору."}
38
+
39
+ # Запуск MCP-сервера в отдельном потоке
40
+ def run_server():
41
+ uvicorn.run(mcp_app, host="0.0.0.0", port=8000, log_level="info")
42
+
43
+ threading.Thread(target=run_server, daemon=True).start()
44
+ time.sleep(2) # Даем серверу время на запуск
45
+
46
+ # === Клиентская часть (Gradio) ===
47
+ def respond(message, history):
48
+ context = "Данные из базы знаний" # Можно интегрировать retriever
49
+ prompt = f"context: {context}\n\nquestion: {message}\n\nanswer:"
50
+ try:
51
+ response = requests.post("http://localhost:8000/generate", json={"prompt": prompt}, timeout=10)
52
+ return response.json().get("text", "Нет данных.")
53
+ except Exception as e:
54
+ return f"[Ошибка] {str(e)}"
55
+
56
+ # Интерфейс
57
+ gr.ChatInterface(
58
+ fn=respond,
59
+ title="TaskFlow AI Agent",
60
+ description="Задайте вопрос о продукте"
61
+ ).launch(server_name="0.0.0.0", server_port=7860)