HKUDS/nanobot · error · ValueError
No API key configured for provider
Error message
No API key configured for provider '{provider_name}'. What it means
Credential guard in _resolve_provider_setup: for anthropic and openai_compat backends (except bedrock-prefixed models, which use AWS credentials) neither the provider config nor the environment supplies an API key. The provider client would fail on first request, so the factory fails fast. This is a sentinel validation raised from the key-exemption check (needs_key/exempt logic).
Solutions
- Set providers.<name>.apiKey in config
- Export the provider's standard key environment variable (e.g. ANTHROPIC_API_KEY, OPENAI_API_KEY)
- If using Bedrock (model prefixed bedrock/), the key is not required — verify the model name prefix is correct
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at nanobot/providers/factory.py:123 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of HKUDS/nanobot@42f37dc4c0 (2026-08-26).
Data as JSON: /api/errors/d92aaf7b9b8c3f6b.
Report an issue: GitHub.
Appendix: source
Thrown at nanobot/providers/factory.py:123
if backend == "azure_openai":
if not p or not p.api_base:
raise ValueError("Azure OpenAI requires api_base in config.")
elif (
backend == "openai_compat"
and spec
and spec.is_direct
and not spec.default_api_base
and not (p and p.api_base)
):
raise ValueError(f"Provider '{provider_name}' requires api_base in config.")
elif backend in {"anthropic", "openai_compat"} and not (
backend == "openai_compat" and model.startswith("bedrock/")
):
needs_key = not (p and p.api_key)
exempt = spec and (spec.is_oauth or spec.is_local or spec.is_direct)
if needs_key and not exempt:
raise ValueError(f"No API key configured for provider '{provider_name}'.")
return _ProviderSetup(
model=model,
provider_name=provider_name,
provider_config=p,
spec=spec,
backend=backend,
)
def validate_provider_setup(
config: Config,
*,
preset_name: str | None = None,
preset: ModelPresetConfig | None = None,
model: str | None = None,
) -> None:
"""Validate local provider/model settings without loading a provider client."""View on GitHub (pinned to 42f37dc4c0)