feat(ai): add max thinking level
This commit is contained in:
@@ -204,7 +204,7 @@ The `api` field determines which streaming implementation is used:
|
||||
| `google-vertex` | Google Vertex AI API |
|
||||
| `bedrock-converse-stream` | Amazon Bedrock Converse API |
|
||||
|
||||
Most OpenAI-compatible providers work with `openai-completions`. Use model-level `thinkingLevelMap` for model-specific thinking levels, and `compat` for provider quirks:
|
||||
Most OpenAI-compatible providers work with `openai-completions`. Use model-level `thinkingLevelMap` for model-specific thinking levels, and `compat` for provider quirks. The `xhigh` and `max` levels are opt-in, require non-null map entries, and may be separated by unsupported holes:
|
||||
|
||||
```typescript
|
||||
models: [{
|
||||
@@ -216,7 +216,8 @@ models: [{
|
||||
low: null,
|
||||
medium: null,
|
||||
high: "default",
|
||||
xhigh: "max"
|
||||
xhigh: null,
|
||||
max: "max"
|
||||
},
|
||||
compat: {
|
||||
supportsDeveloperRole: false, // use "system" instead of "developer"
|
||||
@@ -684,7 +685,7 @@ interface ProviderModelConfig {
|
||||
reasoning: boolean;
|
||||
|
||||
/** Maps pi thinking levels to provider/model-specific values; null marks a level unsupported. */
|
||||
thinkingLevelMap?: Partial<Record<"off" | "minimal" | "low" | "medium" | "high" | "xhigh", string | null>>;
|
||||
thinkingLevelMap?: Partial<Record<"off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max", string | null>>;
|
||||
|
||||
/** Supported input types. */
|
||||
input: ("text" | "image")[];
|
||||
|
||||
@@ -1657,7 +1657,7 @@ if (model) {
|
||||
Get or set the thinking level. Level is clamped to model capabilities (non-reasoning models always use "off"). Changes emit `thinking_level_select`.
|
||||
|
||||
```typescript
|
||||
const current = pi.getThinkingLevel(); // "off" | "minimal" | "low" | "medium" | "high" | "xhigh"
|
||||
const current = pi.getThinkingLevel(); // "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max"
|
||||
pi.setThinkingLevel("high");
|
||||
```
|
||||
|
||||
|
||||
@@ -214,13 +214,13 @@ Current behavior:
|
||||
|
||||
### Thinking Level Map
|
||||
|
||||
Use `thinkingLevelMap` on a model to describe model-specific thinking controls. Keys are pi thinking levels: `off`, `minimal`, `low`, `medium`, `high`, `xhigh`.
|
||||
Use `thinkingLevelMap` on a model to describe model-specific thinking controls. Keys are pi thinking levels: `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`. Maps may contain holes; for example, a model can expose `high` and `max` without exposing `xhigh`.
|
||||
|
||||
Values are tristate:
|
||||
|
||||
| Value | Meaning |
|
||||
|-------|---------|
|
||||
| omitted | Level is supported and uses the provider's default mapping |
|
||||
| omitted | Standard levels through `high` use the provider's default mapping; extended `xhigh` and `max` levels are unsupported |
|
||||
| string | Level is supported and this value is sent to the provider |
|
||||
| `null` | Level is unsupported and hidden/skipped/clamped away |
|
||||
|
||||
@@ -235,7 +235,8 @@ Example for a model that only supports off, high, and max reasoning:
|
||||
"low": null,
|
||||
"medium": null,
|
||||
"high": "high",
|
||||
"xhigh": "max"
|
||||
"xhigh": null,
|
||||
"max": "max"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -286,9 +286,9 @@ Set the reasoning/thinking level for models that support it.
|
||||
{"type": "set_thinking_level", "level": "high"}
|
||||
```
|
||||
|
||||
Levels: `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`
|
||||
Levels: `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"`
|
||||
|
||||
Note: `"xhigh"` is only supported by OpenAI codex-max models.
|
||||
`"xhigh"` and `"max"` are exposed only when supported by the selected model. Some models, including GPT-5.6, expose both.
|
||||
|
||||
Response:
|
||||
```json
|
||||
|
||||
@@ -387,7 +387,7 @@ const available = await modelRegistry.getAvailable();
|
||||
|
||||
const { session } = await createAgentSession({
|
||||
model: opus,
|
||||
thinkingLevel: "medium", // off, minimal, low, medium, high, xhigh
|
||||
thinkingLevel: "medium", // off, minimal, low, medium, high, xhigh, max
|
||||
|
||||
// Models for cycling (Ctrl+P in interactive mode)
|
||||
scopedModels: [
|
||||
|
||||
@@ -29,7 +29,7 @@ Use `/trust` in interactive mode to save a project trust decision for future ses
|
||||
|---------|------|---------|-------------|
|
||||
| `defaultProvider` | string | - | Default provider (e.g., `"anthropic"`, `"openai"`) |
|
||||
| `defaultModel` | string | - | Default model ID |
|
||||
| `defaultThinkingLevel` | string | - | `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"` |
|
||||
| `defaultThinkingLevel` | string | - | `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"` |
|
||||
| `hideThinkingBlock` | boolean | `false` | Hide thinking blocks in output |
|
||||
| `showCacheMissNotices` | boolean | `false` | Show transcript notices for significant prompt-cache misses |
|
||||
| `thinkingBudgets` | object | - | Custom token budgets per thinking level |
|
||||
|
||||
@@ -109,6 +109,7 @@ vim ~/.pi/agent/themes/my-theme.json
|
||||
"thinkingMedium": "#00ffff",
|
||||
"thinkingHigh": "#ff00ff",
|
||||
"thinkingXhigh": "#ff0000",
|
||||
"thinkingMax": "#ff0088",
|
||||
"bashMode": "#ffaa00"
|
||||
}
|
||||
}
|
||||
@@ -139,13 +140,13 @@ vim ~/.pi/agent/themes/my-theme.json
|
||||
|
||||
- `name` is required, must be unique, and must not contain `/`.
|
||||
- `vars` is optional. Define reusable colors here, then reference them in `colors`.
|
||||
- `colors` must define all 51 required tokens.
|
||||
- `colors` must define all 51 required tokens. `thinkingMax` is optional and falls back to `thinkingXhigh`.
|
||||
|
||||
The `$schema` field enables editor auto-completion and validation.
|
||||
|
||||
## Color Tokens
|
||||
|
||||
Every theme must define all 51 color tokens. There are no optional colors.
|
||||
Every theme must define all 51 required color tokens. `thinkingMax` is optional for compatibility with existing themes; when omitted, it uses `thinkingXhigh`.
|
||||
|
||||
### Core UI (11 colors)
|
||||
|
||||
@@ -216,7 +217,7 @@ Every theme must define all 51 color tokens. There are no optional colors.
|
||||
| `syntaxOperator` | Operators |
|
||||
| `syntaxPunctuation` | Punctuation |
|
||||
|
||||
### Thinking Level Borders (6 colors)
|
||||
### Thinking Level Borders (6 required, 1 optional)
|
||||
|
||||
Editor border colors indicating thinking level (visual hierarchy from subtle to prominent):
|
||||
|
||||
@@ -228,6 +229,7 @@ Editor border colors indicating thinking level (visual hierarchy from subtle to
|
||||
| `thinkingMedium` | Medium thinking |
|
||||
| `thinkingHigh` | High thinking |
|
||||
| `thinkingXhigh` | Extra high thinking |
|
||||
| `thinkingMax` | Maximum thinking; optional, falls back to `thinkingXhigh` |
|
||||
|
||||
### Bash Mode (1 color)
|
||||
|
||||
|
||||
@@ -424,7 +424,7 @@ renderResult(result, options, theme, context) {
|
||||
| Diffs | `toolDiffAdded`, `toolDiffRemoved`, `toolDiffContext` |
|
||||
| Markdown | `mdHeading`, `mdLink`, `mdLinkUrl`, `mdCode`, `mdCodeBlock`, `mdCodeBlockBorder`, `mdQuote`, `mdQuoteBorder`, `mdHr`, `mdListBullet` |
|
||||
| Syntax | `syntaxComment`, `syntaxKeyword`, `syntaxFunction`, `syntaxVariable`, `syntaxString`, `syntaxNumber`, `syntaxType`, `syntaxOperator`, `syntaxPunctuation` |
|
||||
| Thinking | `thinkingOff`, `thinkingMinimal`, `thinkingLow`, `thinkingMedium`, `thinkingHigh`, `thinkingXhigh` |
|
||||
| Thinking | `thinkingOff`, `thinkingMinimal`, `thinkingLow`, `thinkingMedium`, `thinkingHigh`, `thinkingXhigh`, `thinkingMax` |
|
||||
| Modes | `bashMode` |
|
||||
|
||||
**Background colors** (`theme.bg(color, text)`):
|
||||
|
||||
@@ -183,7 +183,7 @@ cat README.md | pi -p "Summarize this text"
|
||||
| `--provider <name>` | Provider, such as `anthropic`, `openai`, or `google` |
|
||||
| `--model <pattern>` | Model pattern or ID; supports `provider/id` and optional `:<thinking>` |
|
||||
| `--api-key <key>` | API key, overriding environment variables |
|
||||
| `--thinking <level>` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh` |
|
||||
| `--thinking <level>` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` |
|
||||
| `--models <patterns>` | Comma-separated patterns for Ctrl+P cycling |
|
||||
| `--list-models [search]` | List available models |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user