workbench / models /model_catalog.py
GitHub Actions
Initial ZeroGPU deployment with spaces shim
7f9dfed
Raw
History Blame Contribute Delete
3.21 kB
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
from typing import Any
import yaml
@dataclass(frozen=True)
class ModelInfo:
"""Configured model metadata."""
config_id: str
hf_id: str
display_name: str
type: str
parameters_b: float
backend: str
context_length: int
notes: str
thinking_mode: bool
gguf: dict[str, Any]
backend_capabilities: dict[str, list[str]]
trust_remote_code: bool
def load_model_catalog(path: str) -> dict[str, ModelInfo]:
raw = yaml.safe_load(Path(path).read_text(encoding="utf-8"))
catalog = {}
for config_id, cfg in raw.get("models", {}).items():
catalog[config_id] = ModelInfo(
config_id=config_id,
hf_id=cfg["hf_id"],
display_name=cfg.get("display_name", config_id),
type=cfg.get("type", "text"),
parameters_b=float(cfg.get("parameters_b", 0)),
backend=cfg.get("backend", "placeholder"),
context_length=int(cfg.get("context_length", 0)),
notes=cfg.get("notes", ""),
thinking_mode=bool(cfg.get("thinking_mode", False)),
gguf=cfg.get("gguf", {}),
backend_capabilities={
backend: list(capabilities)
for backend, capabilities in cfg.get("backend_capabilities", {}).items()
},
trust_remote_code=bool(cfg.get("trust_remote_code", False)),
)
return catalog
def model_choices(catalog: dict[str, ModelInfo], model_type: str | None = None) -> list[str]:
choices = []
for model in catalog.values():
if model_type and model.type != model_type:
continue
choices.append(model.config_id)
return choices
def model_summary(model: ModelInfo) -> dict[str, Any]:
return {
"config_id": model.config_id,
"hf_id": model.hf_id,
"display_name": model.display_name,
"type": model.type,
"parameters_b": model.parameters_b,
"backend": model.backend,
"context_length": model.context_length,
"thinking_mode": model.thinking_mode,
"gguf": model.gguf,
"backend_capabilities": model.backend_capabilities,
"trust_remote_code": model.trust_remote_code,
"notes": model.notes,
}
def validate_catalog(catalog: dict[str, ModelInfo], max_parameters_b: float = 32) -> list[str]:
warnings = []
for model in catalog.values():
if model.parameters_b > max_parameters_b:
warnings.append(
f"{model.config_id} has {model.parameters_b}B parameters, "
f"above the {max_parameters_b}B limit."
)
if model.backend == "placeholder":
warnings.append(
f"{model.config_id} uses placeholder backend; real inference is not wired yet."
)
if model.backend not in model.backend_capabilities:
warnings.append(
f"{model.config_id} has no capability metadata for backend {model.backend}."
)
if not model.hf_id:
warnings.append(f"{model.config_id} is missing hf_id.")
return warnings