on main help sign in
chore: enable thinking for anthropic models
commit19f1a2d34f782e352cfefd35585e17f2ac150f2e authorKujtim Hoxha <kujtimii.h@gmail.com> dateMon 30 Jun 2025, 11:01 (1 year ago) parent19c0e04
2 files changed+12−25
internal/config/config.go+5−2 internal/llm/provider/anthropic.go+7−23
internal/config/config.go+5−2
@@ -159,10 +159,13 @@ type Options struct {
159159type PreferredModel struct {
160160 ModelID string `json:"model_id"`
161161 Provider provider.InferenceProvider `json:"provider"`
162− // Overrides the default reasoning effort for this model
162+ // ReasoningEffort overrides the default reasoning effort for this model
163163 ReasoningEffort string `json:"reasoning_effort,omitempty"`
164− // Overrides the default max tokens for this model
164+ // MaxTokens overrides the default max tokens for this model
165165 MaxTokens int64 `json:"max_tokens,omitempty"`
166+
167+ // Think indicates if the model should think, only applicable for anthropic reasoning models
168+ Think bool `json:"think,omitempty"`
166169}
167170
168171type PreferredModels struct {
internal/llm/provider/anthropic.go+7−23
@@ -6,7 +6,6 @@ import (
66 "errors"
77 "fmt"
88 "io"
9− "strings"
109 "time"
1110
1211 "github.com/anthropics/anthropic-sdk-go"
@@ -150,28 +149,18 @@ func (a *anthropicClient) finishReason(reason string) message.FinishReason {
150149func (a *anthropicClient) preparedMessages(messages []anthropic.MessageParam, tools []anthropic.ToolUnionParam) anthropic.MessageNewParams {
151150 model := a.providerOptions.model(a.providerOptions.modelType)
152151 var thinkingParam anthropic.ThinkingConfigParamUnion
153− // TODO: Implement a proper thinking function
154− // lastMessage := messages[len(messages)-1]
155− // isUser := lastMessage.Role == anthropic.MessageParamRoleUser
156− // messageContent := ""
157− temperature := anthropic.Float(0)
158− // if isUser {
159− // for _, m := range lastMessage.Content {
160− // if m.OfText != nil && m.OfText.Text != "" {
161− // messageContent = m.OfText.Text
162− // }
163− // }
164− // if messageContent != "" && a.shouldThink != nil && a.options.shouldThink(messageContent) {
165− // thinkingParam = anthropic.ThinkingConfigParamOfEnabled(int64(float64(a.providerOptions.maxTokens) * 0.8))
166− // temperature = anthropic.Float(1)
167− // }
168− // }
169−
170152 cfg := config.Get()
171153 modelConfig := cfg.Models.Large
172154 if a.providerOptions.modelType == config.SmallModel {
173155 modelConfig = cfg.Models.Small
174156 }
157+ temperature := anthropic.Float(0)
158+
159+ if a.Model().CanReason && modelConfig.Think {
160+ thinkingParam = anthropic.ThinkingConfigParamOfEnabled(int64(float64(a.providerOptions.maxTokens) * 0.8))
161+ temperature = anthropic.Float(1)
162+ }
163+
175164 maxTokens := model.DefaultMaxTokens
176165 if modelConfig.MaxTokens > 0 {
177166 maxTokens = modelConfig.MaxTokens
@@ -456,8 +445,3 @@ func (a *anthropicClient) usage(msg anthropic.Message) TokenUsage {
456445func (a *anthropicClient) Model() config.Model {
457446 return a.providerOptions.model(a.providerOptions.modelType)
458447}
459−
460−// TODO: check if we need
461−func DefaultShouldThinkFn(s string) bool {
462− return strings.Contains(strings.ToLower(s), "think")
463−}