Renumber spec 001 decision placeholders to D-040–D-051; record the Danish publication

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas WintherandClaude Opus 5.5 committed 2026-10-30 01:47:27 +01:00
1 parent 30969e86b7
commit 0632f7843b
71 files changed
+244 -236

No files matched your search

+18 -18
View File
@@ -36,14 +36,14 @@ export interface DtypeDefault {
}
/**
* Which inference path a catalog entry runs on (D-WS7a). Whisper models use
* Which inference path a catalog entry runs on (D-051). Whisper models use
* the Transformers.js ASR pipeline; Parakeet uses the worker's own TDT path
* (src/worker/parakeetEngine.ts). Absent ⇒ "whisper", so the Whisper entries
* carry no field at all.
*/
export type ModelFamily = "whisper" | "parakeet";
/** Exact weight-file sizes per dtype, for entries whose files we know (D-WS7a). */
/** Exact weight-file sizes per dtype, for entries whose files we know (D-051). */
export interface ExactModelBytes {
encoder: Partial<Record<WhisperDtype, number>>;
decoder: Partial<Record<WhisperDtype, number>>;
@@ -54,7 +54,7 @@ export interface ExactModelBytes {
export interface WhisperModel {
/** Hugging Face Hub id, e.g. "onnx-community/whisper-tiny.en". */
id: string;
/** Inference path (D-WS7a); absent ⇒ "whisper". */
/** Inference path (D-051); absent ⇒ "whisper". */
family?: ModelFamily;
/**
* Real file sizes; when present they replace the parameter-count estimate
@@ -67,11 +67,11 @@ export interface WhisperModel {
multilingual: boolean;
/**
* Whether Whisper's own `task: "translate"` (speech → English text) is
* offered (D-WS4a). False for every `.en` model (no task token) and for
* offered (D-044). False for every `.en` model (no task token) and for
* large-v3-turbo, which OpenAI did not train for translation — and for any
* turbo-based fine-tune not tested for it. The UI hides "Translate to
* English" where false; text translation of a finished transcript
* (D-WS4b) works for every model regardless.
* (D-045) works for every model regardless.
*/
canTranslate: boolean;
/** Encoder parameter count, in millions (drives size estimates). */
@@ -86,7 +86,7 @@ export interface WhisperModel {
* CTranslate2 conversions on the Hub (`Systran/faster-whisper-*`;
* large-v3-turbo → `mobiuslabsgmbh/faster-whisper-large-v3-turbo`), so the
* pinned library version stays the single authority on the exact repo.
* Absent for browser-only families (Parakeet, D-WS7a): the server engine
* Absent for browser-only families (Parakeet, D-051): the server engine
* answers 400 for them and the picker hides them while it is selected.
*/
fasterWhisperModel?: string;
@@ -212,12 +212,12 @@ const ACCEL_Q4: DtypeDefault = {
};
// ---------------------------------------------------------------------------
// Danish fine-tunes (D-WS6a)
// Danish fine-tunes (D-046)
// ---------------------------------------------------------------------------
/**
* Hugging Face account that hosts our conversions of the Danish Whisper
* fine-tunes (D-WS6a). Both the ONNX repo (browser engine) and the
* fine-tunes (D-046). Both the ONNX repo (browser engine) and the
* CTranslate2 int8 repo (server engine) hang off this one value. Only
* whisper-small-danish is published: the turbo fine-tunes (turbo-danish,
* edda-v0.2) showed no clear gain over stock turbo on our Danish clip.
@@ -225,14 +225,14 @@ const ACCEL_Q4: DtypeDefault = {
export const DANISH_MODELS_HF_OWNER = "lucasw89";
/**
* WASM default for the Danish conversions (D-WS6a): measured on our own files
* WASM default for the Danish conversions (D-046): measured on our own files
* (da_festuge, onnxruntime-node CPU), q4 matched or beat q8 on WER and was
* faster for all three — small included, unlike the stock small (q8).
*/
const DANISH_WASM_Q4: DtypeDefault = {
dtype: "q4",
verified: false,
note: "q4: best measured WER and fastest of q8/q4 on our Danish conversions (D-WS6a).",
note: "q4: best measured WER and fastest of q8/q4 on our Danish conversions (D-046).",
};
/** Catalog id + matching faster-whisper repo for one published conversion. */
@@ -247,7 +247,7 @@ function danishRepos(name: string): Pick<WhisperModel, "id" | "fasterWhisperMode
// The catalog (D-006: curated, not exhaustive)
// ---------------------------------------------------------------------------
/** Parakeet TDT 0.6B v3 ONNX repo and the revision its file sizes were taken from (D-WS7a). */
/** Parakeet TDT 0.6B v3 ONNX repo and the revision its file sizes were taken from (D-051). */
export const PARAKEET_MODEL_ID = "ysdede/parakeet-tdt-0.6b-v3-onnx";
export const PARAKEET_REVISION = "e5356bf6e24bdb7a269536b0e9e7869bc034b893";
@@ -347,13 +347,13 @@ export const MODELS: readonly WhisperModel[] = [
displayName: "Whisper Large v3 Turbo",
multilingual: true,
// Not trained for translation (OpenAI's turbo model card); its
// "translate" output is unreliable (D-WS4a).
// "translate" output is unreliable (D-044).
canTranslate: false,
encoderParamsM: 635,
decoderParamsM: 174,
defaults: { wasm: WASM_Q4, webgpu: WEBGPU_FP16_Q4, webnn: WEBNN_FP16 },
},
// Danish fine-tune (D-WS6a): unchanged Whisper architecture, so the
// Danish fine-tune (D-046): unchanged Whisper architecture, so the
// parameter counts are its base model's. Conversions by us, weights by
// the original authors (credited in each published repo's model card).
{
@@ -361,7 +361,7 @@ export const MODELS: readonly WhisperModel[] = [
...danishRepos("whisper-small-danish"),
displayName: "Whisper Small (Danish)",
multilingual: true,
// Translation untested on these fine-tunes (spec 001, D-WS4a).
// Translation untested on these fine-tunes (spec 001, D-044).
canTranslate: false,
encoderParamsM: 88,
decoderParamsM: 156,
@@ -369,7 +369,7 @@ export const MODELS: readonly WhisperModel[] = [
},
{
// NVIDIA Parakeet TDT 0.6B v3 (CC-BY-4.0), NeMo→ONNX conversion by
// ysdede, run through parakeet.js on our onnxruntime-web (D-WS7a).
// ysdede, run through parakeet.js on our onnxruntime-web (D-051).
// English-only in this app (the model itself knows 25 European
// languages, but only English is measured here). Desktop-only: its
// ~1.3 GB load peak is far past every phone budget (D-027–D-029), so
@@ -391,10 +391,10 @@ export const MODELS: readonly WhisperModel[] = [
wasm: {
dtype: "q8",
verified: false,
note: "int8 encoder + decoder: the measured WASM path (D-WS7a).",
note: "int8 encoder + decoder: the measured WASM path (D-051).",
},
// Only used when WebGPU is chosen explicitly — "auto" never picks it
// for Parakeet (D-WS7a): int8 on WebGPU is reported broken, and fp16
// for Parakeet (D-051): int8 on WebGPU is reported broken, and fp16
// is a separate 1.24 GB download. The decoder stays int8 on WASM.
webgpu: {
dtype: { encoder_model: "fp16", decoder_model_merged: "q8" },
@@ -424,7 +424,7 @@ export function getFasterWhisperModel(id: string): string | undefined {
}
/**
* The task a run on `modelId` should actually use (D-WS4a): a "translate"
* The task a run on `modelId` should actually use (D-044): a "translate"
* left over from a model that could translate falls back to "transcribe" on
* one that cannot (large-v3-turbo, `.en`, unknown ids). App applies it on
* every model switch and again when building each run's options.