Skip to content

Commit e8080b7

Browse files
authored
Merge pull request #2324 from dgageot/board/rag-tool-missing-models-map-in-build-con-811e288b
fix: pass Models map to RAG ManagersBuildConfig for model alias resolution
2 parents dc8062b + c631b62 commit e8080b7

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)