From 3407bf3055a0d72a8d97e060ce685dea19d921e7 Mon Sep 17 00:00:00 2001 From: Shaurya Rohatgi Date: Mon, 16 Feb 2026 15:30:27 -0800 Subject: [PATCH] adding reasoning high parameter and parsing reasoning content --- pkg/providers/http_provider.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/pkg/providers/http_provider.go b/pkg/providers/http_provider.go index 4cf2c6db2..67f31fd89 100644 --- a/pkg/providers/http_provider.go +++ b/pkg/providers/http_provider.go @@ -90,6 +90,12 @@ func (p *HTTPProvider) Chat(ctx context.Context, messages []Message, tools []Too } } + // K2-Think models require reasoning_effort parameter for proper tool calling + lowerModel := strings.ToLower(model) + if strings.Contains(lowerModel, "k2-think") { + requestBody["reasoning_effort"] = "high" + } + jsonData, err := json.Marshal(requestBody) if err != nil { return nil, fmt.Errorf("failed to marshal request: %w", err) @@ -127,8 +133,9 @@ func (p *HTTPProvider) parseResponse(body []byte) (*LLMResponse, error) { var apiResponse struct { Choices []struct { Message struct { - Content string `json:"content"` - ToolCalls []struct { + Content string `json:"content"` + ReasoningContent string `json:"reasoning_content"` // For reasoning models like K2-Think + ToolCalls []struct { ID string `json:"id"` Type string `json:"type"` Function *struct { @@ -185,8 +192,14 @@ func (p *HTTPProvider) parseResponse(body []byte) (*LLMResponse, error) { }) } + // For reasoning models (like K2-Think), use reasoning_content if content is null/empty + content := choice.Message.Content + if content == "" && choice.Message.ReasoningContent != "" { + content = choice.Message.ReasoningContent + } + return &LLMResponse{ - Content: choice.Message.Content, + Content: content, ToolCalls: toolCalls, FinishReason: choice.FinishReason, Usage: apiResponse.Usage,