@@ -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+ }
0 commit comments