Yermek68 commited on
Commit
2a95ad2
·
verified ·
1 Parent(s): 0a9155d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -140
app.py CHANGED
@@ -1,155 +1,42 @@
1
- #!/usr/bin/env python3
2
- import os
3
- import requests
4
  import gradio as gr
 
 
5
 
6
- # ==========================================================
7
- # 1️⃣ Проверка токена Hugging Face API
8
- # ==========================================================
9
- def check_hf_token():
10
- token = os.getenv("HF_TOKEN")
11
- if not token:
12
- print("❌ HF_TOKEN не найден. Добавь его в Secrets.")
13
- return "❌ HF_TOKEN не найден (добавь в Settings → Secrets)"
14
-
15
- headers = {"Authorization": f"Bearer {token}"}
16
- try:
17
- response = requests.get("https://huggingface.co/api/whoami-v2", headers=headers, timeout=10)
18
- if response.status_code == 200:
19
- user = response.json().get("name", "неизвестный пользователь")
20
- print(f"✅ Подключено к Hugging Face API. Авторизован как: {user}")
21
- return f"✅ Подключено к Hugging Face API — {user}"
22
- else:
23
- print(f"⚠️ Токен отклонён. Код {response.status_code}")
24
- return f"⚠️ Ошибка токена ({response.status_code})"
25
- except Exception as e:
26
- print(f"❌ Ошибка подключения к Hugging Face API: {e}")
27
- return f"❌ Ошибка подключения: {e}"
28
-
29
- status_message = check_hf_token()
30
-
31
- # ==========================================================
32
- # 2️⃣ Умный выбор модели с объяснением
33
- # ==========================================================
34
- def auto_select_model(prompt: str):
35
- """Определяет оптимальную модель + объяснение выбора"""
36
- p = prompt.lower()
37
-
38
- if any(x in p for x in ["квант", "физик", "матем", "логик", "наука", "формул"]):
39
- return ("mistralai/Mistral-7B-Instruct-v0.3",
40
- "🔬 Запрос научный, Mistral умеет логически рассуждать и точно объяснять сложные темы.")
41
- elif any(x in p for x in ["код", "программ", "python", "debug", "ошибк", "скрипт"]):
42
- return ("bigcode/starcoder2-3b",
43
- "💻 Обнаружен запрос про программирование — Starcoder специализируется на коде и примерах.")
44
- elif any(x in p for x in ["переведи", "английск", "translate", "перевод"]):
45
- return ("facebook/nllb-200-distilled-600M",
46
- "🌍 Запрос про языки — NLLB создан специально для качественного перевода.")
47
- elif any(x in p for x in ["письмо", "мотивац", "совет", "отношен", "эмоци", "психолог"]):
48
- return ("meta-llama/Llama-3.2-1B-Instruct",
49
- "💬 Запрос гуманитарный — Llama хорошо пишет тексты и понимает эмоции.")
50
- else:
51
- return ("microsoft/Phi-3.5-mini-instruct",
52
- "🧠 Общий запрос — Phi-3.5 универсален и даёт сбалансированные ответы.")
53
-
54
- # Резервная цепочка (на случай ошибок)
55
- FALLBACK_MODELS = [
56
- "microsoft/Phi-3.5-mini-instruct",
57
- "mistralai/Mistral-7B-Instruct-v0.3",
58
- "meta-llama/Llama-3.2-1B-Instruct",
59
- "bigcode/starcoder2-3b",
60
- ]
61
 
62
- # ==========================================================
63
- # 3️⃣ Проверка доступности модели
64
- # ==========================================================
65
- def check_model_status(model_name: str, token: str) -> bool:
66
- headers = {"Authorization": f"Bearer {token}"}
67
- url = f"https://huggingface.co/api/models/{model_name}"
68
  try:
69
- r = requests.get(url, headers=headers, timeout=10)
70
- if r.status_code == 200:
71
- print(f"✅ Модель доступна: {model_name}")
72
- return True
73
- else:
74
- print(f"⚠️ Модель {model_name} недоступна (код {r.status_code})")
75
- return False
76
- except Exception as e:
77
- print(f"❌ Ошибка при проверке модели {model_name}: {e}")
78
- return False
79
-
80
- # ==========================================================
81
- # 4️⃣ Генерация ответа
82
- # ==========================================================
83
- def generate_response(user_input: str):
84
- if not user_input.strip():
85
- return "⚠️ Введите запрос", "—", "���"
86
 
87
- token = os.getenv("HF_TOKEN")
88
- if not token:
89
- return "❌ Ошибка: HF_TOKEN не найден", "—", "—"
90
 
91
- # 1. Определяем модель и объяснение
92
- main_model, reason = auto_select_model(user_input)
93
- selected_model = main_model
94
- print(f"🧠 Выбрана модель: {main_model}")
95
 
