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_namesView on GitHub (pinned to 973504e177)
Solutions
- Check the spelling and case against _provider_names / dir(g4f.Provider) for your installed version
- If the provider was renamed in a g4f update, migrate to the new name (see changelog)
- Install missing optional dependencies that make the provider's module import fail
- 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
- Resolve provider names dynamically from the installed version, not hardcoded lists
- Pin the g4f version in production
- Validate user/config-supplied provider names before use
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.