adding reasoning high parameter and parsing reasoning content

This commit is contained in:
Shaurya Rohatgi 2026-02-16 15:30:27 -08:00
parent 13e4028d42
commit 3407bf3055

View file

@ -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) jsonData, err := json.Marshal(requestBody)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to marshal request: %w", err) 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 { var apiResponse struct {
Choices []struct { Choices []struct {
Message struct { Message struct {
Content string `json:"content"` Content string `json:"content"`
ToolCalls []struct { ReasoningContent string `json:"reasoning_content"` // For reasoning models like K2-Think
ToolCalls []struct {
ID string `json:"id"` ID string `json:"id"`
Type string `json:"type"` Type string `json:"type"`
Function *struct { 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{ return &LLMResponse{
Content: choice.Message.Content, Content: content,
ToolCalls: toolCalls, ToolCalls: toolCalls,
FinishReason: choice.FinishReason, FinishReason: choice.FinishReason,
Usage: apiResponse.Usage, Usage: apiResponse.Usage,