96
- # 2. Проверяем доступность
97
- if not check_model_status(main_model, token):
98
- for backup in FALLBACK_MODELS:
99
- if check_model_status(backup, token):
100
- selected_model = backup
101
- reason += f"\n🔁 Основная модель недоступна — переключено на резервную: {backup}"
102
- break
103
- else:
104
- return "❌ Все модели недоступны. Попробуй позже.", "—", "—"
105
 
106
- # 3. Генерация
107
- api_url = f"https://api-inference.huggingface.co/models/{selected_model}"
108
- headers = {"Authorization": f"Bearer {token}"}
109
- payload = {"inputs": user_input, "parameters": {"max_new_tokens": 400, "temperature": 0.7}}
110
 
111
- try:
112
- response = requests.post(api_url, headers=headers, json=payload, timeout=90)
113
- if response.status_code == 200:
114
- data = response.json()
115
- if isinstance(data, list) and len(data) > 0 and "generated_text" in data[0]:
116
- output = data[0]["generated_text"]
117
- else:
118
- output = str(data)
119
- return output.strip(), selected_model, reason
120
- else:
121
- return f"⚠️ Ошибка API ({response.status_code}): {response.text}", selected_model, reason
122
  except Exception as e:
123
- return f"❌ Ошибка при обращении к модели {selected_model}: {e}", selected_model, reason
124
 
125
- # ==========================================================
126
- # 5️⃣ Интерфейс Gradio
127
- # ==========================================================
128
- with gr.Blocks(title="Eroha AgentAPI v3.3 — Explain Edition") as demo:
129
- gr.Markdown(
130
- f"<div style='background-color:#e8f5e9;padding:10px;border-radius:6px;border:1px solid #4caf50;"
131
- f"color:#2e7d32;font-size:16px;margin-bottom:10px;'>{status_message}</div>"
132
- )
133
- gr.Markdown("### 🤖 Eroha AgentAPI v3.3 — Guru + Explain Mode (умный выбор и объяснение)")
134
 
135
- with gr.Row():
136
- user_input = gr.Textbox(
137
- label="Введите запрос",
138
- placeholder="Например: Напиши мотивационное письмо для собеседования",
139
- lines=2,
140
- )
141
- with gr.Row():
142
- output = gr.Textbox(label="Ответ", lines=10, placeholder="Здесь появится ответ")
143
- with gr.Row():
144
- model_used = gr.Textbox(label="Используемая модель", interactive=False)
145
- explanation = gr.Textbox(label="Объяснение выбора", interactive=False)
146
 
147
- submit_btn = gr.Button("🚀 Отправить запрос")
 
 
148
 
149
- submit_btn.click(fn=generate_response, inputs=user_input, outputs=[output, model_used, explanation])
150
 
151
- # ==========================================================
152
- # 6️⃣ Запуск
153
- # ==========================================================
154
- if __name__ == "__main__":
155
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
 
 
 
1
  import gradio as gr
2
+ import requests
3
+ from core.intelligence import update_memory, summarize_context
4
 
5
+ HF_API_URL = "https://api-inference.huggingface.co/models/microsoft/phi-3.5-mini"
6
+ HEADERS = {"Authorization": "Bearer hf_your_token"} # если токен не нужен, можно удалить эту строку
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ def generate_response(user_input):
9
+ """Основная логика обработки запроса"""
 
 
 
 
10
  try:
11
+ # Отправляем запрос в Hugging Face Inference API
12
+ payload = {"inputs": user_input, "parameters": {"max_new_tokens": 500, "temperature": 0.7}}
13
+ response = requests.post(HF_API_URL, headers=HEADERS, json=payload)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
+ if response.status_code != 200:
16
+ return f"⚠️ Ошибка API ({response.status_code}): {response.text}"
 
17
 
18
+ model_output = response.json()
19
+ output = model_output[0]["generated_text"] if isinstance(model_output, list) else model_output
 
 
20
 
21
+ # Обновляем память
22
+ update_memory(user_input, output)
23
+ context = summarize_context()
 
 
 
 
 
 
24
 
25
+ return f"{output}\n\n{context}"
 
 
 
26
 
 
 
 
 
 
 
 
 
 
 
 
27
  except Exception as e:
28
+ return f"❌ Ошибка: {str(e)}"
29
 
 
 
 
 
 
 
 
 
 
30
 
31
+ # === Интерфейс Gradio ===
32
+ with gr.Blocks(title="Eroha AgentAPI v4.0 — Guru Intelligence") as demo:
33
+ gr.Markdown("# 🤖 Eroha AgentAPI v4.0 — Guru Intelligence Core")
34
+ gr.Markdown("Генерация ответов с памятью и логическим контекстом 🧠")
 
 
 
 
 
 
 
35
 
36
+ user_input = gr.Textbox(label="Введите вопрос", placeholder="Например: Объясни, как работает нейросеть...")
37
+ output_box = gr.Textbox(label="Ответ", lines=12)
38
+ submit_btn = gr.Button("🚀 Сгенерировать ответ")
39
 
40
+ submit_btn.click(fn=generate_response, inputs=user_input, outputs=output_box)
41
 
42
+ demo.launch()