SetModelOverride sets runtime model override(s) for this agent. The override(s) take precedence over the configured models. For alloy models, multiple providers can be passed and one will be randomly selected. Pass no arguments or nil providers to clear the override. SetModelOverride returns a snap
(models ...provider.Provider)
| 209 | // the deferred restore can detect concurrent changes via CAS. Callers |
| 210 | // that only need the side-effect can ignore the return value. |
| 211 | func (a *Agent) SetModelOverride(models ...provider.Provider) ModelOverrideSnapshot { |
| 212 | // Filter out nil providers |
| 213 | var validModels []provider.Provider |
| 214 | for _, m := range models { |
| 215 | if m != nil { |
| 216 | validModels = append(validModels, m) |
| 217 | } |
| 218 | } |
| 219 | |
| 220 | var ptr *[]provider.Provider |
| 221 | if len(validModels) == 0 { |
| 222 | a.modelOverrides.Store(nil) |
| 223 | slog.Debug("Cleared model override", "agent", a.name) |
| 224 | } else { |
| 225 | ptr = &validModels |
| 226 | a.modelOverrides.Store(ptr) |
| 227 | ids := make([]string, len(validModels)) |
| 228 | for i, m := range validModels { |
| 229 | ids[i] = m.ID().String() |
| 230 | } |
| 231 | slog.Debug("Set model override", "agent", a.name, "models", ids) |
| 232 | } |
| 233 | return ModelOverrideSnapshot{ptr: ptr} |
| 234 | } |
| 235 | |
| 236 | // HasModelOverride returns true if a model override is currently set. |
| 237 | func (a *Agent) HasModelOverride() bool { |