mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-09-12 11:12:21 +02:00
* feat(models): define capability schema and readers * fix(models): harden Google catalog probing Restrict native catalog probing to the Gemini host, keep provider keys out of request URLs, filter non-chat model resources, and preserve the manual refresh default in the built-in Google add flow.
96 lines
2.3 KiB
Python
96 lines
2.3 KiB
Python
"""Vendor-specific model capability reader registry."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Mapping
|
|
from typing import Any
|
|
|
|
from src.model_capability_readers import generic_openai, google, llamacpp, lmstudio, ollama, openai, openrouter
|
|
from src.model_capability_readers.base import (
|
|
ModelCapabilityRecord,
|
|
VENDOR_ANTHROPIC,
|
|
VENDOR_GENERIC_OPENAI,
|
|
VENDOR_GOOGLE,
|
|
VENDOR_HUGGINGFACE,
|
|
VENDOR_LLAMACPP,
|
|
VENDOR_LMSTUDIO,
|
|
VENDOR_OLLAMA,
|
|
VENDOR_OPENAI,
|
|
VENDOR_OPENROUTER,
|
|
VENDOR_SGLANG,
|
|
VENDOR_UNKNOWN,
|
|
VENDOR_VLLM,
|
|
detect_vendor,
|
|
stable_model_id_for,
|
|
)
|
|
|
|
|
|
READER_MODULES = {
|
|
VENDOR_GENERIC_OPENAI: generic_openai,
|
|
VENDOR_OPENAI: openai,
|
|
VENDOR_OPENROUTER: openrouter,
|
|
VENDOR_GOOGLE: google,
|
|
VENDOR_LLAMACPP: llamacpp,
|
|
VENDOR_OLLAMA: ollama,
|
|
VENDOR_LMSTUDIO: lmstudio,
|
|
}
|
|
|
|
|
|
PLACEHOLDER_VENDOR_IDS = frozenset(
|
|
{
|
|
VENDOR_ANTHROPIC,
|
|
VENDOR_HUGGINGFACE,
|
|
VENDOR_SGLANG,
|
|
VENDOR_VLLM,
|
|
}
|
|
)
|
|
|
|
|
|
def reader_for_vendor(vendor: Any):
|
|
vendor_id = str(vendor or "").strip().lower().replace("-", "_")
|
|
return READER_MODULES.get(vendor_id, generic_openai)
|
|
|
|
|
|
def records_from_payload(
|
|
payload: Mapping[str, Any],
|
|
*,
|
|
vendor: str | None = None,
|
|
base_url: str = "",
|
|
endpoint_kind: str = "",
|
|
endpoint_id: str = "",
|
|
) -> tuple[ModelCapabilityRecord, ...]:
|
|
vendor_id = vendor or detect_vendor(base_url, endpoint_kind)
|
|
reader = reader_for_vendor(vendor_id)
|
|
if reader is generic_openai:
|
|
record_vendor = vendor_id if vendor_id not in {VENDOR_UNKNOWN, ""} else VENDOR_GENERIC_OPENAI
|
|
return reader.records_from_payload(
|
|
payload,
|
|
vendor_id=record_vendor,
|
|
endpoint_id=endpoint_id,
|
|
base_url=base_url,
|
|
)
|
|
return reader.records_from_payload(payload, endpoint_id=endpoint_id, base_url=base_url)
|
|
|
|
|
|
__all__ = [
|
|
"ModelCapabilityRecord",
|
|
"PLACEHOLDER_VENDOR_IDS",
|
|
"READER_MODULES",
|
|
"VENDOR_ANTHROPIC",
|
|
"VENDOR_GENERIC_OPENAI",
|
|
"VENDOR_GOOGLE",
|
|
"VENDOR_HUGGINGFACE",
|
|
"VENDOR_LLAMACPP",
|
|
"VENDOR_LMSTUDIO",
|
|
"VENDOR_OLLAMA",
|
|
"VENDOR_OPENAI",
|
|
"VENDOR_OPENROUTER",
|
|
"VENDOR_SGLANG",
|
|
"VENDOR_UNKNOWN",
|
|
"VENDOR_VLLM",
|
|
"detect_vendor",
|
|
"reader_for_vendor",
|
|
"records_from_payload",
|
|
"stable_model_id_for",
|
|
]
|