From 804a80bc7cb788a77af169242b84c892ec4fc638 Mon Sep 17 00:00:00 2001 From: H Lohaus Date: Sun, 24 Nov 2024 17:43:45 +0100 Subject: Arm2 (#2414) * Fix arm v7 build / improve api * Update stubs.py * Fix unit tests --- g4f/gui/__init__.py | 28 ++++++++++++++++------------ g4f/gui/server/api.py | 40 ++++------------------------------------ g4f/gui/server/backend.py | 23 ++++++++++++++++------- g4f/gui/server/website.py | 7 ++++--- 4 files changed, 40 insertions(+), 58 deletions(-) (limited to 'g4f/gui') diff --git a/g4f/gui/__init__.py b/g4f/gui/__init__.py index 930a2aa0..140711fa 100644 --- a/g4f/gui/__init__.py +++ b/g4f/gui/__init__.py @@ -8,22 +8,13 @@ try: except ImportError as e: import_error = e -def run_gui(host: str = '0.0.0.0', port: int = 8080, debug: bool = False) -> None: - if import_error is not None: - raise MissingRequirementsError(f'Install "gui" requirements | pip install -U g4f[gui]\n{import_error}') - - config = { - 'host' : host, - 'port' : port, - 'debug': debug - } - +def get_gui_app(): site = Website(app) for route in site.routes: app.add_url_rule( route, - view_func = site.routes[route]['function'], - methods = site.routes[route]['methods'], + view_func=site.routes[route]['function'], + methods=site.routes[route]['methods'], ) backend_api = Backend_Api(app) @@ -33,6 +24,19 @@ def run_gui(host: str = '0.0.0.0', port: int = 8080, debug: bool = False) -> Non view_func = backend_api.routes[route]['function'], methods = backend_api.routes[route]['methods'], ) + return app + +def run_gui(host: str = '0.0.0.0', port: int = 8080, debug: bool = False) -> None: + if import_error is not None: + raise MissingRequirementsError(f'Install "gui" requirements | pip install -U g4f[gui]\n{import_error}') + + config = { + 'host' : host, + 'port' : port, + 'debug': debug + } + + get_gui_app() print(f"Running on port {config['port']}") app.run(**config) diff --git a/g4f/gui/server/api.py b/g4f/gui/server/api.py index ecf7bc54..0701210d 100644 --- a/g4f/gui/server/api.py +++ b/g4f/gui/server/api.py @@ -22,11 +22,11 @@ conversations: dict[dict[str, BaseConversation]] = {} class Api: @staticmethod - def get_models() -> list[str]: + def get_models(): return models._all_models @staticmethod - def get_provider_models(provider: str, api_key: str = None) -> list[dict]: + def get_provider_models(provider: str, api_key: str = None): if provider in __map__: provider: ProviderType = __map__[provider] if issubclass(provider, ProviderModelMixin): @@ -46,39 +46,7 @@ class Api: return [] @staticmethod - def get_image_models() -> list[dict]: - image_models = [] - index = [] - for provider in __providers__: - if hasattr(provider, "image_models"): - if hasattr(provider, "get_models"): - provider.get_models() - parent = provider - if hasattr(provider, "parent"): - parent = __map__[provider.parent] - if parent.__name__ not in index: - for model in provider.image_models: - image_models.append({ - "provider": parent.__name__, - "url": parent.url, - "label": parent.label if hasattr(parent, "label") else None, - "image_model": model, - "vision_model": getattr(parent, "default_vision_model", None) - }) - index.append(parent.__name__) - elif hasattr(provider, "default_vision_model") and provider.__name__ not in index: - image_models.append({ - "provider": provider.__name__, - "url": provider.url, - "label": provider.label if hasattr(provider, "label") else None, - "image_model": None, - "vision_model": provider.default_vision_model - }) - index.append(provider.__name__) - return image_models - - @staticmethod - def get_providers() -> list[str]: + def get_providers() -> dict[str, str]: return { provider.__name__: (provider.label if hasattr(provider, "label") else provider.__name__) + (" (Image Generation)" if getattr(provider, "image_models", None) else "") @@ -90,7 +58,7 @@ class Api: } @staticmethod - def get_version(): + def get_version() -> dict: try: current_version = version.utils.current_version except VersionNotFoundError: diff --git a/g4f/gui/server/backend.py b/g4f/gui/server/backend.py index 3dcae546..3c87b0e2 100644 --- a/g4f/gui/server/backend.py +++ b/g4f/gui/server/backend.py @@ -3,7 +3,7 @@ import flask import os import logging import asyncio -from flask import request, Flask +from flask import Flask, request, jsonify from typing import Generator from werkzeug.utils import secure_filename @@ -42,17 +42,26 @@ class Backend_Api(Api): app (Flask): Flask application instance to attach routes to. """ self.app: Flask = app + + def jsonify_models(**kwargs): + response = self.get_models(**kwargs) + if isinstance(response, list): + return jsonify(response) + return response + + def jsonify_provider_models(**kwargs): + response = self.get_provider_models(**kwargs) + if isinstance(response, list): + return jsonify(response) + return response + self.routes = { '/backend-api/v2/models': { - 'function': self.get_models, + 'function': jsonify_models, 'methods': ['GET'] }, '/backend-api/v2/models/': { - 'function': self.get_provider_models, - 'methods': ['GET'] - }, - '/backend-api/v2/image_models': { - 'function': self.get_image_models, + 'function': jsonify_provider_models, 'methods': ['GET'] }, '/backend-api/v2/providers': { diff --git a/g4f/gui/server/website.py b/g4f/gui/server/website.py index 3cabcdf3..456056b1 100644 --- a/g4f/gui/server/website.py +++ b/g4f/gui/server/website.py @@ -1,11 +1,12 @@ import uuid from flask import render_template, redirect +def redirect_home(): + return redirect('/chat') + class Website: def __init__(self, app) -> None: self.app = app - def redirect_home(): - return redirect('/chat') self.routes = { '/': { 'function': redirect_home, @@ -35,7 +36,7 @@ class Website: def _chat(self, conversation_id): if '-' not in conversation_id: - return redirect('/chat') + return redirect_home() return render_template('index.html', chat_id=conversation_id) def _index(self): -- cgit v1.2.3