| """Helpers for CLI local OpenAI-compatible model ids.""" |
|
|
| LOCAL_MODEL_PROVIDERS: dict[str, dict[str, str]] = { |
| "ollama/": { |
| "base_url_env": "OLLAMA_BASE_URL", |
| "base_url_default": "http://localhost:11434", |
| "api_key_env": "OLLAMA_API_KEY", |
| }, |
| "vllm/": { |
| "base_url_env": "VLLM_BASE_URL", |
| "base_url_default": "http://localhost:8000", |
| "api_key_env": "VLLM_API_KEY", |
| }, |
| "lm_studio/": { |
| "base_url_env": "LMSTUDIO_BASE_URL", |
| "base_url_default": "http://127.0.0.1:1234", |
| "api_key_env": "LMSTUDIO_API_KEY", |
| }, |
| "llamacpp/": { |
| "base_url_env": "LLAMACPP_BASE_URL", |
| "base_url_default": "http://localhost:8080", |
| "api_key_env": "LLAMACPP_API_KEY", |
| }, |
| } |
|
|
| LOCAL_MODEL_PREFIXES = tuple(LOCAL_MODEL_PROVIDERS) |
| RESERVED_LOCAL_MODEL_PREFIXES = ("openai-compat/",) |
| LOCAL_MODEL_BASE_URL_ENV = "LOCAL_LLM_BASE_URL" |
| LOCAL_MODEL_API_KEY_ENV = "LOCAL_LLM_API_KEY" |
| LOCAL_MODEL_API_KEY_DEFAULT = "sk-local-no-key-required" |
|
|
|
|
| def local_model_provider(model_id: str) -> dict[str, str] | None: |
| """Return provider config for a local model id, if it uses a local prefix.""" |
| for prefix, config in LOCAL_MODEL_PROVIDERS.items(): |
| if model_id.startswith(prefix): |
| return config |
| return None |
|
|
|
|
| def local_model_name(model_id: str) -> str | None: |
| """Return the backend model name with the local provider prefix removed.""" |
| for prefix in LOCAL_MODEL_PREFIXES: |
| if model_id.startswith(prefix): |
| name = model_id[len(prefix) :] |
| return name or None |
| return None |
|
|
|
|
| def is_local_model_id(model_id: str) -> bool: |
| """Return True for non-empty, whitespace-free local model ids.""" |
| if not model_id or any(char.isspace() for char in model_id): |
| return False |
| return local_model_name(model_id) is not None |
|
|
|
|
| def is_reserved_local_model_id(model_id: str) -> bool: |
| """Return True for local-style prefixes intentionally not supported.""" |
| return model_id.startswith(RESERVED_LOCAL_MODEL_PREFIXES) |
|
|