diff --git a/cmd/olliesrv/internal/backend/kiro.go b/cmd/olliesrv/internal/backend/kiro.go index 902d2b6..ea3fa7b 100644 --- a/cmd/olliesrv/internal/backend/kiro.go +++ b/cmd/olliesrv/internal/backend/kiro.go @@ -283,6 +283,19 @@ func kiroSanitizeModel(model string) string { return model } +// kiroModelSupportsThinking returns true if the model supports +// additionalModelRequestFields for thinking/reasoning configuration. +// Only explicit model names are supported; "auto" routes through Kiro's +// model selection which may choose models that don't support this field. +func kiroModelSupportsThinking(model string) bool { + switch model { + case "claude-opus-4-5", "claude-opus-4", "claude-sonnet-4-5", "claude-sonnet-4": + return true + default: + return false + } +} + func buildKiroRequest(model string, messages []Message, tools []Tool, profileARN string, params GenerationParams) (*kiroGenerateRequest, error) { model = kiroSanitizeModel(model) if len(messages) == 0 { @@ -349,8 +362,12 @@ func buildKiroRequest(model string, messages []Message, tools []Tool, profileARN } // Set additionalModelRequestFields for reasoning/thinking support. - if fields := kiroModelRequestFieldsFromParams(params); fields != nil { - req.AdditionalModelRequestFields = fields + // Only set for models known to support it (claude-opus-4, claude-sonnet-4). + // Other models (including "auto") may route to models that reject this field. + if kiroModelSupportsThinking(model) { + if fields := kiroModelRequestFieldsFromParams(params); fields != nil { + req.AdditionalModelRequestFields = fields + } } return req, nil