From ef9dcfa66b10bdfbd0e3e999dd958dda80dfcc0a Mon Sep 17 00:00:00 2001 From: hlohaus <983577+hlohaus@users.noreply.github.com> Date: Fri, 24 Jan 2025 17:49:07 +0100 Subject: Fix generate Images with OpenaiChat Add "flux"as alias in HuggingSpace providers Choice a random space provider in HuggingSpace provider Add "Selecting a Provider" Documentation Update requirements list in pypi packages Fix label of CablyAI and DeepInfraChat provider --- g4f/Provider/CablyAI.py | 1 + g4f/Provider/DeepInfraChat.py | 1 + g4f/Provider/hf_space/BlackForestLabsFlux1Dev.py | 4 ++-- g4f/Provider/hf_space/BlackForestLabsFlux1Schnell.py | 4 ++-- g4f/Provider/hf_space/CohereForAI.py | 5 +---- g4f/Provider/hf_space/VoodoohopFlux1Schnell.py | 6 +++--- g4f/Provider/hf_space/__init__.py | 9 +++++---- g4f/Provider/needs_auth/OpenaiChat.py | 8 ++++---- 8 files changed, 19 insertions(+), 19 deletions(-) (limited to 'g4f') diff --git a/g4f/Provider/CablyAI.py b/g4f/Provider/CablyAI.py index 7bbbb430..7bf728b5 100644 --- a/g4f/Provider/CablyAI.py +++ b/g4f/Provider/CablyAI.py @@ -4,6 +4,7 @@ from ..typing import AsyncResult, Messages from .needs_auth import OpenaiAPI class CablyAI(OpenaiAPI): + label = __name__ url = "https://cablyai.com" login_url = None needs_auth = False diff --git a/g4f/Provider/DeepInfraChat.py b/g4f/Provider/DeepInfraChat.py index c293d421..535097de 100644 --- a/g4f/Provider/DeepInfraChat.py +++ b/g4f/Provider/DeepInfraChat.py @@ -4,6 +4,7 @@ from ..typing import AsyncResult, Messages from .needs_auth import OpenaiAPI class DeepInfraChat(OpenaiAPI): + label = __name__ url = "https://deepinfra.com/chat" login_url = None needs_auth = False diff --git a/g4f/Provider/hf_space/BlackForestLabsFlux1Dev.py b/g4f/Provider/hf_space/BlackForestLabsFlux1Dev.py index a640dd1b..b4357bff 100644 --- a/g4f/Provider/hf_space/BlackForestLabsFlux1Dev.py +++ b/g4f/Provider/hf_space/BlackForestLabsFlux1Dev.py @@ -16,9 +16,9 @@ class BlackForestLabsFlux1Dev(AsyncGeneratorProvider, ProviderModelMixin): default_model = 'black-forest-labs-flux-1-dev' default_image_model = default_model - image_models = [default_image_model] + model_aliases = {"flux-dev": default_model, "flux": default_model} + image_models = [default_image_model, *model_aliases.keys()] models = image_models - model_aliases = {"flux-dev": default_model} @classmethod async def create_async_generator( diff --git a/g4f/Provider/hf_space/BlackForestLabsFlux1Schnell.py b/g4f/Provider/hf_space/BlackForestLabsFlux1Schnell.py index 5b2f517f..11d2ee8e 100644 --- a/g4f/Provider/hf_space/BlackForestLabsFlux1Schnell.py +++ b/g4f/Provider/hf_space/BlackForestLabsFlux1Schnell.py @@ -17,9 +17,9 @@ class BlackForestLabsFlux1Schnell(AsyncGeneratorProvider, ProviderModelMixin): default_model = "black-forest-labs-flux-1-schnell" default_image_model = default_model - image_models = [default_image_model] + model_aliases = {"flux-schnell": default_model, "flux": default_model} + image_models = [default_image_model, *model_aliases.keys()] models = image_models - model_aliases = {"flux-schnell": default_model} @classmethod async def create_async_generator( diff --git a/g4f/Provider/hf_space/CohereForAI.py b/g4f/Provider/hf_space/CohereForAI.py index 540091f1..8fda88a5 100644 --- a/g4f/Provider/hf_space/CohereForAI.py +++ b/g4f/Provider/hf_space/CohereForAI.py @@ -1,7 +1,6 @@ from __future__ import annotations import json -import uuid from aiohttp import ClientSession, FormData from ...typing import AsyncResult, Messages @@ -24,12 +23,10 @@ class CohereForAI(AsyncGeneratorProvider, ProviderModelMixin): "command-r", "command-r7b-12-2024", ] - model_aliases = { "command-r-plus": "command-r-plus-08-2024", "command-r": "command-r-08-2024", "command-r7b": "command-r7b-12-2024", - } @classmethod @@ -99,4 +96,4 @@ class CohereForAI(AsyncGeneratorProvider, ProviderModelMixin): elif data["type"] == "title": yield TitleGeneration(data["title"]) elif data["type"] == "finalAnswer": - break + break \ No newline at end of file diff --git a/g4f/Provider/hf_space/VoodoohopFlux1Schnell.py b/g4f/Provider/hf_space/VoodoohopFlux1Schnell.py index 3679d323..d4a052f5 100644 --- a/g4f/Provider/hf_space/VoodoohopFlux1Schnell.py +++ b/g4f/Provider/hf_space/VoodoohopFlux1Schnell.py @@ -12,14 +12,14 @@ from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin class VoodoohopFlux1Schnell(AsyncGeneratorProvider, ProviderModelMixin): url = "https://voodoohop-flux-1-schnell.hf.space" api_endpoint = "https://voodoohop-flux-1-schnell.hf.space/call/infer" - + working = True default_model = "voodoohop-flux-1-schnell" default_image_model = default_model - image_models = [default_image_model] + model_aliases = {"flux-schnell": default_model, "flux": default_model} + image_models = [default_image_model, *model_aliases.keys()] models = image_models - model_aliases = {"flux-schnell": default_model} @classmethod async def create_async_generator( diff --git a/g4f/Provider/hf_space/__init__.py b/g4f/Provider/hf_space/__init__.py index 63030049..2ee80bc8 100644 --- a/g4f/Provider/hf_space/__init__.py +++ b/g4f/Provider/hf_space/__init__.py @@ -1,5 +1,7 @@ from __future__ import annotations +import random + from ...typing import AsyncResult, Messages, ImagesType from ...errors import ResponseError from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin @@ -15,15 +17,13 @@ from .StableDiffusion35Large import StableDiffusion35Large class HuggingSpace(AsyncGeneratorProvider, ProviderModelMixin): url = "https://huggingface.co/spaces" parent = "HuggingFace" - + working = True - + default_model = Qwen_Qwen_2_72B_Instruct.default_model default_image_model = BlackForestLabsFlux1Dev.default_model default_vision_model = Qwen_QVQ_72B.default_model providers = [BlackForestLabsFlux1Dev, BlackForestLabsFlux1Schnell, VoodoohopFlux1Schnell, CohereForAI, Qwen_QVQ_72B, Qwen_Qwen_2_72B_Instruct, StableDiffusion35Large] - - @classmethod def get_parameters(cls, **kwargs) -> dict: @@ -57,6 +57,7 @@ class HuggingSpace(AsyncGeneratorProvider, ProviderModelMixin): if not model and images is not None: model = cls.default_vision_model is_started = False + random.shuffle(cls.providers) for provider in cls.providers: if model in provider.model_aliases: async for chunk in provider.create_async_generator(provider.model_aliases[model], messages, **kwargs): diff --git a/g4f/Provider/needs_auth/OpenaiChat.py b/g4f/Provider/needs_auth/OpenaiChat.py index 5b18e759..25227f0f 100644 --- a/g4f/Provider/needs_auth/OpenaiChat.py +++ b/g4f/Provider/needs_auth/OpenaiChat.py @@ -264,7 +264,7 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin): return messages @classmethod - async def get_generated_image(cls, auth_result: AuthResult, session: StreamSession, element: dict, prompt: str = None) -> ImageResponse: + async def get_generated_image(cls, session: StreamSession, auth_result: AuthResult, element: dict, prompt: str = None) -> ImageResponse: try: prompt = element["metadata"]["dalle"]["prompt"] file_id = element["asset_pointer"].split("file-service://", 1)[1] @@ -452,7 +452,7 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin): await raise_for_status(response) buffer = u"" async for line in response.iter_lines(): - async for chunk in cls.iter_messages_line(session, line, conversation, sources): + async for chunk in cls.iter_messages_line(session, auth_result, line, conversation, sources): if isinstance(chunk, str): chunk = chunk.replace("\ue203", "").replace("\ue204", "").replace("\ue206", "") buffer += chunk @@ -500,7 +500,7 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin): yield FinishReason(conversation.finish_reason) @classmethod - async def iter_messages_line(cls, session: StreamSession, line: bytes, fields: Conversation, sources: Sources) -> AsyncIterator: + async def iter_messages_line(cls, session: StreamSession, auth_result: AuthResult, line: bytes, fields: Conversation, sources: Sources) -> AsyncIterator: if not line.startswith(b"data: "): return elif line.startswith(b"data: [DONE]"): @@ -546,7 +546,7 @@ class OpenaiChat(AsyncAuthedProvider, ProviderModelMixin): generated_images = [] for element in c.get("parts"): if isinstance(element, dict) and element.get("content_type") == "image_asset_pointer": - image = cls.get_generated_image(session, cls._headers, element) + image = cls.get_generated_image(session, auth_result, element) generated_images.append(image) for image_response in await asyncio.gather(*generated_images): if image_response is not None: -- cgit v1.2.3