#!/usr/bin/env python3
"""
Проверка деталей модели в Ollama: квантизация, размер, контекст.
Использование:
  python docs/check_ollama_model.py
  OLLAMA_URL=http://192.168.88.15:11434 python docs/check_ollama_model.py
  OLLAMA_URL=... MODEL=qwen3:14b python docs/check_ollama_model.py
"""

import json
import os
import urllib.request

OLLAMA_URL = os.environ.get("OLLAMA_URL", "http://localhost:11434")
MODEL = os.environ.get("MODEL", "qwen3:14b-q8_0")


def main() -> None:
    url = f"{OLLAMA_URL.rstrip('/')}/api/show"
    body = json.dumps({"model": MODEL}).encode("utf-8")
    req = urllib.request.Request(url, data=body, method="POST")
    req.add_header("Content-Type", "application/json")
    try:
        with urllib.request.urlopen(req, timeout=10) as resp:
            data = json.load(resp)
    except urllib.error.URLError as e:
        print(f"Ошибка подключения к {OLLAMA_URL}: {e}")
        raise SystemExit(1)
    except urllib.error.HTTPError as e:
        print(f"HTTP {e.code}: {e.reason}")
        if e.fp:
            try:
                body = e.fp.read().decode("utf-8", errors="replace")
                print(body[:500])
            except Exception:
                pass
        raise SystemExit(1)

    details = data.get("details") or {}
    info = data.get("model_info") or {}

    print(f"Модель: {MODEL}")
    print(f"Ollama: {OLLAMA_URL}")
    print("-" * 40)
    print(f"Формат:           {details.get('format', '—')}")
    print(f"Квантизация:      {details.get('quantization_level', '—')}")
    print(f"Размер (params):  {details.get('parameter_size', '—')}")
    print(f"Семейство:       {details.get('family', '—')}")

    # Контекст из model_info (ключ зависит от семейства: qwen3.context_length и т.д.)
    for key, val in info.items():
        if "context_length" in key:
            print(f"Контекст (токенов): {val}")
            break
    else:
        print("Контекст (токенов): —")

    if data.get("modified_at"):
        print(f"Изменён:          {data['modified_at']}")


if __name__ == "__main__":
    main()
