diff --git a/google/google.go b/google/google.go index ebdb99c3549f64f29180b8840bde22bb727a1bb1..3335dca66c758ba4f1603deca387a73f945dd9a9 100644 --- a/google/google.go +++ b/google/google.go @@ -4,6 +4,7 @@ import ( "context" "encoding/base64" "encoding/json" + "errors" "fmt" "maps" "net/http" @@ -370,7 +371,7 @@ func (g *languageModel) Generate(ctx context.Context, call ai.Call) (*ai.Respons // if err != nil { // return nil, err // } - panic("unimplemented") + return nil, errors.New("unimplemented") } // Model implements ai.LanguageModel. @@ -385,7 +386,7 @@ func (g *languageModel) Provider() string { // Stream implements ai.LanguageModel. func (g *languageModel) Stream(context.Context, ai.Call) (ai.StreamResponse, error) { - panic("unimplemented") + return nil, errors.New("unimplemented") } func toGoogleTools(tools []ai.Tool, toolChoice *ai.ToolChoice) (googleTools []*genai.FunctionDeclaration, googleToolChoice *genai.ToolConfig, warnings []ai.CallWarning) { diff --git a/providertests/.env.sample b/providertests/.env.sample index 69b599454e29c6b7ddbb4e0207adcd1aeca921d4..d3e7eaa9ae762091014368b4de02df3edf50b4f0 100644 --- a/providertests/.env.sample +++ b/providertests/.env.sample @@ -1,2 +1,3 @@ ANTHROPIC_API_KEY= +GEMINI_API_KEY= OPENAI_API_KEY= diff --git a/providertests/builders_test.go b/providertests/builders_test.go index b39475972404ac1c965e7a0fcedcf575723d3c0b..265e50d7b6aa072da046e19db4f4dc6ad1e10db7 100644 --- a/providertests/builders_test.go +++ b/providertests/builders_test.go @@ -6,6 +6,7 @@ import ( "github.com/charmbracelet/fantasy/ai" "github.com/charmbracelet/fantasy/anthropic" + "github.com/charmbracelet/fantasy/google" "github.com/charmbracelet/fantasy/openai" "gopkg.in/dnaeon/go-vcr.v4/pkg/recorder" ) @@ -21,6 +22,8 @@ var languageModelBuilders = []builderPair{ {"openai-gpt-4o", builderOpenaiGpt4o}, {"openai-gpt-4o-mini", builderOpenaiGpt4oMini}, {"anthropic-claude-sonnet", builderAnthropicClaudeSonnet4}, + {"google-gemini-2.5-flash", builderGoogleGemini25Flash}, + {"google-gemini-2.5-pro", builderGoogleGemini25Pro}, } func builderOpenaiGpt4o(r *recorder.Recorder) (ai.LanguageModel, error) { @@ -46,3 +49,19 @@ func builderAnthropicClaudeSonnet4(r *recorder.Recorder) (ai.LanguageModel, erro ) return provider.LanguageModel("claude-sonnet-4-20250514") } + +func builderGoogleGemini25Flash(r *recorder.Recorder) (ai.LanguageModel, error) { + provider := google.New( + google.WithAPIKey(os.Getenv("GEMINI_API_KEY")), + google.WithHTTPClient(&http.Client{Transport: r}), + ) + return provider.LanguageModel("gemini-2.5-flash") +} + +func builderGoogleGemini25Pro(r *recorder.Recorder) (ai.LanguageModel, error) { + provider := google.New( + google.WithAPIKey(os.Getenv("GEMINI_API_KEY")), + google.WithHTTPClient(&http.Client{Transport: r}), + ) + return provider.LanguageModel("gemini-2.5-flash") +}