From 75fe95cbedd06d86fb64245f154480b8b731aef8 Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Mon, 30 Dec 2024 02:51:36 +0100 Subject: Add continue messages support, Remove old text_to_speech service from gui Update gui and client readmes, Add HuggingSpaces group provider; Add providers parameters config forms to gui --- g4f/gui/server/api.py | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'g4f/gui/server/api.py') diff --git a/g4f/gui/server/api.py b/g4f/gui/server/api.py index cc65f0e3..ca80f7f3 100644 --- a/g4f/gui/server/api.py +++ b/g4f/gui/server/api.py @@ -11,10 +11,11 @@ from g4f import version, models from g4f import ChatCompletion, get_model_and_provider from g4f.errors import VersionNotFoundError from g4f.image import ImagePreview, ImageResponse, copy_images, ensure_images_dir, images_dir -from g4f.Provider import ProviderType, __providers__, __map__ +from g4f.Provider import ProviderUtils, __providers__ from g4f.providers.base_provider import ProviderModelMixin from g4f.providers.retry_provider import IterListProvider -from g4f.providers.response import BaseConversation, JsonConversation, FinishReason, SynthesizeData, TitleGeneration, RequestLogin +from g4f.providers.response import BaseConversation, JsonConversation, FinishReason +from g4f.providers.response import SynthesizeData, TitleGeneration, RequestLogin, Parameters from g4f.client.service import convert_to_provider from g4f import debug @@ -37,8 +38,8 @@ class Api: @staticmethod def get_provider_models(provider: str, api_key: str = None): - if provider in __map__: - provider: ProviderType = __map__[provider] + if provider in ProviderUtils.convert: + provider = ProviderUtils.convert[provider] if issubclass(provider, ProviderModelMixin): if api_key is not None and "api_key" in signature(provider.get_models).parameters: models = provider.get_models(api_key=api_key) @@ -85,7 +86,7 @@ class Api: def _prepare_conversation_kwargs(self, json_data: dict, kwargs: dict): model = json_data.get('model') or models.default provider = json_data.get('provider') - messages = json_data['messages'] + messages = json_data.get('messages') api_key = json_data.get("api_key") if api_key is not None: kwargs["api_key"] = api_key @@ -99,8 +100,6 @@ class Api: if do_web_search: from ...web_search import get_search_message messages[-1]["content"] = get_search_message(messages[-1]["content"]) - if json_data.get("auto_continue"): - kwargs['auto_continue'] = True conversation = json_data.get("conversation") if conversation is not None: kwargs["conversation"] = JsonConversation(**conversation) @@ -112,6 +111,8 @@ class Api: if json_data.get("ignored"): kwargs["ignored"] = json_data["ignored"] + if json_data.get("action"): + kwargs["action"] = json_data["action"] return { "model": model, @@ -137,6 +138,19 @@ class Api: ignore_stream=True, logging=False ) + params = { + **provider_handler.get_parameters(as_json=True), + "model": model, + "messages": kwargs.get("messages"), + "web_search": kwargs.get("web_search") + } + if isinstance(kwargs.get("conversation"), JsonConversation): + params["conversation"] = kwargs.get("conversation").get_dict() + else: + params["conversation_id"] = conversation_id + if kwargs.get("api_key") is not None: + params["api_key"] = kwargs["api_key"] + yield self._format_json("parameters", params) first = True try: result = ChatCompletion.create(**{**kwargs, "model": model, "provider": provider_handler}) @@ -172,7 +186,11 @@ class Api: yield self._format_json("title", chunk.title) elif isinstance(chunk, RequestLogin): yield self._format_json("login", str(chunk)) - elif not isinstance(chunk, FinishReason): + elif isinstance(chunk, Parameters): + yield self._format_json("parameters", chunk.get_dict()) + elif isinstance(chunk, FinishReason): + yield self._format_json("finish", chunk.get_dict()) + else: yield self._format_json("content", str(chunk)) if debug.logs: for log in debug.logs: -- cgit v1.2.3