Project goals
Concrete, executable goals that deliver on the mission.
G.1: Establish a universal interface
- G.1.1: Standardize the core interface. Define a near-zero-dependency core
protocol (
StandardASR) that normalizestranscribe/transcribe_async(batch) andstart_transcription(streaming). - G.1.2: Audio input negotiation and a constant result. A unified audio-input
type system (
AudioInputdiscriminated union) with deterministic negotiation. Lossy steps surface as structured diagnostics; impossible conversions fail loudly. The result is a constant-schemaTranscriptionResultwhose shape never changes with parameters. - G.1.3: Properties, capabilities, and config declarations. Engines declare three machine-readable metadata surfaces: Properties (static I/O identity), Capabilities (hierarchical feature tree), and Config (typed, UI-renderable Pydantic model with secret-field marking).
- G.1.4: Standardize optional features. Streaming, word timestamps,
diarization, phrase hints, and other advanced features have standard interfaces,
standard return formats, and a fail-closed capability query (
supports()). - G.1.5: Unify streaming semantics. A single event protocol
(
partial/final/supersede/progress/done/error) with segment lifecycle and explicit stability guarantees covers every real-world streaming behavior -- from rewriting interims to append-only token streams to two-pass rescoring.
G.2: Provide a developer toolkit
- G.2.1: One-command compliance. A compliance test suite that engine authors
run with
standard-asr compliance runto verify their implementation. - G.2.2: Ready-to-use tooling. A CLI for discovery and quick transcription, a FastAPI server that exposes any engine over HTTP/WebSocket, and a dependency conflict doctor.
- G.2.3: Boilerplate templates. A reference plugin template for quick starts.
G.3: Zero-config operation
- G.3.1: Dynamic config generation. All engine parameters are Pydantic models with JSON Schema output and secret-field marking, so UIs can render config forms without instantiating the engine.
- G.3.2: Plugin auto-discovery. Entry-point-based discovery: install a plugin,
and it appears in
discover_models()with no application-side configuration.
G.4: Extensible plugin ecosystem
- G.4.1: Core and implementation separated. The core package is a near-zero-
dependency protocol (
numpy+pydantic). Each engine lives in its own independently maintained, independently licensed package. - G.4.2: Dependency and license isolation. Plugin architecture keeps
conflicting dependencies and restrictive licenses contained. For hard conflicts
(for example, numpy 1.x vs 2.x),
standard-asr doctordiagnoses and process isolation is the escape hatch. - G.4.3: Plugin catalog. A public directory of compliant engines (known plugins, capability summaries, licenses).
G.5: Cross-language wire protocol
- G.5.1: Wire contract as first-class spec. The HTTP/WebSocket contract evolves into an independently versioned, language-neutral specification. The Python FastAPI server is a reference implementation, not the definition.
- G.5.2: Two-layer isomorphism. The in-process Python protocol and the wire protocol share the same capability model, result schema, and event semantics. Any evolution in one layer must have a corresponding expression in the other.