From 09fa0a1b8860d109a47b15019943b4bf4551d3e1 Mon Sep 17 00:00:00 2001 From: muava12 Date: Tue, 24 Feb 2026 11:16:22 +0800 Subject: [PATCH] fix(agent): route fallback candidates to correct provider Look up each fallback candidate's provider configuration via GetModelConfig and CreateProviderFromConfig instead of reusing the primary agent's provider. This ensures candidates from different providers (e.g. Gemini, Groq) are routed correctly during fallback execution. --- pkg/agent/loop.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index b36f4a0c4..9128e894d 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -518,7 +518,21 @@ func (al *AgentLoop) runLLMIteration( if len(agent.Candidates) > 1 && al.fallback != nil { fbResult, fbErr := al.fallback.Execute(ctx, agent.Candidates, func(ctx context.Context, provider, model string) (*providers.LLMResponse, error) { - return agent.Provider.Chat(ctx, messages, providerToolDefs, model, map[string]any{ + candProvider := agent.Provider + candModelID := model + + // Attempt to dynamically route to the correct provider defined in model_list + if modelCfg, err := al.cfg.GetModelConfig(model); err == nil { + if modelCfg.Workspace == "" { + modelCfg.Workspace = al.cfg.WorkspacePath() + } + if p, mID, err := providers.CreateProviderFromConfig(modelCfg); err == nil { + candProvider = p + candModelID = mID + } + } + + return candProvider.Chat(ctx, messages, providerToolDefs, candModelID, map[string]any{ "max_tokens": agent.MaxTokens, "temperature": agent.Temperature, })