mirror of
https://github.com/aljazceru/opencode.git
synced 2026-01-09 10:54:59 +01:00
add option to allow agent switches to not change model (#3356)
This commit is contained in:
@@ -253,22 +253,14 @@ func SetClipboard(text string) tea.Cmd {
|
|||||||
return tea.Sequence(cmds...)
|
return tea.Sequence(cmds...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) cycleMode(forward bool) (*App, tea.Cmd) {
|
func (a *App) updateModelForNewAgent() {
|
||||||
if forward {
|
singleModelEnv := os.Getenv("OPENCODE_AGENTS_SWITCH_SINGLE_MODEL")
|
||||||
a.AgentIndex++
|
isSingleModel := singleModelEnv == "1" || singleModelEnv == "true"
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if isSingleModel {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Set up model for the new agent
|
||||||
modelID := a.Agent().Model.ModelID
|
modelID := a.Agent().Model.ModelID
|
||||||
providerID := a.Agent().Model.ProviderID
|
providerID := a.Agent().Model.ProviderID
|
||||||
if modelID == "" {
|
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.Agent = a.Agent().Name
|
||||||
a.State.UpdateAgentUsage(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
|
a.updateModelForNewAgent()
|
||||||
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.State.Agent = a.Agent().Name
|
a.State.Agent = a.Agent().Name
|
||||||
a.State.UpdateAgentUsage(agentName)
|
a.State.UpdateAgentUsage(agentName)
|
||||||
|
|||||||
Reference in New Issue
Block a user