#!/usr/bin/env python3 """CI check: ensure no duplicate model IDs exist in provider configs. Catches the class of bugs where a rename introduces a duplicate entry (e.g. PR #225 kimi-for-coding -> kimi-k2.5 when kimi-k2.5 already existed). Runtime target: < 2 seconds. """ from __future__ import annotations import sys from pathlib import Path # Allow running from repo root REPO_ROOT = Path(__file__).parent.parent sys.path.insert(0, str(REPO_ROOT)) def check_openrouter_models() -> list[str]: """Check OPENROUTER_MODELS for duplicate model IDs.""" try: from hermes_cli.models import OPENROUTER_MODELS except ImportError: return [] errors = [] seen: dict[str, int] = {} for i, (model_id, _desc) in enumerate(OPENROUTER_MODELS): if model_id in seen: errors.append( f" OPENROUTER_MODELS: duplicate '{model_id}' " f"(index {seen[model_id]} and {i})" ) else: seen[model_id] = i return errors def check_provider_models() -> list[str]: """Check _PROVIDER_MODELS for duplicate model IDs within each provider list.""" from hermes_cli.models import _PROVIDER_MODELS errors = [] for provider, models in _PROVIDER_MODELS.items(): seen: dict[str, int] = {} for i, model_id in enumerate(models): if model_id in seen: errors.append( f" _PROVIDER_MODELS['{provider}']: duplicate '{model_id}' " f"(index {seen[model_id]} and {i})" ) else: seen[model_id] = i return errors def main() -> int: errors = [] errors.extend(check_openrouter_models()) errors.extend(check_provider_models()) if errors: print(f"FAIL: {len(errors)} duplicate model(s) found:") for e in errors: print(e) return 1 print("OK: no duplicate model entries") return 0 if __name__ == "__main__": raise SystemExit(main())