Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions docs/compression/COMPRESSION_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,8 @@ Combo: "free-forever"
Compression Combo: "coding-agent-stack"
Pipeline: RTK -> Caveman
Targets:
1. if/kimi-k2-thinking
2. if/qwen3-coder-plus
1. if/kimi-k2.7-code
2. if/qwen3.8-max-preview
```

This lets you use stacked compression on free/coding providers while keeping lite mode on paid
Expand Down Expand Up @@ -283,12 +283,12 @@ Every compressed request includes stats in the server logs:

## Phase Roadmap

| Phase | Modes | Status |
| ------- | -------------------------------------------------------------------- | ---------- |
| Phase 1 | Off, Lite | ✅ Shipped |
| Phase 2 | Standard, Aggressive, Ultra | ✅ Shipped |
| Phase 3 | RTK, Stacked, Compression Combos | ✅ Shipped |
| Phase 4 | Output Styles, SLM-tier Ultra, eval harness | ✅ Shipped |
| Phase | Modes | Status |
| -------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- |
| Phase 1 | Off, Lite | ✅ Shipped |
| Phase 2 | Standard, Aggressive, Ultra | ✅ Shipped |
| Phase 3 | RTK, Stacked, Compression Combos | ✅ Shipped |
| Phase 4 | Output Styles, SLM-tier Ultra, eval harness | ✅ Shipped |
| Phase 4C | Adaptive context-budget ("dial") — compute engine + API (`contextBudget` on `PUT /api/settings/compression`) | ✅ Shipped (API-configurable; dashboard controls not yet built, #7005) |

---
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ omniroute

**Fix:**

- Add fallback: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
- Add fallback: `cc/claude-opus-4-6 → glm/glm-4.7 → if/qwen3.8-max-preview`
- Use GLM/MiniMax as cheap backup

### OAuth Token Expired
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/SETUP_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ omniroute providers validate
```txt
Base URL: http://localhost:20128/v1
API Key: [copy from Endpoint page]
Model: if/kimi-k2-thinking (or any provider/model prefix)
Model: if/qwen3.8-max-preview (or any provider/model prefix)
```

If your editor cannot send `Authorization: Bearer ...`, use the tokenized compatibility base instead:
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ omniroute

**Fix:**

- Add fallback: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
- Add fallback: `cc/claude-opus-4-6 → glm/glm-4.7 → if/qwen3.8-max-preview`
- Use GLM/MiniMax as cheap backup

### OAuth Token Expired
Expand Down
28 changes: 14 additions & 14 deletions docs/guides/USER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Complete guide for configuring providers, creating combos, integrating CLI tools
Combo: "maximize-claude"
1. cc/claude-opus-4-7 (use subscription fully)
2. glm/glm-4.7 (cheap backup when quota out)
3. if/kimi-k2 (free emergency fallback)
3. if/qwen3.8-max-preview (free emergency fallback)

Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
vs. $20 + hitting limits = frustration
Expand All @@ -82,8 +82,8 @@ vs. $20 + hitting limits = frustration

```
Combo: "free-forever"
1. if/kimi-k2 (unlimited free)
2. kr/qwen3-coder-next (free fallback)
1. if/kimi-k2.7-code (unlimited free)
2. kr/qwen3-coder-next (Kiro free fallback)

Monthly cost: $0
Quality: Production-ready models
Expand All @@ -99,7 +99,7 @@ Combo: "always-on"
2. cx/gpt-5.5 (second subscription)
3. glm/glm-4.7 (cheap, resets daily)
4. minimax/MiniMax-M2.1 (cheapest, 5h reset)
5. if/kimi-k2 (free unlimited)
5. if/deepseek-v4-flash (free unlimited)

Result: 5 layers of fallback = zero downtime
Monthly cost: $20-200 (subscriptions) + $10-20 (backup)
Expand All @@ -111,9 +111,9 @@ Monthly cost: $20-200 (subscriptions) + $10-20 (backup)

