mirror of
https://github.com/mark3labs/kit.git
synced 2026-06-14 03:30:26 +00:00
fix google/gemini
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user