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 \ RUN apt-get -qqy update \
&& apt-get -qqy upgrade \ && apt-get -qqy upgrade \
&& apt-get -qyy autoremove \ && 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 remove openjdk-11-jre-headless \
&& apt-get -qyy autoremove \ && apt-get -qyy autoremove \
&& apt-get -qyy clean \ && apt-get -qyy clean \

View file

@ -12,7 +12,7 @@ ENV G4F_USER_ID $G4F_USER_ID
ENV G4F_DIR /app ENV G4F_DIR /app
RUN apt-get update && apt-get upgrade -y \ 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 # Add user and user group
&& groupadd -g $G4F_USER_ID $G4F_USER \ && groupadd -g $G4F_USER_ID $G4F_USER \
&& useradd -rm -G sudo -u $G4F_USER_ID -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: ) -> AsyncResult:
cls.get_models(ignored=ignored) cls.get_models(ignored=ignored)
providers = [] providers = []
if model and ":" in model: if model and ":" in model:
providers = model.split(":") provider, submodel = model.split(":", maxsplit=1)
model = providers.pop() if hasattr(Provider, provider):
providers = [getattr(Provider, provider) for provider in providers] provider = getattr(Provider, provider)
elif not model or model == cls.default_model: if provider.working and provider.get_parent() not in ignored:
providers.append(provider)
model = submodel
if not model or model == cls.default_model:
model = "" model = ""
has_image = False has_image = False
has_audio = 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): for provider in self.get_providers(stream and not ignore_stream, ignored):
self.last_provider = provider self.last_provider = provider
alias = model
if not model: if not model:
model = getattr(provider, "default_model", None) alias = getattr(provider, "default_model", None)
alias = provider.model_aliases.get(model, model) if hasattr(provider, "model_aliases") else model if hasattr(provider, "model_aliases"):
debug.log(f"Using {provider.__name__} provider with model {alias}") alias = provider.model_aliases.get(model, model)
debug.log(f"Using provider: {provider.__name__} with model: {alias}")
yield ProviderInfo(**provider.get_dict(), model=alias) yield ProviderInfo(**provider.get_dict(), model=alias)
extra_body = kwargs.copy() extra_body = kwargs.copy()
if isinstance(api_key, dict): if isinstance(api_key, dict):
@ -97,11 +99,13 @@ class IterListProvider(BaseRetryProvider):
for provider in self.get_providers(stream and not ignore_stream, ignored): for provider in self.get_providers(stream and not ignore_stream, ignored):
self.last_provider = provider self.last_provider = provider
alias = model
if not model: if not model:
model = getattr(provider, "default_model", None) alias = getattr(provider, "default_model", None)
model = provider.model_aliases.get(model, model) if hasattr(provider, "model_aliases") else model if hasattr(provider, "model_aliases"):
debug.log(f"Using {provider.__name__} provider with model {model}") alias = provider.model_aliases.get(model, model)
yield ProviderInfo(**provider.get_dict(), model=model) debug.log(f"Using {provider.__name__} provider with model {alias}")
yield ProviderInfo(**provider.get_dict(), model=alias)
extra_body = kwargs.copy() extra_body = kwargs.copy()
if isinstance(api_key, dict): if isinstance(api_key, dict):
api_key = api_key.get(provider.get_parent()) api_key = api_key.get(provider.get_parent())