fix google/gemini

This commit is contained in:
Ed Zynda
2025-06-27 11:40:11 +03:00
parent acade83e37
commit 6a1b2f65d1
6 changed files with 42 additions and 18 deletions
+5 -5
View File
@@ -59,25 +59,25 @@ func StreamWithCallback(ctx context.Context, reader *schema.StreamReader[*schema
finalResponseMeta.Usage = &schema.TokenUsage{}
}
}
// Merge metadata intelligently to handle Anthropic's streaming behavior
if msg.ResponseMeta.Usage != nil && finalResponseMeta.Usage != nil {
usage := msg.ResponseMeta.Usage
// Take PromptTokens from first chunk that has them (usually non-zero)
if finalResponseMeta.Usage.PromptTokens == 0 && usage.PromptTokens > 0 {
finalResponseMeta.Usage.PromptTokens = usage.PromptTokens
}
// Always take the latest CompletionTokens (accumulates over chunks)
if usage.CompletionTokens > 0 {
finalResponseMeta.Usage.CompletionTokens = usage.CompletionTokens
}
// Calculate TotalTokens from the components
finalResponseMeta.Usage.TotalTokens = finalResponseMeta.Usage.PromptTokens + finalResponseMeta.Usage.CompletionTokens
}
// Preserve other metadata fields from the latest chunk
if msg.ResponseMeta.FinishReason != "" {
finalResponseMeta.FinishReason = msg.ResponseMeta.FinishReason
+6
View File
@@ -158,6 +158,12 @@ func main() {
os.Exit(1)
}
// Fix Google provider environment variables to match our implementation
if googleProvider, exists := providers["google"]; exists {
googleProvider.Env = []string{"GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"}
providers["google"] = googleProvider
}
// Generate Go code
tmpl, err := template.New("models").Parse(codeTemplate)
if err != nil {
+19 -2
View File
@@ -1,5 +1,5 @@
// Code generated by go generate; DO NOT EDIT.
// Generated at: 2025-06-26T10:55:39+03:00
// Generated at: 2025-06-27T11:39:54+03:00
package models
@@ -1374,7 +1374,7 @@ func GetModelsData() map[string]ProviderInfo {
},
"google": {
ID: "google",
Env: []string{"GOOGLE_GENERATIVE_AI_API_KEY"},
Env: []string{"GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"},
NPM: "@ai-sdk/google",
Name: "Google",
Models: map[string]ModelInfo{
@@ -2811,6 +2811,23 @@ func GetModelsData() map[string]ProviderInfo {
Output: 65536,
},
},
"google/gemini-2.5-pro": {
ID: "google/gemini-2.5-pro",
Name: "Gemini 2.5 Pro",
Attachment: true,
Reasoning: true,
Temperature: true,
Cost: Cost{
Input: 1.25,
Output: 10,
CacheRead: &[]float64{0.31}[0],
CacheWrite: nil,
},
Limit: Limit{
Context: 1048576,
Output: 65536,
},
},
"google/gemini-2.5-pro-preview-05-06": {
ID: "google/gemini-2.5-pro-preview-05-06",
Name: "Gemini 2.5 Pro Preview 05-06",
+4 -1
View File
@@ -342,7 +342,10 @@ func createGoogleProvider(ctx context.Context, config *ProviderConfig, modelName
apiKey = os.Getenv("GEMINI_API_KEY")
}
if apiKey == "" {
return nil, fmt.Errorf("Google API key not provided. Use --provider-api-key flag or GOOGLE_API_KEY/GEMINI_API_KEY environment variable")
apiKey = os.Getenv("GOOGLE_GENERATIVE_AI_API_KEY")
}
if apiKey == "" {
return nil, fmt.Errorf("Google API key not provided. Use --provider-api-key flag or GOOGLE_API_KEY/GEMINI_API_KEY/GOOGLE_GENERATIVE_AI_API_KEY environment variable")
}
client, err := genai.NewClient(ctx, &genai.ClientConfig{
+8 -6
View File
@@ -57,16 +57,18 @@ func (r *ModelsRegistry) ValidateEnvironment(provider string, apiKey string) err
return nil
}
var missingVars []string
// Check if at least one environment variable is set
var foundVar bool
for _, envVar := range envVars {
if os.Getenv(envVar) == "" {
missingVars = append(missingVars, envVar)
if os.Getenv(envVar) != "" {
foundVar = true
break
}
}
if len(missingVars) > 0 {
return fmt.Errorf("missing required environment variables for %s: %s",
provider, strings.Join(missingVars, ", "))
if !foundVar {
return fmt.Errorf("missing required environment variables for %s: %s (at least one required)",
provider, strings.Join(envVars, ", "))
}
return nil
-4
View File
@@ -135,8 +135,6 @@ func (c *CLI) DisplayToolMessage(toolName, toolArgs, toolResult string, isError
c.displayContainer()
}
// StartStreamingMessage starts a streaming assistant message
func (c *CLI) StartStreamingMessage(modelName string) {
// Add an empty assistant message that we'll update during streaming
@@ -152,8 +150,6 @@ func (c *CLI) UpdateStreamingMessage(content string) {
c.displayContainer()
}
// DisplayError displays an error message using the message component
func (c *CLI) DisplayError(err error) {
msg := c.messageRenderer.RenderErrorMessage(err.Error(), time.Now())