Repository navigation
feat(server,sdk): asset transcription service + OpenAI-compatible backend (MEET-2) - #367
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Oct 3, 2026
# Conflicts: # packages/server/src/ableOidc.test.ts
eliotlim
added a commit
that referenced
this pull request
Oct 5, 2026
…2) (#366) * docs: record audio asset worker brief (MEET-1) * feat(server,sdk): support audio assets (MEET-1) * test(server): keep OIDC gate fixture PAT unexpired (MEET-1) * docs: report audio asset verification (MEET-1) * chore: drop worker docs (MEET-1) * docs(sdk): fix asset allowlist comment (MEET-1) * feat(server,sdk): asset transcription service + OpenAI-compatible backend (MEET-2) (#367) * feat(server,sdk): add asset transcription service and backend (MEET-2) * test(server): keep OIDC access-gate PAT fixture valid (MEET-2) * docs: report MEET-2 implementation and verification blocker * docs: record green serialized verification for MEET-2 * chore: drop worker artifacts (MEET-2)
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
No speech-to-text existed anywhere in OpenBook; the meeting block needs per-chunk transcription with a local-first provider policy. Board: MEET-2.
Solution
Adds
POST /api/ai/transcribe({assetId, pageId} → {text, segments (s), durationMs}), request-scoped like aiComplete (no queue).AiConfig.transcription {provider: off|local|openai-compat, baseUrl?, model?, apiKey?}persisted in settings with write-only key semantics (responses expose onlyapiKeySet). One OpenAI-compatible multipart code path (/v1/audio/transcriptions, verbose_json) serves OpenAI cloud and any local compatible server. Resolution: explicit cloud > injected local resolver (MEET-3 seam:TranscriptionEngine, lazy 3rd AiService ctor arg) > mock > actionable 400. Cloud is paid-gated before any egress; local/mock ungated. Usage rows logged. sdk gainstranscribeAsset; LocalDataClient rejects it. No new deps.Key files:
packages/server/src/ai/{routes,service,providers,usage}.ts,packages/sdk/src/ai.ts,packages/sdk/src/client.ts,packages/server/src/transcription.test.ts.Before / After
transcription.test.tsNo visual change.
Test procedure
VITEST_MAX_WORKERS=1 pnpm verify(4,208 passed/6 skipped; server e2e 256, MCP e2e 70). Targeted:pnpm --filter @book.dev/server vitest run src/transcription.test.ts(10 tests).Operational notes
No env vars, no migration. Default transcription = local (lands in MEET-3; until then unconfigured → actionable 400 pointing at Settings → AI). baseUrl is owner-gated, credential-free http(s), no private-IP block (matches existing owner-gated model-download precedent). 5-min upstream timeout; client abort propagated. Merge AFTER #366; the
ableOidc.test.tsfixture hunk is byte-identical to #366's except a comment (keep this branch's wording — PAT expiry uses the database clock).Verify: green serialized (flaky-under-load money.test.ts documented, untouched). Reviews cleared: security (Sasha), code (Quinn).
🤖 Generated with Claude Code