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.
This commit is contained in:
hlohaus 2025-06-13 10:37:12 +02:00
parent 554b51a511
commit e9179b87c2
4 changed files with 20 additions and 14 deletions

View file

@ -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 \

View file

@ -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 \

View file

@ -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

View file

@ -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())