From c8f9a39a4021559302d668792d642edc2f07eae0 Mon Sep 17 00:00:00 2001 From: Kayvan Sylvan Date: Thu, 22 May 2025 11:26:04 -0700 Subject: [PATCH] feat: add support for Anthropic Claude 4 models and update SDK to v1.2.0 CHANGES - Upgrade `anthropic-sdk-go` dependency to version `v1.2.0`. - Integrate new Anthropic Claude 4 Opus and Sonnet models. - Remove deprecated Claude 2.0 and 2.1 models from list. - Adjust model type casting for `anthropic-sdk-go v1.2.0` compatibility. - Refresh README: announce Claude 4, update date, fix links. --- README.md | 8 ++++---- go.mod | 2 +- go.sum | 4 ++-- plugins/ai/anthropic/anthropic.go | 17 ++++++++--------- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 3bb8e90a..1b299fa8 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ Fabric is graciously supported by… [Updates](#updates) • [What and Why](#what-and-why) • [Philosophy](#philosophy) • -[Installation](#Installation) • -[Usage](#Usage) • +[Installation](#installation) • +[Usage](#usage) • [Examples](#examples) • [Just Use the Patterns](#just-use-the-patterns) • [Custom Patterns](#custom-patterns) • @@ -87,9 +87,9 @@ Fabric is graciously supported by… ## Updates > [!NOTE] -> April 16, 2025 +> May 22, 2025 > -> - Fabric now supports Grok (from XAI)! Update and use `-S` to select it as your default if you want, or just use the shortcut `-m grok-3-beta`. Enjoy! +> - Fabric now supports Anthropic's Claude 4. Read the [blog post from Anthropic](https://www.anthropic.com/news/claude-4). ## What and why diff --git a/go.mod b/go.mod index 962bdb45..6299a4cd 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.24.2 require ( github.com/anaskhan96/soup v1.2.5 - github.com/anthropics/anthropic-sdk-go v0.2.0-beta.3 + github.com/anthropics/anthropic-sdk-go v1.2.0 github.com/atotto/clipboard v0.1.4 github.com/gabriel-vasile/mimetype v1.4.9 github.com/gin-gonic/gin v1.10.0 diff --git a/go.sum b/go.sum index 51b8f23f..20e09fa2 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,8 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -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/anthropics/anthropic-sdk-go v1.2.0 h1:RQzJUqaROewrPTl7Rl4hId/TqmjFvfnkmhHJ6pP1yJ8= +github.com/anthropics/anthropic-sdk-go v1.2.0/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 661af721..9fbecb54 100644 --- a/plugins/ai/anthropic/anthropic.go +++ b/plugins/ai/anthropic/anthropic.go @@ -31,13 +31,12 @@ func NewClient() (ret *Client) { ret.maxTokens = 4096 ret.defaultRequiredUserMessage = "Hi" ret.models = []string{ - anthropic.ModelClaude3_7SonnetLatest, anthropic.ModelClaude3_7Sonnet20250219, - anthropic.ModelClaude3_5HaikuLatest, anthropic.ModelClaude3_5Haiku20241022, - anthropic.ModelClaude3_5SonnetLatest, anthropic.ModelClaude3_5Sonnet20241022, - anthropic.ModelClaude_3_5_Sonnet_20240620, anthropic.ModelClaude3OpusLatest, - anthropic.ModelClaude_3_Opus_20240229, anthropic.ModelClaude_3_Sonnet_20240229, - anthropic.ModelClaude_3_Haiku_20240307, anthropic.ModelClaude_2_1, - anthropic.ModelClaude_2_0, + string(anthropic.ModelClaude3_7SonnetLatest), string(anthropic.ModelClaude3_7Sonnet20250219), + string(anthropic.ModelClaude3_5HaikuLatest), string(anthropic.ModelClaude3_5Haiku20241022), + string(anthropic.ModelClaude3_5SonnetLatest), string(anthropic.ModelClaude3_5Sonnet20241022), + string(anthropic.ModelClaude_3_5_Sonnet_20240620), string(anthropic.ModelClaude3OpusLatest), + string(anthropic.ModelClaude_3_Opus_20240229), string(anthropic.ModelClaude_3_Haiku_20240307), + string(anthropic.ModelClaudeOpus4_20250514), string(anthropic.ModelClaudeSonnet4_20250514), } return @@ -92,7 +91,7 @@ func (an *Client) SendStream( ctx := context.Background() stream := an.client.Messages.NewStreaming(ctx, anthropic.MessageNewParams{ - Model: opts.Model, + Model: anthropic.Model(opts.Model), MaxTokens: int64(an.maxTokens), TopP: anthropic.Opt(opts.TopP), Temperature: anthropic.Opt(opts.Temperature), @@ -124,7 +123,7 @@ 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: opts.Model, + Model: anthropic.Model(opts.Model), MaxTokens: int64(an.maxTokens), TopP: anthropic.Opt(opts.TopP), Temperature: anthropic.Opt(opts.Temperature),