88 lines
3.1 KiB
Markdown
88 lines
3.1 KiB
Markdown
# Model Fetching Investigation Report
|
|
|
|
## Summary
|
|
|
|
Investigated the model fetching system to determine what models are actually available for both Claude and Codex agents.
|
|
|
|
## Code Location
|
|
|
|
The model fetching logic is located in:
|
|
- **File**: `packages/server/src/server/agent/model-catalog.ts` (lines 22-101)
|
|
- **Main Function**: `fetchProviderModelCatalog(provider, options)`
|
|
- **Claude Function**: `fetchClaudeModelCatalog(options)` (lines 35-66)
|
|
- **Codex Function**: `fetchCodexModelCatalog()` (lines 68-101)
|
|
|
|
## How It Works
|
|
|
|
### Claude Model Fetching
|
|
- Uses the Claude Agent SDK's `query.supportedModels()` method
|
|
- Creates a query instance with the given `cwd` (working directory)
|
|
- Returns models from the SDK with their display names and descriptions
|
|
|
|
### Codex Model Fetching
|
|
- Spawns the Codex binary (`codex app-server`) as a subprocess
|
|
- Communicates via JSON-RPC protocol
|
|
- Sends `initialize` followed by `model/list` requests
|
|
- Returns models with metadata including reasoning efforts
|
|
|
|
## Actual Models Returned
|
|
|
|
### Claude Models (3 total)
|
|
|
|
1. **Default (recommended)** (`default`)
|
|
- Description: "Sonnet 4.5 · Smartest model for daily use"
|
|
- Is Default: false
|
|
|
|
2. **Opus** (`opus`)
|
|
- Description: "Legacy: Opus 4.1 · Reaches usage limits faster"
|
|
- Is Default: false
|
|
|
|
3. **Haiku** (`haiku`)
|
|
- Description: "Haiku 4.5 · Fastest model for simple tasks"
|
|
- Is Default: false
|
|
|
|
### Codex Models (3 total)
|
|
|
|
1. **gpt-5.1-codex** (`gpt-5.1-codex`) ⭐ DEFAULT
|
|
- Description: "Optimized for codex."
|
|
- Is Default: true
|
|
- Model: gpt-5.1-codex
|
|
- Default Reasoning Effort: medium
|
|
|
|
2. **gpt-5.1-codex-mini** (`gpt-5.1-codex-mini`)
|
|
- Description: "Optimized for codex. Cheaper, faster, but less capable."
|
|
- Is Default: false
|
|
- Model: gpt-5.1-codex-mini
|
|
- Default Reasoning Effort: medium
|
|
|
|
3. **gpt-5.1** (`gpt-5.1`)
|
|
- Description: "Broad world knowledge with strong general reasoning."
|
|
- Is Default: false
|
|
- Model: gpt-5.1
|
|
- Default Reasoning Effort: medium
|
|
|
|
## Key Observations
|
|
|
|
1. **Claude models**: The model IDs returned are simplified (`default`, `opus`, `haiku`) rather than full model identifiers like `claude-sonnet-4-5-20250929`.
|
|
|
|
2. **Codex models**: All three models are available and properly marked with `isDefault` flag on `gpt-5.1-codex`.
|
|
|
|
3. **No Sonnet variant**: Interestingly, Claude returns a "default" model (which is Sonnet 4.5 based on the description) but doesn't expose a model ID called "sonnet" - only "default", "opus", and "haiku".
|
|
|
|
4. **Model resolution**: The `model-resolver.ts` file uses these catalogs to find the default model when none is specified, preferring models marked with `isDefault: true`.
|
|
|
|
## Testing Method
|
|
|
|
Created and ran a test script (`test-models.ts`) that directly imports and calls:
|
|
- `fetchClaudeModelCatalog()`
|
|
- `fetchCodexModelCatalog()`
|
|
|
|
Executed with: `npx tsx test-models.ts`
|
|
|
|
## Related Files
|
|
|
|
- `src/server/agent/model-catalog.ts` - Model fetching implementation
|
|
- `src/server/agent/model-resolver.ts` - Default model resolution
|
|
- `src/server/agent/model-catalog.e2e.test.ts` - End-to-end tests
|
|
- `src/server/session.ts:1589` - Usage in session handling (list_provider_models_response)
|