```
Combo: "openclaw-free"
1. if/qwen3-coder-plus (unlimited free)
2. if/deepseek-r1 (unlimited free)
3. if/kimi-k2 (unlimited free)
1. if/qwen3.8-max-preview (unlimited free)
2. if/deepseek-v4-flash (unlimited free)
3. if/kimi-k2.7-code (unlimited free)

Monthly cost: $0
Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
Expand Down Expand Up @@ -210,12 +210,12 @@ No-auth free providers have a switch beside **No authentication required** on th
Turning it off disables that provider, removes it from Providers configured/compact views, and
removes its models from `/v1/models`.

#### Qoder (8 FREE models)
#### Qoder (9 FREE models)

```bash
Dashboard → Connect Qoder → OAuth login → Unlimited usage

Models: if/kimi-k2, if/qwen3-coder-plus, if/qwen3-max, if/qwen3-235b, if/deepseek-r1, if/deepseek-v3.2
Models: if/qwen3.8-max-preview, if/qwen3.7-max, if/qwen3.7-plus, if/kimi-k3, if/kimi-k2.7-code, if/glm-5.2, if/deepseek-v4-pro, if/deepseek-v4-flash, if/minimax-m3
```

#### Kiro (Claude FREE)
Expand Down Expand Up @@ -251,8 +251,8 @@ Use in CLI: premium-coding
```
Name: free-combo
Models:
1. if/kimi-k2 (unlimited)
2. kr/qwen3-coder-next (free fallback)
1. if/kimi-k2.7-code (unlimited)
2. kr/qwen3-coder-next (Kiro free fallback)

