vertexai.go

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