Skip to content
Open
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
1 change: 1 addition & 0 deletions .github/workflows/model-discovery.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ jobs:
# Only secrets present in repository settings become configured
# provider credentials. Scope them to this step so checkout, setup,
# and npm lifecycle scripts never receive provider keys.
AIMLAPI_API_KEY: ${{ secrets.AIMLAPI_API_KEY }}
AINETCAFE_API_KEY: ${{ secrets.AINETCAFE_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
Expand Down
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,18 @@ Linux installations support the Codex CLI.

| Picker label | Model ID | Authentication |
| --- | --- | --- |
| GPT-6.1 Sol (AI/ML API) | `aimlapi/gpt-6.1-sol` | AI/ML API key (`AIMLAPI_API_KEY`) |
| GPT-6 Sol (AI/ML API) | `aimlapi/gpt-6-sol` | AI/ML API key (`AIMLAPI_API_KEY`) |
| GPT-6 Luna (AI/ML API) | `aimlapi/gpt-6-luna` | AI/ML API key (`AIMLAPI_API_KEY`) |
| Claude Opus 5.5 (AI/ML API) | `aimlapi/claude-opus-5.5` | AI/ML API key (`AIMLAPI_API_KEY`) |
| Claude Sonnet 5.5 (AI/ML API) | `aimlapi/claude-sonnet-5.5` | AI/ML API key (`AIMLAPI_API_KEY`) |
| Claude Sonnet 5 (AI/ML API) | `aimlapi/claude-sonnet-5` | AI/ML API key (`AIMLAPI_API_KEY`) |
| Gemini 3.8 Flash (AI/ML API) | `aimlapi/gemini-3.8-flash` | AI/ML API key (`AIMLAPI_API_KEY`) |
| DeepSeek V4.1 Flash (AI/ML API) | `aimlapi/deepseek-v4.1-flash` | AI/ML API key (`AIMLAPI_API_KEY`) |
| GLM 5.2 (AI/ML API) | `aimlapi/glm-5.2` | AI/ML API key (`AIMLAPI_API_KEY`) |
| Kimi K3 (AI/ML API) | `aimlapi/kimi-k3` | AI/ML API key (`AIMLAPI_API_KEY`) |
| Grok 4.7 (AI/ML API) | `aimlapi/grok-4.7` | AI/ML API key (`AIMLAPI_API_KEY`) |
| Qwen3.7 Max (AI/ML API) | `aimlapi/qwen3.7-max` | AI/ML API key (`AIMLAPI_API_KEY`) |
| K2.7 Coding Highspeed (OAuth) | `kimi-oauth/kimi-for-coding-highspeed` | Existing Kimi Code CLI OAuth session |
| K2.7 Coding (OAuth) | `kimi-oauth/kimi-for-coding` | Existing Kimi Code CLI OAuth session |
| Kimi K3 (OAuth) | `kimi-oauth/k3` | Existing Kimi Code CLI OAuth session |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ blue accent and DeepSeek's original blue mark are preserved.
| NanoGPT | https://nano-gpt.com/ | https://nano-gpt.com/favicon.ico (same official diamond mark as https://nano-gpt.com/logo.png) |
| Google Cloud Vertex AI | https://cloud.google.com/vertex-ai/ | https://www.google.com/s2/favicons?domain=cloud.google.com&sz=128 (Google mark, bundled as `google.svg`) |
| StepFun | https://www.stepfun.com/ | https://www.stepfun.com/step_favicon.svg |
| AI/ML API | https://aimlapi.com/ | Official hexagon mark from the AI/ML API app (`sidebar-logo.svg`) |

The Z.AI, Qwen, Ollama, Cline, MiniMax, and Meta AI marks were fetched on
2026-08-15. The Venice, Nous Research, and OpenRouter marks were fetched on
Expand Down
4 changes: 3 additions & 1 deletion apps/macos/ModelRouterTray/Sources/IslandOverlay.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1085,6 +1085,7 @@ struct ProviderIcon: View {
if providerID == "venice" { return "venice" }
if providerID == "nousresearch" { return "nousresearch" }
if providerID == "openrouter" { return "openrouter" }
if providerID == "aimlapi" { return "aimlapi" }
if providerID == "nano-gpt" { return "nano-gpt" }
// opencode-free plus the opencode-go API/Messages/Responses routes.
if providerID.hasPrefix("opencode") { return "opencode-free" }
Expand All @@ -1104,7 +1105,7 @@ struct ProviderIcon: View {
private var assetExtension: String {
// Keyed off the asset, not the provider id, so every route sharing a mark
// (opencode-go and friends) resolves the same file type.
["github-copilot", "chutes", "google", "opencode-free", "kilo-free", "nano-gpt", "stepfun"]
["aimlapi", "github-copilot", "chutes", "google", "opencode-free", "kilo-free", "nano-gpt", "stepfun"]
.contains(assetName ?? "") ? "svg" : "png"
}

Expand All @@ -1125,6 +1126,7 @@ struct ProviderIcon: View {
if providerID == "venice" { return "Venice" }
if providerID == "nousresearch" { return "Nous Research" }
if providerID == "openrouter" { return "OpenRouter" }
if providerID == "aimlapi" { return "AI/ML API" }
if providerID == "nano-gpt" { return "NanoGPT" }
if providerID == "opencode-free" { return "OpenCode Free" }
if providerID == "kilo-free" { return "Kilo Free" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1624,6 +1624,7 @@ final class RouterStore: ObservableObject {
"orca": "OrcaRouter",
"venice": "Venice",
"nousresearch": "Nous",
"aimlapi": "AI/ML API",
"openrouter": "OpenRouter",
]

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions config/aimlapi/aimlapi.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"version": 1,
"providers": [
{
"id": "aimlapi",
"displayName": "AI/ML API",
"kind": "openai-compatible",
"ownedBy": "aimlapi",
"baseUrl": "https://api.aimlapi.com/v1",
"baseUrlEnv": "AIMLAPI_API_BASE_URL",
"credential": {
"environment": [
"AIMLAPI_API_KEY"
],
"file": "aimlapi-api-key.secret",
"legacyFiles": [],
"keychainServices": [
"codex-router-aimlapi"
],
"prompt": "AI/ML API key"
}
}
]
}
45 changes: 45 additions & 0 deletions config/aimlapi/claude-opus-5.5.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"version": 1,
"models": [
{
"slug": "aimlapi/claude-opus-5.5",
"gatewayModel": "aimlapi-claude-opus-5-5",
"upstreamModel": "anthropic/claude-opus-5.5",
"provider": "aimlapi",
"listed": true,
"displayName": "Claude Opus 5.5 (AI/ML API)",
"description": "Anthropic Claude Opus 5.5 through AI/ML API's OpenAI-compatible surface; the full effort ladder up to max.",
"priority": 4,
"defaultEffort": "high",
"reasoningLevels": [
{
"effort": "low",
"description": "Faster reasoning"
},
{
"effort": "medium",
"description": "Balanced reasoning"
},
{
"effort": "high",
"description": "Deep reasoning"
},
{
"effort": "xhigh",
"description": "Extra deep reasoning"
},
{
"effort": "max",
"description": "Maximum reasoning depth"
}
],
"contextWindow": 1000000,
"autoCompact": 900000,
"inputModalities": [
"text",
"image"
],
"compHash": "aimlapi-claude-opus-5-5-v1"
}
]
}
45 changes: 45 additions & 0 deletions config/aimlapi/claude-sonnet-5.5.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"version": 1,
"models": [
{
"slug": "aimlapi/claude-sonnet-5.5",
"gatewayModel": "aimlapi-claude-sonnet-5-5",
"upstreamModel": "anthropic/claude-sonnet-5.5",
"provider": "aimlapi",
"listed": true,
"displayName": "Claude Sonnet 5.5 (AI/ML API)",
"description": "Anthropic Claude Sonnet 5.5 through AI/ML API; the current Sonnet, full effort ladder up to max.",
"priority": 5,
"defaultEffort": "high",
"reasoningLevels": [
{
"effort": "low",
"description": "Faster reasoning"
},
{
"effort": "medium",
"description": "Balanced reasoning"
},
{
"effort": "high",
"description": "Deep reasoning"
},
{
"effort": "xhigh",
"description": "Extra deep reasoning"
},
{
"effort": "max",
"description": "Maximum reasoning depth"
}
],
"contextWindow": 1000000,
"autoCompact": 900000,
"inputModalities": [
"text",
"image"
],
"compHash": "aimlapi-claude-sonnet-5-5-v1"
}
]
}
45 changes: 45 additions & 0 deletions config/aimlapi/claude-sonnet-5.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"version": 1,
"models": [
{
"slug": "aimlapi/claude-sonnet-5",
"gatewayModel": "aimlapi-claude-sonnet-5",
"upstreamModel": "anthropic/claude-sonnet-5",
"provider": "aimlapi",
"listed": true,
"displayName": "Claude Sonnet 5 (AI/ML API)",
"description": "Anthropic Claude Sonnet 5 through AI/ML API; balanced coding model with the full effort ladder.",
"priority": 6,
"defaultEffort": "high",
"reasoningLevels": [
{
"effort": "low",
"description": "Faster reasoning"
},
{
"effort": "medium",
"description": "Balanced reasoning"
},
{
"effort": "high",
"description": "Deep reasoning"
},
{
"effort": "xhigh",
"description": "Extra deep reasoning"
},
{
"effort": "max",
"description": "Maximum reasoning depth"
}
],
"contextWindow": 1000000,
"autoCompact": 900000,
"inputModalities": [
"text",
"image"
],
"compHash": "aimlapi-claude-sonnet-5-v1"
}
]
}
37 changes: 37 additions & 0 deletions config/aimlapi/deepseek-v4.1-flash.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"version": 1,
"models": [
{
"slug": "aimlapi/deepseek-v4.1-flash",
"gatewayModel": "aimlapi-deepseek-v4-1-flash",
"upstreamModel": "deepseek/deepseek-v4.1-flash",
"provider": "aimlapi",
"listed": true,
"displayName": "DeepSeek V4.1 Flash (AI/ML API)",
"description": "DeepSeek V4.1 Flash through AI/ML API; fast reasoning with tool calls and image understanding.",
"priority": 8,
"defaultEffort": "high",
"reasoningLevels": [
{
"effort": "low",
"description": "Faster reasoning"
},
{
"effort": "medium",
"description": "Balanced reasoning"
},
{
"effort": "high",
"description": "Deep reasoning"
}
],
"contextWindow": 1048576,
"autoCompact": 900000,
"inputModalities": [
"text",
"image"
],
"compHash": "aimlapi-deepseek-v4-1-flash-v1"
}
]
}
41 changes: 41 additions & 0 deletions config/aimlapi/gemini-3.8-flash.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"version": 1,
"models": [
{
"slug": "aimlapi/gemini-3.8-flash",
"gatewayModel": "aimlapi-gemini-3-8-flash",
"upstreamModel": "google/gemini-3.8-flash",
"provider": "aimlapi",
"listed": true,
"displayName": "Gemini 3.8 Flash (AI/ML API)",
"description": "Google Gemini 3.8 Flash through AI/ML API; 1M context, text and image input. Rejects xhigh, accepts max.",
"priority": 7,
"defaultEffort": "high",
"reasoningLevels": [
{
"effort": "low",
"description": "Faster reasoning"
},
{
"effort": "medium",
"description": "Balanced reasoning"
},
{
"effort": "high",
"description": "Deep reasoning"
},
{
"effort": "max",
"description": "Maximum reasoning depth"
}
],
"contextWindow": 1048576,
"autoCompact": 900000,
"inputModalities": [
"text",
"image"
],
"compHash": "aimlapi-gemini-3-8-flash-v1"
}
]
}
48 changes: 48 additions & 0 deletions config/aimlapi/glm-5.2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"version": 1,
"models": [
{
"slug": "aimlapi/glm-5.2",
"gatewayModel": "aimlapi-glm-5-2",
"upstreamModel": "zhipu/glm-5.2",
"provider": "aimlapi",
"listed": true,
"displayName": "GLM 5.2 (AI/ML API)",
"description": "Zhipu GLM 5.2 through AI/ML API; text only on this route, and the only model here that accepts every effort level.",
"priority": 9,
"defaultEffort": "high",
"reasoningLevels": [
{
"effort": "minimal",
"description": "Minimal reasoning"
},
{
"effort": "low",
"description": "Faster reasoning"
},
{
"effort": "medium",
"description": "Balanced reasoning"
},
{
"effort": "high",
"description": "Deep reasoning"
},
{
"effort": "xhigh",
"description": "Extra deep reasoning"
},
{
"effort": "max",
"description": "Maximum reasoning depth"
}
],
"contextWindow": 1000000,
"autoCompact": 900000,
"inputModalities": [
"text"
],
"compHash": "aimlapi-glm-5-2-v1"
}
]
}
Loading
Loading