go-openai icon indicating copy to clipboard operation
go-openai copied to clipboard

In the anthropic sonnet and opus models, the think mode is not returned correctly

Open griffinqiu opened this issue 4 months ago • 0 comments

Overview

In the anthropic sonnet and opus models, the think mode is not returned correctly

https://docs.anthropic.com/en/api/messages#body-thinking-budget-tokens

Problem phenomenon

Curl Request

$ llminvoker_test git:(master) ✗ curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \ '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 1500,
    "messages": [
        {"role": "user", "content": "Analyze Apple business model"}
    ],
    "thinking": {"budget_tokens": 1024, "type": "enabled"}
}'

Curl output

{
"id":"....",
"type":"message",
"role":"assistant",
"model":"claude-sonnet-4-20250514",
"content":[
  {"type":"thinking","thinking":"I'll analyze Apple's business model comprehensively, covering their key components, revenue streams, competitive advantages, and strategic approach.","signature":"..."},
  {"type":"text","text":"# Apple's Business Model Analysis\n\n## Core Business Model Components\n......."}
],
"stop_reason":"end_turn",
"stop_sequence":null,
"usage":{"input_tokens":40,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":943,"service_tier":"standard"}}%  

SDK request

package main

import (
	"context"
	"fmt"
	"os"

	openai "github.com/sashabaranov/go-openai"
)

func main() {
	cfg := openai.DefaultConfig(os.Getenv("ANTHROPIC_API_KEY"))
	cfg.BaseURL = "https://api.anthropic.com/v1"
	cfg.APIVersion = "2023-06-01"
	client := openai.NewClientWithConfig(cfg)
	resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: "claude-sonnet-4-20250514",
			Messages: []openai.ChatCompletionMessage{
				{
					Role:    openai.ChatMessageRoleUser,
					Content: "Analyze Apple business model",
				},
			},
			MaxTokens: 1500,
			ChatTemplateKwargs: map[string]any{
				"thinking": map[string]any{
					"budget_tokens": 1024,
					"type":          "enabled",
				},
			},
		},
	)
	if err != nil {
		fmt.Printf("ChatCompletion error: %v\n", err)
		return
	}

	fmt.Println(resp.Choices[0].Message.Content)
	fmt.Println(resp.Choices[0].Message.ReasoningContent)
}

SDK output

Content: # Apple's Business Model Analysis .........
Reasoning:

Hope Behavior

I would expect ReasoningContent to return the text of think, since the two are similar.

griffinqiu avatar Jun 24 '25 06:06 griffinqiu