MCPcopy Index your code
hub / github.com/docker/docker-agent / applyAgentThinkingLevel

Method applyAgentThinkingLevel

pkg/runtime/model_switcher.go:229–272  ·  view source on GitHub ↗

applyAgentThinkingLevel resolves the agent's current model, asks pick to choose the target level among the model's supported ones, re-creates the effective provider(s) with that level, and installs them as a runtime override.

(ctx context.Context, agentName string, pick func(supported []effort.Level, current effort.Level) (effort.Level, error))

Source from the content-addressed store, hash-verified

227// effective provider(s) with that level, and installs them as a runtime
228// override.
229func (r *LocalRuntime) applyAgentThinkingLevel(ctx context.Context, agentName string, pick func(supported []effort.Level, current effort.Level) (effort.Level, error)) (effort.Level, error) {
230 if r.modelSwitcherCfg == nil {
231 return "", ErrUnsupported
232 }
233
234 a, err := r.team.Agent(agentName)
235 if err != nil {
236 return "", fmt.Errorf("agent not found: %w", err)
237 }
238
239 models := a.EffectiveModels()
240 if len(models) == 0 {
241 return "", errors.New("agent has no model configured")
242 }
243
244 baseCfg := models[0].BaseConfig().ModelConfig
245 if !r.modelSupportsThinking(ctx, &baseCfg) {
246 return "", fmt.Errorf("model %q does not support thinking levels: %w", baseCfg.DisplayOrModel(), ErrUnsupported)
247 }
248
249 supported := modelinfo.SupportedThinkingLevels(baseCfg.Provider, baseCfg.Model)
250 next, err := pick(supported, currentThinkingLevel(&baseCfg))
251 if err != nil {
252 return "", err
253 }
254
255 // Re-create each effective provider (alloy models can have several) with
256 // the new thinking level so the override preserves the existing pool.
257 newProviders := make([]provider.Provider, 0, len(models))
258 for _, m := range models {
259 mc := m.BaseConfig().ModelConfig
260 cfg := mc.Clone()
261 cfg.ThinkingBudget = &latest.ThinkingBudget{Effort: string(next)}
262 prov, err := r.createProviderFromConfig(ctx, cfg)
263 if err != nil {
264 return "", fmt.Errorf("failed to apply thinking level: %w", err)
265 }
266 newProviders = append(newProviders, prov)
267 }
268
269 a.SetModelOverride(newProviders...)
270 slog.InfoContext(ctx, "Set agent thinking level", "agent", agentName, "level", next)
271 return next, nil
272}
273
274// modelSupportsThinking reports whether cfg names a model that accepts a
275// user-selectable thinking-effort level. It first trusts an explicit,

Callers 2

SetAgentThinkingLevelMethod · 0.95

Calls 11

modelSupportsThinkingMethod · 0.95
SupportedThinkingLevelsFunction · 0.92
currentThinkingLevelFunction · 0.85
AgentMethod · 0.80
EffectiveModelsMethod · 0.80
SetModelOverrideMethod · 0.80
BaseConfigMethod · 0.65
NewMethod · 0.45
DisplayOrModelMethod · 0.45
CloneMethod · 0.45

Tested by

no test coverage detected