From e9179b87c25b0e22113cb6fc73e933883b1d126a Mon Sep 17 00:00:00 2001 From: hlohaus <983577+hlohaus@users.noreply.github.com> Date: Fri, 13 Jun 2025 10:37:12 +0200 Subject: [PATCH] feat: add ffmpeg and flac installation to Dockerfiles - Updated `Dockerfile` to install `ffmpeg` and `flac` along with existing packages. - Updated `Dockerfile-slim` to install `ffmpeg` and `flac` along with existing packages. - Modified `any_provider.py` to change how providers are handled when a model is specified, allowing for a submodel to be extracted and checked against the provider's attributes. - Adjusted `retry_provider.py` to ensure the alias for the model is correctly set based on the provider's model aliases, improving clarity in debug logging. --- docker/Dockerfile | 2 +- docker/Dockerfile-slim | 2 +- g4f/providers/any_provider.py | 12 +++++++----- g4f/providers/retry_provider.py | 18 +++++++++++------- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index a9ff8920..e012537e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -19,7 +19,7 @@ RUN if [ "$G4F_VERSION" = "" ] ; then \ RUN apt-get -qqy update \ && apt-get -qqy upgrade \ && apt-get -qyy autoremove \ - && apt-get -qqy install python3 python-is-python3 pip \ + && apt-get -qqy install python3 python-is-python3 pip ffmpeg flac \ && apt-get -qyy remove openjdk-11-jre-headless \ && apt-get -qyy autoremove \ && apt-get -qyy clean \ diff --git a/docker/Dockerfile-slim b/docker/Dockerfile-slim index abf72ee1..58bb7289 100644 --- a/docker/Dockerfile-slim +++ b/docker/Dockerfile-slim @@ -12,7 +12,7 @@ ENV G4F_USER_ID $G4F_USER_ID ENV G4F_DIR /app RUN apt-get update && apt-get upgrade -y \ - && apt-get install -y git cron \ + && apt-get install -y git cron ffmpeg flac \ # Add user and user group && groupadd -g $G4F_USER_ID $G4F_USER \ && useradd -rm -G sudo -u $G4F_USER_ID -g $G4F_USER_ID $G4F_USER \ diff --git a/g4f/providers/any_provider.py b/g4f/providers/any_provider.py index 4a8575af..d6c2a9eb 100644 --- a/g4f/providers/any_provider.py +++ b/g4f/providers/any_provider.py @@ -280,12 +280,14 @@ class AnyProvider(AsyncGeneratorProvider, ProviderModelMixin): ) -> AsyncResult: cls.get_models(ignored=ignored) providers = [] - if model and ":" in model: - providers = model.split(":") - model = providers.pop() - providers = [getattr(Provider, provider) for provider in providers] - elif not model or model == cls.default_model: + provider, submodel = model.split(":", maxsplit=1) + if hasattr(Provider, provider): + provider = getattr(Provider, provider) + if provider.working and provider.get_parent() not in ignored: + providers.append(provider) + model = submodel + if not model or model == cls.default_model: model = "" has_image = False has_audio = False diff --git a/g4f/providers/retry_provider.py b/g4f/providers/retry_provider.py index 36ef4530..cd8791ac 100644 --- a/g4f/providers/retry_provider.py +++ b/g4f/providers/retry_provider.py @@ -53,10 +53,12 @@ class IterListProvider(BaseRetryProvider): for provider in self.get_providers(stream and not ignore_stream, ignored): self.last_provider = provider + alias = model if not model: - model = getattr(provider, "default_model", None) - alias = provider.model_aliases.get(model, model) if hasattr(provider, "model_aliases") else model - debug.log(f"Using {provider.__name__} provider with model {alias}") + alias = getattr(provider, "default_model", None) + if hasattr(provider, "model_aliases"): + alias = provider.model_aliases.get(model, model) + debug.log(f"Using provider: {provider.__name__} with model: {alias}") yield ProviderInfo(**provider.get_dict(), model=alias) extra_body = kwargs.copy() if isinstance(api_key, dict): @@ -97,11 +99,13 @@ class IterListProvider(BaseRetryProvider): for provider in self.get_providers(stream and not ignore_stream, ignored): self.last_provider = provider + alias = model if not model: - model = getattr(provider, "default_model", None) - model = provider.model_aliases.get(model, model) if hasattr(provider, "model_aliases") else model - debug.log(f"Using {provider.__name__} provider with model {model}") - yield ProviderInfo(**provider.get_dict(), model=model) + alias = getattr(provider, "default_model", None) + if hasattr(provider, "model_aliases"): + alias = provider.model_aliases.get(model, model) + debug.log(f"Using {provider.__name__} provider with model {alias}") + yield ProviderInfo(**provider.get_dict(), model=alias) extra_body = kwargs.copy() if isinstance(api_key, dict): api_key = api_key.get(provider.get_parent())