change
This commit is contained in:
+34
-3
@@ -17,6 +17,9 @@ load_dotenv(BACKEND_ROOT / ".env")
|
||||
class ProviderModel:
|
||||
id: str
|
||||
vision: bool = False
|
||||
# Strict function schemas are provider/model capabilities, not an
|
||||
# assumption about every OpenAI-compatible endpoint.
|
||||
strict_tool_schema: bool = False
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@@ -67,10 +70,28 @@ class Settings:
|
||||
return provider, model
|
||||
|
||||
|
||||
def _models(value: str, vision_value: str = "") -> tuple[ProviderModel, ...]:
|
||||
def _enabled_model_ids(value: str) -> set[str]:
|
||||
return {item.strip() for item in value.split(",") if item.strip()}
|
||||
|
||||
|
||||
def _as_bool(value: str) -> bool:
|
||||
return value.strip().lower() in {"1", "true", "yes", "on"}
|
||||
|
||||
|
||||
def _models(
|
||||
value: str,
|
||||
vision_value: str = "",
|
||||
strict_value: str = "",
|
||||
strict_all: bool = False,
|
||||
) -> tuple[ProviderModel, ...]:
|
||||
vision_ids = {item.strip() for item in vision_value.split(",") if item.strip()}
|
||||
strict_ids = _enabled_model_ids(strict_value)
|
||||
return tuple(
|
||||
ProviderModel(id=item, vision=item in vision_ids)
|
||||
ProviderModel(
|
||||
id=item,
|
||||
vision=item in vision_ids,
|
||||
strict_tool_schema=strict_all or item in strict_ids,
|
||||
)
|
||||
for item in (part.strip() for part in value.split(","))
|
||||
if item
|
||||
)
|
||||
@@ -84,7 +105,17 @@ def _provider(prefix: str, provider_id: str, label: str, default_base_url: str,
|
||||
api_key = os.getenv(f"CDSL_{prefix}_API_KEY", os.getenv("CDSL_LLM_API_KEY", "") if legacy else "")
|
||||
model_list = os.getenv(f"CDSL_{prefix}_MODELS", os.getenv("CDSL_LLM_MODEL", default_model) if legacy else default_model)
|
||||
vision_models = os.getenv(f"CDSL_{prefix}_VISION_MODELS", "")
|
||||
return ProviderConfig(provider_id, label, base_url, api_key, _models(model_list, vision_models))
|
||||
# A provider-wide switch is convenient for a verified endpoint. The model
|
||||
# list lets mixed capability deployments opt in only selected models.
|
||||
strict_all = _as_bool(os.getenv(f"CDSL_{prefix}_STRICT_TOOL_SCHEMA", ""))
|
||||
strict_models = os.getenv(f"CDSL_{prefix}_STRICT_TOOL_MODELS", "")
|
||||
return ProviderConfig(
|
||||
provider_id,
|
||||
label,
|
||||
base_url,
|
||||
api_key,
|
||||
_models(model_list, vision_models, strict_models, strict_all),
|
||||
)
|
||||
|
||||
|
||||
def get_settings() -> Settings:
|
||||
|
||||
Reference in New Issue
Block a user