54 lines
2.2 KiB
Python
54 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
||
"""$0 live-фактчек слагов перед платными вызовами (гардрейл CLAUDE.md + правило двух направлений).
|
||
|
||
GET /models у каждого провайдера, чьи слаги едут в этой сессии. Ничего не генерирует — только
|
||
листинг. Ключи читает dotenv из eval/.env (сам файл сессия НЕ открывает).
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import json
|
||
import os
|
||
import sys
|
||
import urllib.request
|
||
from pathlib import Path
|
||
|
||
from dotenv import load_dotenv
|
||
|
||
EVAL = Path(__file__).resolve().parents[1]
|
||
load_dotenv(EVAL / ".env")
|
||
|
||
TARGETS = [
|
||
("deepseek", "https://api.deepseek.com/v1/models", "DEEPSEEK_API_KEY",
|
||
["deepseek-v4-flash", "deepseek-v4-pro"]),
|
||
("xai", "https://api.x.ai/v1/models", "XAI_API_KEY", ["grok-4.3"]),
|
||
]
|
||
|
||
|
||
def main() -> int:
|
||
out = {}
|
||
for name, url, key_env, expect in TARGETS:
|
||
key = os.environ.get(key_env)
|
||
if not key:
|
||
print(f"{name}: НЕТ КЛЮЧА {key_env}", file=sys.stderr)
|
||
out[name] = {"error": f"no {key_env}"}
|
||
continue
|
||
req = urllib.request.Request(url, headers={"Authorization": f"Bearer {key}"})
|
||
try:
|
||
with urllib.request.urlopen(req, timeout=60) as r:
|
||
data = json.loads(r.read())
|
||
except Exception as e: # noqa: BLE001 — аномалия печатается, диагноз по вендор-доке
|
||
print(f"{name}: ОШИБКА {e}", file=sys.stderr)
|
||
out[name] = {"error": str(e)[:300]}
|
||
continue
|
||
ids = sorted(m.get("id", "") for m in data.get("data", []))
|
||
out[name] = {"ids": ids, "expected_present": {e: (e in ids) for e in expect}}
|
||
print(f"{name}: {len(ids)} слаг(ов) → {ids}")
|
||
for e in expect:
|
||
print(f" {e}: {'ЖИВ' if e in ids else 'НЕТ В ЛИСТИНГЕ (не значит мёртв — алиас-урок)'}")
|
||
(Path(__file__).resolve().parent / "slugcheck.json").write_text(
|
||
json.dumps(out, ensure_ascii=False, indent=1), encoding="utf-8")
|
||
return 0
|
||
|
||
|
||
if __name__ == "__main__":
|
||
raise SystemExit(main())
|