emo-online-api / scripts /check-llm-keys.py
Emo Online
Deploy Emo API
dd87944
Raw
History Blame Contribute Delete
2.77 kB
#!/usr/bin/env python3
"""Affiche quelles clés LLM sont configurées (local .env + optionnel prod)."""
from __future__ import annotations
import json
import os
import sys
import urllib.request
from pathlib import Path
from dotenv import load_dotenv
ROOT = Path(__file__).resolve().parents[1]
load_dotenv(ROOT / "emo" / "backend" / ".env", override=True)
PROVIDERS = {
"groq": ["GROQ_API_KEY"],
"huggingface": ["HF_TOKEN", "HUGGINGFACE_API_KEY"],
"openrouter": ["OPENROUTER_API_KEY"],
"deepseek": ["DEEPSEEK_API_KEY"],
"openai": ["OPENAI_API_KEY"],
"gemini": ["GEMINI_API_KEY", "GOOGLE_API_KEY"],
"anthropic": ["ANTHROPIC_API_KEY", "EMERGENT_LLM_KEY"],
}
LABELS = {
"groq": "Groq (gratuit, rapide)",
"huggingface": "Hugging Face Router (gratuit)",
"openrouter": "OpenRouter (modèles free + payants)",
"deepseek": "DeepSeek (Chat + R1)",
"openai": "OpenAI / ChatGPT",
"gemini": "Google Gemini",
"anthropic": "Anthropic / Claude",
}
def has_key(env_names: list[str]) -> bool:
return any(os.environ.get(k, "").strip() for k in env_names)
def main() -> int:
print("=== Clés LLM — emo/backend/.env ===\n")
missing_priority = []
for name, keys in PROVIDERS.items():
ok = has_key(keys)
mark = "OK" if ok else "MANQUANT"
print(f" [{mark:8}] {name:12}{LABELS[name]}")
if not ok and name in ("openrouter", "deepseek", "groq", "huggingface"):
missing_priority.append(name)
if missing_priority:
print("\n→ Priorité pour débloquer tous les modèles :")
for p in missing_priority:
print(f" - {p}")
prod = os.environ.get("EMO_PUBLIC_BACKEND_URL", "https://xroxx-emo-online-api.hf.space").rstrip("/")
try:
with urllib.request.urlopen(f"{prod}/api/llm/status", timeout=20) as resp:
data = json.loads(resp.read().decode())
print(f"\n=== Prod ({prod}) ===\n")
live = data.get("live") or {}
for name in PROVIDERS:
configured = data.get(name, False)
row = live.get(name) or {}
live_ok = row.get("ok")
detail = (row.get("detail") or "")[:80]
if not configured:
st = "pas de clé"
elif live_ok is True:
st = "live OK"
elif live_ok is False:
st = f"live KO — {detail}"
else:
st = "clé présente"
print(f" {name:12} {st}")
except Exception as e:
print(f"\n(Prod inaccessible: {e})")
print("\nPour ajouter les clés : scripts\\setup-llm-keys.ps1")
print("Puis sync HF : scripts\\sync-hf-secrets.bat")
return 0
if __name__ == "__main__":
raise SystemExit(main())