https://github.com/dleviminzi/anthrogo
Anthropic api wrapper for Go
https://github.com/dleviminzi/anthrogo
anthropic anthropic-claude anthropic-go claude claude-3 claude-3-haiku claude-3-opus claude-3-sonnet claude-api go
Last synced: 2 months ago
JSON representation
Anthropic api wrapper for Go
- Host: GitHub
- URL: https://github.com/dleviminzi/anthrogo
- Owner: dleviminzi
- License: mit
- Created: 2023-07-27T16:40:11.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-28T21:13:26.000Z (over 1 year ago)
- Last Synced: 2024-06-28T22:26:55.117Z (over 1 year ago)
- Topics: anthropic, anthropic-claude, anthropic-go, claude, claude-3, claude-3-haiku, claude-3-opus, claude-3-sonnet, claude-api, go
- Language: Go
- Homepage:
- Size: 42 KB
- Stars: 8
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# anthropic go (anthrogo)
[](https://pkg.go.dev/github.com/dleviminzi/anthrogo)
[](https://goreportcard.com/report/github.com/dleviminzi/anthrogo)
[](https://codecov.io/gh/dleviminzi/anthrogo)This is a simple client for using Anthropic's api to get claude completions. It is not an official client. Contributions are welcome!
## Installation
```
go get github.com/dleviminzi/anthrogo
```## Basic usage
### Message API
```go
func main() {
c, err := anthrogo.NewClient()
if err != nil {
log.Fatal(err)
os.Exit(1)
}systemPrompt := "you are an expert in all things bananas"
// Read user input for the prompt
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter your prompt: ")
userPrompt, _ := reader.ReadString('\n')
userPrompt = strings.TrimSuffix(userPrompt, "\n")resp, err := c.MessageRequest(context.Background(), anthrogo.MessagePayload{
Model: anthrogo.ModelClaude3Opus,
Messages: []anthrogo.Message{{
Role: anthrogo.RoleTypeUser,
Content: []anthrogo.MessageContent{{
Type: anthrogo.ContentTypeText,
Text: &userPrompt,
}},
}},
System: &systemPrompt,
MaxTokens: 1000,
})
if err != nil {
log.Fatal(err)
os.Exit(1)
}fmt.Println(resp.Content[0].Text)
}
```## Message Streaming
[message-streaming-example](https://github.com/dleviminzi/anthrogo/assets/51272568/4d7dafa6-4088-4c57-951a-97d7a9898408)
```go
func main() {
c, err := anthrogo.NewClient()
if err != nil {
log.Fatal(err)
os.Exit(1)
}
systemPrompt := "you are an expert in all things bananas"
// Read user input for the prompt
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter your prompt: ")
userPrompt, _ := reader.ReadString('\n')
userPrompt = strings.TrimSuffix(userPrompt, "\n")
r, _, err := c.MessageStreamRequest(context.Background(), anthrogo.MessagePayload{
Model: anthrogo.ModelClaude3Opus,
Messages: []anthrogo.Message{{
Role: anthrogo.RoleTypeUser,
Content: []anthrogo.MessageContent{{
Type: anthrogo.ContentTypeText,
Text: &userPrompt,
}},
}},
System: &systemPrompt,
MaxTokens: 1000,
})
if err != nil {
log.Fatal(err)
os.Exit(1)
}
defer r.Close()
// Create an SSEDecoder
decoder := anthrogo.NewMessageSSEDecoder(r)
for {
message, err := decoder.Decode(anthrogo.DecodeOptions{ContentOnly: true})
if err != nil {
if err == io.EOF {
break
}
fmt.Print(err)
continue
}
if message.Event == "message_stop" {
break
}
fmt.Print(message.Data.Content)
}
}
```### Completions (old api)
```go
func main() {
c, err := anthrogo.NewClient()
if err != nil {
log.Fatal(err)
os.Exit(1)
}// Read user input for the prompt
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter your prompt: ")
userPrompt, _ := reader.ReadString('\n')
userPrompt = strings.TrimSuffix(userPrompt, "\n")// Create conversation with user input
conversation := anthrogo.NewConversation()
conversation.AddMessage(anthrogo.RoleHuman, userPrompt)// Set up the payload and send completion stream request
resp, err := c.CompletionRequest(context.Background(), anthrogo.CompletionPayload{
MaxTokensToSample: 256,
Model: anthrogo.ModelClaude2,
Prompt: conversation.GeneratePrompt(),
})
if err != nil {
log.Fatal(err)
os.Exit(1)
}fmt.Println(resp.Completion)
// Add claude's response to conversation for further prompting...
conversation.AddMessage(anthrogo.RoleAssistant, resp.Completion)
}
```## Completion Streaming
[streaming-completion-example (trimmed).webm](https://github.com/dleviminzi/go-anthropic/assets/51272568/14f80831-a53b-47bd-a8e3-67fe4c279df6)Code
```go
func main() {
// Create a new client
// optionally provide api key otherwise we will look for it in ANTHROPIC_API_KEY variable
c, err := anthrogo.NewClient()
if err != nil {
log.Fatal(err)
os.Exit(1)
}// Read user input for the prompt
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter your prompt: ")
userPrompt, _ := reader.ReadString('\n')
userPrompt = strings.TrimSuffix(userPrompt, "\n")// Create conversation with user input
conversation := anthrogo.NewConversation()
conversation.AddMessage(anthrogo.RoleHuman, userPrompt)// Set up the payload and send completion stream request
completeStreamResp, _ := c.StreamingCompletionRequest(context.Background(), anthrogo.CompletionPayload{
MaxTokensToSample: 256,
Model: anthrogo.ModelClaude2,
Prompt: conversation.GeneratePrompt(),
CompleteOptions: anthrogo.CompleteOptions{
Stream: true,
Temperature: 1,
},
})// Ensure that the request is canceled after timeout (default 1 minute)
defer completeStreamResp.Cancel()// Ensure that the stream response body is closed when the function returns
defer completeStreamResp.Close()// Continually read from the response until an error or EOF is encountered
for {
event, err := completeStreamResp.Decode()
if err != nil {
if err == io.EOF {
break
} else {
fmt.Println(err)
os.Exit(1)
}
}if event != nil {
fmt.Printf("%s", event.Data.Completion)
}
}
}
```