Files
tech/docs/check_ollama_model.py
2026-02-01 23:59:39 +03:00

64 lines
2.2 KiB
Python

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