Skip to content

Deduplicate TTS engine HTTP request scaffolding - #15

Open
phyceClaw wants to merge 2 commits into
phyce:mainfrom
phyceClaw:fix/engine-dedup
Open

Deduplicate TTS engine HTTP request scaffolding#15
phyceClaw wants to merge 2 commits into
phyce:mainfrom
phyceClaw:fix/engine-dedup

Conversation

@phyceClaw

Copy link
Copy Markdown

Summary

ElevenLabs, OpenAI and Gemini each hand-rolled the same JSON-over-HTTP sequence (marshal → new request → set headers → do → close → status check → read body). This extracts it into a small shared helper, app/tts/engine/internal/httpapi, and routes the four sendRequest/Fetch* functions through it.

  • New httpapi.Do(Request) centralizes the request lifecycle and owns the single timeout-bounded http.Client.
  • ~127 lines of duplicated scaffolding removed; each engine now just supplies its URL, auth header, and body, then decodes the returned bytes.
  • Drops leftover debug response.Success("...succeeded?") calls and a dead return nil after a return in ElevenLabs.Play (the only go vet warning in the touched files).
  • Google is intentionally left unchanged — it uses the texttospeech gRPC SDK, not raw HTTP, so it does not fit this helper.

Behavior is preserved: same endpoints, headers, 30s timeout, status handling, and error bodies.

⚠️ Stacked on #6

This branches on top of #6 (Harden TTS engine HTTP clients), since both touch the same engine files. Until #6 merges, the diff here shows #6’s commit too — the net-new change is the single commit Deduplicate TTS engine HTTP request scaffolding. Please merge after #6; it will then reduce to just the dedup.

Testing

CGO_ENABLED=1 go build ./app/... passes; go vet clean on all touched packages.

🤖 Generated with Claude Code

phyceClaw and others added 2 commits July 6, 2026 10:44
- Add request timeouts to ElevenLabs and OpenAI HTTP clients (a hung
  endpoint no longer blocks a pooled instance forever)
- Send the Gemini API key via the x-goog-api-key header instead of a
  URL query param (avoids leaking the key into logs/proxies/errors)
- Reuse a single Google TextToSpeech client instead of creating one
  per request

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ElevenLabs, OpenAI and Gemini each hand-rolled the same
marshal / new-request / set-headers / do / close / status-check /
read-body sequence. Extract it into a shared httpapi.Do helper (with
the timeout-bounded client) and route the four sendRequest/Fetch
functions through it. Also drops leftover debug response.Success
noise and a dead return in ElevenLabs.Play.

Google is unchanged (it uses the gRPC SDK, not raw HTTP).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant