summaryrefslogtreecommitdiffstats
path: root/g4f/api/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'g4f/api/__init__.py')
-rw-r--r--g4f/api/__init__.py39
1 files changed, 38 insertions, 1 deletions
diff --git a/g4f/api/__init__.py b/g4f/api/__init__.py
index 21e69388..292164fa 100644
--- a/g4f/api/__init__.py
+++ b/g4f/api/__init__.py
@@ -26,6 +26,7 @@ from g4f.client.helper import filter_none
from g4f.image import is_accepted_format, images_dir
from g4f.typing import Messages
from g4f.cookies import read_cookie_files
+from g4f.Provider import ProviderType, ProviderUtils, __providers__
logger = logging.getLogger(__name__)
@@ -152,7 +153,9 @@ class Api:
return HTMLResponse('g4f API: Go to '
'<a href="/v1/models">models</a>, '
'<a href="/v1/chat/completions">chat/completions</a>, or '
- '<a href="/v1/images/generate">images/generate</a>.')
+ '<a href="/v1/images/generate">images/generate</a> <br><br>'
+ 'Open Swagger UI at: '
+ '<a href="/docs">/docs</a>')
@self.app.get("/v1/models")
async def models():
@@ -290,6 +293,40 @@ class Api:
return FileResponse(target, media_type=content_type)
+ @self.app.get("/providers")
+ async def providers():
+ model_list = [{
+ 'id': provider.__name__,
+ 'object': 'provider',
+ 'created': 0,
+ 'url': provider.url,
+ 'label': getattr(provider, "label", None),
+ } for provider in __providers__ if provider.working]
+ return JSONResponse(model_list)
+
+ @self.app.get("/providers/{provider}")
+ async def providers_info(provider: str):
+ if provider not in ProviderUtils.convert:
+ return JSONResponse({"error": "The model does not exist."}, 404)
+ provider: ProviderType = ProviderUtils.convert[provider]
+ def safe_get_models(provider: ProviderType) -> list[str]:
+ try:
+ return provider.get_models() if hasattr(provider, "get_models") else []
+ except:
+ return []
+ provider_info = {
+ 'id': provider.__name__,
+ 'object': 'provider',
+ 'created': 0,
+ 'url': provider.url,
+ 'label': getattr(provider, "label", None),
+ 'models': safe_get_models(provider),
+ 'image_models': getattr(provider, "image_models", []) or [],
+ 'vision_models': [model for model in [getattr(provider, "default_vision_model", None)] if model],
+ 'params': [*provider.get_parameters()] if hasattr(provider, "get_parameters") else []
+ }
+ return JSONResponse(provider_info)
+
def format_exception(e: Exception, config: Union[ChatCompletionsConfig, ImageGenerationConfig], image: bool = False) -> str:
last_provider = {} if not image else g4f.get_last_provider(True)
provider = (AppConfig.image_provider if image else AppConfig.provider) if config.provider is None else config.provider