mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-19 03:03:13 +00:00
feat: enhance model cycling with thinking levels and --thinking flag
PR #47 enhancements: - Add thinking level syntax to --models (e.g., --models sonnet:high,haiku:low) - First model in scope used as initial model when starting new session - Auto-apply thinking level when cycling models with Ctrl+P - Save both model and thinking to session AND settings for persistence - Simplify UX by removing autoThinkingDisabled flag - Fix model matching to prioritize exact matches over partial - Support provider/modelId format (e.g., openrouter/openai/gpt-5.1-codex) Issue #45: - Add --thinking CLI flag to set thinking level directly - Takes highest priority over all other thinking level sources Closes #45
This commit is contained in:
parent
df3af27288
commit
ba8c073ed2
5 changed files with 117 additions and 31 deletions
|
|
@ -91,9 +91,6 @@ export class TuiRenderer {
|
|||
// Model scope for quick cycling
|
||||
private scopedModels: Array<{ model: Model<any>; thinkingLevel: ThinkingLevel }> = [];
|
||||
|
||||
// Track if user manually changed thinking (disables auto-thinking from model cycling)
|
||||
private autoThinkingDisabled = false;
|
||||
|
||||
// Tool output expansion state
|
||||
private toolOutputExpanded = false;
|
||||
|
||||
|
|
@ -789,11 +786,9 @@ export class TuiRenderer {
|
|||
// Apply the new thinking level
|
||||
this.agent.setThinkingLevel(nextLevel);
|
||||
|
||||
// Disable auto-thinking since user manually changed it
|
||||
this.autoThinkingDisabled = true;
|
||||
|
||||
// Save thinking level change to session
|
||||
// Save thinking level change to session and settings
|
||||
this.sessionManager.saveThinkingLevelChange(nextLevel);
|
||||
this.settingsManager.setDefaultThinkingLevel(nextLevel);
|
||||
|
||||
// Update border color
|
||||
this.updateEditorBorderColor();
|
||||
|
|
@ -840,17 +835,16 @@ export class TuiRenderer {
|
|||
// Switch model
|
||||
this.agent.setModel(nextModel);
|
||||
|
||||
// Apply thinking level if not disabled and model supports it
|
||||
if (!this.autoThinkingDisabled && nextModel.reasoning) {
|
||||
this.agent.setThinkingLevel(nextThinking);
|
||||
this.sessionManager.saveThinkingLevelChange(nextThinking);
|
||||
this.updateEditorBorderColor();
|
||||
} else if (!this.autoThinkingDisabled && !nextModel.reasoning && nextThinking !== "off") {
|
||||
// Model doesn't support thinking but user requested it - silently ignore
|
||||
this.agent.setThinkingLevel("off");
|
||||
this.sessionManager.saveThinkingLevelChange("off");
|
||||
this.updateEditorBorderColor();
|
||||
}
|
||||
// Save model change to session and settings
|
||||
this.sessionManager.saveModelChange(nextModel.provider, nextModel.id);
|
||||
this.settingsManager.setDefaultModelAndProvider(nextModel.provider, nextModel.id);
|
||||
|
||||
// Apply thinking level (silently use "off" if model doesn't support thinking)
|
||||
const effectiveThinking = nextModel.reasoning ? nextThinking : "off";
|
||||
this.agent.setThinkingLevel(effectiveThinking);
|
||||
this.sessionManager.saveThinkingLevelChange(effectiveThinking);
|
||||
this.settingsManager.setDefaultThinkingLevel(effectiveThinking);
|
||||
this.updateEditorBorderColor();
|
||||
|
||||
// Show notification
|
||||
this.chatContainer.addChild(new Spacer(1));
|
||||
|
|
@ -874,7 +868,7 @@ export class TuiRenderer {
|
|||
|
||||
if (availableModels.length === 1) {
|
||||
this.chatContainer.addChild(new Spacer(1));
|
||||
this.chatContainer.addChild(new Text(theme.fg("dim", "Only one model in scope"), 1, 0));
|
||||
this.chatContainer.addChild(new Text(theme.fg("dim", "Only one model available"), 1, 0));
|
||||
this.ui.requestRender();
|
||||
return;
|
||||
}
|
||||
|
|
@ -902,6 +896,10 @@ export class TuiRenderer {
|
|||
// Switch model
|
||||
this.agent.setModel(nextModel);
|
||||
|
||||
// Save model change to session and settings
|
||||
this.sessionManager.saveModelChange(nextModel.provider, nextModel.id);
|
||||
this.settingsManager.setDefaultModelAndProvider(nextModel.provider, nextModel.id);
|
||||
|
||||
// Show notification
|
||||
this.chatContainer.addChild(new Spacer(1));
|
||||
this.chatContainer.addChild(new Text(theme.fg("dim", `Switched to ${nextModel.name || nextModel.id}`), 1, 0));
|
||||
|
|
@ -949,11 +947,9 @@ export class TuiRenderer {
|
|||
// Apply the selected thinking level
|
||||
this.agent.setThinkingLevel(level);
|
||||
|
||||
// Disable auto-thinking since user manually changed it
|
||||
this.autoThinkingDisabled = true;
|
||||
|
||||
// Save thinking level change to session
|
||||
// Save thinking level change to session and settings
|
||||
this.sessionManager.saveThinkingLevelChange(level);
|
||||
this.settingsManager.setDefaultThinkingLevel(level);
|
||||
|
||||
// Update border color
|
||||
this.updateEditorBorderColor();
|
||||
|
|
@ -1107,9 +1103,6 @@ export class TuiRenderer {
|
|||
// Apply the selected model
|
||||
this.agent.setModel(model);
|
||||
|
||||
// Clear scoped models since user manually selected a model
|
||||
this.scopedModels = [];
|
||||
|
||||
// Save model change to session
|
||||
this.sessionManager.saveModelChange(model.provider, model.id);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue