anthropic

package module
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 15, 2024 License: MIT Imports: 8 Imported by: 0

README

Go Anthropic

English | 简体中文

Anthropic SDK implemented in Go, supporting models such as Claude 2.1, Claude 3 (supports sending images), etc.

Installation

go get github.com/wengchaoxi/go-anthropic

Usage

By default, it will fetch ANTHROPIC_API_KEY and ANTHROPIC_BASE_URL from the environment variables.

package main

import (
	"fmt"

	"github.com/wengchaoxi/go-anthropic"
)

func main() {
	cli := anthropic.NewClient()
	// cli := anthropic.NewClient(anthropic.ClientOptions{
	// 	ApiKey:  os.Getenv("ANTHROPIC_API_KEY"),
	// 	BaseUrl: anthropic.DEFAULT_ANTHROPIC_BASE_URL,
	// })

	resp, err := cli.CreateMessages(anthropic.MessagesRequest{
		// `MODEL_CLAUDE_3_SONNET`、`MODEL_CLAUDE_3_OPUS`、`MODEL_CLAUDE_2_1`
		Model: anthropic.MODEL_CLAUDE_3_HAIKU
		Messages: []anthropic.Message{{
			Role: "user",
			Content: []anthropic.MessageContent{
				&anthropic.MessageContentText{
					Type: "text",
					Text: "Hello Claude!",
				},
			}},
		},
		MaxTokens: 1024,
	})
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(resp.Content[0].Text)
}

Streaming Responses

package main

import (
	"fmt"

	"github.com/wengchaoxi/go-anthropic"
)

func main() {
	cli := anthropic.NewClient()
	// cli := anthropic.NewClient(anthropic.ClientOptions{
	// 	ApiKey:  os.Getenv("ANTHROPIC_API_KEY"),
	// 	BaseUrl: anthropic.DEFAULT_ANTHROPIC_BASE_URL,
	// })

	stream, _ := cli.CreateMessagesStream(anthropic.MessagesRequest{
		// `MODEL_CLAUDE_3_SONNET`、`MODEL_CLAUDE_3_OPUS`、`MODEL_CLAUDE_2_1`
		Model: anthropic.MODEL_CLAUDE_3_HAIKU
		Messages: []anthropic.Message{{
			Role: "user",
			Content: []anthropic.MessageContent{
				&anthropic.MessageContentText{
					Type: "text",
					Text: "Hello Claude!",
				},
			}},
		},
		MaxTokens: 1024,
		Stream:    true,
	})
	defer stream.Close()
	for {
		resp, err := stream.Recv()
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		fmt.Println(resp.Delta.Text)
	}
}

References

Documentation

Index

Constants

View Source
const (
	// See: https://docs.anthropic.com/claude/docs/models-overview#model-recommendations
	MODEL_CLAUDE_2_1      = "claude-2.1"
	MODEL_CLAUDE_3_SONNET = "claude-3-sonnet-20240229"
	MODEL_CLAUDE_3_OPUS   = "claude-3-opus-20240229"
	MODEL_CLAUDE_3_HAIKU  = "claude-3-haiku-20240307"
)
View Source
const (
	SSE_EVENT_PREFIX              = "event: "
	SSE_EVENT_MESSAGE_START       = "message_start"
	SSE_EVENT_CONTENT_BLOCK_START = "content_block_start"
	SSE_EVENT_PING                = "ping"
	SSE_EVENT_BLOCK_DELTA         = "content_block_delta"
	SSE_EVENT_CONTENT_BLOCK_STOP  = "content_block_stop"
	SSE_EVENT_MESSAGE_DELTA       = "message_delta"
	SSE_EVENT_MESSAGE_STOP        = "message_stop"
	SSE_EVENT_ERROR               = "error"

	SSE_DATA_PREFIX = "data: "
)
View Source
const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com/v1"

Variables

View Source
var (
	ANTHROPIC_BASE_URL = getEnv("ANTHROPIC_BASE_URL", DEFAULT_ANTHROPIC_BASE_URL)
	ANTHROPIC_API_KEY  = getEnv("ANTHROPIC_API_KEY", "")
)

