bedrock.go

 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}