textmachine/eval/promptlang/slugcheck.py

54 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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())