Agent runtimes

Self-hosted agent runtimes — Muse/Dots-style personal agents, chat-ops bots, terminal clients — all let you bring your own OpenAI-compatible endpoint. LivePair covers two of the wires they speak:

Base URL: https://livepairai.com/v1/agent
API key:  lp_…   (Authorization: Bearer — or x-api-key)
Models:   GET /v1/agent/models   (maker-prefixed ids, e.g. deepseek/deepseek-v4.1-flash)

Chat completions work on every runtime below. Image generation works wherever the runtime calls POST …/images/generations. None of these runtimes speak the /videos job shape yet, so video stays a direct-API feature.

nanoMuse

nanoMuse works signed-out with your own key — chat, memory, the hands, and picture/clip tools all run on your providers.

App: Settings → Account → Any OpenAI-compatible endpoint → Add an endpoint → base https://livepairai.com/v1/agent, key lp_…, pick models from the fetched list.

config.toml:

[llm]
model = "deepseek/deepseek-v4.1-flash"
base_url = "https://livepairai.com/v1/agent"
api_key = "${LIVEPAIR_API_KEY}"

A provider = "livepair" catalogue preset (chat + image defaults) is in review upstream — nano-muse/nanoMuse#457. Until it merges, the custom-endpoint form above is equivalent.

OpenDots

OpenDots picks an openai_compatible profile per agent. LivePair's chat surface does not implement response_format, so declare structured_output: "json_object" — the schema rides in the prompt and the runtime still validates output locally:

{"id": "livepair", "kind": "openai_compatible",
 "model": "deepseek/deepseek-v4.1-flash",
 "base_url": "https://livepairai.com/v1/agent",
 "api_key_env": "LIVEPAIR_API_KEY",
 "structured_output": "json_object"}

aichat

config.yaml client entry:

clients:
  - type: openai-compatible
    name: livepair
    api_base: https://livepairai.com/v1/agent
    api_key: xxx                                   # lp_ key

Then aichat -m livepair:deepseek/deepseek-v4.1-flash.

ChatGPT-Telegram-Workers

The plugin system takes a JSON call spec. This one maps a bot command to LivePair image generation — save as plugins/livepair.json:

{
    "url": "https://livepairai.com/v1/agent/images/generations",
    "method": "POST",
    "headers": {
        "Authorization": "Bearer {{ENV.LIVEPAIR_API_KEY}}",
        "Content-Type": "application/json"
    },
    "input": { "type": "text", "required": true },
    "body": {
        "type": "json",
        "content": {
            "model": "{{ENV.LIVEPAIR_MODEL}}",
            "prompt": "{{DATA}}",
            "response_format": "url"
        }
    },
    "response": {
        "content": {
            "input_type": "json",
            "output_type": "image",
            "output": "{{#each item in data}}{{item.url}}{{/each}}"
        },
        "error": {
            "input_type": "json",
            "output_type": "text",
            "output": "Error: {{error.message}}"
        }
    }
}

Set LIVEPAIR_API_KEY and LIVEPAIR_MODEL (a t2i catalog id) in the worker's env.

chatGPT-discord-bot

Two backends — compatible for chat, openai for the image path:

[backends.livepair-chat]
kind = "compatible"
base_url = "https://livepairai.com/v1/agent"
api_key_env = "LIVEPAIR_API_KEY"

[models.livepair-chat]
backend = "livepair-chat"
model = "deepseek/deepseek-v3.2"
capabilities = ["chat"]
parameters = { max_output_tokens = 2048 }

[backends.livepair-image]
kind = "openai"
base_url = "https://livepairai.com/v1/agent"
api_key_env = "LIVEPAIR_API_KEY"

[models.livepair-image]
backend = "livepair-image"
model = "seedream-5.0"
capabilities = ["text-to-image"]
parameters = { size = "1024x1024" }

Only those two wires are mapped — Responses sessions, images/edits, and video are not part of that server's provider model.

Keyless option

Every example above uses an lp_ key. Agents that can sign x402 payments can skip the key entirely — POST /v1/agent/* accepts per-call USDC on Base. See MCP & agent payments.