Skip to content

Transcription through Gecko Suite behind AI_BACKEND (SA-4) - #60

Merged
davior merged 1 commit into
mainfrom
claude/beautiful-wright-og4xur
Nov 4, 2026
Merged

davior merged 1 commit into
mainfrom
claude/beautiful-wright-og4xur

Conversation

@davior

@davior davior commented Nov 4, 2026

Copy link
Copy Markdown
Owner

Summary

GAM's half of speech to text (gecko-suite#6 is the suite's): SA-4 in the suite's plan. Depends on that PR being merged and deployed first. Merging this changes nothing until AI_BACKEND=suite, which is already how enrichment, generation and the assistant are switched.

With AI_BACKEND=suite, the audio GAM extracts goes to the suite's speech to text, which holds the Deepgram key.

  • The transcript comes back in the shape Deepgram's client returns, so storing it (edited-segment protection, indexing, headers) is the code that already exists.
  • GAM writes no usage row for it: the suite recorded the seconds under GAM and the asset, and a second row would count the transcription twice.
  • Whether a key exists is the suite's answer. The upload chain and the URL import both asked "is there a Deepgram key?" of this app's own settings; can_auto_transcribe now asks the suite in suite mode, as GAM for the uploader, with a short timeout since it sits on the upload path. A suite that is down counts as "no key", so an upload never leaves a red row behind and a URL import falls back to the site's captions, exactly as it does today with no key. The library keeps working, and Transcribe can be pressed once the suite is back.
  • A job's failures reach the activity feed as the suite's own sentences ("Add a Deepgram provider in Gecko Suite", "That audio is over 300 MB. Send it in parts", "can't be reached right now").
  • Settings points at the suite's providers instead of asking for a Deepgram key that nothing would read. The model choice stays: it is sent with each transcription.
  • requirements.txt pins gecko-suite-client to the suite PR's head commit (the one with SuiteSpeech). I'll re-pin to main once that merges.

Test plan

  • cd backend && pytest -q: 1536 passed (8 new for suite mode, run with real ffmpeg: a transcription end to end with no Deepgram key here and no usage row, the suite's sentence reaching the job, a suite that is down, a recording too long, an upload queued or not by the suite's answer, an upload still succeeding when the suite is down, and local mode unchanged).
  • cd frontend && npm run format:check && npm run lint && npm test && npm run build: 474 tests passed.
  • CI green, including the Docker image build.
  • A real transcription against a real suite and Deepgram. Not run here: everything is against fakes.

Deployment

Merging and redeploying changes nothing for users until AI_BACKEND=suite.

  1. Before pulling: gecko-suite#6 must be merged and deployed, and the suite needs a Deepgram provider with a key (check Providers; the importer brought across any Deepgram key from GAM or Notes settings).
  2. Configuration: nothing new. AI_BACKEND=suite and SUITE_APP_SECRET are already set if enrichment is on the suite.
  3. Deploy: rebuilds the backend and the frontend; the server needs outbound access to github.com for the client:
    git pull origin main
    docker compose up --build -d
    docker compose ps
    curl -f http://localhost:${APP_PORT}/api/health
  4. Migrations: none.
  5. Other apps: nothing. (Video Creator's narration is text to speech, which is the next PR.)
  6. Verify: with AI_BACKEND=suite, Settings shows "uses the Deepgram key kept in Gecko Suite". Upload a video: a transcription is queued by itself, finishes, and the transcript is searchable. The suite's Usage has an stt row under GAM with the asset as its subject (seconds, cost blank). GAM's own Usage panel will not show it, because the suite counts it.
  7. Roll back: set AI_BACKEND=local and docker compose up -d; the Deepgram key in Settings is still there. A transcription running at that moment fails and can be re-run.


Generated by Claude Code

With AI_BACKEND=suite the extracted audio goes to the suite's speech-to-text, which holds
the Deepgram key and records the seconds under GAM and the asset, so GAM writes no usage
row for it. The segments come back in the shape Deepgram's client returns, so storing
them is the code that already exists. Whether a key exists is the suite's answer, asked
before the upload chain queues a transcription and before a URL import decides to fetch
captions; a suite that is down counts as no, so an upload never leaves a red row behind.
Settings points at the suite's providers instead of asking for a Deepgram key nothing
would read. The client is pinned to the suite commit that has SuiteSpeech.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1geD2ELWgL2sDpxYbx3Aw
@davior
davior marked this pull request as ready for review November 4, 2026 01:36
@davior
davior merged commit 28ef153 into main Nov 4, 2026
3 checks passed
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.

2 participants