diff --git a/pkg/providers/http_provider.go b/pkg/providers/http_provider.go index 1fe6a5848..ce6c674cd 100644 --- a/pkg/providers/http_provider.go +++ b/pkg/providers/http_provider.go @@ -178,6 +178,11 @@ func (p *HTTPProvider) parseResponse(body []byte) (*LLMResponse, error) { } } + // Fix: skip tool calls with empty names to avoid downstream errors + if name == "" { + continue + } + toolCalls = append(toolCalls, ToolCall{ ID: tc.ID, Name: name, @@ -285,7 +290,8 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) { apiKey = cfg.Providers.Gemini.APIKey apiBase = cfg.Providers.Gemini.APIBase if apiBase == "" { - apiBase = "https://generativelanguage.googleapis.com/v1beta" + // Use OpenAI-compatible endpoint for tool calling support + apiBase = "https://generativelanguage.googleapis.com/v1beta/openai" } } case "vllm": @@ -388,7 +394,8 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) { apiBase = cfg.Providers.Gemini.APIBase proxy = cfg.Providers.Gemini.Proxy if apiBase == "" { - apiBase = "https://generativelanguage.googleapis.com/v1beta" + // Use OpenAI-compatible endpoint for tool calling support + apiBase = "https://generativelanguage.googleapis.com/v1beta/openai" } case (strings.Contains(lowerModel, "glm") || strings.Contains(lowerModel, "zhipu") || strings.Contains(lowerModel, "zai")) && cfg.Providers.Zhipu.APIKey != "": @@ -452,4 +459,4 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) { } return NewHTTPProvider(apiKey, apiBase, proxy), nil -} \ No newline at end of file +}