ChatBotManager
from peteos.chatbot import ChatBotManager
A singleton manager for configuring LLM backends. Use this to register the chatbot provider(s) your agents will use.
Adding a Backend
await ChatBotManager.add_backend("my-backend", "http://localhost:8000")
Adds a new backend by listing models from the provider and creating a ChatBot instance for every model it finds.
| Parameter | Type | Default | Description |
|---|---|---|---|
name |
str |
— | Unique identifier for the backend. |
url |
str |
— | Base URL of the API (e.g., http://localhost:8000). |
api_type |
str | None |
None |
API type override ("openai", "anthropic", or "gemini"). If not provided, auto-detected. |
**kwargs |
— | — | See below for the full list. |
Supported keyword arguments:
| Keyword | Default | Description |
|---|---|---|
api_key |
None |
API authentication key. |
chat_endpoint |
API-specific default | Custom chat endpoint path. |
models_endpoint |
API-specific default | Custom models listing endpoint path. |
streaming |
False |
Use streaming mode by default. |
max_tokens |
4096 |
Maximum tokens to generate. |
retry_delays |
None |
List of delay intervals (in seconds) for retry attempts. |
Returns: A BackendInfo dataclass with detected API type and discovered models.
Raises: ValueError if a backend with the same name already exists.
Loading from JSON
Backends can be configured programmatically or loaded from a JSON file:
await ChatBotManager.load_from_file("config.json")
The JSON format requires name and url for each backend. All other fields are optional. The JSON keys correspond one-to-one with the keyword arguments of add_backend.
Minimal example:
{
"backends": [
{
"name": "my-backend",
"url": "http://localhost:8000"
}
]
}
Full example:
{
"backends": [
{
"name": "my-backend",
"url": "http://localhost:8000",
"api_type": "openai",
"api_key": "sk-...",
"chat_endpoint": "/v1/chat/completions",
"models_endpoint": "/v1/models",
"streaming": false,
"max_tokens": 4096,
"retry_delays": [0.5, 1.0, 2.0]
}
]
}
Removing and Resetting
# Remove a single backend
ChatBotManager.remove_backend("my-backend")
# Clear all backends
ChatBotManager.reset()
Listing Chatbots
bots = ChatBotManager.list_chatbots("gpt-4.*")
# Returns list of (model_id, ChatBot) tuples
| Parameter | Type | Description |
|---|---|---|
model_regex |
str |
Regex pattern to filter model IDs. |
Returns: Sorted list of (model_id, ChatBot) tuples matching the pattern.
BackendInfo
@dataclass
class BackendInfo:
name: str
url: str
api_type: str # "openai" or "anthropic"
models: dict[str, Any] # model_id -> ChatBot instance
Returned by add_backend() and load_from_file() to show which models were discovered.