64 lines
2.2 KiB
Python
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()
|