xtekky/gpt4free · error · AttributeError

module 'g4f.Provider' has no attribute '{name}'

Error message

module 'g4f.Provider' has no attribute '{name}'

What it means

AttributeError raised by the module-level __getattr__ in g4f.Provider when _resolve_provider(name) raises ImportError. Provider modules are imported lazily; if importing the provider's file fails (missing optional dependency, syntax/module error, or name not in _provider_names), the lookup is converted into a standard 'module has no attribute' AttributeError so attribute access semantics are preserved.

Source

Thrown at g4f/Provider/__init__.py:476

_loaded_providers = {}


def __getattr__(name: str):
    if name in _loaded_providers:
        return _loaded_providers[name]
    if name == "__providers__":
        # Load all providers if specifically requested
        providers_list = []
        for provider_name in _provider_names:
            try:
                providers_list.append(__getattr__(provider_name))
            except AttributeError:
                pass
        return providers_list
    try:
        return _resolve_provider(name)
    except ImportError as e:
        raise AttributeError(f"module '{__name__}' has no attribute '{name}'") from e


def __dir__():
    return __all__


class _ConvertDict(dict):
    def __contains__(self, item):
        return item in _provider_names

    def __getitem__(self, item):
        try:
            return __getattr__(item)
        except AttributeError:
            raise KeyError(f"Provider '{item}' not found")

    def keys(self):
        return _provider_names

View on GitHub (pinned to 973504e177)

Solutions

  1. Check the spelling and case against _provider_names / dir(g4f.Provider) for your installed version
  2. If the provider was renamed in a g4f update, migrate to the new name (see changelog)
  3. Install missing optional dependencies that make the provider's module import fail
  4. Pin the g4f version your code was developed against

Example fix

# before
provider = g4f.Provider.GeminiProVision  # removed in newer g4f

# after
provider = g4f.Provider.Gemini  # or list available: print(dir(g4f.Provider))
Defensive patterns

Strategy: validation

Validate before calling

import g4f.Provider as P

def get_provider(name):
    if name not in dir(P):  # uses __dir__ -> __all__
        raise ValueError(f'unknown provider {name!r}; available: ...')
    return getattr(P, name)

Type guard

def is_known_provider(name: str) -> bool:
    import g4f.Provider as P
    return name in P._provider_names

Try / catch

try:
    provider = getattr(g4f.Provider, name)
except AttributeError:
    provider = None  # or nearest match from g4f.Provider._provider_names

Prevention

When it happens

Trigger: Accessing g4f.Provider.SomeName where SomeName is misspelled, was removed/renamed in a g4f upgrade, or whose module raises ImportError on import (e.g. a provider needing an uninstalled optional package).

Common situations: Code written against an older g4f version referencing providers deleted upstream; typos in provider names passed as strings; deploying without optional extras so a provider's imports fail.

Related errors


AI-assisted analysis of xtekky/gpt4free@973504e177 (2026-08-14). Data as JSON: /api/errors/85e1a640d93afa9f. Report an issue: GitHub.