Skip to content

Commit 08840a9

Browse files
committed
feat: add google vertex support
1 parent 5e80e35 commit 08840a9

29 files changed

Lines changed: 1871 additions & 31 deletions

anthropic/anthropic.go

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import (
1414
"github.com/anthropics/anthropic-sdk-go"
1515
"github.com/anthropics/anthropic-sdk-go/option"
1616
"github.com/anthropics/anthropic-sdk-go/packages/param"
17+
"github.com/anthropics/anthropic-sdk-go/vertex"
1718
"github.com/charmbracelet/fantasy/ai"
19+
"golang.org/x/oauth2/google"
1820
)
1921

2022
const (
@@ -28,6 +30,10 @@ type options struct {
2830
name string
2931
headers map[string]string
3032
client option.HTTPClient
33+
34+
vertexProject string
35+
vertexLocation string
36+
skipGoogleAuth bool
3137
}
3238

3339
type provider struct {
@@ -61,6 +67,19 @@ func WithAPIKey(apiKey string) Option {
6167
}
6268
}
6369

70+
func WithVertex(project, location string) Option {
71+
return func(o *options) {
72+
o.vertexProject = project
73+
o.vertexLocation = location
74+
}
75+
}
76+
77+
func WithSkipGoogleAuth(skip bool) Option {
78+
return func(o *options) {
79+
o.skipGoogleAuth = skip
80+
}
81+
}
82+
6483
func WithName(name string) Option {
6584
return func(o *options) {
6685
o.name = name
@@ -80,26 +99,46 @@ func WithHTTPClient(client option.HTTPClient) Option {
8099
}
81100

82101
func (a *provider) LanguageModel(modelID string) (ai.LanguageModel, error) {
83-
anthropicClientOptions := []option.RequestOption{}
102+
clientOptions := make([]option.RequestOption, 0, 5+len(a.options.headers))
84103
if a.options.apiKey != "" {
85-
anthropicClientOptions = append(anthropicClientOptions, option.WithAPIKey(a.options.apiKey))
104+
clientOptions = append(clientOptions, option.WithAPIKey(a.options.apiKey))
86105
}
87106
if a.options.baseURL != "" {
88-
anthropicClientOptions = append(anthropicClientOptions, option.WithBaseURL(a.options.baseURL))
107+
clientOptions = append(clientOptions, option.WithBaseURL(a.options.baseURL))
89108
}
90-
91109
for key, value := range a.options.headers {
92-
anthropicClientOptions = append(anthropicClientOptions, option.WithHeader(key, value))
110+
clientOptions = append(clientOptions, option.WithHeader(key, value))
93111
}
94-
95112
if a.options.client != nil {
96-
anthropicClientOptions = append(anthropicClientOptions, option.WithHTTPClient(a.options.client))
113+
clientOptions = append(clientOptions, option.WithHTTPClient(a.options.client))
114+
}
115+
if a.options.vertexProject != "" && a.options.vertexLocation != "" {
116+
var credentials *google.Credentials
117+
if a.options.skipGoogleAuth {
118+
credentials = &google.Credentials{TokenSource: &googleDummyTokenSource{}}
119+
} else {
120+
var err error
121+
credentials, err = google.FindDefaultCredentials(context.Background())
122+
if err != nil {
123+
return nil, err
124+
}
125+
}
126+
127+
clientOptions = append(
128+
clientOptions,
129+
vertex.WithCredentials(
130+
context.Background(),
131+
a.options.vertexLocation,
132+
a.options.vertexProject,
133+
credentials,
134+
),
135+
)
97136
}
98137
return languageModel{
99138
modelID: modelID,
100139
provider: a.options.name,
101140
options: a.options,
102-
client: anthropic.NewClient(anthropicClientOptions...),
141+
client: anthropic.NewClient(clientOptions...),
103142
}, nil
104143
}
105144

anthropic/google.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package anthropic
2+
3+
import (
4+
"golang.org/x/oauth2"
5+
)
6+
7+
type googleDummyTokenSource struct{}
8+
9+
func (googleDummyTokenSource) Token() (*oauth2.Token, error) {
10+
return &oauth2.Token{AccessToken: "dummy-token"}, nil
11+
}

go.mod

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@ require (
1919
require (
2020
cloud.google.com/go v0.116.0 // indirect
2121
cloud.google.com/go/auth v0.9.3 // indirect
22+
cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
2223
cloud.google.com/go/compute/metadata v0.5.0 // indirect
2324
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect
2425
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
2526
github.com/davecgh/go-spew v1.1.1 // indirect
27+
github.com/felixge/httpsnoop v1.0.4 // indirect
28+
github.com/go-logr/logr v1.4.2 // indirect
29+
github.com/go-logr/stdr v1.2.2 // indirect
2630
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
2731
github.com/google/go-cmp v0.6.0 // indirect
2832
github.com/google/s2a-go v0.1.8 // indirect
@@ -34,12 +38,29 @@ require (
3438
github.com/tidwall/pretty v1.2.1 // indirect
3539
github.com/tidwall/sjson v1.2.5 // indirect
3640
go.opencensus.io v0.24.0 // indirect
41+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect
42+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
43+
go.opentelemetry.io/otel v1.29.0 // indirect
44+
go.opentelemetry.io/otel/metric v1.29.0 // indirect
45+
go.opentelemetry.io/otel/trace v1.29.0 // indirect
3746
golang.org/x/crypto v0.40.0 // indirect
3847
golang.org/x/net v0.41.0 // indirect
48+
golang.org/x/oauth2 v0.30.0 // indirect
49+
golang.org/x/sync v0.16.0 // indirect
3950
golang.org/x/sys v0.34.0 // indirect
4051
golang.org/x/text v0.27.0 // indirect
52+
golang.org/x/time v0.6.0 // indirect
53+
google.golang.org/api v0.197.0 // indirect
4154
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
4255
google.golang.org/grpc v1.66.2 // indirect
4356
google.golang.org/protobuf v1.34.2 // indirect
4457
gopkg.in/yaml.v3 v3.0.1 // indirect
4558
)
59+
60+
// NOTE(@andreynering): Temporarily pinning @fantasy branch with fixes:
61+
// https://github.com/charmbracelet/anthropic-sdk-go/commits/fantasy/
62+
replace github.com/anthropics/anthropic-sdk-go => github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251010172108-7b952cdeeb9d
63+
64+
// NOTE(@andreynering): Temporarily pinning @fantasy branch with fixes:
65+
// https://github.com/charmbracelet/anthropic-sdk-go/commits/fantasy/
66+
replace google.golang.org/genai => github.com/charmbracelet/go-genai v0.0.0-20251009191514-c6fa9e37d847

go.sum

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE=
33
cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U=
44
cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U=
55
cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk=
6+
cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY=
7+
cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc=
68
cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=
79
cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
810
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ=
@@ -14,9 +16,11 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkY
1416
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU=
1517
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
1618
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
17-
github.com/anthropics/anthropic-sdk-go v1.10.0 h1:jDKQTfC0miIEj21eMmPrNSLKTNdNa3nHZOhd4wZz1cI=
18-
github.com/anthropics/anthropic-sdk-go v1.10.0/go.mod h1:WTz31rIUHUHqai2UslPpw5CwXrQP3geYBioRV4WOLvE=
1919
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
20+
github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251010172108-7b952cdeeb9d h1:qP7F7r7aVY7AReYHHgkQ79weuUEZK7zXtDtSEydYb0w=
21+
github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251010172108-7b952cdeeb9d/go.mod h1:WTz31rIUHUHqai2UslPpw5CwXrQP3geYBioRV4WOLvE=
22+
github.com/charmbracelet/go-genai v0.0.0-20251009191514-c6fa9e37d847 h1:Oyo6YZ59iygXWNUlRozIOFHO4WUG9cNFhiUYCTq4AnU=
23+
github.com/charmbracelet/go-genai v0.0.0-20251009191514-c6fa9e37d847/go.mod h1:7pAilaICJlQBonjKKJNhftDFv3SREhZcTe9F6nRcjbg=
2024
github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 h1:DTSZxdV9qQagD4iGcAt9RgaRBZtJl01bfKgdLzUzUPI=
2125
github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5/go.mod h1:vI5nDVMWi6veaYH+0Fmvpbe/+cv/iJfMntdh+N0+Tms=
2226
github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ=
@@ -30,6 +34,13 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
3034
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
3135
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
3236
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
37+
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
38+
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
39+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
40+
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
41+
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
42+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
43+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
3344
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
3445
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
3546
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
@@ -48,6 +59,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
4859
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
4960
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
5061
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
62+
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
63+
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
5164
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
5265
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
5366
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -102,6 +115,16 @@ github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
102115
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
103116
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
104117
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
118+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc=
119+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
120+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
121+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
122+
go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw=
123+
go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8=
124+
go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc=
125+
go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8=
126+
go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4=
127+
go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
105128
go.yaml.in/yaml/v4 v4.0.0-rc.2 h1:/FrI8D64VSr4HtGIlUtlFMGsm7H7pWTbj6vOLVZcA6s=
106129
go.yaml.in/yaml/v4 v4.0.0-rc.2/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0=
107130
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -121,6 +144,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY
121144
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
122145
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
123146
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
147+
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
148+
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
124149
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
125150
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
126151
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -136,16 +161,18 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
136161
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
137162
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
138163
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
164+
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
165+
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
139166
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
140167
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
141168
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
142169
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
143170
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
144171
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
172+
google.golang.org/api v0.197.0 h1:x6CwqQLsFiA5JKAiGyGBjc2bNtHtLddhJCE2IKuhhcQ=
173+
google.golang.org/api v0.197.0/go.mod h1:AuOuo20GoQ331nq7DquGHlU6d+2wN2fZ8O0ta60nRNw=
145174
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
146175
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
147-
google.golang.org/genai v1.26.0 h1:r4HGL54kFv/WCRMTAbZg05Ct+vXfhAbTRlXhFyBkEQo=
148-
google.golang.org/genai v1.26.0/go.mod h1:OClfdf+r5aaD+sCd4aUSkPzJItmg2wD/WON9lQnRPaY=
149176
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
150177
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
151178
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=

google/README.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Google Provider
2+
3+
This document describes how to get an API keys for Google Gemini and Vertex.
4+
5+
## Gemini
6+
7+
Simply navigate to [this page](https://aistudio.google.com/apikey) in the
8+
Google AI Studio and create a new API key.
9+
10+
## Vertex
11+
12+
### Install `gcloud`
13+
14+
Install the `gcloud` command line tool. Install via Homebrew, Nix, or download
15+
it from [here](https://cloud.google.com/sdk/docs/install).
16+
17+
```bash
18+
# Homebrew
19+
brew install --cask google-cloud-sdk
20+
21+
# Nix
22+
nix-env -iA nixpkgs.google-cloud-sdk
23+
```
24+
25+
### Authenticate
26+
27+
Then authenticate with your Google account:
28+
29+
```bash
30+
gcloud auth login
31+
```
32+
33+
### Create And Setup Project
34+
35+
Navigate here to create a new project if you haven't already:
36+
https://console.cloud.google.com/projectcreate
37+
38+
Alternatively, you can create a new project via the command line:
39+
40+
```bash
41+
gcloud projects create {YOUR_PROJECT_ID} --name="{YOUR_PROJECT_NAME}"
42+
```
43+
44+
Set the project on your machine:
45+
46+
```bash
47+
gcloud config set project {YOUR_PROJECT_ID}
48+
```
49+
50+
Enable the Vertex AI API:
51+
52+
```bash
53+
gcloud services enable aiplatform.googleapis.com
54+
```
55+
56+
### Setup Env
57+
58+
Finally, you need to run this command to ensure that libraries will be able to
59+
find your credentials.
60+
61+
```bash
62+
gcloud auth application-default login
63+
```

google/auth.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package google
2+
3+
import (
4+
"context"
5+
6+
"cloud.google.com/go/auth"
7+
)
8+
9+
type dummyTokenProvider struct{}
10+
11+
func (dummyTokenProvider) Token(ctx context.Context) (*auth.Token, error) {
12+
return &auth.Token{Value: "vertex-token"}, nil
13+
}

0 commit comments

Comments
 (0)