chenhg5/cc-connect · error
gemini stt: create request: %w
Error message
gemini stt: create request: %w
What it means
Thrown by GeminiSTT.Transcribe in core/speech.go when http.NewRequestWithContext fails to construct the POST request to the Gemini generateContent endpoint. This is a client-side URL/parameter construction failure before any network traffic occurs.
Source
Thrown at core/speech.go:260
},
},
{
"text": prompt,
},
},
},
},
}
jsonData, err := json.Marshal(reqBody)
if err != nil {
return "", fmt.Errorf("gemini stt: marshal request: %w", err)
}
apiURL := fmt.Sprintf("%s/models/%s:generateContent", g.BaseURL, url.PathEscape(g.Model))
req, err := http.NewRequestWithContext(ctx, http.MethodPost, apiURL, bytes.NewReader(jsonData))
if err != nil {
return "", fmt.Errorf("gemini stt: create request: %w", err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("x-goog-api-key", g.APIKey)
resp, err := g.Client.Do(req)
if err != nil {
return "", fmt.Errorf("gemini stt: request: %w", err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return "", fmt.Errorf("gemini stt: read response: %w", err)
}
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("gemini stt API %d: %s", resp.StatusCode, string(body))
}View on GitHub (pinned to 4000b2338a)
Solutions
- Check the error's url.Parse message and fix the Gemini BaseURL in config.toml (should be like https://generativelanguage.googleapis.com/v1beta).
- Ensure no stray spaces, quotes, or newlines around the configured URL.
- Verify the provider's env var/config key is actually set so BaseURL isn't empty.
- Test the URL with curl to confirm it forms a valid endpoint.
Example fix
// before BaseURL = "https://generativelanguage.googleapis.com/v1beta " // trailing space // after BaseURL = "https://generativelanguage.googleapis.com/v1beta"
Defensive patterns
Strategy: validation
Validate before calling
u, err := url.Parse(g.BaseURL)
if err != nil || u.Scheme != "https" || u.Host == "" {
return fmt.Errorf("gemini: invalid BaseURL %q", g.BaseURL)
} Try / catch
text, err := stt.Transcribe(ctx, audio)
if err != nil {
if strings.Contains(err.Error(), "create request") {
return fmt.Errorf("gemini: check BaseURL config: %w", err)
}
return err
} Prevention
- Validate BaseURL with url.Parse at provider construction time, not per-request.
- Trim whitespace/quotes from config values when loading config.toml.
- Fail fast at startup with a doctor check if the URL is malformed.
- Keep BaseURL to the documented form: https://generativelanguage.googleapis.com/v1beta.
When it happens
Trigger: http.NewRequestWithContext returns an error — almost always because the assembled apiURL is malformed, e.g. BaseURL contains spaces or invalid characters, or BaseURL is empty causing a relative/invalid URL.
Common situations: BaseURL in config.toml has a typo, trailing whitespace/newline, or quotes; environment variable substitution left the BaseURL empty; pasted URL contains invisible characters.
Understand the failure class
Background: "Invalid URL" / "URL cannot be empty": fix the malformed or missing URL behind request-construction failures — this error's family across 50 libraries.
Related errors
- reasonix: create request: %w
- create request: %w
- gemini stt: request: %w
- gemini stt API %d: %s
- yuanbao: create request: %w
AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06).
Data as JSON: /api/errors/0c01967e0db591b7.
Report an issue: GitHub.