eroha-agentapi / core /models.py
Yermek68's picture
Create core/models.py
c5f1e55 verified
raw
history blame
4.12 kB
import requests
import random
import time
# ===============================
# 🤖 Eroha AgentAPI — Auto Model Selector (Guru+ Edition)
# ===============================
# 🧠 Основные доступные модели (все работают через бесплатный HF Inference API)
AVAILABLE_MODELS = {
"mistralai/Mistral-7B-Instruct-v0.2": {
"desc": "Универсальная reasoning-модель с высокой точностью ответов",
"tier": "balanced"
},
"google/gemma-2b-it": {
"desc": "Быстрая и лёгкая модель, подходит для коротких ответов и диалогов",
"tier": "fast"
},
"tiiuae/falcon-7b-instruct": {
"desc": "Разговорная модель с нейтральным стилем",
"tier": "chat"
},
"meta-llama/Llama-3-8b-instruct": {
"desc": "Очень сильная reasoning-модель, но может быть медленной при cold start",
"tier": "guru"
}
}
# 🌐 Hugging Face Inference API базовый URL
HF_API_BASE = "https://api-inference.huggingface.co/models/"
def auto_select_model(prompt: str) -> str:
"""
Автоматически выбирает модель в зависимости от типа запроса.
"""
p = prompt.lower()
if any(x in p for x in ["почему", "объясни", "анализ", "расскажи подробно", "compare", "explain"]):
return "mistralai/Mistral-7B-Instruct-v0.2" # аналитические вопросы
if any(x in p for x in ["коротко", "в двух словах", "summary", "резюме", "описание"]):
return "google/gemma-2b-it" # быстрые ответы
if any(x in p for x in ["напиши", "создай", "придумай", "творческий", "creative"]):
return "tiiuae/falcon-7b-instruct" # креатив
# fallback (по умолчанию “гуру”)
return "meta-llama/Llama-3-8b-instruct"
def query_hf_model(prompt: str) -> str:
"""
Отправляет запрос в Hugging Face Inference API с автоматическим выбором модели.
"""
model = auto_select_model(prompt)
api_url = f"{HF_API_BASE}{model}"
headers = {"Content-Type": "application/json"}
payload = {"inputs": prompt, "options": {"wait_for_model": True}}
print(f"🧠 Выбрана модель: {model}")
try:
response = requests.post(api_url, headers=headers, json=payload, timeout=90)
if response.status_code == 200:
data = response.json()
if isinstance(data, list) and len(data) > 0:
if "generated_text" in data[0]:
return data[0]["generated_text"].strip()
elif isinstance(data[0], str):
return data[0].strip()
elif isinstance(data, dict):
return data.get("generated_text", str(data))
return str(data)
elif response.status_code == 503:
return "⏳ Модель просыпается... подожди несколько секунд и повтори запрос."
elif response.status_code == 401:
return "🔒 Требуется Hugging Face API Token — добавь его в настройки Space."
elif response.status_code == 404:
return f"⚠️ Модель {model} временно недоступна. Попробуй снова или измени запрос."
else:
return f"⚠️ Ошибка API ({response.status_code}): {response.text[:200]}"
except Exception as e:
return f"❌ Ошибка соединения с HF API: {str(e)}"
if __name__ == "__main__":
# 🔧 Тест при локальном запуске
test_prompt = "Объясни, как работает квантовая суперпозиция"
print("🧩 Ответ:", query_hf_model(test_prompt))