Cost: $0 forever!
```
Expand Down Expand Up @@ -301,7 +301,7 @@ Edit `~/.openclaw/openclaw.json`:
{
"agents": {
"defaults": {
"model": { "primary": "omniroute/if/kimi-k2" }
"model": { "primary": "omniroute/if/kimi-k2.7-code" }
}
},
"models": {
Expand All @@ -310,7 +310,7 @@ Edit `~/.openclaw/openclaw.json`:
"baseUrl": "http://localhost:20128/v1",
"apiKey": "your-omniroute-api-key",
"api": "openai-completions",
"models": [{ "id": "if/kimi-k2", "name": "kimi-k2" }]
"models": [{ "id": "if/kimi-k2.7-code", "name": "Kimi K2.7 Code" }]
}
}
}
Expand Down Expand Up @@ -574,7 +574,7 @@ For the full environment variable reference, see the [README](../README.md).

**Kiro (`kr/`)** — FREE OAuth: `kr/auto-kiro`, `kr/claude-opus-4.7`, `kr/claude-opus-4.6`, `kr/claude-sonnet-4.6`, `kr/claude-sonnet-4.5`, `kr/claude-haiku-4.5`, `kr/deepseek-3.2`, `kr/minimax-m2.5`, `kr/minimax-m2.1`, `kr/glm-5`, `kr/qwen3-coder-next`

**Qoder (`if/`)** — FREE OAuth: `if/kimi-k2-0905`, `if/kimi-k2`, `if/qwen3-coder-plus`, `if/qwen3-max`, `if/qwen3-max-preview`, `if/qwen3-vl-plus`, `if/qwen3-32b`, `if/qwen3-235b-a22b-thinking-2507`, `if/qwen3-235b-a22b-instruct`, `if/qwen3-235b`, `if/deepseek-v3.2`, `if/deepseek-v3`, `if/deepseek-r1`, `if/qoder-rome-30ba3b`
**Qoder (`if/`)** — FREE OAuth: `if/qwen3.8-max-preview`, `if/qwen3.7-max`, `if/qwen3.7-plus`, `if/kimi-k3`, `if/kimi-k2.7-code`, `if/glm-5.2`, `if/deepseek-v4-pro`, `if/deepseek-v4-flash`, `if/minimax-m3`

**GLM (`glm/`, `glm-cn/`, `zai/`, `glmt/`)** — $0.2–0.6/1M: `glm/glm-5.1`, `glm/glm-5`, `glm/glm-5-turbo`, `glm/glm-4.7`, `glm/glm-4.7-flash`, `glm/glm-4.6`, `glm/glm-4.6v`, `glm/glm-4.5`, `glm/glm-4.5v`, `glm/glm-4.5-air`

Expand Down
24 changes: 10 additions & 14 deletions open-sse/config/freeModelCatalog.data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -406,20 +406,16 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
{ provider: "puter", modelId: "perplexity/sonar-pro", displayName: "Perplexity Sonar Pro (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" },
{ provider: "puter", modelId: "perplexity/sonar-reasoning-pro", displayName: "Perplexity Sonar Reasoning Pro (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" },
{ provider: "puter", modelId: "perplexity/sonar", displayName: "Perplexity Sonar (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" },
{ provider: "qoder", modelId: "qoder-rome-30ba3b", displayName: "Qoder ROME", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3-coder-plus", displayName: "Qwen3 Coder Plus", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3-max", displayName: "Qwen3 Max", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3-vl-plus", displayName: "Qwen3 Vision Plus", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "kimi-k2-0905", displayName: "Kimi K2 0905", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3-max-preview", displayName: "Qwen3 Max Preview", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "kimi-k2", displayName: "Kimi K2", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "deepseek-v3.2", displayName: "DeepSeek-V3.2-Exp", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "deepseek-r1", displayName: "DeepSeek R1", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "deepseek-v3", displayName: "DeepSeek V3", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3-32b", displayName: "Qwen3 32B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3-235b-a22b-thinking-2507", displayName: "Qwen3 235B A22B Thinking 2507", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3-235b-a22b-instruct", displayName: "Qwen3 235B A22B Instruct", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3-235b", displayName: "Qwen3 235B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3.8-max-preview", displayName: "Qwen3.8-Max-Preview", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3.7-max", displayName: "Qwen3.7-Max", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "qwen3.7-plus", displayName: "Qwen3.7-Plus", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "kimi-k3", displayName: "Kimi-K3", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "kimi-k2.7-code", displayName: "Kimi-K2.7-Code", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "glm-5.2", displayName: "GLM-5.2", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "deepseek-v4-pro", displayName: "DeepSeek-V4-Pro", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "deepseek-v4-flash", displayName: "DeepSeek-V4-Flash", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qoder", modelId: "minimax-m3", displayName: "MiniMax-M3", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
{ provider: "qwen-web", modelId: "qwen3.8-max-preview", displayName: "Qwen3.8 Max Preview", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3.7-max", displayName: "Qwen3.7 Max", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3.7-plus", displayName: "Qwen3.7 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3.6-plus", displayName: "Qwen3.6 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
Expand Down
76 changes: 60 additions & 16 deletions open-sse/config/providers/registry/qoder/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,65 @@ export const qoderProvider: RegistryEntry = {
authUrl: process.env.QODER_OAUTH_AUTHORIZE_URL || "",
},
models: [
{ id: "qoder-rome-30ba3b", name: "Qoder ROME" },
{ id: "glm-5.2", name: "GLM-5.2" },
{ id: "minimax-m3", name: "MiniMax M3", supportsVision: true },
{ id: "qwen3-coder-plus", name: "Qwen3 Coder Plus" },
{ id: "qwen3-max", name: "Qwen3 Max" },
{ id: "qwen3-vl-plus", name: "Qwen3 Vision Plus", supportsVision: true },
{ id: "kimi-k2-0905", name: "Kimi K2 0905" },
{ id: "qwen3-max-preview", name: "Qwen3 Max Preview" },
{ id: "kimi-k2", name: "Kimi K2" },
{ id: "deepseek-v3.2", name: "DeepSeek-V3.2-Exp" },
{ id: "deepseek-r1", name: "DeepSeek R1" },
{ id: "deepseek-v3", name: "DeepSeek V3" },
{ id: "qwen3-32b", name: "Qwen3 32B" },
{ id: "qwen3-235b-a22b-thinking-2507", name: "Qwen3 235B A22B Thinking 2507" },
{ id: "qwen3-235b-a22b-instruct", name: "Qwen3 235B A22B Instruct" },
{ id: "qwen3-235b", name: "Qwen3 235B" },
{
id: "qwen3.8-max-preview",
name: "Qwen3.8-Max-Preview",
supportsVision: true,
supportsReasoning: true,
contextLength: 1_000_000,
maxInputTokens: 180_000,
},
{
id: "qwen3.7-max",
name: "Qwen3.7-Max",
supportsVision: true,
contextLength: 1_000_000,
},
{
id: "qwen3.7-plus",
name: "Qwen3.7-Plus",
supportsVision: true,
contextLength: 1_000_000,
},
{
id: "kimi-k3",
name: "Kimi-K3",
supportsVision: true,
contextLength: 1_000_000,
maxInputTokens: 180_000,
},
{
id: "kimi-k2.7-code",
name: "Kimi-K2.7-Code",
supportsVision: true,
contextLength: 256_000,
},
{
id: "glm-5.2",
name: "GLM-5.2",
supportsVision: true,
supportsReasoning: true,
contextLength: 1_000_000,
},
{
id: "deepseek-v4-pro",
name: "DeepSeek-V4-Pro",
supportsVision: true,
supportsReasoning: true,
contextLength: 1_000_000,
},
{
id: "deepseek-v4-flash",
name: "DeepSeek-V4-Flash",
supportsVision: true,
supportsReasoning: true,
contextLength: 1_000_000,
},
{
id: "minimax-m3",
name: "MiniMax-M3",
supportsVision: true,
contextLength: 1_000_000,
},
],
};
39 changes: 36 additions & 3 deletions open-sse/config/providers/registry/qwen/web/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,41 @@ export const qwen_webProvider: RegistryEntry = {
// ids (qwen-plus, qwen3-max, ...) still resolve via the executor's
// MODEL_ALIASES map for backward compatibility.
models: [
{ id: "qwen3.7-max", name: "Qwen3.7 Max" },
{ id: "qwen3.7-plus", name: "Qwen3.7 Plus" },
{ id: "qwen3.6-plus", name: "Qwen3.6 Plus" },
{
id: "qwen3.8-max-preview",
name: "Qwen3.8 Max Preview",
toolCalling: true,
supportsReasoning: true,
supportsVision: true,
contextLength: 1_000_000,
maxOutputTokens: 65_536,
},
{
id: "qwen3.7-max",
name: "Qwen3.7 Max",
toolCalling: true,
supportsReasoning: true,
supportsVision: false,
contextLength: 1_000_000,
maxOutputTokens: 65_536,
},
{
id: "qwen3.7-plus",
name: "Qwen3.7 Plus",
toolCalling: true,
supportsReasoning: true,
supportsVision: true,
contextLength: 1_000_000,
maxOutputTokens: 65_536,
},
{
id: "qwen3.6-plus",
name: "Qwen3.6 Plus",
toolCalling: true,
supportsReasoning: true,
supportsVision: true,
contextLength: 1_000_000,
maxOutputTokens: 65_536,
},
],
};
2 changes: 1 addition & 1 deletion open-sse/executors/qoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ export class QoderExecutor extends BaseExecutor {
};
}

const resolvedModel = model || "qwen3-coder-plus";
const resolvedModel = model || "qwen3.8-max-preview";

// Detect token type: PAT (Personal Access Token) starts with "pt-".
// PATs are driven through the local qodercli binary (see executeViaQoderCli);
Expand Down
4 changes: 3 additions & 1 deletion open-sse/executors/qwen-web.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ const MODEL_ALIASES: Record<string, string> = {
};

const DEFAULT_MODEL = "qwen3.7-max";
const REQUIRED_THINKING_MODELS = new Set(["qwen3.8-max-preview"]);

function mapModel(modelId: string): string {
return MODEL_ALIASES[modelId] || modelId;
Expand Down Expand Up @@ -297,7 +298,8 @@ export class QwenWebExecutor extends BaseExecutor {
requestedModel: string
): Record<string, unknown> {
const fid = uuid();
const enableThinking = /think|reason|r1/i.test(requestedModel);
const enableThinking =
REQUIRED_THINKING_MODELS.has(modelId) || /think|reason|r1/i.test(requestedModel);
const featureConfig: Record<string, unknown> = {
thinking_enabled: enableThinking,
output_schema: "phase",
Expand Down
Loading
Loading