main
py 52 lines 1.7 KB
Raw
1 from __future__ import annotations
2
3 from helpers.api import ApiHandler, Request
4 from plugins._oauth.helpers.providers import CODEX_PROVIDER_ID, get_provider
5
6
7 class Models(ApiHandler):
8 async def process(self, input: dict, request: Request) -> dict:
9 del request
10 raw_provider_id = _provider_id(input)
11 try:
12 provider = get_provider(raw_provider_id)
13 model_catalog = getattr(provider, "model_catalog", None)
14 if callable(model_catalog):
15 catalog = model_catalog()
16 models = [
17 str(item.get("slug") or item.get("id") or "")
18 for item in catalog
19 if isinstance(item, dict) and (item.get("slug") or item.get("id"))
20 ]
21 else:
22 catalog = []
23 models = provider.models()
24 return {
25 "ok": True,
26 "provider_id": provider.provider_id,
27 "models": models,
28 "model_metadata": catalog,
29 }
30 except Exception as exc:
31 return {
32 "ok": False,
33 "provider_id": _provider_id_label(raw_provider_id),
34 "error": str(exc),
35 "models": [],
36 }
37
38
39 def _provider_id(input: dict) -> object:
40 if "provider_id" not in input or input.get("provider_id") is None:
41 return CODEX_PROVIDER_ID
42 value = input.get("provider_id")
43 if isinstance(value, str) and not value.strip():
44 return CODEX_PROVIDER_ID
45 return value
46
47
48 def _provider_id_label(value: object) -> str:
49 if value is None:
50 return CODEX_PROVIDER_ID
51 text = str(value).strip()
52 return text or CODEX_PROVIDER_ID