initial commit: live meeting transcription pipeline
Go orchestrator: spawns audiotee for capture (system audio + mic, two tracks), segments with an energy-threshold VAD, transcribes each segment via qwen-asr (subprocess per segment, vendored as a pinned git submodule in third_party/qwen-asr), and serves the live transcript over SSE while also writing it durably to a text file. Includes a glossary/prompt-leakage guard (internal/asr/leak.go) that discards a segment if the model echoes the biasing prompt instead of transcribing. cmd/transcriptor-ai is the main orchestrator; cmd/transcript-tail is a minimal terminal SSE client. See CLAUDE.md for the full architecture and the reasoning behind each choice (Go over Python/Swift/Rust, SSE over WebSocket, why the VAD is a hand-rolled heuristic, etc). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Executable
+31
@@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
# Builds transcriptor-ai and its qwen_asr dependency into dist/, ready to be
|
||||
# embedded by transcriptor-ui's Xcode build phase. Models are NOT part of
|
||||
# this — those are fetched at runtime by the app (see CLAUDE.md), only
|
||||
# binaries are built/staged here.
|
||||
#
|
||||
# Usage: scripts/build-dist.sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$REPO_ROOT"
|
||||
|
||||
DIST_DIR="$REPO_ROOT/dist"
|
||||
QWEN_ASR_DIR="$REPO_ROOT/third_party/qwen-asr"
|
||||
|
||||
echo "Ensuring qwen-asr submodule is present (pinned commit)..."
|
||||
git submodule update --init --recursive third_party/qwen-asr
|
||||
|
||||
echo "Building qwen_asr..."
|
||||
make -C "$QWEN_ASR_DIR" blas
|
||||
|
||||
echo "Building transcriptor-ai..."
|
||||
mkdir -p "$DIST_DIR"
|
||||
go build -o "$DIST_DIR/transcriptor-ai" ./cmd/transcriptor-ai
|
||||
|
||||
cp "$QWEN_ASR_DIR/qwen_asr" "$DIST_DIR/qwen_asr"
|
||||
|
||||
echo ""
|
||||
echo "dist/ ready:"
|
||||
ls -la "$DIST_DIR"
|
||||
Reference in New Issue
Block a user