diff --git a/go/core/cli/internal/cli/agent/const.go b/go/core/cli/internal/cli/agent/const.go index 885f44c5d..b902f5eeb 100644 --- a/go/core/cli/internal/cli/agent/const.go +++ b/go/core/cli/internal/cli/agent/const.go @@ -28,6 +28,14 @@ func GetModelProvider() v1alpha2.ModelProvider { return v1alpha2.ModelProviderAnthropic case GetModelProviderHelmValuesKey(v1alpha2.ModelProviderAzureOpenAI): return v1alpha2.ModelProviderAzureOpenAI + case GetModelProviderHelmValuesKey(v1alpha2.ModelProviderGemini): + return v1alpha2.ModelProviderGemini + case GetModelProviderHelmValuesKey(v1alpha2.ModelProviderGeminiVertexAI): + return v1alpha2.ModelProviderGeminiVertexAI + case GetModelProviderHelmValuesKey(v1alpha2.ModelProviderAnthropicVertexAI): + return v1alpha2.ModelProviderAnthropicVertexAI + case GetModelProviderHelmValuesKey(v1alpha2.ModelProviderBedrock): + return v1alpha2.ModelProviderBedrock default: return v1alpha2.ModelProviderOpenAI } @@ -42,7 +50,9 @@ func GetModelProviderHelmValuesKey(provider v1alpha2.ModelProvider) string { return helmKey } -// GetProviderAPIKey returns API_KEY env var name from provider type +// GetProviderAPIKey returns the env var name for the provider's API key. +// Returns "" for providers that use cloud credentials instead of an API key +// (Ollama, Bedrock, GeminiVertexAI, AnthropicVertexAI). func GetProviderAPIKey(provider v1alpha2.ModelProvider) string { switch provider { case v1alpha2.ModelProviderOpenAI: @@ -51,7 +61,16 @@ func GetProviderAPIKey(provider v1alpha2.ModelProvider) string { return env.AnthropicAPIKey.Name() case v1alpha2.ModelProviderAzureOpenAI: return env.AzureOpenAIAPIKey.Name() + case v1alpha2.ModelProviderGemini: + // Prefer GOOGLE_API_KEY, fall back to GEMINI_API_KEY to match the + // runtime behaviour in go/adk/pkg/agent/agent.go. + if _, ok := os.LookupEnv(env.GoogleAPIKey.Name()); ok { + return env.GoogleAPIKey.Name() + } + return "GEMINI_API_KEY" default: + // Ollama, Bedrock, GeminiVertexAI, AnthropicVertexAI use cloud + // credentials rather than a simple API key, so no check is needed. return "" } } diff --git a/go/core/cli/internal/cli/agent/install.go b/go/core/cli/internal/cli/agent/install.go index 27f5577c9..a8d763e7e 100644 --- a/go/core/cli/internal/cli/agent/install.go +++ b/go/core/cli/internal/cli/agent/install.go @@ -86,6 +86,7 @@ func InstallCmd(ctx context.Context, cfg *InstallCfg) *PortForward { if apiKeyName != "" && apiKeyValue == "" { fmt.Fprintf(os.Stderr, "%s is not set\n", apiKeyName) fmt.Fprintf(os.Stderr, "Please set the %s environment variable\n", apiKeyName) + fmt.Fprintf(os.Stderr, "To use a different provider set KAGENT_DEFAULT_MODEL_PROVIDER (e.g. ollama, anthropic, gemini)\n") return nil } @@ -127,6 +128,7 @@ func InteractiveInstallCmd(ctx context.Context, c *ishell.Context) *PortForward if apiKeyName != "" && apiKeyValue == "" { fmt.Fprintf(os.Stderr, "%s is not set\n", apiKeyName) fmt.Fprintf(os.Stderr, "Please set the %s environment variable\n", apiKeyName) + fmt.Fprintf(os.Stderr, "To use a different provider set KAGENT_DEFAULT_MODEL_PROVIDER (e.g. ollama, anthropic, gemini)\n") return nil }