xtekky/gpt4free · error · NotImplementedError
{provider.__name__} does not implement an async method
Error message
{provider.__name__} does not implement an async method What it means
Raised by get_async_provider_method when the provider class implements none of the hooks it looks for: create_async_generator, create_async, or create_completion. The function's whole purpose is to adapt whichever method exists into an async generator; with none present there is nothing to adapt, so it raises NotImplementedError naming the class.
Source
Thrown at g4f/providers/base_provider.py:138
def get_async_provider_method(provider: type) -> Optional[callable]:
if hasattr(provider, "create_async_generator"):
return provider.create_async_generator
if hasattr(provider, "create_async"):
async def wrapper(*args, **kwargs):
yield await provider.create_async(*args, **kwargs)
return wrapper
if hasattr(provider, "create_completion"):
async def wrapper(*args, **kwargs):
for chunk in provider.create_completion(*args, **kwargs):
yield chunk
return wrapper
raise NotImplementedError(f"{provider.__name__} does not implement an async method")
def get_provider_method(provider: type) -> Optional[callable]:
if hasattr(provider, "create_completion"):
return provider.create_completion
if hasattr(provider, "create_async_generator"):
def wrapper(*args, **kwargs):
return to_sync_generator(
provider.create_async_generator(*args, **kwargs),
stream=provider.supports_stream,
)
return wrapper
if hasattr(provider, "create_async"):
def wrapper(*args, **kwargs):
yield asyncio.run(provider.create_async(*args, **kwargs))View on GitHub (pinned to 973504e177)
Solutions
- Implement create_async_generator(model, messages, **kwargs) on the class — the canonical hook
- Alternatively implement create_async or create_completion and the helper will wrap it
- Check for typos/renames in the method definition (exact names are required)
Example fix
# before
class MyProvider(AsyncGeneratorProvider):
def generate(self, model, messages, **kwargs):
...
# after
class MyProvider(AsyncGeneratorProvider):
@staticmethod
async def create_async_generator(model, messages, **kwargs):
yield ... Defensive patterns
Strategy: type-guard
Validate before calling
hooks = ("create_async_generator", "create_async", "create_completion")
assert any(hasattr(provider, h) for h in hooks), "provider implements no create hook" Type guard
def is_async_callable_provider(provider: type) -> bool:
return any(hasattr(provider, h) for h in
("create_async_generator", "create_async", "create_completion")) Try / catch
try:
method = get_async_provider_method(provider)
except NotImplementedError:
method = None # skip or report unsupported provider Prevention
- Implement create_async_generator on every custom provider
- Unit-test that get_async_provider_method(cls) returns a callable for each provider you ship
When it happens
Trigger: Calling get_async_provider_method(CustomProvider) where CustomProvider subclasses a g4f provider base but defines no create_async_generator, create_async, or create_completion — e.g. only get_quota or only helper attributes were implemented.
Common situations: Half-finished custom providers (PA or local) where the create method was renamed or never written; refactors renaming create to something else; providers that implement only the sync 'create' name which this helper does not check.
Related errors
- {provider.__name__} does not implement a create method
- {cls.__name__} does not implement get_quota method
- {e}. Ask for help in the {cls.login_url} Discord server.
- {message}: {model}
- Device authorization error: {resp_json.get('error')} - {resp
AI-assisted analysis of xtekky/gpt4free@973504e177 (2026-08-14).
Data as JSON: /api/errors/a79d9c053c567a00.
Report an issue: GitHub.