1package provider
2
3import (
4 "context"
5 "log/slog"
6 "strings"
7
8 "github.com/charmbracelet/crush/internal/config"
9 "github.com/charmbracelet/crush/internal/log"
10 "google.golang.org/genai"
11)
12
13type VertexAIClient ProviderClient
14
15func newVertexAIClient(opts providerClientOptions) VertexAIClient {
16 project := opts.extraParams["project"]
17 location := opts.extraParams["location"]
18 cc := &genai.ClientConfig{
19 Project: project,
20 Location: location,
21 Backend: genai.BackendVertexAI,
22 }
23 if config.Get().Options.Debug {
24 cc.HTTPClient = log.NewHTTPClient()
25 }
26 client, err := genai.NewClient(context.Background(), cc)
27 if err != nil {
28 slog.Error("Failed to create VertexAI client", "error", err)
29 return nil
30 }
31
32 model := opts.model(opts.modelType)
33 if strings.Contains(model.ID, "anthropic") || strings.Contains(model.ID, "claude-sonnet") {
34 return newAnthropicClient(opts, AnthropicClientTypeVertex)
35 }
36 return &geminiClient{
37 providerOptions: opts,
38 client: client,
39 }
40}