diff --git a/demos/llm_routing/openclaw_routing/README.md b/demos/llm_routing/openclaw_routing/README.md index 3bee862a..77088ec2 100644 --- a/demos/llm_routing/openclaw_routing/README.md +++ b/demos/llm_routing/openclaw_routing/README.md @@ -44,38 +44,39 @@ planoai up --service plano --foreground ### 3. Set Up OpenClaw -If you haven't installed OpenClaw yet: +Install OpenClaw (requires Node >= 22): + +```bash +npm install -g openclaw@latest +``` + +Install the gateway daemon and connect your messaging channels: ```bash -npm install -g openclaw@latest # requires Node >= 22 openclaw onboard --install-daemon ``` -The onboarding wizard will walk you through connecting your messaging channels (WhatsApp, Telegram, Slack, Discord, etc.) and install the gateway as a background service. +This installs the gateway as a background service (launchd on macOS, systemd on Linux). To connect messaging channels like WhatsApp or Telegram, see the [OpenClaw channel setup docs](https://docs.openclaw.ai/gateway/configuration). Run `openclaw doctor` to verify everything is working. ### 4. Point OpenClaw at Plano -Edit `~/.openclaw/openclaw.json` to route all LLM requests through Plano: +During the OpenClaw onboarding wizard, when prompted to choose an LLM provider: -```json -{ - "agent": { - "model": "kimi-k2.5", - "baseURL": "http://127.0.0.1:12000/v1" - } -} -``` +1. Select **Custom OpenAI-compatible** as the provider +2. Set the base URL to `http://127.0.0.1:12000/v1` +3. Enter any value for the API key (e.g. `none`) — Plano handles auth to the actual providers +4. Set the context window to at least `128000` tokens -Then restart the gateway to pick up the change: +This registers Plano as OpenClaw's LLM backend. All requests go through Plano on port 12000, which routes them to Kimi K2.5 or Claude based on the prompt content. + +If you've already onboarded, re-run the wizard to update the provider: ```bash openclaw onboard --install-daemon ``` -That's it — OpenClaw now sends all LLM requests to Plano on port 12000, and Plano routes them to the best model based on the prompt content. - ### 5. Test Routing Through OpenClaw Send messages through any connected channel (WhatsApp, Telegram, Slack, etc.) and watch routing decisions in a separate terminal: diff --git a/demos/llm_routing/openclaw_routing/config.yaml b/demos/llm_routing/openclaw_routing/config.yaml index a16a9d38..b94dbd7f 100644 --- a/demos/llm_routing/openclaw_routing/config.yaml +++ b/demos/llm_routing/openclaw_routing/config.yaml @@ -1,11 +1,17 @@ -version: v0.3.0 +version: v0.1.0 + +routing: + model: Arch-Router + llm_provider: arch-router listeners: - - type: model - name: model_listener + egress_traffic: + address: 0.0.0.0 port: 12000 + message_format: openai + timeout: 30s -model_providers: +llm_providers: # Kimi K2.5 — Moonshot AI's open model (1T MoE, 32B active params) # Great for general conversation, agentic tasks, and multimodal work @@ -15,22 +21,13 @@ model_providers: base_url: https://api.moonshot.ai/v1 default: true routing_preferences: - - name: general conversation - description: general chat, greetings, casual conversation, Q&A, and everyday questions - - name: agentic tasks - description: coordinating multi-step workflows, device automation, scheduling, and task orchestration across channels + - name: code generation + description: generating code, writing scripts, implementing functions, and building tool integrations # Claude — Anthropic's most capable model # Best for complex reasoning, code, tool use, and evaluation - model: anthropic/claude-sonnet-4-5 access_key: $ANTHROPIC_API_KEY routing_preferences: - - name: testing and evaluation - description: writing tests, running evaluations, QA checks, verifying correctness, and debugging failures - - name: code generation - description: generating code, writing scripts, implementing functions, and building tool integrations - - name: complex reasoning - description: multi-step analysis, planning, architectural decisions, and deep problem-solving - -tracing: - random_sampling: 100 + - name: general conversation + description: general chat, greetings, casual conversation, Q&A, and everyday questions