Compare commits

..

8 Commits

Author SHA1 Message Date
Ralph Khreish
2df4f13f65 chore: improve pre-release CI to be able to release more than one release candidate (#1036)
* chore: improve pre-release CI to be able to release more than one release candidate

* chore: implement requested changes from coderabbit

* chore: apply requested changes
2025-07-23 18:28:17 +02:00
github-actions[bot]
a37017e5a5 docs: Auto-update and format models.md 2025-07-23 16:03:40 +00:00
Ralph Khreish
fb7d588137 feat: improve config-manager max tokens for openrouter and kimi-k2 model (#1035) 2025-07-23 18:03:26 +02:00
Ralph Khreish
bdb11fb2db chore: remove useless file 2025-07-23 18:04:13 +03:00
Ralph Khreish
4423119a5e feat: Add Kiro hooks and configuration for Taskmaster integration (#1032)
* feat: Add Kiro hooks and configuration for Taskmaster integration

- Introduced multiple Kiro hooks to automate task management workflows, including:
  - Code Change Task Tracker
  - Complexity Analyzer
  - Daily Standup Assistant
  - Git Commit Task Linker
  - Import Cleanup on Delete
  - New File Boilerplate
  - PR Readiness Checker
  - Task Dependency Auto-Progression
  - Test Success Task Completer
- Added .mcp.json configuration for Taskmaster AI integration.
- Updated development workflow documentation to reflect new hook-driven processes and best practices.

This commit enhances the automation capabilities of Taskmaster, streamlining task management and improving developer efficiency.

* chore: run format

* chore: improve unit tests on kiro rules

* chore: run format

* chore: run format

* feat: improve PR and add changeset
2025-07-23 17:02:16 +02:00
Ben Vargas
7b90568326 fix: bump ai-sdk-provider-gemini-cli to v0.1.1 (#1033)
* fix: bump ai-sdk-provider-gemini-cli to v0.1.1

Updates ai-sdk-provider-gemini-cli from v0.0.4 to v0.1.1 to fix a breaking change
introduced in @google/gemini-cli-core v0.1.12+ where createContentGeneratorConfig
signature changed, causing "config.getModel is not a function" errors.

The new version includes:
- Fixed compatibility with @google/gemini-cli-core ^0.1.13
- Added proxy support via configuration
- Resolved the breaking API change

Fixes compatibility issues when using newer versions of gemini-cli-core.

See: https://github.com/ben-vargas/ai-sdk-provider-gemini-cli/releases/tag/v0.1.1

* chore: fix package-lock.json being too big

---------

Co-authored-by: Ben Vargas <ben@example.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
2025-07-23 17:01:59 +02:00
github-actions[bot]
9b0630fdf1 docs: Auto-update and format models.md 2025-07-22 18:15:35 +00:00
Parthy
ced04bddd3 docs(models): update model configuration to add supported field (#1030) 2025-07-22 20:15:22 +02:00
10 changed files with 384 additions and 185 deletions

View File

@@ -0,0 +1,5 @@
---
"task-master-ai": patch
---
Fix compatibility with @google/gemini-cli-core v0.1.12+ by updating ai-sdk-provider-gemini-cli to v0.1.1.

View File

@@ -0,0 +1,10 @@
---
"task-master-ai": patch
---
Fix max_tokens limits for OpenRouter and Groq models
- Add special handling in config-manager.js for custom OpenRouter models to use a conservative default of 32,768 max_tokens
- Update qwen/qwen-turbo model max_tokens from 1,000,000 to 32,768 to match OpenRouter's actual limits
- Fix moonshotai/kimi-k2-instruct max_tokens to 16,384 to match Groq's actual limit (fixes #1028)
- This prevents "maximum context length exceeded" errors when using OpenRouter models not in our supported models list

View File

@@ -16,7 +16,7 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
cache: "npm"
- name: Cache node_modules
uses: actions/cache@v4
@@ -32,10 +32,13 @@ jobs:
run: npm ci
timeout-minutes: 2
- name: Enter RC mode
- name: Enter RC mode (if not already in RC mode)
run: |
npx changeset pre exit || true
npx changeset pre enter rc
# ensure were in the right pre-mode (tag "rc")
if [ ! -f .changeset/pre.json ] \
|| [ "$(jq -r '.tag' .changeset/pre.json 2>/dev/null || echo '')" != "rc" ]; then
npx changeset pre enter rc
fi
- name: Version RC packages
run: npx changeset version
@@ -51,12 +54,9 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Exit RC mode
run: npx changeset pre exit
- name: Commit & Push changes
uses: actions-js/push@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref }}
message: 'chore: rc version bump'
message: "chore: rc version bump"

View File

@@ -1,3 +0,0 @@
Testing rules that you can help me improve to see how it works<!------------------------------------------------------------------------------------
Add Rules to this file or a short description and have Kiro refine them for you:
------------------------------------------------------------------------------------->

View File

@@ -1,4 +1,4 @@
# Available Models as of July 19, 2025
# Available Models as of July 23, 2025
## Main Models
@@ -48,7 +48,6 @@
| openrouter | google/gemini-2.5-flash-preview-05-20 | — | 0.15 | 0.6 |
| openrouter | google/gemini-2.5-flash-preview-05-20:thinking | — | 0.15 | 3.5 |
| openrouter | google/gemini-2.5-pro-exp-03-25 | — | 0 | 0 |
| openrouter | deepseek/deepseek-chat-v3-0324:free | — | 0 | 0 |
| openrouter | deepseek/deepseek-chat-v3-0324 | — | 0.27 | 1.1 |
| openrouter | openai/gpt-4.1 | — | 2 | 8 |
| openrouter | openai/gpt-4.1-mini | — | 0.4 | 1.6 |
@@ -65,11 +64,9 @@
| openrouter | qwen/qwen-max | — | 1.6 | 6.4 |
| openrouter | qwen/qwen-turbo | — | 0.05 | 0.2 |
| openrouter | qwen/qwen3-235b-a22b | — | 0.14 | 2 |
| openrouter | mistralai/mistral-small-3.1-24b-instruct:free | — | 0 | 0 |
| openrouter | mistralai/mistral-small-3.1-24b-instruct | — | 0.1 | 0.3 |
| openrouter | mistralai/devstral-small | — | 0.1 | 0.3 |
| openrouter | mistralai/mistral-nemo | — | 0.03 | 0.07 |
| openrouter | thudm/glm-4-32b:free | — | 0 | 0 |
| ollama | devstral:latest | — | 0 | 0 |
| ollama | qwen3:latest | — | 0 | 0 |
| ollama | qwen3:14b | — | 0 | 0 |
@@ -158,7 +155,6 @@
| openrouter | google/gemini-2.5-flash-preview-05-20 | — | 0.15 | 0.6 |
| openrouter | google/gemini-2.5-flash-preview-05-20:thinking | — | 0.15 | 3.5 |
| openrouter | google/gemini-2.5-pro-exp-03-25 | — | 0 | 0 |
| openrouter | deepseek/deepseek-chat-v3-0324:free | — | 0 | 0 |
| openrouter | openai/gpt-4.1 | — | 2 | 8 |
| openrouter | openai/gpt-4.1-mini | — | 0.4 | 1.6 |
| openrouter | openai/gpt-4.1-nano | — | 0.1 | 0.4 |
@@ -174,10 +170,8 @@
| openrouter | qwen/qwen-max | — | 1.6 | 6.4 |
| openrouter | qwen/qwen-turbo | — | 0.05 | 0.2 |
| openrouter | qwen/qwen3-235b-a22b | — | 0.14 | 2 |
| openrouter | mistralai/mistral-small-3.1-24b-instruct:free | — | 0 | 0 |
| openrouter | mistralai/mistral-small-3.1-24b-instruct | — | 0.1 | 0.3 |
| openrouter | mistralai/mistral-nemo | — | 0.03 | 0.07 |
| openrouter | thudm/glm-4-32b:free | — | 0 | 0 |
| ollama | devstral:latest | — | 0 | 0 |
| ollama | qwen3:latest | — | 0 | 0 |
| ollama | qwen3:14b | — | 0 | 0 |
@@ -196,3 +190,11 @@
| bedrock | us.anthropic.claude-3-5-haiku-20241022-v1:0 | 0.4 | 0.8 | 4 |
| bedrock | us.anthropic.claude-opus-4-20250514-v1:0 | 0.725 | 15 | 75 |
| bedrock | us.anthropic.claude-sonnet-4-20250514-v1:0 | 0.727 | 3 | 15 |
## Unsupported Models
| Provider | Model Name | Reason |
| ---------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| openrouter | deepseek/deepseek-chat-v3-0324:free | Free OpenRouter models are not supported due to severe rate limits, lack of tool use support, and other reliability issues that make them impractical for production use. |
| openrouter | mistralai/mistral-small-3.1-24b-instruct:free | Free OpenRouter models are not supported due to severe rate limits, lack of tool use support, and other reliability issues that make them impractical for production use. |
| openrouter | thudm/glm-4-32b:free | Free OpenRouter models are not supported due to severe rate limits, lack of tool use support, and other reliability issues that make them impractical for production use. |

View File

@@ -47,6 +47,20 @@ function generateMarkdownTable(title, models) {
return table;
}
function generateUnsupportedTable(models) {
if (!models || models.length === 0) {
return '## Unsupported Models\n\nNo unsupported models found.\n\n';
}
let table = '## Unsupported Models\n\n';
table += '| Provider | Model Name | Reason |\n';
table += '|---|---|---|\n';
models.forEach((model) => {
table += `| ${model.provider} | ${model.modelName} | ${model.reason || '—'} |\n`;
});
table += '\n';
return table;
}
function main() {
try {
const correctSupportedModelsPath = path.join(
@@ -68,31 +82,46 @@ function main() {
const mainModels = [];
const researchModels = [];
const fallbackModels = [];
const unsupportedModels = [];
for (const provider in supportedModels) {
if (Object.hasOwnProperty.call(supportedModels, provider)) {
const models = supportedModels[provider];
models.forEach((model) => {
const modelEntry = {
provider: provider,
modelName: model.id,
sweScore: model.swe_score,
inputCost: model.cost_per_1m_tokens
? model.cost_per_1m_tokens.input
: null,
outputCost: model.cost_per_1m_tokens
? model.cost_per_1m_tokens.output
: null
};
if (model.allowed_roles.includes('main')) {
mainModels.push(modelEntry);
}
if (model.allowed_roles.includes('research')) {
researchModels.push(modelEntry);
}
if (model.allowed_roles.includes('fallback')) {
fallbackModels.push(modelEntry);
const isSupported = model.supported !== false; // default to true if missing
if (isSupported) {
const modelEntry = {
provider: provider,
modelName: model.id,
sweScore: model.swe_score,
inputCost: model.cost_per_1m_tokens
? model.cost_per_1m_tokens.input
: null,
outputCost: model.cost_per_1m_tokens
? model.cost_per_1m_tokens.output
: null
};
if (model.allowed_roles && model.allowed_roles.includes('main')) {
mainModels.push(modelEntry);
}
if (
model.allowed_roles &&
model.allowed_roles.includes('research')
) {
researchModels.push(modelEntry);
}
if (
model.allowed_roles &&
model.allowed_roles.includes('fallback')
) {
fallbackModels.push(modelEntry);
}
} else {
unsupportedModels.push({
provider: provider,
modelName: model.id,
reason: model.reason || 'Not specified'
});
}
});
}
@@ -119,6 +148,7 @@ function main() {
markdownContent += generateMarkdownTable('Main Models', mainModels);
markdownContent += generateMarkdownTable('Research Models', researchModels);
markdownContent += generateMarkdownTable('Fallback Models', fallbackModels);
markdownContent += generateUnsupportedTable(unsupportedModels);
fs.writeFileSync(correctOutputMarkdownPath, markdownContent, 'utf8');
console.log(`Successfully updated ${correctOutputMarkdownPath}`);

96
package-lock.json generated
View File

@@ -81,7 +81,7 @@
"optionalDependencies": {
"@anthropic-ai/claude-code": "^1.0.25",
"@biomejs/cli-linux-x64": "^1.9.4",
"ai-sdk-provider-gemini-cli": "^0.0.4"
"ai-sdk-provider-gemini-cli": "^0.1.1"
}
},
"apps/extension": {
@@ -2065,12 +2065,12 @@
}
},
"node_modules/@google/gemini-cli-core": {
"version": "0.1.9",
"resolved": "https://registry.npmjs.org/@google/gemini-cli-core/-/gemini-cli-core-0.1.9.tgz",
"integrity": "sha512-NFmu0qivppBZ3JT6to0A2+tEtcvWcWuhbfyTz42Wm2AoAtl941lTbcd/TiBryK0yWz3WCkqukuDxl+L7axLpvA==",
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/@google/gemini-cli-core/-/gemini-cli-core-0.1.13.tgz",
"integrity": "sha512-Vx3CbRpLJiGs/sj4SXlGH2ALKyON5skV/p+SCAoRuS6yRsANS1+diEeXbp6jlWT2TTiGoa8+GolqeNIU7wbN8w==",
"optional": true,
"dependencies": {
"@google/genai": "^1.4.0",
"@google/genai": "1.9.0",
"@modelcontextprotocol/sdk": "^1.11.0",
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/exporter-logs-otlp-grpc": "^0.52.0",
@@ -2080,23 +2080,46 @@
"@opentelemetry/sdk-node": "^0.52.0",
"@types/glob": "^8.1.0",
"@types/html-to-text": "^9.0.4",
"ajv": "^8.17.1",
"diff": "^7.0.0",
"dotenv": "^16.6.1",
"gaxios": "^6.1.1",
"dotenv": "^17.1.0",
"glob": "^10.4.5",
"google-auth-library": "^9.11.0",
"html-to-text": "^9.0.5",
"https-proxy-agent": "^7.0.6",
"ignore": "^7.0.0",
"micromatch": "^4.0.8",
"open": "^10.1.2",
"shell-quote": "^1.8.2",
"shell-quote": "^1.8.3",
"simple-git": "^3.28.0",
"strip-ansi": "^7.1.0",
"undici": "^7.10.0",
"ws": "^8.18.0"
},
"engines": {
"node": ">=18"
"node": ">=20"
}
},
"node_modules/@google/gemini-cli-core/node_modules/@google/genai": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.9.0.tgz",
"integrity": "sha512-w9P93OXKPMs9H1mfAx9+p3zJqQGrWBGdvK/SVc7cLZEXNHr/3+vW2eif7ZShA6wU24rNLn9z9MK2vQFUvNRI2Q==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"google-auth-library": "^9.14.2",
"ws": "^8.18.0"
},
"engines": {
"node": ">=20.0.0"
},
"peerDependencies": {
"@modelcontextprotocol/sdk": "^1.11.0"
},
"peerDependenciesMeta": {
"@modelcontextprotocol/sdk": {
"optional": true
}
}
},
"node_modules/@google/gemini-cli-core/node_modules/ansi-regex": {
@@ -2122,6 +2145,19 @@
"balanced-match": "^1.0.0"
}
},
"node_modules/@google/gemini-cli-core/node_modules/dotenv": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.0.tgz",
"integrity": "sha512-Q4sgBT60gzd0BB0lSyYD3xM4YxrXA9y4uBDof1JNYGzOXrQdQ6yX+7XIAqoFOGQFOTK1D3Hts5OllpxMDZFONQ==",
"license": "BSD-2-Clause",
"optional": true,
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/@google/gemini-cli-core/node_modules/glob": {
"version": "10.4.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -2186,16 +2222,14 @@
}
},
"node_modules/@google/genai": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.8.0.tgz",
"integrity": "sha512-n3KiMFesQCy2R9iSdBIuJ0JWYQ1HZBJJkmt4PPZMGZKvlgHhBAGw1kUMyX+vsAIzprN3lK45DI755lm70wPOOg==",
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.10.0.tgz",
"integrity": "sha512-PR4tLuiIFMrpAiiCko2Z16ydikFsPF1c5TBfI64hlZcv3xBEApSCceLuDYu1pNMq2SkNh4r66J4AG+ZexBnMLw==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"google-auth-library": "^9.14.2",
"ws": "^8.18.0",
"zod": "^3.22.4",
"zod-to-json-schema": "^3.22.4"
"ws": "^8.18.0"
},
"engines": {
"node": ">=20.0.0"
@@ -5423,15 +5457,15 @@
}
},
"node_modules/ai-sdk-provider-gemini-cli": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/ai-sdk-provider-gemini-cli/-/ai-sdk-provider-gemini-cli-0.0.4.tgz",
"integrity": "sha512-rXxNM/+wVHL8Syf/SjyoVmFJgTMwLnVSPPhqkLzbP6JKBvp81qZfkBFQiI9l6VMF1ctb6L+iSdVNd0/G1pTVZg==",
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ai-sdk-provider-gemini-cli/-/ai-sdk-provider-gemini-cli-0.1.1.tgz",
"integrity": "sha512-fvX3n9jTt8JaTyc+qDv5Og0H4NQMpS6B1VdaTT71AN2F+3u2Bz9/OSd7ATokrV2Rmv+ZlEnUCmJnke58zHXUSQ==",
"license": "MIT",
"optional": true,
"dependencies": {
"@ai-sdk/provider": "^1.1.3",
"@ai-sdk/provider-utils": "^2.2.8",
"@google/gemini-cli-core": "^0.1.4",
"@google/gemini-cli-core": "^0.1.13",
"@google/genai": "^1.7.0",
"google-auth-library": "^9.0.0",
"zod": "^3.23.8",
@@ -11236,16 +11270,16 @@
}
},
"node_modules/open": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz",
"integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==",
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz",
"integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
"license": "MIT",
"optional": true,
"dependencies": {
"default-browser": "^5.2.1",
"define-lazy-prop": "^3.0.0",
"is-inside-container": "^1.0.0",
"is-wsl": "^3.1.0"
"wsl-utils": "^0.1.0"
},
"engines": {
"node": ">=18"
@@ -13622,6 +13656,22 @@
}
}
},
"node_modules/wsl-utils": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz",
"integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
"license": "MIT",
"optional": true,
"dependencies": {
"is-wsl": "^3.1.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/xsschema": {
"version": "0.3.0-beta.8",
"resolved": "https://registry.npmjs.org/xsschema/-/xsschema-0.3.0-beta.8.tgz",

View File

@@ -84,8 +84,8 @@
},
"optionalDependencies": {
"@anthropic-ai/claude-code": "^1.0.25",
"ai-sdk-provider-gemini-cli": "^0.0.4",
"@biomejs/cli-linux-x64": "^1.9.4"
"@biomejs/cli-linux-x64": "^1.9.4",
"ai-sdk-provider-gemini-cli": "^0.1.1"
},
"engines": {
"node": ">=18.0.0"

View File

@@ -584,10 +584,21 @@ function getParametersForRole(role, explicitRoot = null) {
);
}
} else {
log(
'debug',
`No model definitions found for provider ${providerName} in MODEL_MAP. Using role default maxTokens: ${roleMaxTokens}`
);
// Special handling for custom OpenRouter models
if (providerName === CUSTOM_PROVIDERS.OPENROUTER) {
// Use a conservative default for OpenRouter models not in our list
const openrouterDefault = 32768;
effectiveMaxTokens = Math.min(roleMaxTokens, openrouterDefault);
log(
'debug',
`Custom OpenRouter model ${modelId} detected. Using conservative max_tokens: ${effectiveMaxTokens}`
);
} else {
log(
'debug',
`No model definitions found for provider ${providerName} in MODEL_MAP. Using role default maxTokens: ${roleMaxTokens}`
);
}
}
} catch (lookupError) {
log(
@@ -772,36 +783,38 @@ function getAvailableModels() {
const available = [];
for (const [provider, models] of Object.entries(MODEL_MAP)) {
if (models.length > 0) {
models.forEach((modelObj) => {
// Basic name generation - can be improved
const modelId = modelObj.id;
const sweScore = modelObj.swe_score;
const cost = modelObj.cost_per_1m_tokens;
const allowedRoles = modelObj.allowed_roles || ['main', 'fallback'];
const nameParts = modelId
.split('-')
.map((p) => p.charAt(0).toUpperCase() + p.slice(1));
// Handle specific known names better if needed
let name = nameParts.join(' ');
if (modelId === 'claude-3.5-sonnet-20240620')
name = 'Claude 3.5 Sonnet';
if (modelId === 'claude-3-7-sonnet-20250219')
name = 'Claude 3.7 Sonnet';
if (modelId === 'gpt-4o') name = 'GPT-4o';
if (modelId === 'gpt-4-turbo') name = 'GPT-4 Turbo';
if (modelId === 'sonar-pro') name = 'Perplexity Sonar Pro';
if (modelId === 'sonar-mini') name = 'Perplexity Sonar Mini';
models
.filter((modelObj) => Boolean(modelObj.supported))
.forEach((modelObj) => {
// Basic name generation - can be improved
const modelId = modelObj.id;
const sweScore = modelObj.swe_score;
const cost = modelObj.cost_per_1m_tokens;
const allowedRoles = modelObj.allowed_roles || ['main', 'fallback'];
const nameParts = modelId
.split('-')
.map((p) => p.charAt(0).toUpperCase() + p.slice(1));
// Handle specific known names better if needed
let name = nameParts.join(' ');
if (modelId === 'claude-3.5-sonnet-20240620')
name = 'Claude 3.5 Sonnet';
if (modelId === 'claude-3-7-sonnet-20250219')
name = 'Claude 3.7 Sonnet';
if (modelId === 'gpt-4o') name = 'GPT-4o';
if (modelId === 'gpt-4-turbo') name = 'GPT-4 Turbo';
if (modelId === 'sonar-pro') name = 'Perplexity Sonar Pro';
if (modelId === 'sonar-mini') name = 'Perplexity Sonar Mini';
available.push({
id: modelId,
name: name,
provider: provider,
swe_score: sweScore,
cost_per_1m_tokens: cost,
allowed_roles: allowedRoles,
max_tokens: modelObj.max_tokens
available.push({
id: modelId,
name: name,
provider: provider,
swe_score: sweScore,
cost_per_1m_tokens: cost,
allowed_roles: allowedRoles,
max_tokens: modelObj.max_tokens
});
});
});
} else {
// For providers with empty lists (like ollama), maybe add a placeholder or skip
available.push({

View File

@@ -8,7 +8,8 @@
"output": 15.0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 64000
"max_tokens": 64000,
"supported": true
},
{
"id": "claude-opus-4-20250514",
@@ -18,7 +19,8 @@
"output": 75.0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 32000
"max_tokens": 32000,
"supported": true
},
{
"id": "claude-3-7-sonnet-20250219",
@@ -28,7 +30,8 @@
"output": 15.0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 120000
"max_tokens": 120000,
"supported": true
},
{
"id": "claude-3-5-sonnet-20241022",
@@ -38,7 +41,8 @@
"output": 15.0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 8192
"max_tokens": 8192,
"supported": true
}
],
"claude-code": [
@@ -50,7 +54,8 @@
"output": 0
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 32000
"max_tokens": 32000,
"supported": true
},
{
"id": "sonnet",
@@ -60,7 +65,8 @@
"output": 0
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 64000
"max_tokens": 64000,
"supported": true
}
],
"mcp": [
@@ -72,7 +78,8 @@
"output": 0
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
}
],
"gemini-cli": [
@@ -84,7 +91,8 @@
"output": 0
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 65536
"max_tokens": 65536,
"supported": true
},
{
"id": "gemini-2.5-flash",
@@ -94,7 +102,8 @@
"output": 0
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 65536
"max_tokens": 65536,
"supported": true
}
],
"openai": [
@@ -106,7 +115,8 @@
"output": 10.0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 16384
"max_tokens": 16384,
"supported": true
},
{
"id": "o1",
@@ -115,7 +125,8 @@
"input": 15.0,
"output": 60.0
},
"allowed_roles": ["main"]
"allowed_roles": ["main"],
"supported": true
},
{
"id": "o3",
@@ -125,7 +136,8 @@
"output": 8.0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
},
{
"id": "o3-mini",
@@ -135,7 +147,8 @@
"output": 4.4
},
"allowed_roles": ["main"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
},
{
"id": "o4-mini",
@@ -144,7 +157,8 @@
"input": 1.1,
"output": 4.4
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "o1-mini",
@@ -153,7 +167,8 @@
"input": 1.1,
"output": 4.4
},
"allowed_roles": ["main"]
"allowed_roles": ["main"],
"supported": true
},
{
"id": "o1-pro",
@@ -162,7 +177,8 @@
"input": 150.0,
"output": 600.0
},
"allowed_roles": ["main"]
"allowed_roles": ["main"],
"supported": true
},
{
"id": "gpt-4-5-preview",
@@ -171,7 +187,8 @@
"input": 75.0,
"output": 150.0
},
"allowed_roles": ["main"]
"allowed_roles": ["main"],
"supported": true
},
{
"id": "gpt-4-1-mini",
@@ -180,7 +197,8 @@
"input": 0.4,
"output": 1.6
},
"allowed_roles": ["main"]
"allowed_roles": ["main"],
"supported": true
},
{
"id": "gpt-4-1-nano",
@@ -189,7 +207,8 @@
"input": 0.1,
"output": 0.4
},
"allowed_roles": ["main"]
"allowed_roles": ["main"],
"supported": true
},
{
"id": "gpt-4o-mini",
@@ -198,7 +217,8 @@
"input": 0.15,
"output": 0.6
},
"allowed_roles": ["main"]
"allowed_roles": ["main"],
"supported": true
},
{
"id": "gpt-4o-search-preview",
@@ -207,7 +227,8 @@
"input": 2.5,
"output": 10.0
},
"allowed_roles": ["research"]
"allowed_roles": ["research"],
"supported": true
},
{
"id": "gpt-4o-mini-search-preview",
@@ -216,7 +237,8 @@
"input": 0.15,
"output": 0.6
},
"allowed_roles": ["research"]
"allowed_roles": ["research"],
"supported": true
}
],
"google": [
@@ -225,21 +247,24 @@
"swe_score": 0.638,
"cost_per_1m_tokens": null,
"allowed_roles": ["main", "fallback"],
"max_tokens": 1048000
"max_tokens": 1048000,
"supported": true
},
{
"id": "gemini-2.5-pro-preview-03-25",
"swe_score": 0.638,
"cost_per_1m_tokens": null,
"allowed_roles": ["main", "fallback"],
"max_tokens": 1048000
"max_tokens": 1048000,
"supported": true
},
{
"id": "gemini-2.5-flash-preview-04-17",
"swe_score": 0.604,
"cost_per_1m_tokens": null,
"allowed_roles": ["main", "fallback"],
"max_tokens": 1048000
"max_tokens": 1048000,
"supported": true
},
{
"id": "gemini-2.0-flash",
@@ -249,14 +274,16 @@
"output": 0.6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1048000
"max_tokens": 1048000,
"supported": true
},
{
"id": "gemini-2.0-flash-lite",
"swe_score": 0,
"cost_per_1m_tokens": null,
"allowed_roles": ["main", "fallback"],
"max_tokens": 1048000
"max_tokens": 1048000,
"supported": true
}
],
"xai": [
@@ -269,7 +296,8 @@
"output": 15
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 131072
"max_tokens": 131072,
"supported": true
},
{
"id": "grok-3-fast",
@@ -280,7 +308,8 @@
"output": 25
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 131072
"max_tokens": 131072,
"supported": true
},
{
"id": "grok-4",
@@ -291,7 +320,8 @@
"output": 15
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 131072
"max_tokens": 131072,
"supported": true
}
],
"groq": [
@@ -303,7 +333,8 @@
"output": 3.0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 131072
"max_tokens": 16384,
"supported": true
},
{
"id": "llama-3.3-70b-versatile",
@@ -313,7 +344,8 @@
"output": 0.79
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 32768
"max_tokens": 32768,
"supported": true
},
{
"id": "llama-3.1-8b-instant",
@@ -323,7 +355,8 @@
"output": 0.08
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 131072
"max_tokens": 131072,
"supported": true
},
{
"id": "llama-4-scout",
@@ -333,7 +366,8 @@
"output": 0.34
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 32768
"max_tokens": 32768,
"supported": true
},
{
"id": "llama-4-maverick",
@@ -343,7 +377,8 @@
"output": 0.77
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 32768
"max_tokens": 32768,
"supported": true
},
{
"id": "mixtral-8x7b-32768",
@@ -353,7 +388,8 @@
"output": 0.24
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 32768
"max_tokens": 32768,
"supported": true
},
{
"id": "qwen-qwq-32b-preview",
@@ -363,7 +399,8 @@
"output": 0.18
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 32768
"max_tokens": 32768,
"supported": true
},
{
"id": "deepseek-r1-distill-llama-70b",
@@ -373,7 +410,8 @@
"output": 0.99
},
"allowed_roles": ["main", "research"],
"max_tokens": 8192
"max_tokens": 8192,
"supported": true
},
{
"id": "gemma2-9b-it",
@@ -383,7 +421,8 @@
"output": 0.2
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 8192
"max_tokens": 8192,
"supported": true
},
{
"id": "whisper-large-v3",
@@ -393,7 +432,8 @@
"output": 0
},
"allowed_roles": ["main"],
"max_tokens": 0
"max_tokens": 0,
"supported": true
}
],
"perplexity": [
@@ -405,7 +445,8 @@
"output": 15
},
"allowed_roles": ["main", "research"],
"max_tokens": 8700
"max_tokens": 8700,
"supported": true
},
{
"id": "sonar",
@@ -415,7 +456,8 @@
"output": 1
},
"allowed_roles": ["research"],
"max_tokens": 8700
"max_tokens": 8700,
"supported": true
},
{
"id": "deep-research",
@@ -425,7 +467,8 @@
"output": 8
},
"allowed_roles": ["research"],
"max_tokens": 8700
"max_tokens": 8700,
"supported": true
},
{
"id": "sonar-reasoning-pro",
@@ -435,7 +478,8 @@
"output": 8
},
"allowed_roles": ["main", "research", "fallback"],
"max_tokens": 8700
"max_tokens": 8700,
"supported": true
},
{
"id": "sonar-reasoning",
@@ -445,7 +489,8 @@
"output": 5
},
"allowed_roles": ["main", "research", "fallback"],
"max_tokens": 8700
"max_tokens": 8700,
"supported": true
}
],
"openrouter": [
@@ -457,7 +502,8 @@
"output": 0.6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1048576
"max_tokens": 1048576,
"supported": true
},
{
"id": "google/gemini-2.5-flash-preview-05-20:thinking",
@@ -467,7 +513,8 @@
"output": 3.5
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1048576
"max_tokens": 1048576,
"supported": true
},
{
"id": "google/gemini-2.5-pro-exp-03-25",
@@ -477,7 +524,8 @@
"output": 0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1000000
"max_tokens": 1000000,
"supported": true
},
{
"id": "deepseek/deepseek-chat-v3-0324:free",
@@ -487,7 +535,9 @@
"output": 0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 163840
"max_tokens": 163840,
"supported": false,
"reason": "Free OpenRouter models are not supported due to severe rate limits, lack of tool use support, and other reliability issues that make them impractical for production use."
},
{
"id": "deepseek/deepseek-chat-v3-0324",
@@ -497,7 +547,8 @@
"output": 1.1
},
"allowed_roles": ["main"],
"max_tokens": 64000
"max_tokens": 64000,
"supported": true
},
{
"id": "openai/gpt-4.1",
@@ -507,7 +558,8 @@
"output": 8
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1000000
"max_tokens": 1000000,
"supported": true
},
{
"id": "openai/gpt-4.1-mini",
@@ -517,7 +569,8 @@
"output": 1.6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1000000
"max_tokens": 1000000,
"supported": true
},
{
"id": "openai/gpt-4.1-nano",
@@ -527,7 +580,8 @@
"output": 0.4
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1000000
"max_tokens": 1000000,
"supported": true
},
{
"id": "openai/o3",
@@ -537,7 +591,8 @@
"output": 40
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 200000
"max_tokens": 200000,
"supported": true
},
{
"id": "openai/codex-mini",
@@ -547,7 +602,8 @@
"output": 6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
},
{
"id": "openai/gpt-4o-mini",
@@ -557,7 +613,8 @@
"output": 0.6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
},
{
"id": "openai/o4-mini",
@@ -567,7 +624,8 @@
"output": 4.4
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
},
{
"id": "openai/o4-mini-high",
@@ -577,7 +635,8 @@
"output": 4.4
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
},
{
"id": "openai/o1-pro",
@@ -587,7 +646,8 @@
"output": 600
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
},
{
"id": "meta-llama/llama-3.3-70b-instruct",
@@ -597,7 +657,8 @@
"output": 600
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1048576
"max_tokens": 1048576,
"supported": true
},
{
"id": "meta-llama/llama-4-maverick",
@@ -607,7 +668,8 @@
"output": 0.6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1000000
"max_tokens": 1000000,
"supported": true
},
{
"id": "meta-llama/llama-4-scout",
@@ -617,7 +679,8 @@
"output": 0.3
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1000000
"max_tokens": 1000000,
"supported": true
},
{
"id": "qwen/qwen-max",
@@ -627,7 +690,8 @@
"output": 6.4
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 32768
"max_tokens": 32768,
"supported": true
},
{
"id": "qwen/qwen-turbo",
@@ -637,7 +701,8 @@
"output": 0.2
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 1000000
"max_tokens": 32768,
"supported": true
},
{
"id": "qwen/qwen3-235b-a22b",
@@ -647,7 +712,8 @@
"output": 2
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 24000
"max_tokens": 24000,
"supported": true
},
{
"id": "mistralai/mistral-small-3.1-24b-instruct:free",
@@ -657,7 +723,9 @@
"output": 0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 96000
"max_tokens": 96000,
"supported": false,
"reason": "Free OpenRouter models are not supported due to severe rate limits, lack of tool use support, and other reliability issues that make them impractical for production use."
},
{
"id": "mistralai/mistral-small-3.1-24b-instruct",
@@ -667,7 +735,8 @@
"output": 0.3
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 128000
"max_tokens": 128000,
"supported": true
},
{
"id": "mistralai/devstral-small",
@@ -677,7 +746,8 @@
"output": 0.3
},
"allowed_roles": ["main"],
"max_tokens": 110000
"max_tokens": 110000,
"supported": true
},
{
"id": "mistralai/mistral-nemo",
@@ -687,7 +757,8 @@
"output": 0.07
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 100000
"max_tokens": 100000,
"supported": true
},
{
"id": "thudm/glm-4-32b:free",
@@ -697,7 +768,9 @@
"output": 0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 32768
"max_tokens": 32768,
"supported": false,
"reason": "Free OpenRouter models are not supported due to severe rate limits, lack of tool use support, and other reliability issues that make them impractical for production use."
}
],
"ollama": [
@@ -708,7 +781,8 @@
"input": 0,
"output": 0
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "qwen3:latest",
@@ -717,7 +791,8 @@
"input": 0,
"output": 0
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "qwen3:14b",
@@ -726,7 +801,8 @@
"input": 0,
"output": 0
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "qwen3:32b",
@@ -735,7 +811,8 @@
"input": 0,
"output": 0
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "mistral-small3.1:latest",
@@ -744,7 +821,8 @@
"input": 0,
"output": 0
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "llama3.3:latest",
@@ -753,7 +831,8 @@
"input": 0,
"output": 0
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "phi4:latest",
@@ -762,7 +841,8 @@
"input": 0,
"output": 0
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
}
],
"azure": [
@@ -771,10 +851,11 @@
"swe_score": 0.332,
"cost_per_1m_tokens": {
"input": 2.5,
"output": 10.0
"output": 10
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 16384
"max_tokens": 16384,
"supported": true
},
{
"id": "gpt-4o-mini",
@@ -784,7 +865,8 @@
"output": 0.6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 16384
"max_tokens": 16384,
"supported": true
},
{
"id": "gpt-4-1",
@@ -794,7 +876,8 @@
"output": 10.0
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 16384
"max_tokens": 16384,
"supported": true
}
],
"bedrock": [
@@ -805,7 +888,8 @@
"input": 0.25,
"output": 1.25
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "us.anthropic.claude-3-opus-20240229-v1:0",
@@ -814,7 +898,8 @@
"input": 15,
"output": 75
},
"allowed_roles": ["main", "fallback", "research"]
"allowed_roles": ["main", "fallback", "research"],
"supported": true
},
{
"id": "us.anthropic.claude-3-5-sonnet-20240620-v1:0",
@@ -823,7 +908,8 @@
"input": 3,
"output": 15
},
"allowed_roles": ["main", "fallback", "research"]
"allowed_roles": ["main", "fallback", "research"],
"supported": true
},
{
"id": "us.anthropic.claude-3-5-sonnet-20241022-v2:0",
@@ -832,7 +918,8 @@
"input": 3,
"output": 15
},
"allowed_roles": ["main", "fallback", "research"]
"allowed_roles": ["main", "fallback", "research"],
"supported": true
},
{
"id": "us.anthropic.claude-3-7-sonnet-20250219-v1:0",
@@ -842,7 +929,8 @@
"output": 15
},
"allowed_roles": ["main", "fallback", "research"],
"max_tokens": 65536
"max_tokens": 65536,
"supported": true
},
{
"id": "us.anthropic.claude-3-5-haiku-20241022-v1:0",
@@ -851,7 +939,8 @@
"input": 0.8,
"output": 4
},
"allowed_roles": ["main", "fallback"]
"allowed_roles": ["main", "fallback"],
"supported": true
},
{
"id": "us.anthropic.claude-opus-4-20250514-v1:0",
@@ -860,7 +949,8 @@
"input": 15,
"output": 75
},
"allowed_roles": ["main", "fallback", "research"]
"allowed_roles": ["main", "fallback", "research"],
"supported": true
},
{
"id": "us.anthropic.claude-sonnet-4-20250514-v1:0",
@@ -869,7 +959,8 @@
"input": 3,
"output": 15
},
"allowed_roles": ["main", "fallback", "research"]
"allowed_roles": ["main", "fallback", "research"],
"supported": true
},
{
"id": "us.deepseek.r1-v1:0",
@@ -879,7 +970,8 @@
"output": 5.4
},
"allowed_roles": ["research"],
"max_tokens": 65536
"max_tokens": 65536,
"supported": true
}
]
}