Przeglądaj źródła

add option to allow agent switches to not change model (#3356)

geril07 4 miesięcy temu
rodzic
commit
c2ef930d2a
1 zmienionych plików z 27 dodań i 39 usunięć
  1. 27 39
      packages/tui/internal/app/app.go

+ 27 - 39
packages/tui/internal/app/app.go

@@ -253,22 +253,14 @@ func SetClipboard(text string) tea.Cmd {
 	return tea.Sequence(cmds...)
 }
 
-func (a *App) cycleMode(forward bool) (*App, tea.Cmd) {
-	if forward {
-		a.AgentIndex++
-		if a.AgentIndex >= len(a.Agents) {
-			a.AgentIndex = 0
-		}
-	} else {
-		a.AgentIndex--
-		if a.AgentIndex < 0 {
-			a.AgentIndex = len(a.Agents) - 1
-		}
-	}
-	if a.Agent().Mode == "subagent" {
-		return a.cycleMode(forward)
-	}
+func (a *App) updateModelForNewAgent() {
+	singleModelEnv := os.Getenv("OPENCODE_AGENTS_SWITCH_SINGLE_MODEL")
+	isSingleModel := singleModelEnv == "1" || singleModelEnv == "true"
 
+	if isSingleModel {
+		return
+	}
+	// Set up model for the new agent
 	modelID := a.Agent().Model.ModelID
 	providerID := a.Agent().Model.ProviderID
 	if modelID == "" {
@@ -292,6 +284,25 @@ func (a *App) cycleMode(forward bool) (*App, tea.Cmd) {
 			}
 		}
 	}
+}
+
+func (a *App) cycleMode(forward bool) (*App, tea.Cmd) {
+	if forward {
+		a.AgentIndex++
+		if a.AgentIndex >= len(a.Agents) {
+			a.AgentIndex = 0
+		}
+	} else {
+		a.AgentIndex--
+		if a.AgentIndex < 0 {
+			a.AgentIndex = len(a.Agents) - 1
+		}
+	}
+	if a.Agent().Mode == "subagent" {
+		return a.cycleMode(forward)
+	}
+
+	a.updateModelForNewAgent()
 
 	a.State.Agent = a.Agent().Name
 	a.State.UpdateAgentUsage(a.Agent().Name)
@@ -380,30 +391,7 @@ func (a *App) SwitchToAgent(agentName string) (*App, tea.Cmd) {
 		}
 	}
 
-	// Set up model for the new agent
-	modelID := a.Agent().Model.ModelID
-	providerID := a.Agent().Model.ProviderID
-	if modelID == "" {
-		if model, ok := a.State.AgentModel[a.Agent().Name]; ok {
-			modelID = model.ModelID
-			providerID = model.ProviderID
-		}
-	}
-
-	if modelID != "" {
-		for _, provider := range a.Providers {
-			if provider.ID == providerID {
-				a.Provider = &provider
-				for _, model := range provider.Models {
-					if model.ID == modelID {
-						a.Model = &model
-						break
-					}
-				}
-				break
-			}
-		}
-	}
+	a.updateModelForNewAgent()
 
 	a.State.Agent = a.Agent().Name
 	a.State.UpdateAgentUsage(agentName)