1package anthropic
2
3import (
4 "cmp"
5 "os"
6 "strings"
7
8 "github.com/aws/aws-sdk-go-v2/aws"
9 "github.com/aws/smithy-go/auth/bearer"
10)
11
12func bedrockBasicAuthConfig(apiKey string) aws.Config {
13 return aws.Config{
14 Region: cmp.Or(awsRegion(), "us-east-1"),
15 BearerAuthTokenProvider: bearer.StaticTokenProvider{Token: bearer.Token{Value: apiKey}},
16 }
17}
18
19func bedrockPrefixModelWithRegion(modelID string) string {
20 if hasBedrockInferenceProfilePrefix(modelID) {
21 return modelID
22 }
23 region := cmp.Or(awsRegion(), "us-east-1")
24 return bedrockRegionPrefix(region) + "." + modelID
25}
26
27func awsRegion() string {
28 return cmp.Or(os.Getenv("AWS_REGION"), os.Getenv("AWS_DEFAULT_REGION"))
29}
30
31func bedrockRegionPrefix(region string) string {
32 switch {
33 case strings.HasPrefix(region, "us-") || region == "ca-central-1":
34 return "us"
35 case strings.HasPrefix(region, "eu-"):
36 return "eu"
37 case region == "ap-northeast-1":
38 return "jp"
39 case region == "ap-southeast-2":
40 return "au"
41 default:
42 return "global"
43 }
44}
45
46func hasBedrockInferenceProfilePrefix(modelID string) bool {
47 for _, prefix := range []string{"us.", "eu.", "jp.", "au.", "global."} {
48 if strings.HasPrefix(modelID, prefix) {
49 return true
50 }
51 }
52 return false
53}