xtekky/gpt4free · error · KeyError
Provider '{item}' not found
Error message
Provider '{item}' not found What it means
KeyError raised from _ConvertDict.__getitem__ (the __map__ object backing ProviderUtils.convert) when __getattr__(item) raises AttributeError — i.e. the requested provider name cannot be resolved to a module. It gives dict-style access (g4f.Provider.__map__['X']) a proper KeyError instead of a leaked AttributeError.
Source
Thrown at g4f/Provider/__init__.py:491
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
def items(self):
return [(k, self[k]) for k in _provider_names]
def get(self, item, default=None):
try:
return self[item]
except KeyError:
return default
__map__ = _ConvertDict()
class ProviderUtils:View on GitHub (pinned to 973504e177)
Solutions
- Validate names against __map__.keys() (i.e. _provider_names) before indexing
- Use __map__.get(name) which returns None instead of raising
- Correct the typo/renamed provider in your config
- Regenerate provider lists from the installed g4f version rather than hardcoding
Example fix
# before
provider = ProviderUtils.convert[config['provider']]
# after
provider = ProviderUtils.convert.get(config['provider'])
if provider is None:
raise ConfigError(f"unknown provider {config['provider']}; valid: {list(ProviderUtils.convert.keys())}") Defensive patterns
Strategy: validation
Validate before calling
name = 'SomeProvider'
if name not in ProviderUtils.convert: # __contains__ checks _provider_names
raise ConfigError(f'unknown provider: {name}') Type guard
def is_known_provider(name: str) -> bool:
return name in ProviderUtils.convert Try / catch
provider = ProviderUtils.convert.get(name) # returns None, never raises
if provider is None:
handle_unknown(name) Prevention
- Prefer .get() over [] for map access with external input
- Snapshot valid keys once (list(ProviderUtils.convert.keys())) for config validation
When it happens
Trigger: Indexing the provider map with an unknown name: ProviderUtils.convert['NonExistent'] or __map__['typoName'], including names whose lazy import fails.
Common situations: Dynamically selecting providers from config or user input; config files referencing providers that no longer exist after a g4f upgrade; case mismatches.
Related errors
- Label must be provided
- Provider with label '{label}' not found
- module 'g4f.Provider' has no attribute '{name}'
- Prompt is empty.
- Prompt is empty.
AI-assisted analysis of xtekky/gpt4free@973504e177 (2026-08-14).
Data as JSON: /api/errors/d1a2a4536312a510.
Report an issue: GitHub.