Spaces:
Paused
Paused
| from __future__ import annotations | |
| from typing import Any | |
| from services.account_service import account_service | |
| from services.openai_backend_api import OpenAIBackendAPI | |
| from utils.helper import IMAGE_MODELS | |
| LOCAL_TEXT_MODELS = { | |
| "auto", | |
| "gpt-5", | |
| "gpt-5-1", | |
| "gpt-5-2", | |
| "gpt-5-3", | |
| "gpt-5-3-mini", | |
| "gpt-5-mini", | |
| } | |
| def _model_item(model: str, owned_by: str = "chatgpt2api") -> dict[str, Any]: | |
| return { | |
| "id": model, | |
| "object": "model", | |
| "created": 0, | |
| "owned_by": owned_by, | |
| "permission": [], | |
| "root": model, | |
| "parent": None, | |
| } | |
| def _local_catalog() -> dict[str, Any]: | |
| models = sorted(LOCAL_TEXT_MODELS | IMAGE_MODELS) | |
| return {"object": "list", "data": [_model_item(model) for model in models]} | |
| def _append_local_models(result: dict[str, Any]) -> dict[str, Any]: | |
| data = result.get("data") | |
| if not isinstance(data, list): | |
| return result | |
| seen = {str(item.get("id") or "").strip() for item in data if isinstance(item, dict)} | |
| for model in sorted(LOCAL_TEXT_MODELS | IMAGE_MODELS): | |
| if model not in seen: | |
| data.append(_model_item(model)) | |
| return result | |
| def list_models() -> dict[str, Any]: | |
| access_token = account_service.peek_text_access_token() | |
| try: | |
| result = OpenAIBackendAPI(access_token=access_token).list_models() | |
| except Exception: | |
| if not access_token: | |
| return _local_catalog() | |
| try: | |
| result = OpenAIBackendAPI().list_models() | |
| except Exception: | |
| return _local_catalog() | |
| return _append_local_models(result) | |