From 5d2cdda6d69152e63fac315e3f43360d1c7a58ce Mon Sep 17 00:00:00 2001 From: konard Date: Mon, 26 Jan 2026 10:48:07 +0100 Subject: [PATCH 1/4] Initial commit with task details Adding CLAUDE.md with task information for AI processing. This file will be removed when the task is complete. Issue: https://github.com/link-assistant/agent/issues/135 --- CLAUDE.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..52f1abf --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,5 @@ +Issue to solve: https://github.com/link-assistant/agent/issues/135 +Your prepared branch: issue-135-473f8cde60bb +Your prepared working directory: /tmp/gh-issue-solver-1769420885314 + +Proceed. From c1230ade5d1dcec4f938c61cf940a0702bc12d04 Mon Sep 17 00:00:00 2001 From: konard Date: Mon, 26 Jan 2026 11:03:15 +0100 Subject: [PATCH 2/4] fix: improve ProviderModelNotFoundError with suggestion for OpenRouter models When users specify a model like "z-ai/glm-4.7" instead of "openrouter/z-ai/glm-4.7", the error message now includes a helpful suggestion if the model exists in another provider (like OpenRouter). Changes: - Added suggestion field to ModelNotFoundError schema - Modified getModel() to search for the model in other providers when provider not found - Updated error handler in index.js to include suggestion as a hint in error output - Added OpenRouter documentation to MODELS.md with examples and model format - Created case study documentation for issue #135 Example: Before: "ProviderModelNotFoundError" After: "ProviderModelNotFoundError" with hint "Did you mean: openrouter/z-ai/glm-4.7?" Fixes #135 Co-Authored-By: Claude Opus 4.5 --- MODELS.md | 67 +- docs/case-studies/issue-135/README.md | 212 + .../issue-135/data/issue-135.json | 1 + .../issue-135/data/openrouter-provider.json | 4289 +++++++++++++++++ js/src/index.js | 9 +- js/src/provider/provider.ts | 19 +- 6 files changed, 4588 insertions(+), 9 deletions(-) create mode 100644 docs/case-studies/issue-135/README.md create mode 100644 docs/case-studies/issue-135/data/issue-135.json create mode 100644 docs/case-studies/issue-135/data/openrouter-provider.json diff --git a/MODELS.md b/MODELS.md index 9f59a77..140d011 100644 --- a/MODELS.md +++ b/MODELS.md @@ -4,12 +4,13 @@ This agent supports multiple model providers. By default, it uses models from th ## Supported Providers -| Provider | Format | API Key Env Variable | Documentation | -| ------------ | ------------------------- | ---------------------------- | -------------------------------------------------- | -| OpenCode Zen | `opencode/` | N/A (public for free models) | [OpenCode Zen](https://opencode.ai/docs/zen/) | -| Anthropic | `anthropic/` | `ANTHROPIC_API_KEY` | [Anthropic Docs](https://docs.anthropic.com/) | -| Claude OAuth | `claude-oauth/` | `CLAUDE_CODE_OAUTH_TOKEN` | [Claude OAuth Documentation](docs/claude-oauth.md) | -| Groq | `groq/` | `GROQ_API_KEY` | [Groq Documentation](docs/groq.md) | +| Provider | Format | API Key Env Variable | Documentation | +| ------------ | ------------------------------- | ---------------------------- | -------------------------------------------------- | +| OpenCode Zen | `opencode/` | N/A (public for free models) | [OpenCode Zen](https://opencode.ai/docs/zen/) | +| Anthropic | `anthropic/` | `ANTHROPIC_API_KEY` | [Anthropic Docs](https://docs.anthropic.com/) | +| Claude OAuth | `claude-oauth/` | `CLAUDE_CODE_OAUTH_TOKEN` | [Claude OAuth Documentation](docs/claude-oauth.md) | +| Groq | `groq/` | `GROQ_API_KEY` | [Groq Documentation](docs/groq.md) | +| OpenRouter | `openrouter//` | `OPENROUTER_API_KEY` | [OpenRouter Docs](https://openrouter.ai/docs) | > **Claude OAuth:** The `claude-oauth` provider allows using your Claude Pro/Max subscription. Authenticate with `agent auth claude` or use existing Claude Code CLI credentials with `--use-existing-claude-oauth`. @@ -141,3 +142,57 @@ echo "hello" | agent --model groq/groq/compound ``` For more details, see the [Groq Documentation](docs/groq.md). + +--- + +## OpenRouter Provider + +[OpenRouter](https://openrouter.ai/) is a unified API that provides access to a wide variety of AI models from different providers. To use OpenRouter models, set your API key: + +```bash +export OPENROUTER_API_KEY=your_api_key_here +``` + +Or authenticate via the CLI: + +```bash +agent auth openrouter +``` + +### Model Format + +OpenRouter models use a nested path format because they aggregate models from multiple vendors: + +- **Format**: `openrouter//` +- **Example**: `openrouter/z-ai/glm-4.7` + +> **Important**: Always include `openrouter/` as the provider prefix. Using just `z-ai/glm-4.7` will result in a `ProviderModelNotFoundError`. + +### OpenRouter GLM Models (Examples) + +| Model | Model ID | Context Window | Tool Use | +| -------------- | ---------------------------------- | -------------- | -------- | +| GLM-4.7 | `openrouter/z-ai/glm-4.7` | 204,800 tokens | Yes | +| GLM-4.6 | `openrouter/z-ai/glm-4.6` | 204,800 tokens | Yes | +| GLM-4.5 | `openrouter/z-ai/glm-4.5` | 204,800 tokens | Yes | +| GLM-4.5 Air | `openrouter/z-ai/glm-4.5-air` | 204,800 tokens | Yes | +| GLM-4.5V | `openrouter/z-ai/glm-4.5v` | 204,800 tokens | Yes | +| GLM-4.5 (Free) | `openrouter/z-ai/glm-4.5-air:free` | 204,800 tokens | Yes | + +### OpenRouter Usage Examples + +```bash +# Using GLM-4.7 from Z.AI +echo "hello" | agent --model openrouter/z-ai/glm-4.7 + +# Using GLM-4.6 for coding +echo "hello" | agent --model openrouter/z-ai/glm-4.6 + +# Using the free GLM-4.5 Air model +echo "hello" | agent --model openrouter/z-ai/glm-4.5-air:free + +# Using Claude models via OpenRouter +echo "hello" | agent --model openrouter/anthropic/claude-3.5-sonnet +``` + +For the complete list of available models, visit [OpenRouter Models](https://openrouter.ai/models). diff --git a/docs/case-studies/issue-135/README.md b/docs/case-studies/issue-135/README.md new file mode 100644 index 0000000..0a5222a --- /dev/null +++ b/docs/case-studies/issue-135/README.md @@ -0,0 +1,212 @@ +# Case Study: OpenRouter Model Not Found Error (Issue #135) + +## Executive Summary + +When a user attempts to use an OpenRouter model with incorrect format (`z-ai/glm-4.7` instead of `openrouter/z-ai/glm-4.7`), the CLI throws a `ProviderModelNotFoundError`. This case study documents the root cause analysis, timeline reconstruction, and proposed solutions. + +## Issue Details + +- **Issue Number**: #135 +- **Repository**: link-assistant/agent +- **Reporter**: andchir +- **Date Reported**: January 2026 +- **Status**: Open + +## Problem Statement + +The user authenticated with OpenRouter but received a `ProviderModelNotFoundError` when trying to use a model: + +```bash +echo "hello" | agent --model z-ai/glm-4.7 +``` + +Error received: +``` +ProviderModelNotFoundError: ProviderModelNotFoundError + at new NamedError (unknown:1:28) + at new ProviderModelNotFoundError (...src/util/error.ts:28:9) + at (...src/provider/provider.ts:912:30) +``` + +## Timeline Reconstruction + +1. **User Action**: User authenticated with OpenRouter (confirmed working) +2. **User Command**: Ran `echo "hello" | agent --model z-ai/glm-4.7` +3. **Model Parsing**: The `parseModel()` function split the model string: + - `providerID` = `"z-ai"` + - `modelID` = `"glm-4.7"` +4. **Provider Lookup**: Code attempted to find provider `"z-ai"` in `s.providers` +5. **Failure**: No provider named `"z-ai"` exists, threw `ProviderModelNotFoundError` + +## Root Cause Analysis + +### Primary Root Cause + +**Incorrect model format**: The user used `z-ai/glm-4.7` but the correct format is `openrouter/z-ai/glm-4.7`. + +### Technical Details + +The model parsing logic in `provider.ts:1067-1073`: + +```typescript +export function parseModel(model: string) { + const [providerID, ...rest] = model.split('/'); + return { + providerID: providerID, + modelID: rest.join('/'), + }; +} +``` + +When parsing `z-ai/glm-4.7`: +- First segment becomes `providerID` = `"z-ai"` +- Remaining segments become `modelID` = `"glm-4.7"` + +The code then checks if this provider exists: + +```typescript +const provider = s.providers[providerID]; +if (!provider) throw new ModelNotFoundError({ providerID, modelID }); +``` + +Since `z-ai` is not a registered provider (it's actually a model vendor within OpenRouter), the error is thrown. + +### Contributing Factors + +1. **Lack of documentation**: OpenRouter is not documented in `MODELS.md` +2. **Confusing naming**: OpenRouter models have nested paths like `openrouter/z-ai/glm-4.7` which can be confusing +3. **No error message guidance**: The error doesn't suggest the correct format or similar models + +## Verification + +### Available OpenRouter GLM Models + +From `models.dev/api.json`, the available GLM models in OpenRouter are: + +| Model ID | Model Name | +|----------|------------| +| `openrouter/thudm/glm-z1-32b:free` | GLM Z1 32B (Free) | +| `openrouter/z-ai/glm-4.7` | GLM-4.7 | +| `openrouter/z-ai/glm-4.5` | GLM-4.5 | +| `openrouter/z-ai/glm-4.5-air` | GLM-4.5 Air | +| `openrouter/z-ai/glm-4.5v` | GLM-4.5V | +| `openrouter/z-ai/glm-4.6` | GLM-4.6 | +| `openrouter/z-ai/glm-4.6:exacto` | GLM-4.6 Exacto | +| `openrouter/z-ai/glm-4.5-air:free` | GLM-4.5 Air (Free) | + +### Correct Command + +```bash +echo "hello" | agent --model openrouter/z-ai/glm-4.7 +``` + +## Proposed Solutions + +### Solution 1: Better Error Message (Recommended) + +Improve the error message to suggest similar models or the correct format: + +```typescript +if (!provider) { + // Check if it might be an OpenRouter model + const allProviders = Object.keys(s.providers); + const possibleMatch = allProviders.find(p => + s.providers[p]?.info?.models?.[`${providerID}/${modelID}`] + ); + + if (possibleMatch) { + throw new ModelNotFoundError({ + providerID, + modelID, + suggestion: `Did you mean: ${possibleMatch}/${providerID}/${modelID}?` + }); + } + throw new ModelNotFoundError({ providerID, modelID }); +} +``` + +### Solution 2: Documentation Update + +Add OpenRouter to `MODELS.md` with examples: + +```markdown +## OpenRouter Provider + +[OpenRouter](https://openrouter.ai/) provides access to multiple AI models through a unified API. + +### Configuration + +Set your API key: +```bash +export OPENROUTER_API_KEY=your_api_key_here +``` + +Or authenticate via CLI: +```bash +agent auth openrouter +``` + +### Model Format + +OpenRouter models use nested paths: +- Format: `openrouter//` +- Example: `openrouter/z-ai/glm-4.7` + +### Available Models (Examples) + +| Model | Model ID | +|-------|----------| +| GLM-4.7 | `openrouter/z-ai/glm-4.7` | +| GLM-4.5 | `openrouter/z-ai/glm-4.5` | +| Claude 3.5 Sonnet | `openrouter/anthropic/claude-3.5-sonnet` | +``` + +### Solution 3: Model ID Fuzzy Matching + +Implement fuzzy matching to suggest similar models when the exact model is not found. + +## Impact Assessment + +### Severity: Low + +- The CLI correctly rejects invalid model formats +- The fix is a documentation/UX improvement rather than a functional bug + +### Affected Users + +- Users new to OpenRouter who don't know the correct model format +- Users migrating from other tools with different naming conventions + +## Files Relevant to Solution + +1. `js/src/provider/provider.ts:912` - Error throwing location +2. `js/src/provider/provider.ts:1067-1073` - Model parsing logic +3. `MODELS.md` - Documentation (needs OpenRouter section) +4. `js/src/util/error.ts` - Error definition + +## Testing Recommendations + +### Manual Testing + +```bash +# Verify correct model format works +export OPENROUTER_API_KEY=your_key +echo "hello" | agent --model openrouter/z-ai/glm-4.7 + +# Verify improved error message (after fix) +echo "hello" | agent --model z-ai/glm-4.7 +# Should suggest: "Did you mean: openrouter/z-ai/glm-4.7?" +``` + +## Lessons Learned + +1. **Document all supported providers**: Every provider should be documented in `MODELS.md` +2. **Helpful error messages**: Error messages should guide users toward the correct solution +3. **Model naming conventions**: Nested paths can be confusing; consider documenting patterns + +## References + +- [Issue #135](https://github.com/link-assistant/agent/issues/135) +- [OpenRouter Documentation](https://openrouter.ai/docs) +- [models.dev API](https://models.dev/api.json) +- [provider.ts source](../../js/src/provider/provider.ts) diff --git a/docs/case-studies/issue-135/data/issue-135.json b/docs/case-studies/issue-135/data/issue-135.json new file mode 100644 index 0000000..e902b74 --- /dev/null +++ b/docs/case-studies/issue-135/data/issue-135.json @@ -0,0 +1 @@ +{"url":"https://api.github.com/repos/link-assistant/agent/issues/135","repository_url":"https://api.github.com/repos/link-assistant/agent","labels_url":"https://api.github.com/repos/link-assistant/agent/issues/135/labels{/name}","comments_url":"https://api.github.com/repos/link-assistant/agent/issues/135/comments","events_url":"https://api.github.com/repos/link-assistant/agent/issues/135/events","html_url":"https://github.com/link-assistant/agent/issues/135","id":3855088327,"node_id":"I_kwDOQYTy3M7lx_rH","number":135,"title":"Не работает модель с Openrouter","user":{"login":"andchir","id":6392311,"node_id":"MDQ6VXNlcjYzOTIzMTE=","avatar_url":"https://avatars.githubusercontent.com/u/6392311?v=4","gravatar_id":"","url":"https://api.github.com/users/andchir","html_url":"https://github.com/andchir","followers_url":"https://api.github.com/users/andchir/followers","following_url":"https://api.github.com/users/andchir/following{/other_user}","gists_url":"https://api.github.com/users/andchir/gists{/gist_id}","starred_url":"https://api.github.com/users/andchir/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andchir/subscriptions","organizations_url":"https://api.github.com/users/andchir/orgs","repos_url":"https://api.github.com/users/andchir/repos","events_url":"https://api.github.com/users/andchir/events{/privacy}","received_events_url":"https://api.github.com/users/andchir/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2026-01-26T09:03:41Z","updated_at":"2026-01-26T09:47:39Z","closed_at":null,"author_association":"NONE","type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"Авторизовался на OpenRouter. Пытаюсь использовать модель, получаю ошибку.\n\n~~~\necho \"привет\" | agent --model z-ai/glm-4.7\n\n{\n \"type\": \"status\",\n \"mode\": \"stdin-stream\",\n \"message\": \"Agent CLI in continuous listening mode. Accepts JSON and plain text input.\",\n \"hint\": \"Press CTRL+C to exit. Use --help for options.\",\n \"acceptedFormats\": [\n \"JSON object with \\\"message\\\" field\",\n \"Plain text\"\n ],\n \"options\": {\n \"interactive\": true,\n \"autoMergeQueuedMessages\": true,\n \"alwaysAcceptStdin\": true,\n \"compactJson\": false\n }\n}\n{\n \"type\": \"error\",\n \"errorType\": \"UnhandledRejection\",\n \"message\": \"ProviderModelNotFoundError\",\n \"stack\": \"ProviderModelNotFoundError: ProviderModelNotFoundError\\n at new NamedError (unknown:1:28)\\n at new ProviderModelNotFoundError (/home/yara/.bun/install/global/node_modules/@link-assistant/agent/src/util/error.ts:28:9)\\n at (/home/yara/.bun/install/global/node_modules/@link-assistant/agent/src/provider/provider.ts:912:30)\\n at processTicksAndRejections (native:7:39)\"\n}\n~~~","closed_by":null,"reactions":{"url":"https://api.github.com/repos/link-assistant/agent/issues/135/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/link-assistant/agent/issues/135/timeline","performed_via_github_app":null,"state_reason":null} \ No newline at end of file diff --git a/docs/case-studies/issue-135/data/openrouter-provider.json b/docs/case-studies/issue-135/data/openrouter-provider.json new file mode 100644 index 0000000..2a5f1ff --- /dev/null +++ b/docs/case-studies/issue-135/data/openrouter-provider.json @@ -0,0 +1,4289 @@ +{ + "id": "openrouter", + "env": [ + "OPENROUTER_API_KEY" + ], + "npm": "@ai-sdk/openai-compatible", + "api": "https://openrouter.ai/api/v1", + "name": "OpenRouter", + "doc": "https://openrouter.ai/models", + "models": { + "moonshotai/kimi-k2": { + "id": "moonshotai/kimi-k2", + "name": "Kimi K2", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.55, + "output": 2.2 + }, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "moonshotai/kimi-k2-0905": { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 Instruct 0905", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.5 + }, + "limit": { + "context": 262144, + "output": 16384 + } + }, + "moonshotai/kimi-dev-72b:free": { + "id": "moonshotai/kimi-dev-72b:free", + "name": "Kimi Dev 72b (free)", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-06-16", + "last_updated": "2025-06-16", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "moonshotai/kimi-k2-thinking": { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.5, + "cache_read": 0.15 + }, + "limit": { + "context": 262144, + "output": 262144 + }, + "provider": { + "npm": "@openrouter/ai-sdk-provider" + } + }, + "moonshotai/kimi-k2-0905:exacto": { + "id": "moonshotai/kimi-k2-0905:exacto", + "name": "Kimi K2 Instruct 0905 (exacto)", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.5 + }, + "limit": { + "context": 262144, + "output": 16384 + } + }, + "moonshotai/kimi-k2:free": { + "id": "moonshotai/kimi-k2:free", + "name": "Kimi K2 (free)", + "family": "kimi", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32800, + "output": 32800 + } + }, + "thudm/glm-z1-32b:free": { + "id": "thudm/glm-z1-32b:free", + "name": "GLM Z1 32B (free)", + "family": "glm-z", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-17", + "last_updated": "2025-04-17", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "nousresearch/hermes-4-70b": { + "id": "nousresearch/hermes-4-70b", + "name": "Hermes 4 70B", + "family": "hermes", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.13, + "output": 0.4 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "nousresearch/hermes-4-405b": { + "id": "nousresearch/hermes-4-405b", + "name": "Hermes 4 405B", + "family": "hermes", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 1, + "output": 3 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "nousresearch/deephermes-3-llama-3-8b-preview": { + "id": "nousresearch/deephermes-3-llama-3-8b-preview", + "name": "DeepHermes 3 Llama 3 8B Preview", + "family": "llama", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-02-28", + "last_updated": "2025-02-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "nvidia/nemotron-nano-9b-v2": { + "id": "nvidia/nemotron-nano-9b-v2", + "name": "nvidia-nemotron-nano-9b-v2", + "family": "nemotron", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-09", + "release_date": "2025-08-18", + "last_updated": "2025-08-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.04, + "output": 0.16 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "x-ai/grok-4": { + "id": "x-ai/grok-4", + "name": "Grok 4", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75, + "cache_write": 15 + }, + "limit": { + "context": 256000, + "output": 64000 + } + }, + "x-ai/grok-code-fast-1": { + "id": "x-ai/grok-code-fast-1", + "name": "Grok Code Fast 1", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08", + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.2, + "output": 1.5, + "cache_read": 0.02 + }, + "limit": { + "context": 256000, + "output": 10000 + } + }, + "x-ai/grok-3": { + "id": "x-ai/grok-3", + "name": "Grok 3", + "family": "grok", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75, + "cache_write": 15 + }, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "x-ai/grok-4-fast": { + "id": "x-ai/grok-4-fast", + "name": "Grok 4 Fast", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05, + "cache_write": 0.05 + }, + "limit": { + "context": 2000000, + "output": 30000 + } + }, + "x-ai/grok-3-beta": { + "id": "x-ai/grok-3-beta", + "name": "Grok 3 Beta", + "family": "grok", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.75, + "cache_write": 15 + }, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "x-ai/grok-3-mini-beta": { + "id": "x-ai/grok-3-mini-beta", + "name": "Grok 3 Mini Beta", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 0.5, + "cache_read": 0.075, + "cache_write": 0.5 + }, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "x-ai/grok-3-mini": { + "id": "x-ai/grok-3-mini", + "name": "Grok 3 Mini", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 0.5, + "cache_read": 0.075, + "cache_write": 0.5 + }, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "x-ai/grok-4.1-fast": { + "id": "x-ai/grok-4.1-fast", + "name": "Grok 4.1 Fast", + "family": "grok", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.2, + "output": 0.5, + "cache_read": 0.05, + "cache_write": 0.05 + }, + "limit": { + "context": 2000000, + "output": 30000 + } + }, + "kwaipilot/kat-coder-pro:free": { + "id": "kwaipilot/kat-coder-pro:free", + "name": "Kat Coder Pro (free)", + "family": "kat-coder", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-11", + "release_date": "2025-11-10", + "last_updated": "2025-11-10", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 256000, + "output": 65536 + } + }, + "cognitivecomputations/dolphin3.0-mistral-24b": { + "id": "cognitivecomputations/dolphin3.0-mistral-24b", + "name": "Dolphin3.0 Mistral 24B", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-02-13", + "last_updated": "2025-02-13", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 8192 + } + }, + "cognitivecomputations/dolphin3.0-r1-mistral-24b": { + "id": "cognitivecomputations/dolphin3.0-r1-mistral-24b", + "name": "Dolphin3.0 R1 Mistral 24B", + "family": "mistral", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-02-13", + "last_updated": "2025-02-13", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 8192 + } + }, + "deepseek/deepseek-chat-v3.1": { + "id": "deepseek/deepseek-chat-v3.1", + "name": "DeepSeek-V3.1", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.2, + "output": 0.8 + }, + "limit": { + "context": 163840, + "output": 163840 + } + }, + "deepseek/deepseek-r1:free": { + "id": "deepseek/deepseek-r1:free", + "name": "R1 (free)", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 163840, + "output": 163840 + } + }, + "deepseek/deepseek-v3.2-speciale": { + "id": "deepseek/deepseek-v3.2-speciale", + "name": "DeepSeek V3.2 Speciale", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.27, + "output": 0.41 + }, + "limit": { + "context": 163840, + "output": 65536 + }, + "provider": { + "npm": "@openrouter/ai-sdk-provider" + } + }, + "deepseek/deepseek-v3-base:free": { + "id": "deepseek/deepseek-v3-base:free", + "name": "DeepSeek V3 Base (free)", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-03-29", + "last_updated": "2025-03-29", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 163840, + "output": 163840 + } + }, + "deepseek/deepseek-v3.1-terminus": { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "DeepSeek V3.1 Terminus", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.27, + "output": 1 + }, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "deepseek/deepseek-r1-0528-qwen3-8b:free": { + "id": "deepseek/deepseek-r1-0528-qwen3-8b:free", + "name": "Deepseek R1 0528 Qwen3 8B (free)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-29", + "last_updated": "2025-05-29", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "deepseek/deepseek-chat-v3-0324": { + "id": "deepseek/deepseek-chat-v3-0324", + "name": "DeepSeek V3 0324", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 16384, + "output": 8192 + } + }, + "deepseek/deepseek-r1-0528:free": { + "id": "deepseek/deepseek-r1-0528:free", + "name": "R1 0528 (free)", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 163840, + "output": 163840 + } + }, + "deepseek/deepseek-r1-distill-llama-70b": { + "id": "deepseek/deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-01-23", + "last_updated": "2025-01-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + "deepseek/deepseek-r1-distill-qwen-14b": { + "id": "deepseek/deepseek-r1-distill-qwen-14b", + "name": "DeepSeek R1 Distill Qwen 14B", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-01-29", + "last_updated": "2025-01-29", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 64000, + "output": 8192 + } + }, + "deepseek/deepseek-v3.1-terminus:exacto": { + "id": "deepseek/deepseek-v3.1-terminus:exacto", + "name": "DeepSeek V3.1 Terminus (exacto)", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.27, + "output": 1 + }, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "deepseek/deepseek-v3.2": { + "id": "deepseek/deepseek-v3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.28, + "output": 0.4 + }, + "limit": { + "context": 163840, + "output": 65536 + }, + "provider": { + "npm": "@openrouter/ai-sdk-provider" + } + }, + "featherless/qwerky-72b": { + "id": "featherless/qwerky-72b", + "name": "Qwerky 72B", + "family": "qwerky", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-20", + "last_updated": "2025-03-20", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 8192 + } + }, + "tngtech/deepseek-r1t2-chimera:free": { + "id": "tngtech/deepseek-r1t2-chimera:free", + "name": "DeepSeek R1T2 Chimera (free)", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2025-07", + "release_date": "2025-07-08", + "last_updated": "2025-07-08", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 163840, + "output": 163840 + } + }, + "minimax/minimax-m1": { + "id": "minimax/minimax-m1", + "name": "MiniMax M1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.4, + "output": 2.2 + }, + "limit": { + "context": 1000000, + "output": 40000 + } + }, + "minimax/minimax-m2": { + "id": "minimax/minimax-m2", + "name": "MiniMax M2", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, + "temperature": true, + "release_date": "2025-10-23", + "last_updated": "2025-10-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.28, + "output": 1.15, + "cache_read": 0.28, + "cache_write": 1.15 + }, + "limit": { + "context": 196600, + "output": 118000 + }, + "provider": { + "npm": "@openrouter/ai-sdk-provider" + } + }, + "minimax/minimax-01": { + "id": "minimax/minimax-01", + "name": "MiniMax-01", + "family": "minimax", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.2, + "output": 1.1 + }, + "limit": { + "context": 1000000, + "output": 1000000 + } + }, + "minimax/minimax-m2.1": { + "id": "minimax/minimax-m2.1", + "name": "MiniMax M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 1.2 + }, + "limit": { + "context": 204800, + "output": 131072 + }, + "provider": { + "npm": "@openrouter/ai-sdk-provider" + } + }, + "google/gemini-2.0-flash-001": { + "id": "google/gemini-2.0-flash-001", + "name": "Gemini 2.0 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + }, + "limit": { + "context": 1048576, + "output": 8192 + } + }, + "google/gemma-2-9b-it:free": { + "id": "google/gemma-2-9b-it:free", + "name": "Gemma 2 9B (free)", + "family": "gemma", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2024-06-28", + "last_updated": "2024-06-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + "google/gemini-3-flash-preview": { + "id": "google/gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.5, + "output": 3, + "cache_read": 0.05 + }, + "limit": { + "context": 1048576, + "output": 65536 + }, + "provider": { + "npm": "@openrouter/ai-sdk-provider" + } + }, + "google/gemini-3-pro-preview": { + "id": "google/gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2, + "output": 12 + }, + "limit": { + "context": 1050000, + "output": 66000 + }, + "provider": { + "npm": "@openrouter/ai-sdk-provider" + } + }, + "google/gemini-2.5-flash": { + "id": "google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-07-17", + "last_updated": "2025-07-17", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.0375 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "google/gemini-2.5-pro-preview-05-06": { + "id": "google/gemini-2.5-pro-preview-05-06", + "name": "Gemini 2.5 Pro Preview 05-06", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-05-06", + "last_updated": "2025-05-06", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "google/gemma-3n-e4b-it": { + "id": "google/gemma-3n-e4b-it", + "name": "Gemma 3n E4B IT", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": [ + "text", + "image", + "audio" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + "google/gemini-2.5-flash-lite": { + "id": "google/gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "google/gemini-2.5-pro-preview-06-05": { + "id": "google/gemini-2.5-pro-preview-06-05", + "name": "Gemini 2.5 Pro Preview 06-05", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "google/gemini-2.5-flash-preview-09-2025": { + "id": "google/gemini-2.5-flash-preview-09-2025", + "name": "Gemini 2.5 Flash Preview 09-25", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.031 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "google/gemini-2.5-pro": { + "id": "google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.31 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "google/gemma-3-12b-it": { + "id": "google/gemma-3-12b-it", + "name": "Gemma 3 12B IT", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 96000, + "output": 8192 + } + }, + "google/gemma-3n-e4b-it:free": { + "id": "google/gemma-3n-e4b-it:free", + "name": "Gemma 3n 4B (free)", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "modalities": { + "input": [ + "text", + "image", + "audio" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + "google/gemini-2.5-flash-lite-preview-09-2025": { + "id": "google/gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + "google/gemini-2.0-flash-exp:free": { + "id": "google/gemini-2.0-flash-exp:free", + "name": "Gemini 2.0 Flash Experimental (free)", + "family": "gemini-flash", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 1048576, + "output": 1048576 + } + }, + "google/gemma-3-27b-it": { + "id": "google/gemma-3-27b-it", + "name": "Gemma 3 27B IT", + "family": "gemma", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 96000, + "output": 8192 + } + }, + "microsoft/mai-ds-r1:free": { + "id": "microsoft/mai-ds-r1:free", + "name": "MAI DS R1 (free)", + "family": "mai", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-21", + "last_updated": "2025-04-21", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 163840, + "output": 163840 + } + }, + "openai/gpt-oss-safeguard-20b": { + "id": "openai/gpt-oss-safeguard-20b", + "name": "GPT OSS Safeguard 20B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-29", + "last_updated": "2025-10-29", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.075, + "output": 0.3 + }, + "limit": { + "context": 131072, + "output": 65536 + } + }, + "openai/gpt-5.2-codex": { + "id": "openai/gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-5.1-codex": { + "id": "openai/gpt-5.1-codex", + "name": "GPT-5.1-Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-4.1-mini": { + "id": "openai/gpt-4.1-mini", + "name": "GPT-4.1 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 + }, + "limit": { + "context": 1047576, + "output": 32768 + } + }, + "openai/gpt-5-chat": { + "id": "openai/gpt-5-chat", + "name": "GPT-5 Chat (latest)", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-5.2-pro": { + "id": "openai/gpt-5.2-pro", + "name": "GPT-5.2 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 21, + "output": 168 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-5.1-codex-mini": { + "id": "openai/gpt-5.1-codex-mini", + "name": "GPT-5.1-Codex-Mini", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.25, + "output": 2, + "cache_read": 0.025 + }, + "limit": { + "context": 400000, + "output": 100000 + } + }, + "openai/gpt-5.2-chat-latest": { + "id": "openai/gpt-5.2-chat-latest", + "name": "GPT-5.2 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + }, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "openai/gpt-5.1": { + "id": "openai/gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-5-nano": { + "id": "openai/gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.05, + "output": 0.4 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-5-codex": { + "id": "openai/gpt-5-codex", + "name": "GPT-5 Codex", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-4.1": { + "id": "openai/gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2, + "output": 8, + "cache_read": 0.5 + }, + "limit": { + "context": 1047576, + "output": 32768 + } + }, + "openai/gpt-oss-120b:exacto": { + "id": "openai/gpt-oss-120b:exacto", + "name": "GPT OSS 120B (exacto)", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.05, + "output": 0.24 + }, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "openai/o4-mini": { + "id": "openai/o4-mini", + "name": "o4 Mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.1, + "output": 4.4, + "cache_read": 0.28 + }, + "limit": { + "context": 200000, + "output": 100000 + } + }, + "openai/gpt-5.1-chat": { + "id": "openai/gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10, + "cache_read": 0.125 + }, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "openai/gpt-5-mini": { + "id": "openai/gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.25, + "output": 2 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-5-image": { + "id": "openai/gpt-5-image", + "name": "GPT-5 Image", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-10-14", + "last_updated": "2025-10-14", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text", + "image" + ] + }, + "open_weights": false, + "cost": { + "input": 5, + "output": 10, + "cache_read": 1.25 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-5.1-codex-max": { + "id": "openai/gpt-5.1-codex-max", + "name": "GPT-5.1-Codex-Max", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, + "tool_call": true, + "structured_output": true, + "temperature": true, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.1, + "output": 9, + "cache_read": 0.11 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-oss-20b": { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.05, + "output": 0.2 + }, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "openai/gpt-oss-120b": { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.072, + "output": 0.28 + }, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "openai/gpt-4o-mini": { + "id": "openai/gpt-4o-mini", + "name": "GPT-4o-mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.15, + "output": 0.6, + "cache_read": 0.08 + }, + "limit": { + "context": 128000, + "output": 16384 + } + }, + "openai/gpt-5": { + "id": "openai/gpt-5", + "name": "GPT-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10-01", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openai/gpt-5-pro": { + "id": "openai/gpt-5-pro", + "name": "GPT-5 Pro", + "family": "gpt-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 15, + "output": 120 + }, + "limit": { + "context": 400000, + "output": 272000 + } + }, + "openai/gpt-5.2": { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.75, + "output": 14, + "cache_read": 0.175 + }, + "limit": { + "context": 400000, + "output": 128000 + } + }, + "openrouter/sherlock-think-alpha": { + "id": "openrouter/sherlock-think-alpha", + "name": "Sherlock Think Alpha", + "family": "sherlock", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-11", + "release_date": "2025-11-15", + "last_updated": "2025-12-14", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 1840000, + "output": 0 + } + }, + "openrouter/sherlock-dash-alpha": { + "id": "openrouter/sherlock-dash-alpha", + "name": "Sherlock Dash Alpha", + "family": "sherlock", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-11", + "release_date": "2025-11-15", + "last_updated": "2025-12-14", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 1840000, + "output": 0 + } + }, + "z-ai/glm-4.7": { + "id": "z-ai/glm-4.7", + "name": "GLM-4.7", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "interleaved": { + "field": "reasoning_details" + }, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11 + }, + "limit": { + "context": 204800, + "output": 131072 + }, + "provider": { + "npm": "@openrouter/ai-sdk-provider" + } + }, + "z-ai/glm-4.5": { + "id": "z-ai/glm-4.5", + "name": "GLM 4.5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.2 + }, + "limit": { + "context": 128000, + "output": 96000 + } + }, + "z-ai/glm-4.5-air": { + "id": "z-ai/glm-4.5-air", + "name": "GLM 4.5 Air", + "family": "glm-air", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.2, + "output": 1.1 + }, + "limit": { + "context": 128000, + "output": 96000 + } + }, + "z-ai/glm-4.5v": { + "id": "z-ai/glm-4.5v", + "name": "GLM 4.5V", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 1.8 + }, + "limit": { + "context": 64000, + "output": 16384 + } + }, + "z-ai/glm-4.6": { + "id": "z-ai/glm-4.6", + "name": "GLM 4.6", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.2, + "cache_read": 0.11 + }, + "limit": { + "context": 200000, + "output": 128000 + } + }, + "z-ai/glm-4.6:exacto": { + "id": "z-ai/glm-4.6:exacto", + "name": "GLM 4.6 (exacto)", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-09", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 1.9, + "cache_read": 0.11 + }, + "limit": { + "context": 200000, + "output": 128000 + } + }, + "z-ai/glm-4.5-air:free": { + "id": "z-ai/glm-4.5-air:free", + "name": "GLM 4.5 Air (free)", + "family": "glm-air", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 128000, + "output": 96000 + } + }, + "qwen/qwen3-coder": { + "id": "qwen/qwen3-coder", + "name": "Qwen3 Coder", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 1.2 + }, + "limit": { + "context": 262144, + "output": 66536 + } + }, + "qwen/qwen3-32b:free": { + "id": "qwen/qwen3-32b:free", + "name": "Qwen3 32B (free)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 40960, + "output": 40960 + } + }, + "qwen/qwen3-next-80b-a3b-instruct": { + "id": "qwen/qwen3-next-80b-a3b-instruct", + "name": "Qwen3 Next 80B A3B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.14, + "output": 1.4 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "qwen/qwen-2.5-coder-32b-instruct": { + "id": "qwen/qwen-2.5-coder-32b-instruct", + "name": "Qwen2.5 Coder 32B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-11-11", + "last_updated": "2024-11-11", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 8192 + } + }, + "qwen/qwen3-235b-a22b:free": { + "id": "qwen/qwen3-235b-a22b:free", + "name": "Qwen3 235B A22B (free)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "qwen/qwen3-coder-flash": { + "id": "qwen/qwen3-coder-flash", + "name": "Qwen3 Coder Flash", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "structured_output": false, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 1.5 + }, + "limit": { + "context": 128000, + "output": 66536 + } + }, + "qwen/qwq-32b:free": { + "id": "qwen/qwq-32b:free", + "name": "QwQ 32B (free)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "qwen/qwen3-30b-a3b-thinking-2507": { + "id": "qwen/qwen3-30b-a3b-thinking-2507", + "name": "Qwen3 30B A3B Thinking 2507", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.2, + "output": 0.8 + }, + "limit": { + "context": 262000, + "output": 262000 + } + }, + "qwen/qwen3-30b-a3b:free": { + "id": "qwen/qwen3-30b-a3b:free", + "name": "Qwen3 30B A3B (free)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 40960, + "output": 40960 + } + }, + "qwen/qwen2.5-vl-72b-instruct": { + "id": "qwen/qwen2.5-vl-72b-instruct", + "name": "Qwen2.5 VL 72B Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-02-01", + "last_updated": "2025-02-01", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 8192 + } + }, + "qwen/qwen3-14b:free": { + "id": "qwen/qwen3-14b:free", + "name": "Qwen3 14B (free)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 40960, + "output": 40960 + } + }, + "qwen/qwen3-30b-a3b-instruct-2507": { + "id": "qwen/qwen3-30b-a3b-instruct-2507", + "name": "Qwen3 30B A3B Instruct 2507", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.2, + "output": 0.8 + }, + "limit": { + "context": 262000, + "output": 262000 + } + }, + "qwen/qwen3-coder-30b-a3b-instruct": { + "id": "qwen/qwen3-coder-30b-a3b-instruct", + "name": "Qwen3 Coder 30B A3B Instruct", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.07, + "output": 0.27 + }, + "limit": { + "context": 160000, + "output": 65536 + } + }, + "qwen/qwen3-235b-a22b-thinking-2507": { + "id": "qwen/qwen3-235b-a22b-thinking-2507", + "name": "Qwen3 235B A22B Thinking 2507", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.078, + "output": 0.312 + }, + "limit": { + "context": 262144, + "output": 81920 + } + }, + "qwen/qwen2.5-vl-32b-instruct:free": { + "id": "qwen/qwen2.5-vl-32b-instruct:free", + "name": "Qwen2.5 VL 32B Instruct (free)", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + "qwen/qwen2.5-vl-72b-instruct:free": { + "id": "qwen/qwen2.5-vl-72b-instruct:free", + "name": "Qwen2.5 VL 72B Instruct (free)", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02", + "release_date": "2025-02-01", + "last_updated": "2025-02-01", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "qwen/qwen3-235b-a22b-07-25:free": { + "id": "qwen/qwen3-235b-a22b-07-25:free", + "name": "Qwen3 235B A22B Instruct 2507 (free)", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-07-21", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 262144, + "output": 131072 + } + }, + "qwen/qwen3-coder:free": { + "id": "qwen/qwen3-coder:free", + "name": "Qwen3 Coder 480B A35B Instruct (free)", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 262144, + "output": 66536 + } + }, + "qwen/qwen3-235b-a22b-07-25": { + "id": "qwen/qwen3-235b-a22b-07-25", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-07-21", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.15, + "output": 0.85 + }, + "limit": { + "context": 262144, + "output": 131072 + } + }, + "qwen/qwen3-8b:free": { + "id": "qwen/qwen3-8b:free", + "name": "Qwen3 8B (free)", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 40960, + "output": 40960 + } + }, + "qwen/qwen3-max": { + "id": "qwen/qwen3-max", + "name": "Qwen3 Max", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.2, + "output": 6 + }, + "limit": { + "context": 262144, + "output": 32768 + } + }, + "qwen/qwen3-next-80b-a3b-thinking": { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen3 Next 80B A3B Thinking", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.14, + "output": 1.4 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "qwen/qwen3-coder:exacto": { + "id": "qwen/qwen3-coder:exacto", + "name": "Qwen3 Coder (exacto)", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.38, + "output": 1.53 + }, + "limit": { + "context": 131072, + "output": 32768 + } + }, + "mistralai/devstral-medium-2507": { + "id": "mistralai/devstral-medium-2507", + "name": "Devstral Medium", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.4, + "output": 2 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "mistralai/devstral-2512:free": { + "id": "mistralai/devstral-2512:free", + "name": "Devstral 2 2512 (free)", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "mistralai/devstral-2512": { + "id": "mistralai/devstral-2512", + "name": "Devstral 2 2512", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.15, + "output": 0.6 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "mistralai/codestral-2508": { + "id": "mistralai/codestral-2508", + "name": "Codestral 2508", + "family": "codestral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 0.9 + }, + "limit": { + "context": 256000, + "output": 256000 + } + }, + "mistralai/mistral-7b-instruct:free": { + "id": "mistralai/mistral-7b-instruct:free", + "name": "Mistral 7B Instruct (free)", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-05", + "release_date": "2024-05-27", + "last_updated": "2024-05-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "mistralai/devstral-small-2505": { + "id": "mistralai/devstral-small-2505", + "name": "Devstral Small", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.06, + "output": 0.12 + }, + "limit": { + "context": 128000, + "output": 128000 + } + }, + "mistralai/mistral-small-3.2-24b-instruct": { + "id": "mistralai/mistral-small-3.2-24b-instruct", + "name": "Mistral Small 3.2 24B Instruct", + "family": "mistral-small", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 96000, + "output": 8192 + } + }, + "mistralai/devstral-small-2505:free": { + "id": "mistralai/devstral-small-2505:free", + "name": "Devstral Small 2505 (free)", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-21", + "last_updated": "2025-05-21", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 32768 + } + }, + "mistralai/mistral-small-3.2-24b-instruct:free": { + "id": "mistralai/mistral-small-3.2-24b-instruct:free", + "name": "Mistral Small 3.2 24B (free)", + "family": "mistral-small", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 96000, + "output": 96000 + } + }, + "mistralai/mistral-medium-3": { + "id": "mistralai/mistral-medium-3", + "name": "Mistral Medium 3", + "family": "mistral-medium", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.4, + "output": 2 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "mistralai/mistral-small-3.1-24b-instruct": { + "id": "mistralai/mistral-small-3.1-24b-instruct", + "name": "Mistral Small 3.1 24B Instruct", + "family": "mistral-small", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-17", + "last_updated": "2025-03-17", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 128000, + "output": 8192 + } + }, + "mistralai/devstral-small-2507": { + "id": "mistralai/devstral-small-2507", + "name": "Devstral Small 1.1", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.1, + "output": 0.3 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "mistralai/mistral-medium-3.1": { + "id": "mistralai/mistral-medium-3.1", + "name": "Mistral Medium 3.1", + "family": "mistral-medium", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.4, + "output": 2 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + "mistralai/mistral-nemo:free": { + "id": "mistralai/mistral-nemo:free", + "name": "Mistral Nemo (free)", + "family": "mistral-nemo", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2024-07-19", + "last_updated": "2024-07-19", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 131072, + "output": 131072 + } + }, + "rekaai/reka-flash-3": { + "id": "rekaai/reka-flash-3", + "name": "Reka Flash 3", + "family": "reka", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 8192 + } + }, + "meta-llama/llama-3.2-11b-vision-instruct": { + "id": "meta-llama/llama-3.2-11b-vision-instruct", + "name": "Llama 3.2 11B Vision Instruct", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2023-12", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 131072, + "output": 8192 + } + }, + "meta-llama/llama-3.3-70b-instruct:free": { + "id": "meta-llama/llama-3.3-70b-instruct:free", + "name": "Llama 3.3 70B Instruct (free)", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 65536, + "output": 65536 + } + }, + "meta-llama/llama-4-scout:free": { + "id": "meta-llama/llama-4-scout:free", + "name": "Llama 4 Scout (free)", + "family": "llama", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 64000, + "output": 64000 + } + }, + "anthropic/claude-opus-4": { + "id": "anthropic/claude-opus-4", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + }, + "limit": { + "context": 200000, + "output": 32000 + } + }, + "anthropic/claude-haiku-4.5": { + "id": "anthropic/claude-haiku-4.5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1, + "output": 5, + "cache_read": 0.1, + "cache_write": 1.25 + }, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "anthropic/claude-opus-4.1": { + "id": "anthropic/claude-opus-4.1", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + }, + "limit": { + "context": 200000, + "output": 32000 + } + }, + "anthropic/claude-3.7-sonnet": { + "id": "anthropic/claude-3.7-sonnet", + "name": "Claude Sonnet 3.7", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-01", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 15, + "output": 75, + "cache_read": 1.5, + "cache_write": 18.75 + }, + "limit": { + "context": 200000, + "output": 128000 + } + }, + "anthropic/claude-3.5-haiku": { + "id": "anthropic/claude-3.5-haiku", + "name": "Claude Haiku 3.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-07-31", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.8, + "output": 4, + "cache_read": 0.08, + "cache_write": 1 + }, + "limit": { + "context": 200000, + "output": 8192 + } + }, + "anthropic/claude-sonnet-4": { + "id": "anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + }, + "limit": { + "context": 200000, + "output": 64000 + } + }, + "anthropic/claude-opus-4.5": { + "id": "anthropic/claude-opus-4.5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05-30", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5, + "output": 25, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 200000, + "output": 32000 + } + }, + "anthropic/claude-sonnet-4.5": { + "id": "anthropic/claude-sonnet-4.5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3, + "output": 15, + "cache_read": 0.3, + "cache_write": 3.75, + "context_over_200k": { + "input": 6, + "output": 22.5, + "cache_read": 0.6, + "cache_write": 7.5 + } + }, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + "sarvamai/sarvam-m:free": { + "id": "sarvamai/sarvam-m:free", + "name": "Sarvam-M (free)", + "family": "sarvam", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-25", + "last_updated": "2025-05-25", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0, + "output": 0 + }, + "limit": { + "context": 32768, + "output": 32768 + } + } + } +} diff --git a/js/src/index.js b/js/src/index.js index b97b152..3188fff 100755 --- a/js/src/index.js +++ b/js/src/index.js @@ -63,11 +63,16 @@ process.on('uncaughtException', (error) => { process.on('unhandledRejection', (reason, _promise) => { hasError = true; - outputError({ + const errorOutput = { errorType: 'UnhandledRejection', message: reason?.message || String(reason), stack: reason?.stack, - }); + }; + // If the error has a data property with a suggestion (e.g., ProviderModelNotFoundError), add it as a hint + if (reason?.data?.suggestion) { + errorOutput.hint = reason.data.suggestion; + } + outputError(errorOutput); process.exit(1); }); diff --git a/js/src/provider/provider.ts b/js/src/provider/provider.ts index 17faf68..8c6adbc 100644 --- a/js/src/provider/provider.ts +++ b/js/src/provider/provider.ts @@ -909,7 +909,23 @@ export namespace Provider { log.info(() => ({ message: 'getModel', providerID, modelID })); const provider = s.providers[providerID]; - if (!provider) throw new ModelNotFoundError({ providerID, modelID }); + if (!provider) { + // Check if this model ID might exist in another provider (e.g., OpenRouter) + // This helps users who use formats like "z-ai/glm-4.7" instead of "openrouter/z-ai/glm-4.7" + const fullModelKey = `${providerID}/${modelID}`; + let suggestion: string | undefined; + + for (const [knownProviderID, knownProvider] of Object.entries( + s.providers + )) { + if (knownProvider.info.models[fullModelKey]) { + suggestion = `Did you mean: ${knownProviderID}/${fullModelKey}?`; + break; + } + } + + throw new ModelNotFoundError({ providerID, modelID, suggestion }); + } // For synthetic providers (like link-assistant/echo and link-assistant/cache), skip SDK loading // These providers have a custom getModel function that creates the model directly @@ -1077,6 +1093,7 @@ export namespace Provider { z.object({ providerID: z.string(), modelID: z.string(), + suggestion: z.string().optional(), }) ); From 1b385e22a7a63a0ccd22beed27304a75b473989f Mon Sep 17 00:00:00 2001 From: konard Date: Mon, 26 Jan 2026 11:04:00 +0100 Subject: [PATCH 3/4] Revert "Initial commit with task details" This reverts commit 5d2cdda6d69152e63fac315e3f43360d1c7a58ce. --- CLAUDE.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 52f1abf..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,5 +0,0 @@ -Issue to solve: https://github.com/link-assistant/agent/issues/135 -Your prepared branch: issue-135-473f8cde60bb -Your prepared working directory: /tmp/gh-issue-solver-1769420885314 - -Proceed. From 27834ef3f6b4bc34abc4073f317a802a973965bc Mon Sep 17 00:00:00 2001 From: konard Date: Mon, 26 Jan 2026 11:15:45 +0100 Subject: [PATCH 4/4] chore: add changeset for provider error improvement Co-Authored-By: Claude Sonnet 4.5 --- js/.changeset/improve-provider-error-messages.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 js/.changeset/improve-provider-error-messages.md diff --git a/js/.changeset/improve-provider-error-messages.md b/js/.changeset/improve-provider-error-messages.md new file mode 100644 index 0000000..ab9390a --- /dev/null +++ b/js/.changeset/improve-provider-error-messages.md @@ -0,0 +1,5 @@ +--- +'@link-assistant/agent': patch +--- + +Improve ProviderModelNotFoundError with helpful suggestions for OpenRouter models when provider is not found