fix(agent): honor workspace config overrides in model routing
selectCandidates uses agent.Model/Candidates baked in at startup, which ignores per-request workspace config overrides (effProvider/effModel). When the workspace overrides the provider, skip routing and fallback candidates entirely to avoid cross-provider credential issues. When only the model is overridden, allow routing but use the effective model. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
2da1f1f2d7
commit
419f393d7d
1 changed files with 17 additions and 2 deletions
|
|
@ -972,17 +972,32 @@ func (al *AgentLoop) runLLMIteration(
|
||||||
iteration := 0
|
iteration := 0
|
||||||
var finalContent string
|
var finalContent string
|
||||||
|
|
||||||
// Resolve effective provider — workspace config overrides win
|
// Resolve effective provider/model — workspace config overrides win
|
||||||
effProvider := agent.Provider
|
effProvider := agent.Provider
|
||||||
|
effModel := agent.Model
|
||||||
if opts.effProvider != nil {
|
if opts.effProvider != nil {
|
||||||
effProvider = opts.effProvider
|
effProvider = opts.effProvider
|
||||||
}
|
}
|
||||||
|
if opts.effModel != "" {
|
||||||
|
effModel = opts.effModel
|
||||||
|
}
|
||||||
|
|
||||||
// Determine effective model tier for this conversation turn.
|
// Determine effective model tier for this conversation turn.
|
||||||
// selectCandidates evaluates routing once and the decision is sticky for
|
// selectCandidates evaluates routing once and the decision is sticky for
|
||||||
// all tool-follow-up iterations within the same turn so that a multi-step
|
// all tool-follow-up iterations within the same turn so that a multi-step
|
||||||
// tool chain doesn't switch models mid-way through.
|
// tool chain doesn't switch models mid-way through.
|
||||||
activeCandidates, activeModel := al.selectCandidates(agent, opts.UserMessage, messages)
|
var activeCandidates []providers.FallbackCandidate
|
||||||
|
var activeModel string
|
||||||
|
if opts.effProvider != nil {
|
||||||
|
// Workspace overrides the provider — skip routing and fallback
|
||||||
|
// candidates since they may reference different provider credentials.
|
||||||
|
activeModel = effModel
|
||||||
|
} else {
|
||||||
|
activeCandidates, activeModel = al.selectCandidates(agent, opts.UserMessage, messages)
|
||||||
|
if opts.effModel != "" {
|
||||||
|
activeModel = effModel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for iteration < agent.MaxIterations {
|
for iteration < agent.MaxIterations {
|
||||||
iteration++
|
iteration++
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue