94 lines
2.4 KiB
Markdown
94 lines
2.4 KiB
Markdown
# How to Configure an OpenAI-Compatible Provider in nanobot
|
|||
|
|
|
||
|
|
nanobot can call OpenAI-compatible model providers by configuring an `apiBase`,
|
||
|
|
optional `apiKey`, and a model preset that references that provider name.
|
||
|
|
|
||
|
|
## What you will build
|
||
|
|
|
||
|
|
- a custom provider entry
|
||
|
|
- a model preset pointing at that provider
|
||
|
|
- one successful `nanobot agent` run
|
||
|
|
|
||
|
|
## When to use this
|
||
|
|
|
||
|
|
Use this for local or hosted services that expose OpenAI-compatible endpoints,
|
||
|
|
including internal gateways, local model servers, and provider proxies that are
|
||
|
|
not already named in nanobot.
|
||
|
|
|
||
|
|
## Install
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python -m pip install nanobot-ai
|
||
|
|
nanobot onboard --wizard
|
||
|
|
```
|
||
|
|
|
||
|
|
Verify the endpoint responds before debugging nanobot:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
curl -sS https://api.example.com/v1/models
|
||
|
|
```
|
||
|
|
|
||
|
|
## Minimal working example
|
||
|
|
|
||
|
|
Merge this into `~/.nanobot/config.json`:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"providers": {
|
||
|
|
"custom": {
|
||
|
|
"apiKey": "${CUSTOM_API_KEY}",
|
||
|
|
"apiBase": "https://api.example.com/v1"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"modelPresets": {
|
||
|
|
"primary": {
|
||
|
|
"label": "Custom",
|
||
|
|
"provider": "custom",
|
||
|
|
"model": "provider-model-name",
|
||
|
|
"maxTokens": 4096,
|
||
|
|
"contextWindowTokens": 65536,
|
||
|
|
"temperature": 0.1
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"agents": {
|
||
|
|
"defaults": {
|
||
|
|
"modelPreset": "primary"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
Then run:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nanobot agent -m "Hello!"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Production notes
|
||
|
|
|
||
|
|
- Include the version path in `apiBase` when the service expects `/v1`.
|
||
|
|
- Use separate provider names for separate endpoints.
|
||
|
|
- Use a placeholder key such as `EMPTY` only when the endpoint requires a
|
||
|
|
non-empty key but does not validate it.
|
||
|
|
- Leave `apiType` unset for OpenAI-compatible custom endpoints.
|
||
|
|
|
||
|
|
## Security notes
|
||
|
|
|
||
|
|
- Keep provider keys in environment variables.
|
||
|
|
- Treat internal model gateways as sensitive network services.
|
||
|
|
- Do not point nanobot at untrusted proxy endpoints for private workspaces.
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
- If `curl /models` fails, fix the provider endpoint before changing nanobot.
|
||
|
|
- If nanobot says the model is unknown, check the model ID expected by the
|
||
|
|
provider.
|
||
|
|
- If auth fails, confirm whether the provider wants Bearer auth and whether the
|
||
|
|
key is present in the environment that starts nanobot.
|
||
|
|
|
||
|
|
## Related nanobot docs
|
||
|
|
|
||
|
|
- [Provider Cookbook: Custom OpenAI-Compatible Provider](../provider-cookbook.md#recipe-custom-openai-compatible-provider)
|
||
|
|
- [Providers: Custom OpenAI-Compatible Endpoint](../providers.md#custom-openai-compatible-endpoint)
|
||
|
|
- [OpenAI-Compatible Agent API](./openai-compatible-agent-api.md)
|