{"id":13465989,"url":"https://github.com/liushuangls/go-anthropic","last_synced_at":"2026-05-13T03:15:30.332Z","repository":{"id":223783449,"uuid":"754119935","full_name":"liushuangls/go-anthropic","owner":"liushuangls","description":"Anthropic Claude API wrapper for Go","archived":false,"fork":false,"pushed_at":"2026-05-08T02:44:11.000Z","size":1336,"stargazers_count":171,"open_issues_count":4,"forks_count":28,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-05-08T04:27:27.334Z","etag":null,"topics":["ai","anthropic","claude","claude-ai","claude-api","function-calling","go","golang","llm","prompt-caching","streaming-api","tool-use","vision"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/liushuangls.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"citations_test.go","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-02-07T12:47:26.000Z","updated_at":"2026-05-08T02:24:15.000Z","dependencies_parsed_at":"2024-03-05T02:46:09.016Z","dependency_job_id":"70989968-53cb-4129-b596-0fee5407861d","html_url":"https://github.com/liushuangls/go-anthropic","commit_stats":null,"previous_names":["liushuangls/go-anthropic"],"tags_count":57,"template":false,"template_full_name":null,"purl":"pkg:github/liushuangls/go-anthropic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liushuangls%2Fgo-anthropic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liushuangls%2Fgo-anthropic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liushuangls%2Fgo-anthropic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liushuangls%2Fgo-anthropic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liushuangls","download_url":"https://codeload.github.com/liushuangls/go-anthropic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liushuangls%2Fgo-anthropic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32966103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T23:30:32.555Z","status":"online","status_checked_at":"2026-05-13T02:00:07.132Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","anthropic","claude","claude-ai","claude-api","function-calling","go","golang","llm","prompt-caching","streaming-api","tool-use","vision"],"created_at":"2024-07-31T15:00:37.697Z","updated_at":"2026-05-13T03:15:30.298Z","avatar_url":"https://github.com/liushuangls.png","language":"Go","funding_links":[],"categories":["Go","Large Language Model","API Wrappers","API SDKs"],"sub_categories":["SDKs","Go"],"readme":"# go-anthropic\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/liushuangls/go-anthropic/v2.svg)](https://pkg.go.dev/github.com/liushuangls/go-anthropic/v2)\n[![Go Report Card](https://goreportcard.com/badge/github.com/liushuangls/go-anthropic/v2)](https://goreportcard.com/report/github.com/liushuangls/go-anthropic/v2)\n[![codecov](https://codecov.io/gh/liushuangls/go-anthropic/graph/badge.svg?token=O6JSAOZORX)](https://codecov.io/gh/liushuangls/go-anthropic)\n[![Sanity check](https://github.com/liushuangls/go-anthropic/actions/workflows/pr.yml/badge.svg)](https://github.com/liushuangls/go-anthropic/actions/workflows/pr.yml)\n\nAnthropic Claude API wrapper for Go (Unofficial).\n\nThis package has support for:\n- Completions\n- Streaming Completions\n- Messages\n- Streaming Messages\n- Message Batching\n- Vision and PDFs\n- Tool use (with [computer use](https://docs.anthropic.com/en/docs/build-with-claude/computer-use))\n- Prompt Caching\n- Token Counting\n\n## Installation\n\n```\ngo get github.com/liushuangls/go-anthropic/v2\n```\n\nCurrently, go-anthropic requires Go version 1.21 or greater.\n\n## Usage\n\n### Messages example usage:\n\n```go\npackage main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/liushuangls/go-anthropic/v2\"\n)\n\nfunc main() {\n\tclient := anthropic.NewClient(\"your anthropic api key\")\n\tresp, err := client.CreateMessages(context.Background(), anthropic.MessagesRequest{\n\t\tModel: anthropic.ModelClaude3Haiku20240307,\n\t\tMessages: []anthropic.Message{\n\t\t\tanthropic.NewUserTextMessage(\"What is your name?\"),\n\t\t},\n\t\tMaxTokens: 1000,\n\t})\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Println(resp.Content[0].GetText())\n}\n```\n\n### Messages stream example usage:\n\n```go\npackage main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/liushuangls/go-anthropic/v2\"\n)\n\nfunc main() {\n\tclient := anthropic.NewClient(\"your anthropic api key\")\n\tresp, err := client.CreateMessagesStream(context.Background(), anthropic.MessagesStreamRequest{\n\t\tMessagesRequest: anthropic.MessagesRequest{\n\t\t\tModel: anthropic.ModelClaude3Haiku20240307,\n\t\t\tMessages: []anthropic.Message{\n\t\t\t\tanthropic.NewUserTextMessage(\"What is your name?\"),\n\t\t\t},\n\t\t\tMaxTokens: 1000,\n\t\t},\n\t\tOnContentBlockDelta: func(data anthropic.MessagesEventContentBlockDeltaData) {\n\t\t\tfmt.Printf(\"Stream Content: %s\\n\", data.Delta.Text)\n\t\t},\n\t})\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages stream error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages stream error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Println(resp.Content[0].GetText())\n}\n```\n\n### Other examples:\n\n\u003cdetails\u003e\n\u003csummary\u003eMessages Vision example\u003c/summary\u003e\n\n```go\npackage main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/liushuangls/go-anthropic/v2\"\n)\n\nfunc main() {\n\tclient := anthropic.NewClient(\"your anthropic api key\")\n\n\timagePath := \"xxx\"\n\timageMediaType := \"image/jpeg\"\n\timageFile, err := os.Open(imagePath)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\timageData, err := io.ReadAll(imageFile)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresp, err := client.CreateMessages(context.Background(), anthropic.MessagesRequest{\n\t\tModel: anthropic.ModelClaude3Opus20240229,\n\t\tMessages: []anthropic.Message{\n\t\t\t{\n\t\t\t\tRole: anthropic.RoleUser,\n\t\t\t\tContent: []anthropic.MessageContent{\n\t\t\t\t\tanthropic.NewImageMessageContent(\n\t\t\t\t\t\tanthropic.NewMessageContentSource(\n\t\t\t\t\t\t\tanthropic.MessagesContentSourceTypeBase64,\n\t\t\t\t\t\t\timageMediaType,\n\t\t\t\t\t\t\timageData,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\tanthropic.NewTextMessageContent(\"Describe this image.\"),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tMaxTokens: 1000,\n\t})\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Println(*resp.Content[0].GetText())\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMessages Tool use example\u003c/summary\u003e\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/liushuangls/go-anthropic/v2\"\n\t\"github.com/liushuangls/go-anthropic/v2/jsonschema\"\n)\n\nfunc main() {\n\tclient := anthropic.NewClient(\n\t\t\"your anthropic api key\",\n\t)\n\n\trequest := anthropic.MessagesRequest{\n\t\tModel: anthropic.ModelClaude3Haiku20240307,\n\t\tMessages: []anthropic.Message{\n\t\t\tanthropic.NewUserTextMessage(\"What is the weather like in San Francisco?\"),\n\t\t},\n\t\tMaxTokens: 1000,\n\t\tTools: []anthropic.ToolDefinition{\n\t\t\t{\n\t\t\t\tName:        \"get_weather\",\n\t\t\t\tDescription: \"Get the current weather in a given location\",\n\t\t\t\tInputSchema: jsonschema.Definition{\n\t\t\t\t\tType: jsonschema.Object,\n\t\t\t\t\tProperties: map[string]jsonschema.Definition{\n\t\t\t\t\t\t\"location\": {\n\t\t\t\t\t\t\tType:        jsonschema.String,\n\t\t\t\t\t\t\tDescription: \"The city and state, e.g. San Francisco, CA\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"unit\": {\n\t\t\t\t\t\t\tType:        jsonschema.String,\n\t\t\t\t\t\t\tEnum:        []string{\"celsius\", \"fahrenheit\"},\n\t\t\t\t\t\t\tDescription: \"The unit of temperature, either 'celsius' or 'fahrenheit'\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tRequired: []string{\"location\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tresp, err := client.CreateMessages(context.Background(), request)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\trequest.Messages = append(request.Messages, anthropic.Message{\n\t\tRole:    anthropic.RoleAssistant,\n\t\tContent: resp.Content,\n\t})\n\n\tvar toolUse *anthropic.MessageContentToolUse\n\n\tfor _, c := range resp.Content {\n\t\tif c.Type == anthropic.MessagesContentTypeToolUse {\n\t\t\ttoolUse = c.MessageContentToolUse\n\t\t}\n\t}\n\n\tif toolUse == nil {\n\t\tpanic(\"tool use not found\")\n\t}\n\n\trequest.Messages = append(request.Messages, anthropic.NewToolResultsMessage(toolUse.ID, \"65 degrees\", false))\n\n\tresp, err = client.CreateMessages(context.Background(), request)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfmt.Printf(\"Response: %+v\\n\", resp)\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ePrompt Caching\u003c/summary\u003e\n\ndoc: https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/liushuangls/go-anthropic/v2\"\n)\n\nfunc main() {\n\tclient := anthropic.NewClient(\n\t\t\"your anthropic api key\",\n\t\tanthropic.WithBetaVersion(anthropic.BetaPromptCaching20240731),\n\t)\n\n\tresp, err := client.CreateMessages(\n\t\tcontext.Background(),\n\t\tanthropic.MessagesRequest{\n\t\t\tModel: anthropic.ModelClaude3Haiku20240307,\n\t\t\tMultiSystem: []anthropic.MessageSystemPart{\n\t\t\t\t{\n\t\t\t\t\tType: \"text\",\n\t\t\t\t\tText: \"You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tType: \"text\",\n\t\t\t\t\tText: \"\u003cthe entire contents of Pride and Prejudice\u003e\",\n\t\t\t\t\tCacheControl: \u0026anthropic.MessageCacheControl{\n\t\t\t\t\t\tType: anthropic.CacheControlTypeEphemeral,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMessages: []anthropic.Message{\n\t\t\t\tanthropic.NewUserTextMessage(\"Analyze the major themes in Pride and Prejudice.\")\n\t\t\t},\n\t\t\tMaxTokens: 1000,\n\t})\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Printf(\"Usage: %+v\\n\", resp.Usage)\n\tfmt.Println(resp.Content[0].GetText())\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eVertexAI example\u003c/summary\u003e\nIf you are using a Google Credentials file, you can use the following code to create a client:\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/liushuangls/go-anthropic/v2\"\n\t\"golang.org/x/oauth2/google\"\n)\n\nfunc main() {\n\tcredBytes, err := os.ReadFile(\"\u003cpath to your credentials file\u003e\")\n\tif err != nil {\n\t\tfmt.Println(\"Error reading file\")\n\t\treturn\n\t}\n\n\tts, err := google.JWTAccessTokenSourceWithScope(credBytes, \"https://www.googleapis.com/auth/cloud-platform\", \"https://www.googleapis.com/auth/cloud-platform.read-only\")\n\tif err != nil {\n\t\tfmt.Println(\"Error creating token source\")\n\t\treturn\n\t}\n\n\t// use JWTAccessTokenSourceWithScope\n\ttoken, err := ts.Token()\n\tif err != nil {\n\t\tfmt.Println(\"Error getting token\")\n\t\treturn\n\t}\n\n\tfmt.Println(token.AccessToken)\n\n\tclient := anthropic.NewClient(token.AccessToken, anthropic.WithVertexAI(\"\u003cYOUR PROJECTID\u003e\", \"\u003cYOUR LOCATION\u003e\"))\n\n\tresp, err := client.CreateMessagesStream(context.Background(), anthropic.MessagesStreamRequest{\n\t\tMessagesRequest: anthropic.MessagesRequest{\n\t\t\tModel: anthropic.ModelClaude3Haiku20240307,\n\t\t\tMessages: []anthropic.Message{\n\t\t\t\tanthropic.NewUserTextMessage(\"What is your name?\"),\n\t\t\t},\n\t\t\tMaxTokens: 1000,\n\t\t},\n\t\tOnContentBlockDelta: func(data anthropic.MessagesEventContentBlockDeltaData) {\n\t\t\tfmt.Printf(\"Stream Content: %s\\n\", *data.Delta.Text)\n\t\t},\n\t})\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages stream error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages stream error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Println(resp.Content[0].GetText())\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMessage Batching\u003c/summary\u003e\n\ndoc: https://docs.anthropic.com/en/docs/build-with-claude/message-batches\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/liushuangls/go-anthropic/v2\"\n)\n\nfunc main() {\n\tclient := anthropic.NewClient(\n\t\t\"your anthropic api key\",\n\t\tanthropic.WithBetaVersion(anthropic.BetaMessageBatches20240924),\n\t)\n\n\tresp, err := client.CreateBatch(context.Background(),\n\t\tanthropic.BatchRequest{\n\t\t\tRequests: []anthropic.InnerRequests{\n\t\t\t\t{\n\t\t\t\t\tCustomId: myId,\n\t\t\t\t\tParams: anthropic.MessagesRequest{\n\t\t\t\t\t\tModel: anthropic.ModelClaude3Haiku20240307,\n\t\t\t\t\t\tMultiSystem: anthropic.NewMultiSystemMessages(\n\t\t\t\t\t\t\t\"you are an assistant\",\n\t\t\t\t\t\t\t\"you are snarky\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\tMaxTokens: 10,\n\t\t\t\t\t\tMessages: []anthropic.Message{\n\t\t\t\t\t\t\tanthropic.NewUserTextMessage(\"What is your name?\"),\n\t\t\t\t\t\t\tanthropic.NewAssistantTextMessage(\"My name is Claude.\"),\n\t\t\t\t\t\t\tanthropic.NewUserTextMessage(\"What is your favorite color?\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t)\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Println(resp)\n\n\n\tretrieveResp, err := client.RetrieveBatch(ctx, resp.Id)\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Println(retrieveResp)\n\n\tresultResp, err := client.RetrieveBatchResults(ctx, \"batch_id_your-batch-here\")\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Println(resultResp)\n\n\n\tlistResp, err := client.ListBatches(ctx, anthropic.ListBatchesRequest{})\n\tif err != nil {\n\t\tvar e *anthropic.APIError\n\t\tif errors.As(err, \u0026e) {\n\t\t\tfmt.Printf(\"Messages error, type: %s, message: %s\", e.Type, e.Message)\n\t\t} else {\n\t\t\tfmt.Printf(\"Messages error: %v\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tfmt.Println(listResp)\n\n\n\tcancelResp, err := client.CancelBatch(ctx, \"batch_id_your-batch-here\")\n\tif err != nil {\n\t\tt.Fatalf(\"CancelBatch error: %s\", err)\n\t}\n\tfmt.Println(cancelResp)\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eToken Counting example\u003c/summary\u003e\n\ndoc: (https://docs.anthropic.com/en/docs/build-with-claude/token-counting)[https://docs.anthropic.com/en/docs/build-with-claude/token-counting]\n\n```go\n// TODO: add example!\n```\n\n\u003c/details\u003e\n\n### Beta features\nAnthropic provides several beta features that can be enabled using the following beta version identifiers:\n\nBeta Version Identifier            | Code Constant                   | Description\n-----------------------------------|---------------------------------|---------------------------------\n`tools-2024-04-04`                 | `BetaTools20240404`             | Initial tools beta\n`tools-2024-05-16`                 | `BetaTools20240516`             | Updated tools beta\n`prompt-caching-2024-07-31`        | `BetaPromptCaching20240731`     | Prompt caching beta\n`message-batches-2024-09-24`       | `BetaMessageBatches20240924`    | Message batching beta\n`token-counting-2024-11-01`        | `BetaTokenCounting20241101`     | Token counting beta\n`max-tokens-3-5-sonnet-2024-07-15` | `BetaMaxTokens35Sonnet20240715` | Max tokens beta for Sonnet model\n`computer-use-2024-10-22`          | `BetaComputerUse20241022`       | Computer use beta\n\n### Supported models\nThe following models are supported by go-anthropic.\nThese models are also available for use on Google's Vertex AI platform as well.\n\nModel Name                     | Model String\n-------------------------------|------------------------------\nModelClaude2Dot0               | \"claude-2.0\"\nModelClaude2Dot1               | \"claude-2.1\"\nModelClaude3Opus20240229       | \"claude-3-opus-20240229\"\nModelClaude3Sonnet20240229     | \"claude-3-sonnet-20240229\"\nModelClaude3Dot5Sonnet20240620 | \"claude-3-5-sonnet-20240620\"\nModelClaude3Dot5Sonnet20241022 | \"claude-3-5-sonnet-20241022\"\nModelClaude3Dot5SonnetLatest   | \"claude-3-5-sonnet-latest\"\nModelClaude3Haiku20240307      | \"claude-3-haiku-20240307\"\nModelClaude3Dot5HaikuLatest    | \"claude-3-5-haiku-latest\"\nModelClaude3Dot5Haiku20241022  | \"claude-3-5-haiku-20241022\"\n\n### Other Enums\nTwo exported enums are additionally provided:\n- `RoleUser` = \"user\": Input role type for user messages\n- `RoleAssistant` = \"assistant\": Input role type for assistant/Claude messages\n\n## Acknowledgments\nThe following project had particular influence on go-anthropic's design.\n\n- [sashabaranov/go-openai](https://github.com/sashabaranov/go-openai)\n\nAdditionally, we thank anthropic for providing the API and documentation.\n\n## License\ngo-anthropic is licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full license text.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliushuangls%2Fgo-anthropic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliushuangls%2Fgo-anthropic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliushuangls%2Fgo-anthropic/lists"}