Document Seriatim merge integration
This commit is contained in:
16
README.md
16
README.md
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
`narratio` is a Go-based orchestration application for processing D&D session audio into transcripts and downstream artifacts.
|
`narratio` is a Go-based orchestration application for processing D&D session audio into transcripts and downstream artifacts.
|
||||||
|
|
||||||
This repository currently contains a **working scaffold** with strict config loading, local workdir/manifest handling, resumable stage control, a real WhisperX HTTP adapter, and a real `prepare` + `transcribe` path.
|
This repository currently contains a **working scaffold** with strict config loading, local workdir/manifest handling, resumable stage control, real WhisperX and Seriatim adapters, and real `prepare` + `transcribe` + `merge` stages.
|
||||||
|
|
||||||
## Expected Config Files
|
## Expected Config Files
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ Seriatim config contract in `pipeline.yml`:
|
|||||||
`speakers.yml` note:
|
`speakers.yml` note:
|
||||||
|
|
||||||
- use Seriatim’s documented `match:` format (not the legacy direct mapping style used by older scripts/scaffolds)
|
- use Seriatim’s documented `match:` format (not the legacy direct mapping style used by older scripts/scaffolds)
|
||||||
- TODO: add a concrete `speakers.yml` example once the Seriatim README/spec is vendored or linked in-repo.
|
- see [`examples/speakers.yml`](examples/speakers.yml) for a concrete `match:` example.
|
||||||
|
|
||||||
Decoding is strict (`KnownFields(true)`), so unknown YAML fields fail fast.
|
Decoding is strict (`KnownFields(true)`), so unknown YAML fields fail fast.
|
||||||
|
|
||||||
@@ -42,13 +42,12 @@ Implemented now:
|
|||||||
- strict config load + validation
|
- strict config load + validation
|
||||||
- local artifact/workdir creation and locking
|
- local artifact/workdir creation and locking
|
||||||
- manifest create/load/save and stage status tracking
|
- manifest create/load/save and stage status tracking
|
||||||
- stage framework with real `prepare` and `transcribe` stages; placeholder downstream stages
|
- stage framework with real `prepare`, `transcribe`, and `merge` stages; placeholder downstream stages
|
||||||
- resumable run control (`run`, `resume`, `run-stage`, `plan` with run/skip decisions)
|
- resumable run control (`run`, `resume`, `run-stage`, `plan` with run/skip decisions)
|
||||||
- real WhisperX HTTP adapter plus fake/no-op adapters for test/scaffold usage
|
- real WhisperX HTTP adapter plus real Seriatim subprocess adapter (both with fake/no-op adapters for test/scaffold usage)
|
||||||
|
|
||||||
Not implemented yet:
|
Not implemented yet:
|
||||||
|
|
||||||
- real Seriatim execution
|
|
||||||
- real Audita execution
|
- real Audita execution
|
||||||
- real analyzer integration
|
- real analyzer integration
|
||||||
- real remote archive/storage backend
|
- real remote archive/storage backend
|
||||||
@@ -68,9 +67,12 @@ go run ./cmd/narratio plan --config examples/pipeline.minimal.yml --session exam
|
|||||||
|
|
||||||
## Run Pipeline (Current State)
|
## Run Pipeline (Current State)
|
||||||
|
|
||||||
The current `run` command executes `prepare` + real `transcribe` + placeholder downstream stages and records progress in `manifest.json`.
|
The current `run` command executes `prepare` + real `transcribe` + real `merge` + placeholder downstream stages and records progress in `manifest.json`.
|
||||||
|
|
||||||
Default CLI wiring builds and uses the real WhisperX HTTP adapter from `pipeline.whisperx` when `whisperx.transcribe_url` is configured.
|
Default CLI wiring builds and uses:
|
||||||
|
|
||||||
|
- real WhisperX HTTP adapter from `pipeline.whisperx`
|
||||||
|
- real Seriatim subprocess adapter from `pipeline.seriatim`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
go run ./cmd/narratio run --config examples/pipeline.minimal.yml --session examples/session.minimal.yml
|
go run ./cmd/narratio run --config examples/pipeline.minimal.yml --session examples/session.minimal.yml
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
`narratio` is a Go orchestrator for D&D session processing. It coordinates a stage-based pipeline from recorded audio through transcript and artifact generation, while preserving durable run state for skip/rerun/resume behavior.
|
`narratio` is a Go orchestrator for D&D session processing. It coordinates a stage-based pipeline from recorded audio through transcript and artifact generation, while preserving durable run state for skip/rerun/resume behavior.
|
||||||
|
|
||||||
The repository currently implements the orchestration scaffold, local state model, and stage framework, including a real WhisperX HTTP adapter and a real `transcribe` stage. It intentionally does **not** yet implement real Seriatim, Audita, analyzer, remote archive, or notification integrations.
|
The repository currently implements the orchestration scaffold, local state model, and stage framework, including real WhisperX and Seriatim adapters plus real `prepare`/`transcribe`/`merge` stages. It intentionally does **not** yet implement real Audita, analyzer, remote archive, or notification integrations.
|
||||||
|
|
||||||
## 2. Design Goals
|
## 2. Design Goals
|
||||||
|
|
||||||
@@ -36,15 +36,16 @@ Implemented now:
|
|||||||
- Stage interface, canonical stage ordering, and runner main loop.
|
- Stage interface, canonical stage ordering, and runner main loop.
|
||||||
- Real `prepare` stage (input resolution/materialization/provenance).
|
- Real `prepare` stage (input resolution/materialization/provenance).
|
||||||
- Real `transcribe` stage (prepared-audio discovery, WhisperX adapter execution, JSON transcript validation, provenance metadata).
|
- Real `transcribe` stage (prepared-audio discovery, WhisperX adapter execution, JSON transcript validation, provenance metadata).
|
||||||
|
- Real `merge` stage (raw-transcript discovery, Seriatim adapter execution, merged/report JSON validation, provenance metadata).
|
||||||
- Real WhisperX HTTP adapter implementation (multipart POST + retries + timeout + atomic output writes).
|
- Real WhisperX HTTP adapter implementation (multipart POST + retries + timeout + atomic output writes).
|
||||||
- Placeholder downstream stages (`normalize`..`notify`) with adapter contract calls.
|
- Real Seriatim subprocess adapter implementation (deterministic CLI/env construction + output/report JSON validation).
|
||||||
|
- Placeholder downstream stages (`normalize`, `polish`, `analyze`, `archive`, `notify`) with adapter contract calls.
|
||||||
- Adapter interfaces and fake/no-op implementations for all external boundaries.
|
- Adapter interfaces and fake/no-op implementations for all external boundaries.
|
||||||
- Reusable subprocess helper and generated YAML/config writing helper.
|
- Reusable subprocess helper and generated YAML/config writing helper.
|
||||||
- Test coverage across config, manifest, artifacts, planning, runner control, and adapters.
|
- Test coverage across config, manifest, artifacts, planning, runner control, and adapters.
|
||||||
|
|
||||||
Still planned/future:
|
Still planned/future:
|
||||||
|
|
||||||
- Real Seriatim adapter.
|
|
||||||
- Real Audita adapter.
|
- Real Audita adapter.
|
||||||
- Real analyzer integration.
|
- Real analyzer integration.
|
||||||
- Real remote archive/storage backend (S3/SFTP/etc).
|
- Real remote archive/storage backend (S3/SFTP/etc).
|
||||||
@@ -68,7 +69,8 @@ Execution status:
|
|||||||
|
|
||||||
- `prepare` is implemented with real local filesystem behavior.
|
- `prepare` is implemented with real local filesystem behavior.
|
||||||
- `transcribe` is implemented and validates raw transcript JSON outputs.
|
- `transcribe` is implemented and validates raw transcript JSON outputs.
|
||||||
- `normalize`/`merge`/`polish`/`analyze`/`archive`/`notify` remain placeholders.
|
- `merge` is implemented and validates merged transcript/report JSON outputs.
|
||||||
|
- `normalize`/`polish`/`analyze`/`archive`/`notify` remain placeholders.
|
||||||
|
|
||||||
## 6. CLI Commands
|
## 6. CLI Commands
|
||||||
|
|
||||||
@@ -249,7 +251,14 @@ Current `Declares` role:
|
|||||||
- Calls `whisperx.Client` with bounded parallelism from `pipeline.whisperx.concurrency`.
|
- Calls `whisperx.Client` with bounded parallelism from `pipeline.whisperx.concurrency`.
|
||||||
- Validates each output file exists and is valid JSON before stage success.
|
- Validates each output file exists and is valid JSON before stage success.
|
||||||
- Records output refs plus stage metadata (`audio_files_count`, language/concurrency/retry settings, output paths, per-file attempts/status/duration/path).
|
- Records output refs plus stage metadata (`audio_files_count`, language/concurrency/retry settings, output paths, per-file attempts/status/duration/path).
|
||||||
- `normalize`..`notify` (placeholder):
|
- `merge` (real):
|
||||||
|
- Discovers raw transcript inputs from `manifest.stages.transcribe.outputs` (`kind=transcript_raw`) or `work/.../transcripts/raw` fallback.
|
||||||
|
- Validates input transcript files as existing regular JSON files.
|
||||||
|
- Uses prepared `inputs/speakers.yml` and `inputs/autocorrect.yml` directly (no speaker-map format translation).
|
||||||
|
- Invokes `seriatim.Runner` using canonical merged/report/log/generated-config paths under the session workdir.
|
||||||
|
- Validates merged transcript output JSON and (when enabled) report JSON before stage success.
|
||||||
|
- Records merged/report output refs plus stage metadata (input paths/count, Seriatim settings, output paths, adapter duration/exit metadata).
|
||||||
|
- `normalize`/`polish`/`analyze`/`archive`/`notify` (placeholder):
|
||||||
- Return placeholder metadata.
|
- Return placeholder metadata.
|
||||||
- Optionally call adapters using expected request/result contract shapes.
|
- Optionally call adapters using expected request/result contract shapes.
|
||||||
|
|
||||||
@@ -274,7 +283,7 @@ Adapter boundaries (`internal/adapters/*`):
|
|||||||
- `storage.Backend`
|
- `storage.Backend`
|
||||||
- `notify.Sender`
|
- `notify.Sender`
|
||||||
|
|
||||||
All adapters currently have fake/no-op implementations for tests/scaffold execution. WhisperX additionally has a real HTTP adapter implementation under `internal/adapters/whisperx/http.go`.
|
All adapters currently have fake/no-op implementations for tests/scaffold execution. WhisperX has a real HTTP adapter (`internal/adapters/whisperx/http.go`) and Seriatim has a real subprocess adapter (`internal/adapters/seriatim/subprocess.go`).
|
||||||
|
|
||||||
### Subprocess helper
|
### Subprocess helper
|
||||||
|
|
||||||
@@ -309,11 +318,11 @@ Stale detection is intentionally TODO (`run_control.go`) pending checksum-based
|
|||||||
|
|
||||||
- Structured logger is initialized via `internal/logging` (`slog` text handler).
|
- Structured logger is initialized via `internal/logging` (`slog` text handler).
|
||||||
- Runner emits concise stage lifecycle logs (skip/start/success/fail + manifest save points).
|
- Runner emits concise stage lifecycle logs (skip/start/success/fail + manifest save points).
|
||||||
- Placeholder subprocess adapter requests include distinct stdout/stderr log paths to preserve future boundary design.
|
- Real WhisperX/Seriatim stages already use explicit output/log/config paths; placeholder downstream subprocess adapters keep that same boundary pattern.
|
||||||
|
|
||||||
### Long-running stage expectations
|
### Long-running stage expectations
|
||||||
|
|
||||||
The architecture expects long-running stages (especially WhisperX and Audita). WhisperX already uses context timeout/cancellation and retry logic inside its HTTP adapter; other long-running integrations are still pending.
|
The architecture expects long-running stages (especially WhisperX, Seriatim, and Audita). WhisperX and Seriatim already use context timeout/cancellation in their adapters (with WhisperX retry logic); other long-running integrations are still pending.
|
||||||
|
|
||||||
## 13. Testing Strategy
|
## 13. Testing Strategy
|
||||||
|
|
||||||
@@ -326,8 +335,10 @@ Current tests verify scaffold behavior without real external services:
|
|||||||
- Run/skip/force/resume/run-stage control behavior.
|
- Run/skip/force/resume/run-stage control behavior.
|
||||||
- Prepare-stage input materialization/provenance/idempotency.
|
- Prepare-stage input materialization/provenance/idempotency.
|
||||||
- Real transcribe-stage audio discovery/concurrency/failure handling/output validation/provenance.
|
- Real transcribe-stage audio discovery/concurrency/failure handling/output validation/provenance.
|
||||||
|
- Real merge-stage input discovery/validation, Seriatim adapter failure handling, merged/report output validation, and provenance recording.
|
||||||
- Adapter fake behavior and error propagation.
|
- Adapter fake behavior and error propagation.
|
||||||
- WhisperX HTTP adapter behavior (request shape, retry policy, timeout/cancel, JSON validation, atomic writes).
|
- WhisperX HTTP adapter behavior (request shape, retry policy, timeout/cancel, JSON validation, atomic writes).
|
||||||
|
- Seriatim subprocess adapter behavior (arg/env construction, timeout/failure handling, output/report JSON validation).
|
||||||
- Subprocess helper behavior (success/failure/timeout/log capture).
|
- Subprocess helper behavior (success/failure/timeout/log capture).
|
||||||
|
|
||||||
Tests intentionally avoid hardcoding arbitrary operational default values.
|
Tests intentionally avoid hardcoding arbitrary operational default values.
|
||||||
@@ -337,13 +348,12 @@ Tests intentionally avoid hardcoding arbitrary operational default values.
|
|||||||
Recommended implementation sequence (one focused boundary at a time):
|
Recommended implementation sequence (one focused boundary at a time):
|
||||||
|
|
||||||
1. Implement real `normalize` transcript transformation/validation.
|
1. Implement real `normalize` transcript transformation/validation.
|
||||||
2. Implement real `merge` using Seriatim adapter + generated config + subprocess logs.
|
2. Implement real `polish` using Audita adapter + checkpoint/log handling.
|
||||||
3. Implement real `polish` using Audita adapter + checkpoint/log handling.
|
3. Implement real `analyze` adapter integration and artifact validation.
|
||||||
4. Implement real `analyze` adapter integration and artifact validation.
|
4. Implement real `archive` remote backend behavior.
|
||||||
5. Implement real `archive` remote backend behavior.
|
5. Implement real `notify` backend.
|
||||||
6. Implement real `notify` backend.
|
6. Add checksum-based stale detection and stale status transitions.
|
||||||
7. Add checksum-based stale detection and stale status transitions.
|
7. Add selective parallelism where architecturally safe (`transcribe` fan-out and/or downstream-safe boundaries).
|
||||||
8. Add selective parallelism where architecturally safe (`transcribe` fan-out and/or downstream-safe boundaries).
|
|
||||||
|
|
||||||
Each step must preserve existing package boundaries and manifest-based control flow.
|
Each step must preserve existing package boundaries and manifest-based control flow.
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,5 @@
|
|||||||
sample-speaker: sample-speaker.flac
|
match:
|
||||||
|
- speaker: "Eric Rakestraw"
|
||||||
|
match:
|
||||||
|
- "Eric_Rakestraw"
|
||||||
|
- "Eric"
|
||||||
|
|||||||
Reference in New Issue
Block a user