Peteosdocs

Backends

The ChatBotManager configures which LLM APIs the agent can use. Backends are automatically loaded from peteos.json on import peteos. Manual registration is available for dynamic or runtime scenarios.

Automatic Configuration

Backends are configured by placing a peteos.json file in one of the standard discovery locations described in Configuration. The backends array inside the JSON configures LLM endpoints:

{
    "backends": [
        {
            "name": "production",
            "url": "https://api.openai.com/v1",
            "api_type": "openai",
            "streaming": true,
            "max_tokens": 4096,
            "model_priorities": {
                "gpt-4-turbo": 100,
                "gpt-4": 80
            },
            "retry_delays": [0, 1, 3],
            "timeout": 30
        },
        {
            "name": "local",
            "url": "http://localhost:8000",
            "api_type": "openai"
        }
    ]
}

No Python code is needed — backends are loaded and registered automatically.

Backend Config Fields

Field Type Default Purpose
name string (required) Unique backend identifier.
url string (required) API base URL.
api_type string auto-detected API provider: "openai", "anthropic", or "gemini".
api_key string API key for authentication.
chat_endpoint string API-specific default Custom chat endpoint path (e.g. /chat/completions).
models_endpoint string API-specific default Custom models endpoint path.
streaming bool false Use streaming mode by default.
max_tokens int 4096 Maximum tokens to generate.
model_priorities object {} Map of model IDs to priority integers. Higher values take precedence.
retry_delays float[] [0, 1, 3] Delay in seconds before each retry attempt.
timeout float provider-specific HTTP request timeout in seconds.

Manual Configuration

For dynamic scenarios, you can register backends manually at runtime. The ChatBotManager is a class-method-only singleton — there is exactly one manager shared across the entire application.

Register a Backend by Name and URL

The manager auto-detects the API type (OpenAI, Anthropic, or Gemini) and discovers available models:

from peteos.chatbot.manager import ChatBotManager

await ChatBotManager.add_backend("local", "http://localhost:8000")

You can also specify the API type explicitly to skip auto-detection:

await ChatBotManager.add_backend("anthropic-api", "https://api.anthropic.com", api_type="anthropic")

Load from JSON Programmatically

from peteos.chatbot.manager import ChatBotManager
import asyncio

config = {
    "backends": [
        {"name": "local", "url": "http://localhost:8000"},
        {"name": "gemini", "url": "https://generativelanguage.googleapis.com", "api_type": "gemini"},
    ]
}

await ChatBotManager.load_from_json(config)

load_from_json clears all previously registered backends before loading — it replaces state entirely.

Security

API keys from the configuration are never stored in a way that can be read back from the program. After the backend is set up, the key is removed from all user-accessible runtime data structures. This mitigates the risk of API key exposure through internal data structures via prompt injection attacks.