From 892439a17731d6a6dde02397afd38a87639f42e6 Mon Sep 17 00:00:00 2001 From: Kayvan Sylvan Date: Mon, 21 Apr 2025 13:17:03 -0700 Subject: [PATCH] chore: update Anthropic SDK to v0.2.0-beta.3 and migrate to V2 API ## CHANGES - Upgrade Anthropic SDK from alpha.11 to beta.3 - Update API endpoint from v1 to v2 - Replace anthropic.F() with direct assignment - Replace anthropic.F() with anthropic.Opt() for optional params - Simplify event delta handling in streaming - Change client type from pointer to value type - Update comment with SDK changelog reference --- go.mod | 2 +- go.sum | 2 ++ plugins/ai/anthropic/anthropic.go | 40 +++++++++++++++---------------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index 65176118..976e7b59 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.23.4 require ( github.com/anaskhan96/soup v1.2.5 - github.com/anthropics/anthropic-sdk-go v0.2.0-alpha.11 + github.com/anthropics/anthropic-sdk-go v0.2.0-beta.3 github.com/atotto/clipboard v0.1.4 github.com/gabriel-vasile/mimetype v1.4.8 github.com/gin-gonic/gin v1.10.0 diff --git a/go.sum b/go.sum index e3a24fbb..5e739ef3 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,8 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/anthropics/anthropic-sdk-go v0.2.0-alpha.11 h1:O3/AMObKntZyu1KH6Xks6E0gbE8w6HVaKHE+/vXARzM= github.com/anthropics/anthropic-sdk-go v0.2.0-alpha.11/go.mod h1:GJxtdOs9K4neo8Gg65CjJ7jNautmldGli5/OFNabOoo= +github.com/anthropics/anthropic-sdk-go v0.2.0-beta.3 h1:b5t1ZJMvV/l99y4jbz7kRFdUp3BSDkI8EhSlHczivtw= +github.com/anthropics/anthropic-sdk-go v0.2.0-beta.3/go.mod h1:AapDW22irxK2PSumZiQXYUFvsdQgkwIWlpESweWZI/c= github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA= github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= diff --git a/plugins/ai/anthropic/anthropic.go b/plugins/ai/anthropic/anthropic.go index d811c48d..731caac2 100644 --- a/plugins/ai/anthropic/anthropic.go +++ b/plugins/ai/anthropic/anthropic.go @@ -52,18 +52,18 @@ type Client struct { defaultRequiredUserMessage string models []string - client *anthropic.Client + client anthropic.Client } func (an *Client) configure() (err error) { if an.ApiBaseURL.Value != "" { baseURL := an.ApiBaseURL.Value - if strings.Contains(baseURL, "-") && !strings.HasSuffix(baseURL, "/v1") { - if strings.HasSuffix(baseURL, "/") { - baseURL = strings.TrimSuffix(baseURL, "/") - } - baseURL = baseURL + "/v1" + // As of 2.0beta1, using v2 API endpoint. + // https://github.com/anthropics/anthropic-sdk-go/blob/main/CHANGELOG.md#020-beta1-2025-03-25 + if strings.Contains(baseURL, "-") && !strings.HasSuffix(baseURL, "/v2") { + baseURL = strings.TrimSuffix(baseURL, "/") + baseURL = baseURL + "/v2" } an.client = anthropic.NewClient( @@ -87,21 +87,19 @@ func (an *Client) SendStream( ctx := context.Background() stream := an.client.Messages.NewStreaming(ctx, anthropic.MessageNewParams{ - Model: anthropic.F(opts.Model), - MaxTokens: anthropic.F(int64(an.maxTokens)), - TopP: anthropic.F(opts.TopP), - Temperature: anthropic.F(opts.Temperature), - Messages: anthropic.F(messages), + Model: opts.Model, + MaxTokens: int64(an.maxTokens), + TopP: anthropic.Opt(opts.TopP), + Temperature: anthropic.Opt(opts.Temperature), + Messages: messages, }) for stream.Next() { event := stream.Current() - switch delta := event.Delta.(type) { - case anthropic.ContentBlockDeltaEventDelta: - if delta.Text != "" { - channel <- delta.Text - } + // directly send any non-empty delta text + if event.Delta.Text != "" { + channel <- event.Delta.Text } } @@ -117,11 +115,11 @@ func (an *Client) Send(ctx context.Context, msgs []*goopenai.ChatCompletionMessa var message *anthropic.Message if message, err = an.client.Messages.New(ctx, anthropic.MessageNewParams{ - Model: anthropic.F(opts.Model), - MaxTokens: anthropic.F(int64(an.maxTokens)), - TopP: anthropic.F(opts.TopP), - Temperature: anthropic.F(opts.Temperature), - Messages: anthropic.F(messages), + Model: opts.Model, + MaxTokens: int64(an.maxTokens), + TopP: anthropic.Opt(opts.TopP), + Temperature: anthropic.Opt(opts.Temperature), + Messages: messages, }); err != nil { return }