release: bump version to 0.74.4
This commit is contained in:
@@ -9,6 +9,11 @@ import httpx
|
||||
MODELS_DEV_URL = "https://models.dev/api.json"
|
||||
OPENCODE_GO_MODELS_URL = "https://opencode.ai/zen/go/v1/models"
|
||||
|
||||
|
||||
class LLMProviderCatalogError(RuntimeError):
|
||||
"""The upstream catalog cannot supply a usable model list."""
|
||||
|
||||
|
||||
OPENCODE_GO_MODEL_PROVIDER_APIS = {
|
||||
"minimax-m2.7": "anthropic-messages",
|
||||
"minimax-m2.5": "anthropic-messages",
|
||||
@@ -171,9 +176,9 @@ async def refresh_llm_provider_preset(provider: str, api_key: str | None = None)
|
||||
str(item.get("id"))
|
||||
for item in data
|
||||
if isinstance(item, dict) and item.get("id")
|
||||
][:120]
|
||||
]
|
||||
if not model_ids:
|
||||
model_ids = fallback["models"]
|
||||
raise LLMProviderCatalogError("The provider returned an empty model catalog")
|
||||
return {
|
||||
**fallback,
|
||||
"model": fallback["model"] if fallback["model"] in model_ids else model_ids[0],
|
||||
@@ -184,7 +189,7 @@ async def refresh_llm_provider_preset(provider: str, api_key: str | None = None)
|
||||
|
||||
models_dev_key = MODELS_DEV_PROVIDER_KEYS.get(fallback["provider"])
|
||||
if not models_dev_key:
|
||||
return fallback
|
||||
raise LLMProviderCatalogError("Live catalog refresh is unavailable for this provider")
|
||||
|
||||
async with httpx.AsyncClient(timeout=15.0, follow_redirects=True) as client:
|
||||
response = await client.get(
|
||||
@@ -194,12 +199,23 @@ async def refresh_llm_provider_preset(provider: str, api_key: str | None = None)
|
||||
response.raise_for_status()
|
||||
catalog = response.json()
|
||||
|
||||
upstream = catalog.get(models_dev_key)
|
||||
upstream = catalog.get(models_dev_key) if isinstance(catalog, dict) else None
|
||||
if not isinstance(upstream, dict):
|
||||
return fallback
|
||||
raise LLMProviderCatalogError("The provider is missing from the model catalog")
|
||||
|
||||
upstream_models = upstream.get("models") if isinstance(upstream.get("models"), dict) else {}
|
||||
model_ids = list(upstream_models.keys())[:80]
|
||||
# Catalog insertion order is not release order; old entries can appear first.
|
||||
model_ids = sorted(
|
||||
(
|
||||
model_id
|
||||
for model_id, model in upstream_models.items()
|
||||
if model_id and isinstance(model, dict)
|
||||
),
|
||||
key=lambda model_id: (str(upstream_models[model_id].get("release_date") or ""), model_id),
|
||||
reverse=True,
|
||||
)
|
||||
if not model_ids:
|
||||
raise LLMProviderCatalogError("The provider returned an empty model catalog")
|
||||
base_url = upstream.get("api") or fallback["base_url"]
|
||||
if fallback["provider"] == "deepseek" and base_url == "https://api.deepseek.com":
|
||||
base_url = "https://api.deepseek.com/v1"
|
||||
@@ -208,8 +224,8 @@ async def refresh_llm_provider_preset(provider: str, api_key: str | None = None)
|
||||
**fallback,
|
||||
"label": upstream.get("name") or fallback["label"],
|
||||
"base_url": base_url,
|
||||
"model": model_ids[0] if model_ids else fallback["model"],
|
||||
"models": model_ids or fallback["models"],
|
||||
"model": model_ids[0],
|
||||
"models": model_ids,
|
||||
"api_key_env": (upstream.get("env") or [fallback["api_key_env"]])[0],
|
||||
"source": MODELS_DEV_URL,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user