Functions

This section is empty.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(opts ...ClientOptions) *Client

func (*Client) CreateMessages

func (c *Client) CreateMessages(mr MessagesRequest) (*MessagesResponse, error)

func (*Client) CreateMessagesStream

func (c *Client) CreateMessagesStream(mr MessagesRequest) (*MessagesStream, error)

type ClientOptions

type ClientOptions struct {
	ApiKey  string
	BaseUrl string
}

type Message

type Message struct {
	Role    string           `json:"role"`
	Content []MessageContent `json:"content"`
}

type MessageContent

type MessageContent interface {
	GetType() string
}

MessageContentText | MessageContentFile

type MessageContentFile

type MessageContentFile struct {
	Type   string                   `json:"type"`
	Source MessageContentFileSource `json:"source,omitempty"`
}

func (*MessageContentFile) GetType

func (m *MessageContentFile) GetType() string

type MessageContentFileSource

type MessageContentFileSource struct {
	Type      string `json:"type"`
	MediaType string `json:"media_type"`
	Data      string `json:"data"`
}

type MessageContentText

type MessageContentText struct {
	Type string `json:"type"`
	Text string `json:"text"`
}

func (*MessageContentText) GetType

func (m *MessageContentText) GetType() string

type MessagesRequest

type MessagesRequest struct {
	Model     string    `json:"model"`
	Messages  []Message `json:"messages"`
	System    string    `json:"system,omitempty"`
	MaxTokens int       `json:"max_tokens"`
	Metadata  struct {
		UserID string `json:"user_id"`
	} `json:"metadata,omitempty"`
	StopSequences []string `json:"stop_sequences,omitempty"`
	Stream        bool     `json:"stream,omitempty"`
	Temperature   float64  `json:"temperature,omitempty"`
	TopP          float64  `json:"top_p,omitempty"`
	TopK          int      `json:"top_k,omitempty"`
}

type MessagesResponse

type MessagesResponse struct {
	ID           string               `json:"id"`
	Type         string               `json:"type"`
	Role         string               `json:"role"`
	Content      []MessageContentText `json:"content"`
	Model        string               `json:"model"`
	StopReaon    string               `json:"stop_reason"`
	StopSequence string               `json:"stop_sequence"`
	Usage        struct {
		InputTokens  int `json:"input_tokens"`
		OutputTokens int `json:"output_tokens"`
	} `json:"usage"`
}

type MessagesResponseError

type MessagesResponseError struct {
	Type  string `json:"type"`
	Error struct {
		Type    string `json:"type"`
		Message string `json:"message"`
	} `json:"error"`
}

type MessagesStream

type MessagesStream struct {
	*MessagesStreamReader
}

type MessagesStreamReader

type MessagesStreamReader struct {
	// contains filtered or unexported fields
}

func (*MessagesStreamReader) Close

func (s *MessagesStreamReader) Close()

func (*MessagesStreamReader) Recv

type MessagesStreamResponse

type MessagesStreamResponse struct {
	Type         string                             `json:"type"`
	Message      MessagesResponse                   `json:"message,omitempty"`
	Index        int                                `json:"index,omitempty"`
	ContentBlock MessagesStreamResponseContentBlock `json:"content_block,omitempty"`
	Delta        MessagesStreamResponseDelta        `json:"delta,omitempty"`
	Error        struct {
		Type    string `json:"type"`
		Message string `json:"message"`
	} `json:"error,omitempty"`
}

type MessagesStreamResponseContentBlock

type MessagesStreamResponseContentBlock struct {
	Type string `json:"type"`
	Text string `json:"text"`
}

type MessagesStreamResponseDelta

type MessagesStreamResponseDelta struct {
	Type         string `json:"type"`
	Text         string `json:"text"`
	StopReaon    string `json:"stop_reason"`
	StopSequence string `json:"stop_sequence"`
	Usage        struct {
		InputTokens  int `json:"input_tokens"`
		OutputTokens int `json:"output_tokens"`
	} `json:"usage"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL