xtekky/gpt4free · error · NotImplementedError
{provider.__name__} does not implement a create method
Error message
{provider.__name__} does not implement a create method What it means
Sync counterpart of the previous error: get_provider_method raises it when the provider class has none of create_completion, create_async_generator, or create_async. The helper wraps whichever exists (including bridging async generators via to_sync_generator); if all three are missing it cannot produce a callable.
Source
Thrown at g4f/providers/base_provider.py:159
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))
return wrapper
raise NotImplementedError(f"{provider.__name__} does not implement a create method")
class AbstractProvider(BaseProvider):
@classmethod
def get_parameters(cls, as_json: bool = False) -> dict[str, Parameter]:
params = {
name: parameter
for name, parameter in signature(
cls.create_async_generator
if issubclass(cls, AsyncGeneratorProvider)
else cls.create_async
if issubclass(cls, AsyncProvider)
else cls.create_completion
).parameters.items()
if name in SAFE_PARAMETERS and (name != "stream" or cls.supports_stream)
}
if as_json:
View on GitHub (pinned to 973504e177)
Solutions
- Implement create_completion(model, messages, **kwargs) for a sync provider
- Or implement create_async_generator and the helper bridges it automatically
- Guard with hasattr(provider, 'create_completion') before routing to the sync path
Example fix
# before
class MyProvider(BaseProvider):
def run(self, model, messages):
...
# after
class MyProvider(BaseProvider):
@staticmethod
def create_completion(model, messages, **kwargs):
yield ... Defensive patterns
Strategy: type-guard
Validate before calling
hooks = ("create_completion", "create_async_generator", "create_async")
assert any(hasattr(provider, h) for h in hooks), "provider implements no create method" Type guard
def is_callable_provider(provider: type) -> bool:
return any(hasattr(provider, h) for h in
("create_completion", "create_async_generator", "create_async")) Try / catch
try:
method = get_provider_method(provider)
except NotImplementedError:
method = None # route to error reporting instead of crashing the caller Prevention
- Use the exact hook names g4f expects; avoid custom names like 'run' or 'generate'
- Validate providers with hasattr checks when loading them dynamically
When it happens
Trigger: Calling get_provider_method(Cls) on a class lacking all three create hooks — e.g. a data-only subclass, a provider defining only deprecated method names, or a mock used in tests.
Common situations: Test doubles that subclass a provider without implementing the create method; renaming methods during refactoring; providers written for a different g4f generation whose method names changed.
Related errors
- {provider.__name__} does not implement an async 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/6b6e58a4e3cbd1de.
Report an issue: GitHub.