Skip to content

Commit c631b62

Browse files
committed
fix: pass Models map to RAG ManagersBuildConfig for model alias resolution
createRAGTool was not passing the Models map to rag.ManagersBuildConfig, causing RAG configs using model aliases for reranking to fail with 'model not found in configuration'. - Add Models field to config.Config - Populate runConfig.Models from cfg.Models in teamloader - Pass runConfig.Models through to ManagersBuildConfig in createRAGTool - Clone Models map in RuntimeConfig.Clone() to prevent shared state Assisted-By: docker-agent
1 parent dc8062b commit c631b62

4 files changed

Lines changed: 60 additions & 0 deletions

File tree

pkg/config/runtime.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package config
22

33
import (
44
"log/slog"
5+
"maps"
56
"slices"
67
"sync"
78

@@ -23,6 +24,7 @@ type Config struct {
2324
DefaultModel *latest.ModelConfig
2425
GlobalCodeMode bool
2526
WorkingDir string
27+
Models map[string]latest.ModelConfig
2628

2729
// Hook overrides from CLI flags
2830
HookPreToolUse []string
@@ -37,6 +39,7 @@ func (runConfig *RuntimeConfig) Clone() *RuntimeConfig {
3739
Config: runConfig.Config,
3840
}
3941
clone.EnvFiles = slices.Clone(runConfig.EnvFiles)
42+
clone.Models = maps.Clone(runConfig.Models)
4043
clone.DefaultModel = runConfig.DefaultModel.Clone()
4144
clone.HookPreToolUse = slices.Clone(runConfig.HookPreToolUse)
4245
clone.HookPostToolUse = slices.Clone(runConfig.HookPostToolUse)

pkg/config/runtime_clone_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,56 @@ func TestClone_EnvFilesIsolated(t *testing.T) {
5959
assert.Len(t, original.EnvFiles, 2, "original must not be modified when clone is mutated")
6060
assert.Len(t, clone.EnvFiles, 3)
6161
}
62+
63+
func TestClone_ModelsIsolated(t *testing.T) {
64+
temp := 0.7
65+
original := &RuntimeConfig{
66+
Config: Config{
67+
Models: map[string]latest.ModelConfig{
68+
"model1": {
69+
Provider: "openai",
70+
Model: "gpt-4o",
71+
Temperature: &temp,
72+
},
73+
},
74+
},
75+
}
76+
77+
clone := original.Clone()
78+
79+
// Mutate the clone's Models map
80+
clone.Models["model2"] = latest.ModelConfig{
81+
Provider: "anthropic",
82+
Model: "claude-3",
83+
}
84+
85+
// Mutate an existing model in the clone
86+
newTemp := 0.9
87+
clone.Models["model1"] = latest.ModelConfig{
88+
Provider: "openai",
89+
Model: "gpt-4o-mini",
90+
Temperature: &newTemp,
91+
}
92+
93+
// Original must not be affected by mutations to the clone
94+
assert.Len(t, original.Models, 1, "original must not have new models added")
95+
assert.Equal(t, "gpt-4o", original.Models["model1"].Model)
96+
assert.InDelta(t, 0.7, *original.Models["model1"].Temperature, 0.001)
97+
98+
// Clone should have the mutations
99+
assert.Len(t, clone.Models, 2)
100+
assert.Equal(t, "gpt-4o-mini", clone.Models["model1"].Model)
101+
assert.Equal(t, "claude-3", clone.Models["model2"].Model)
102+
}
103+
104+
func TestClone_NilModels(t *testing.T) {
105+
original := &RuntimeConfig{
106+
Config: Config{
107+
Models: nil,
108+
},
109+
}
110+
111+
clone := original.Clone()
112+
113+
assert.Nil(t, clone.Models)
114+
}

pkg/teamloader/registry.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ func createRAGTool(ctx context.Context, toolset latest.Toolset, parentDir string
368368
ParentDir: parentDir,
369369
ModelsGateway: runConfig.ModelsGateway,
370370
Env: runConfig.EnvProvider(),
371+
Models: runConfig.Models,
371372
})
372373
if err != nil {
373374
return nil, fmt.Errorf("failed to create RAG manager: %w", err)

pkg/teamloader/teamloader.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ func LoadWithConfig(ctx context.Context, agentSource config.Source, runConfig *c
121121
return nil, err
122122
}
123123

124+
// Make model definitions available to toolset creators (e.g., RAG reranking)
125+
runConfig.Models = cfg.Models
126+
124127
// Load agents
125128
parentDir := cmp.Or(agentSource.ParentDir(), runConfig.WorkingDir)
126129
configName := configNameFromSource(agentSource.Name())

0 commit comments

Comments
 (0)