Code map
Eight stages, from command to report. Click a box to open the code; arrow labels name what is passed.
Stage 0 is offline; stage 3 is DAM 1; stage 7 shows what DAM 2/3 change.
Stages
flowchart LR
st_prep["<b>0 · Before training (optional)</b><br/>run_whisper_asr.py<br/><i>optional</i>"]
class st_prep opt
click st_prep "code-map/#stage-prep"
st_launch["<b>1 · Launch</b><br/>launcher.py ·<br/>launcher_utils.py ·<br/>utils.py<br/><i>steps 1–14</i>"]
class st_launch main
click st_launch "code-map/#stage-launch"
st_data["<b>2 · Data</b><br/>datasets_and_dataloaders.py<br/>· dataset_utils.py ·<br/>augmentations.py ·<br/>constants.py<br/><i>steps 15–24</i>"]
class st_data main
st_launch ==> st_data
click st_data "code-map/#stage-data"
st_model["<b>3 · Model (DAM 1)</b><br/>mtl_mar_2024/model.py ·<br/>feature_extraction_whisper.py<br/>· base_models.py ·<br/>constants.py<br/><i>steps 25–31</i>"]
class st_model main
st_data ==> st_model
click st_model "code-map/#stage-model"
st_loss["<b>4 · Loss</b><br/>base_models.py · losses.py<br/>· utils.py<br/><i>steps 32–35</i>"]
class st_loss main
st_model ==> st_loss
click st_loss "code-map/#stage-loss"
st_metrics["<b>5 · Thresholds and metrics</b><br/>base_models.py ·<br/>ordinal_thresholding.py ·<br/>metrics.py<br/><i>steps 36–41</i>"]
class st_metrics main
st_loss ==> st_metrics
click st_metrics "code-map/#stage-metrics"
st_outputs["<b>6 · Outputs and analysis</b><br/>launcher_utils.py ·<br/>launcher.py · utils.py ·<br/>plotting.py<br/><i>steps 42–44</i>"]
class st_outputs main
st_metrics ==> st_outputs
click st_outputs "code-map/#stage-outputs"
st_variants["<b>7 · The other versions (DAM 2, DAM 3)</b><br/>mtl_jun_2024/model.py ·<br/>mtl_aug_2024/model.py ·<br/>base_models.py<br/><i>optional</i>"]
class st_variants opt
st_outputs -.-> st_variants
click st_variants "code-map/#stage-variants"
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
0 · Before training (optional)
Transcripts are produced once, outside training, and only matter for runs that read text: DAM 2, and config_llma_dam3.0.yaml. Current DAM 3 uses them only indirectly, through the cached DAM 2 embeddings.
flowchart LR
subgraph scripts_run_whisper_asr_py___box["run_whisper_asr.py"]
direction TB
scripts_run_whisper_asr_py__run_whisper_asr["<b>run_whisper_asr()</b><br/>Transcribe a 16 kHz WAV (optional<br/>start/end in s) with Whisper<br/>large-v3 to JSON."]
class scripts_run_whisper_asr_py__run_whisper_asr opt
click scripts_run_whisper_asr_py__run_whisper_asr "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/scripts/run_whisper_asr.py#L18" _blank
end
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
| Step |
Function |
File |
What it does |
| — |
run_whisper_asr |
scripts/run_whisper_asr.py:18 |
Transcribe a 16 kHz WAV (optional start/end in s) with Whisper large-v3 to JSON. |
1 · Launch
One command reads a YAML config, validates it, builds the model and the data loaders, and hands everything to a PyTorch Lightning Trainer.
Main path: steps 1–14 of a train run (walkthrough). Gold boxes open the step; grey boxes are side paths and open the code.
flowchart LR
subgraph scripts_launcher_py___box["launcher.py"]
direction TB
scripts_launcher_py__launcher["<b>1 · launcher()</b><br/>Run one mode<br/>(train/evaluate/cache/compile) end<br/>to end from a YAML config."]
class scripts_launcher_py__launcher main
click scripts_launcher_py__launcher "../walkthrough/#step-1"
scripts_launcher_py___setup_launcher["<b>2 · _setup_launcher()</b><br/>Load the YAML into LauncherConfig<br/>and create the W&B logger on rank<br/>0 only."]
class scripts_launcher_py___setup_launcher main
click scripts_launcher_py___setup_launcher "../walkthrough/#step-2"
scripts_launcher_py___setup_callbacks["<b>10 · _setup_callbacks()</b><br/>Best-checkpoint saver, early<br/>stopping and LR monitor on<br/>'mode:metric' monitor_loss."]
class scripts_launcher_py___setup_callbacks main
click scripts_launcher_py___setup_callbacks "../walkthrough/#step-10"
scripts_launcher_py__run_training["<b>12 · run_training()</b><br/>Fit on train/val, reload the best<br/>checkpoint, then test it on the<br/>test split."]
class scripts_launcher_py__run_training main
click scripts_launcher_py__run_training "../walkthrough/#step-12"
scripts_launcher_py__run_evaluation["<b>run_evaluation()</b><br/>Test a trained checkpoint<br/>(model_params.ckpt_path) on the<br/>test split."]
class scripts_launcher_py__run_evaluation opt
click scripts_launcher_py__run_evaluation "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/scripts/launcher.py#L141" _blank
scripts_launcher_py__run_caching["<b>run_caching()</b><br/>Run the backbone over<br/>train/val/test and store its<br/>outputs in W&B (cache mode)."]
class scripts_launcher_py__run_caching opt
click scripts_launcher_py__run_caching "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/scripts/launcher.py#L299" _blank
scripts_launcher_py__run_compilation["<b>run_compilation()</b><br/>Export the model with torch.export<br/>on one test window, check outputs,<br/>log .pt2 to W&B."]
class scripts_launcher_py__run_compilation opt
click scripts_launcher_py__run_compilation "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/scripts/launcher.py#L350" _blank
scripts_launcher_py___log_to_wandb["<b>11 · _log_to_wandb()</b><br/>Upload experiment + kirad source,<br/>package versions and ideal log-mel<br/>energies to W&B."]
class scripts_launcher_py___log_to_wandb main
click scripts_launcher_py___log_to_wandb "../walkthrough/#step-11"
end
subgraph kirad_launcher_utils_py___box["launcher_utils.py"]
direction TB
kirad_launcher_utils_py__LauncherConfig___init__["<b>3 · LauncherConfig.__init__()</b><br/>Read YAML, parse<br/>training/data/model params and<br/>instantiate the model."]
class kirad_launcher_utils_py__LauncherConfig___init__ main
click kirad_launcher_utils_py__LauncherConfig___init__ "../walkthrough/#step-3"
kirad_launcher_utils_py__LauncherConfig__init_data_params["<b>5 · LauncherConfig._init_data_params()</b><br/>Parse data_params keys<br/>'‹modality›=‹class.path›' into<br/>factories + per-split params."]
class kirad_launcher_utils_py__LauncherConfig__init_data_params main
click kirad_launcher_utils_py__LauncherConfig__init_data_params "../walkthrough/#step-5"
kirad_launcher_utils_py__LauncherConfig_get_params_by_split["<b>6 · LauncherConfig.get_params_by_split()</b><br/>Merge config params for one split:<br/>default ‹ val_test (val/test) ‹<br/>split."]
class kirad_launcher_utils_py__LauncherConfig_get_params_by_split main
click kirad_launcher_utils_py__LauncherConfig_get_params_by_split "../walkthrough/#step-6"
kirad_launcher_utils_py__LauncherConfig__init_model["<b>7 · LauncherConfig._init_model()</b><br/>Import model_path, build the model<br/>and load ckpt weights (or defer<br/>full restore)."]
class kirad_launcher_utils_py__LauncherConfig__init_model main
click kirad_launcher_utils_py__LauncherConfig__init_model "../walkthrough/#step-7"
kirad_launcher_utils_py__LauncherConfig_get_dataset["<b>14 · LauncherConfig.get_dataset()</b><br/>StackDataset of metadata + each<br/>modality dataset for a split<br/>(built once)."]
class kirad_launcher_utils_py__LauncherConfig_get_dataset main
click kirad_launcher_utils_py__LauncherConfig_get_dataset "../walkthrough/#step-14"
kirad_launcher_utils_py__LauncherConfig_get_data_loader["<b>13 · LauncherConfig.get_data_loader()</b><br/>DataLoader for a split (cached per<br/>split and mode); batch_size =<br/>recordings."]
class kirad_launcher_utils_py__LauncherConfig_get_data_loader main
click kirad_launcher_utils_py__LauncherConfig_get_data_loader "../walkthrough/#step-13"
kirad_launcher_utils_py__TrainingParams["<b>4 · TrainingParams()</b><br/>Validated training_params: batch<br/>sizes, epochs, monitor metric,<br/>optimizer, seed."]
class kirad_launcher_utils_py__TrainingParams main
click kirad_launcher_utils_py__TrainingParams "../walkthrough/#step-4"
kirad_launcher_utils_py__ModelParams["<b>ModelParams()</b><br/>Validated model_params: model<br/>class path, config kwargs and<br/>checkpoint to load."]
class kirad_launcher_utils_py__ModelParams opt
click kirad_launcher_utils_py__ModelParams "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/launcher_utils.py#L151" _blank
end
subgraph kirad_utils_py___box["utils.py"]
direction TB
kirad_utils_py__import_object["<b>import_object()</b><br/>Import a class/function from a<br/>dotted path, e.g.<br/>'model.DepAnxClassifier'."]
class kirad_utils_py__import_object opt
click kirad_utils_py__import_object "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/utils.py#L792" _blank
kirad_utils_py__localize_wandb_artifact["<b>localize_wandb_artifact()</b><br/>Download a W&B artifact once to<br/>~/.cache/kintsugi and return its<br/>local path."]
class kirad_utils_py__localize_wandb_artifact opt
click kirad_utils_py__localize_wandb_artifact "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/utils.py#L152" _blank
end
subgraph research_stable_ordinal_regression_mtl_mar_2024_model_py___box["mtl_mar_2024/model.py"]
direction TB
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier["<b>8 · DepAnxClassifier()</b><br/>DAM 1: log-mel -› Whisper small.en<br/>encoder (LoRA) -› mean pool -›<br/>multitask CORAL head."]
class research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier main
click research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier "../walkthrough/#step-8"
end
subgraph kirad_base_models_py___box["base_models.py"]
direction TB
kirad_base_models_py__KintsugiBackboneBase_apply_lora["<b>9 · KintsugiBackboneBase.apply_lora()</b><br/>Wrap self.backbone with PEFT LoRA<br/>from lora_params; no-op (full<br/>fine-tune) if empty."]
class kirad_base_models_py__KintsugiBackboneBase_apply_lora main
click kirad_base_models_py__KintsugiBackboneBase_apply_lora "../walkthrough/#step-9"
end
scripts_launcher_py__launcher ==> scripts_launcher_py___setup_launcher
scripts_launcher_py___setup_launcher ==> kirad_launcher_utils_py__LauncherConfig___init__
kirad_launcher_utils_py__LauncherConfig___init__ ==> kirad_launcher_utils_py__TrainingParams
kirad_launcher_utils_py__TrainingParams ==> kirad_launcher_utils_py__LauncherConfig__init_data_params
kirad_launcher_utils_py__LauncherConfig__init_data_params ==> kirad_launcher_utils_py__LauncherConfig_get_params_by_split
kirad_launcher_utils_py__LauncherConfig_get_params_by_split ==> kirad_launcher_utils_py__LauncherConfig__init_model
kirad_launcher_utils_py__LauncherConfig__init_model ==> research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier ==> kirad_base_models_py__KintsugiBackboneBase_apply_lora
kirad_base_models_py__KintsugiBackboneBase_apply_lora ==> scripts_launcher_py___setup_callbacks
scripts_launcher_py___setup_callbacks ==> scripts_launcher_py___log_to_wandb
scripts_launcher_py___log_to_wandb ==> scripts_launcher_py__run_training
scripts_launcher_py__run_training ==> kirad_launcher_utils_py__LauncherConfig_get_data_loader
kirad_launcher_utils_py__LauncherConfig_get_data_loader ==> kirad_launcher_utils_py__LauncherConfig_get_dataset
to_next(["▶ next, step 15: KintsugiMetadata()"])
class to_next edge
kirad_launcher_utils_py__LauncherConfig_get_dataset ==> to_next
click to_next "#stage-data"
kirad_launcher_utils_py__LauncherConfig___init__ -.-> kirad_launcher_utils_py__LauncherConfig__init_data_params
kirad_launcher_utils_py__LauncherConfig___init__ -.-> kirad_launcher_utils_py__ModelParams
kirad_launcher_utils_py__ModelParams -.->|"W&B ckpt"| kirad_utils_py__localize_wandb_artifact
kirad_launcher_utils_py__LauncherConfig___init__ -.-> kirad_launcher_utils_py__LauncherConfig__init_model
kirad_launcher_utils_py__LauncherConfig__init_model -.->|"model.py"| kirad_utils_py__import_object
scripts_launcher_py__launcher -.-> scripts_launcher_py___setup_callbacks
scripts_launcher_py__launcher -.->|"mode"| scripts_launcher_py__run_training
scripts_launcher_py__launcher -.-> scripts_launcher_py__run_evaluation
scripts_launcher_py__launcher -.-> scripts_launcher_py__run_caching
scripts_launcher_py__launcher -.-> scripts_launcher_py__run_compilation
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
| Step |
Function |
File |
What it does |
| 1 |
launcher |
scripts/launcher.py:43 |
Run one mode (train/evaluate/cache/compile) end to end from a YAML config. |
| 2 |
_setup_launcher |
scripts/launcher.py:155 |
Load the YAML into LauncherConfig and create the W&B logger on rank 0 only. |
| 10 |
_setup_callbacks |
scripts/launcher.py:191 |
Best-checkpoint saver, early stopping and LR monitor on "mode:metric" monitor_loss. |
| 12 |
run_training |
scripts/launcher.py:119 |
Fit on train/val, reload the best checkpoint, then test it on the test split. |
| — |
run_evaluation |
scripts/launcher.py:141 |
Test a trained checkpoint (model_params.ckpt_path) on the test split. |
| — |
run_caching |
scripts/launcher.py:299 |
Run the backbone over train/val/test and store its outputs in W&B (cache mode). |
| — |
run_compilation |
scripts/launcher.py:350 |
Export the model with torch.export on one test window, check outputs, log .pt2 to W&B. |
| 11 |
_log_to_wandb |
scripts/launcher.py:232 |
Upload experiment + kirad source, package versions and ideal log-mel energies to W&B. |
| 3 |
LauncherConfig.__init__ |
kirad/launcher_utils.py:234 |
Read YAML, parse training/data/model params and instantiate the model. |
| 5 |
LauncherConfig._init_data_params |
kirad/launcher_utils.py:331 |
Parse data_params keys "<modality>=<class.path>" into factories + per-split params. |
| 6 |
LauncherConfig.get_params_by_split |
kirad/launcher_utils.py:533 |
Merge config params for one split: default < val_test (val/test) < split. |
| 7 |
LauncherConfig._init_model |
kirad/launcher_utils.py:372 |
Import model_path, build the model and load ckpt weights (or defer full restore). |
| 14 |
LauncherConfig.get_dataset |
kirad/launcher_utils.py:418 |
StackDataset of metadata + each modality dataset for a split (built once). |
| 13 |
LauncherConfig.get_data_loader |
kirad/launcher_utils.py:464 |
DataLoader for a split (cached per split and mode); batch_size = recordings. |
| 4 |
TrainingParams |
kirad/launcher_utils.py:101 |
Validated training_params: batch sizes, epochs, monitor metric, optimizer, seed. |
| — |
ModelParams |
kirad/launcher_utils.py:151 |
Validated model_params: model class path, config kwargs and checkpoint to load. |
| — |
import_object |
kirad/utils.py:792 |
Import a class/function from a dotted path, e.g. "model.DepAnxClassifier". |
| — |
localize_wandb_artifact |
kirad/utils.py:152 |
Download a W&B artifact once to ~/.cache/kintsugi and return its local path. |
| 8 |
DepAnxClassifier |
research/stable/ordinal_regression_mtl_mar_2024/model.py:25 |
DAM 1: log-mel -> Whisper small.en encoder (LoRA) -> mean pool -> multitask CORAL head. |
| 9 |
KintsugiBackboneBase.apply_lora |
kirad/base_models.py:818 |
Wrap self.backbone with PEFT LoRA from lora_params; no-op (full fine-tune) if empty. |
2 · Data
The metadata CSV says which WAV files to open and what their labels are. Audio is cut into 30 s windows and turned into features; windows of all recordings in a batch are concatenated and length remembers where each recording ends.
Main path: steps 15–24 of a train run (walkthrough). Gold boxes open the step; grey boxes are side paths and open the code.
flowchart LR
subgraph kirad_datasets_and_dataloaders_py___box["datasets_and_dataloaders.py"]
direction TB
kirad_datasets_and_dataloaders_py__KintsugiMetadata["<b>15 · KintsugiMetadata()</b><br/>Metadata table indexed by UUID:<br/>loads CSV, merges KD scores,<br/>filters by duration."]
class kirad_datasets_and_dataloaders_py__KintsugiMetadata main
click kirad_datasets_and_dataloaders_py__KintsugiMetadata "../walkthrough/#step-15"
kirad_datasets_and_dataloaders_py__KintsugiMetadata_preprocess_metadata["<b>17 · KintsugiMetadata.preprocess_metadata()</b><br/>Join KD score targets, optionally<br/>merge rows per subject, count<br/>windows per recording."]
class kirad_datasets_and_dataloaders_py__KintsugiMetadata_preprocess_metadata main
click kirad_datasets_and_dataloaders_py__KintsugiMetadata_preprocess_metadata "../walkthrough/#step-17"
kirad_datasets_and_dataloaders_py__KintsugiMetadata_filter_metadata["<b>18 · KintsugiMetadata.filter_metadata()</b><br/>Subsample `fraction` of rows, then<br/>drop recordings outside min/max<br/>duration (s)."]
class kirad_datasets_and_dataloaders_py__KintsugiMetadata_filter_metadata main
click kirad_datasets_and_dataloaders_py__KintsugiMetadata_filter_metadata "../walkthrough/#step-18"
kirad_datasets_and_dataloaders_py__KintsugiMetadata___getitem__["<b>21 · KintsugiMetadata.__getitem__()</b><br/>Return {uuid, label: {task:<br/>{primary: raw score, kd: teacher<br/>score}}} for one UUID."]
class kirad_datasets_and_dataloaders_py__KintsugiMetadata___getitem__ main
click kirad_datasets_and_dataloaders_py__KintsugiMetadata___getitem__ "../walkthrough/#step-21"
kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__["<b>22 · KintsugiAudioDataset.__getitem__()</b><br/>Load, concatenate (channel 0),<br/>augment and window one recording's<br/>audio."]
class kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__ main
click kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__ "../walkthrough/#step-22"
kirad_datasets_and_dataloaders_py__get_preprocessor_with_audio_normalization["<b>19 · get_preprocessor_with_audio_normalization()</b><br/>Build the function audio [T] -›<br/>windows -› features used by<br/>KintsugiAudioDataset."]
class kirad_datasets_and_dataloaders_py__get_preprocessor_with_audio_normalization main
click kirad_datasets_and_dataloaders_py__get_preprocessor_with_audio_normalization "../walkthrough/#step-19"
kirad_datasets_and_dataloaders_py__get_window_starts["<b>23 · get_window_starts()</b><br/>Start sample(s) of the windows cut<br/>from one recording, by<br/>window_method."]
class kirad_datasets_and_dataloaders_py__get_window_starts main
click kirad_datasets_and_dataloaders_py__get_window_starts "../walkthrough/#step-23"
kirad_datasets_and_dataloaders_py__KintsugiTextDataset___getitem__["<b>KintsugiTextDataset.__getitem__()</b><br/>Read the transcript JSON(s) of one<br/>recording and tokenize them."]
class kirad_datasets_and_dataloaders_py__KintsugiTextDataset___getitem__ opt
click kirad_datasets_and_dataloaders_py__KintsugiTextDataset___getitem__ "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/datasets_and_dataloaders.py#L572" _blank
kirad_datasets_and_dataloaders_py__KintsugiCacheDataset["<b>KintsugiCacheDataset()</b><br/>Precomputed backbone features by<br/>UUID (DAM 3 teacher cache),<br/>optional dim slice."]
class kirad_datasets_and_dataloaders_py__KintsugiCacheDataset opt
click kirad_datasets_and_dataloaders_py__KintsugiCacheDataset "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/datasets_and_dataloaders.py#L628" _blank
kirad_datasets_and_dataloaders_py__UuidSampler["<b>20 · UuidSampler()</b><br/>Yields metadata UUIDs (shuffled<br/>for train, sequential for<br/>val/test) for the loader."]
class kirad_datasets_and_dataloaders_py__UuidSampler main
click kirad_datasets_and_dataloaders_py__UuidSampler "../walkthrough/#step-20"
end
subgraph kirad_dataset_utils_py___box["dataset_utils.py"]
direction TB
kirad_dataset_utils_py__load_relative_dataset["<b>16 · load_relative_dataset()</b><br/>Load metadata and add<br/>audio_filename / text_filename<br/>paths from the filename column."]
class kirad_dataset_utils_py__load_relative_dataset main
click kirad_dataset_utils_py__load_relative_dataset "../walkthrough/#step-16"
kirad_dataset_utils_py__load_dataset["<b>load_dataset()</b><br/>Return metadata as a DataFrame:<br/>pass-through, read a CSV path, or<br/>a Kintsugi version."]
class kirad_dataset_utils_py__load_dataset opt
click kirad_dataset_utils_py__load_dataset "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/dataset_utils.py#L49" _blank
kirad_dataset_utils_py__merge_df_rows_by_subject["<b>merge_df_rows_by_subject()</b><br/>Merge rows sharing user + labels +<br/>demographics into one row per<br/>subject."]
class kirad_dataset_utils_py__merge_df_rows_by_subject opt
click kirad_dataset_utils_py__merge_df_rows_by_subject "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/dataset_utils.py#L651" _blank
kirad_dataset_utils_py__broadcast_collate["<b>24 · broadcast_collate()</b><br/>DataLoader collate: concat windows<br/>of all recordings; length =<br/>windows per recording."]
class kirad_dataset_utils_py__broadcast_collate main
click kirad_dataset_utils_py__broadcast_collate "../walkthrough/#step-24"
end
subgraph kirad_augmentations_py___box["augmentations.py"]
direction TB
kirad_augmentations_py__RawBoost["<b>RawBoost()</b><br/>RawBoost waveform augmentation<br/>(LnL/ISD/SSI noise); default algo<br/>4 = all three."]
class kirad_augmentations_py__RawBoost opt
click kirad_augmentations_py__RawBoost "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/augmentations.py#L166" _blank
end
subgraph kirad_constants_py___box["constants.py"]
direction TB
kirad_constants_py__DatasetFields["<b>DatasetFields()</b><br/>Key names of a batch dict: uuid,<br/>features, label.‹task›.primary/kd,<br/>length, loss."]
class kirad_constants_py__DatasetFields opt
click kirad_constants_py__DatasetFields "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/constants.py#L154" _blank
end
from_prev(["◀ from step 14: LauncherConfig.get_dataset()"])
class from_prev edge
from_prev ==> kirad_datasets_and_dataloaders_py__KintsugiMetadata
click from_prev "#stage-launch"
kirad_datasets_and_dataloaders_py__KintsugiMetadata ==> kirad_dataset_utils_py__load_relative_dataset
kirad_dataset_utils_py__load_relative_dataset ==> kirad_datasets_and_dataloaders_py__KintsugiMetadata_preprocess_metadata
kirad_datasets_and_dataloaders_py__KintsugiMetadata_preprocess_metadata ==> kirad_datasets_and_dataloaders_py__KintsugiMetadata_filter_metadata
kirad_datasets_and_dataloaders_py__KintsugiMetadata_filter_metadata ==> kirad_datasets_and_dataloaders_py__get_preprocessor_with_audio_normalization
kirad_datasets_and_dataloaders_py__get_preprocessor_with_audio_normalization ==> kirad_datasets_and_dataloaders_py__UuidSampler
kirad_datasets_and_dataloaders_py__UuidSampler ==> kirad_datasets_and_dataloaders_py__KintsugiMetadata___getitem__
kirad_datasets_and_dataloaders_py__KintsugiMetadata___getitem__ ==> kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__
kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__ ==> kirad_datasets_and_dataloaders_py__get_window_starts
kirad_datasets_and_dataloaders_py__get_window_starts ==> kirad_dataset_utils_py__broadcast_collate
to_next(["▶ next, step 25: MultiTaskOrdinalRegressionPLModule.training_step()"])
class to_next edge
kirad_dataset_utils_py__broadcast_collate ==> to_next
click to_next "#stage-model"
kirad_dataset_utils_py__load_relative_dataset -.-> kirad_dataset_utils_py__load_dataset
kirad_datasets_and_dataloaders_py__KintsugiMetadata -.-> kirad_datasets_and_dataloaders_py__KintsugiMetadata_preprocess_metadata
kirad_datasets_and_dataloaders_py__KintsugiMetadata_preprocess_metadata -.->|"train only"| kirad_dataset_utils_py__merge_df_rows_by_subject
kirad_datasets_and_dataloaders_py__KintsugiMetadata_preprocess_metadata -.->|"count windows"| kirad_datasets_and_dataloaders_py__get_window_starts
kirad_datasets_and_dataloaders_py__KintsugiMetadata -.-> kirad_datasets_and_dataloaders_py__KintsugiMetadata_filter_metadata
kirad_datasets_and_dataloaders_py__UuidSampler -.->|"uuid"| kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__
kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__ -.->|"optional"| kirad_augmentations_py__RawBoost
kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__ -.-> kirad_datasets_and_dataloaders_py__get_preprocessor_with_audio_normalization
kirad_datasets_and_dataloaders_py__get_preprocessor_with_audio_normalization -.->|"cut"| kirad_datasets_and_dataloaders_py__get_window_starts
kirad_datasets_and_dataloaders_py__KintsugiAudioDataset___getitem__ -.-> kirad_dataset_utils_py__broadcast_collate
kirad_datasets_and_dataloaders_py__KintsugiTextDataset___getitem__ -.-> kirad_dataset_utils_py__broadcast_collate
kirad_datasets_and_dataloaders_py__KintsugiMetadata___getitem__ -.->|"labels"| kirad_dataset_utils_py__broadcast_collate
kirad_dataset_utils_py__broadcast_collate -.->|"batch keys"| kirad_constants_py__DatasetFields
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
| Step |
Function |
File |
What it does |
| 15 |
KintsugiMetadata |
kirad/datasets_and_dataloaders.py:71 |
Metadata table indexed by UUID: loads CSV, merges KD scores, filters by duration. |
| 17 |
KintsugiMetadata.preprocess_metadata |
kirad/datasets_and_dataloaders.py:210 |
Join KD score targets, optionally merge rows per subject, count windows per recording. |
| 18 |
KintsugiMetadata.filter_metadata |
kirad/datasets_and_dataloaders.py:257 |
Subsample fraction of rows, then drop recordings outside min/max duration (s). |
| 21 |
KintsugiMetadata.__getitem__ |
kirad/datasets_and_dataloaders.py:293 |
Return {uuid, label: {task: {primary: raw score, kd: teacher score}}} for one UUID. |
| 22 |
KintsugiAudioDataset.__getitem__ |
kirad/datasets_and_dataloaders.py:439 |
Load, concatenate (channel 0), augment and window one recording's audio. |
| 19 |
get_preprocessor_with_audio_normalization |
kirad/datasets_and_dataloaders.py:790 |
Build the function audio [T] -> windows -> features used by KintsugiAudioDataset. |
| 23 |
get_window_starts |
kirad/datasets_and_dataloaders.py:738 |
Start sample(s) of the windows cut from one recording, by window_method. |
| — |
KintsugiTextDataset.__getitem__ |
kirad/datasets_and_dataloaders.py:572 |
Read the transcript JSON(s) of one recording and tokenize them. |
| — |
KintsugiCacheDataset |
kirad/datasets_and_dataloaders.py:628 |
Precomputed backbone features by UUID (DAM 3 teacher cache), optional dim slice. |
| 20 |
UuidSampler |
kirad/datasets_and_dataloaders.py:703 |
Yields metadata UUIDs (shuffled for train, sequential for val/test) for the loader. |
| 16 |
load_relative_dataset |
kirad/dataset_utils.py:97 |
Load metadata and add audio_filename / text_filename paths from the filename column. |
| — |
load_dataset |
kirad/dataset_utils.py:49 |
Return metadata as a DataFrame: pass-through, read a CSV path, or a Kintsugi version. |
| — |
merge_df_rows_by_subject |
kirad/dataset_utils.py:651 |
Merge rows sharing user + labels + demographics into one row per subject. |
| 24 |
broadcast_collate |
kirad/dataset_utils.py:830 |
DataLoader collate: concat windows of all recordings; length = windows per recording. |
| — |
RawBoost |
kirad/augmentations.py:166 |
RawBoost waveform augmentation (LnL/ISD/SSI noise); default algo 4 = all three. |
| — |
DatasetFields |
kirad/constants.py:154 |
Key names of a batch dict: uuid, features, label.<task>.primary/kd, length, loss. |
3 · Model (DAM 1)
Raw audio windows become log-mel images on the GPU, the Whisper encoder (with LoRA) turns each window into a 768-d vector, and a shared layer feeds one small head per task that outputs a single score.
Main path: steps 25–31 of a train run (walkthrough). Gold boxes open the step; grey boxes are side paths and open the code.
flowchart LR
subgraph research_stable_ordinal_regression_mtl_mar_2024_model_py___box["mtl_mar_2024/model.py"]
direction TB
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier["<b>DepAnxClassifier()</b><br/>DAM 1: log-mel -› Whisper small.en<br/>encoder (LoRA) -› mean pool -›<br/>multitask CORAL head."]
class research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier opt
click research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_mar_2024/model.py#L25" _blank
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward["<b>27 · DepAnxClassifier.forward()</b><br/>Backbone then MultitaskHead -›<br/>({task: [ΣW, 1] scores}, lengths)."]
class research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward main
click research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward "../walkthrough/#step-27"
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward_backbone["<b>28 · DepAnxClassifier.forward_backbone()</b><br/>Pad raw audio to 480,000 samples,<br/>log-mel on GPU, Whisper encoder -›<br/>[ΣW, 768]."]
class research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward_backbone main
click research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward_backbone "../walkthrough/#step-28"
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_configure_optimizers["<b>DepAnxClassifier.configure_optimizers()</b><br/>AdamW with two groups (backbone,<br/>head + CORAL biases) and<br/>MultiStepLR."]
class research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_configure_optimizers opt
click research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_configure_optimizers "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_mar_2024/model.py#L109" _blank
end
subgraph kirad_feature_extraction_whisper_py___box["feature_extraction_whisper.py"]
direction TB
kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor_forward["<b>29 · WhisperTorchFeatureExtractor.forward()</b><br/>Normalize each window, compute<br/>log-mel, shift bins to<br/>IDEAL_LOGMEL_ENERGIES."]
class kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor_forward main
click kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor_forward "../walkthrough/#step-29"
kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor__torch_extract_fbank_features["<b>WhisperTorchFeatureExtractor._torch_extract_fbank_features()</b><br/>Log10 mel spectrogram, clipped to<br/>8 below the max, scaled (x + 4) /<br/>4 as Whisper."]
class kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor__torch_extract_fbank_features opt
click kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor__torch_extract_fbank_features "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/feature_extraction_whisper.py#L97" _blank
end
subgraph kirad_base_models_py___box["base_models.py"]
direction TB
kirad_base_models_py__WhisperBackbone_forward["<b>30 · WhisperBackbone.forward()</b><br/>Whisper encoder on log-mel<br/>windows, mean over time -› [ΣW, D]<br/>(768 for small.en)."]
class kirad_base_models_py__WhisperBackbone_forward main
click kirad_base_models_py__WhisperBackbone_forward "../walkthrough/#step-30"
kirad_base_models_py__KintsugiBackboneBase_apply_lora["<b>KintsugiBackboneBase.apply_lora()</b><br/>Wrap self.backbone with PEFT LoRA<br/>from lora_params; no-op (full<br/>fine-tune) if empty."]
class kirad_base_models_py__KintsugiBackboneBase_apply_lora opt
click kirad_base_models_py__KintsugiBackboneBase_apply_lora "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/base_models.py#L818" _blank
kirad_base_models_py__MultitaskHead_forward["<b>31 · MultitaskHead.forward()</b><br/>Shared layers, then one TaskHead<br/>per task -› {task: [ΣW, 1] score}."]
class kirad_base_models_py__MultitaskHead_forward main
click kirad_base_models_py__MultitaskHead_forward "../walkthrough/#step-31"
kirad_base_models_py__MultitaskHead_SharedLayers["<b>MultitaskHead.SharedLayers()</b><br/>Shared MLP: Linear+Mish per<br/>proj_dim, last Linear without<br/>activation (e.g. D-›256-›64)."]
class kirad_base_models_py__MultitaskHead_SharedLayers opt
click kirad_base_models_py__MultitaskHead_SharedLayers "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/base_models.py#L1002" _blank
kirad_base_models_py__MultitaskHead_TaskHead["<b>MultitaskHead.TaskHead()</b><br/>Per-task head: Linear(in,<br/>proj_dim) -› Mish -› Dropout -›<br/>Linear(proj_dim, 1, no bias)."]
class kirad_base_models_py__MultitaskHead_TaskHead opt
click kirad_base_models_py__MultitaskHead_TaskHead "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/base_models.py#L1034" _blank
kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_training_step["<b>25 · MultiTaskOrdinalRegressionPLModule.training_step()</b><br/>Lightning train step: returns the<br/>step dict with total_loss."]
class kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_training_step main
click kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_training_step "../walkthrough/#step-25"
kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step["<b>26 · MultiTaskOrdinalRegressionPLModule.step()</b><br/>Run model once, sum each task's<br/>loss (task.step) into total_loss."]
class kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step main
click kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step "../walkthrough/#step-26"
end
from_prev(["◀ from step 24: broadcast_collate()"])
class from_prev edge
from_prev ==> kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_training_step
click from_prev "#stage-data"
kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_training_step ==> kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step
kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step ==> research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward ==> research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward_backbone
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward_backbone ==> kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor_forward
kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor_forward ==> kirad_base_models_py__WhisperBackbone_forward
kirad_base_models_py__WhisperBackbone_forward ==> kirad_base_models_py__MultitaskHead_forward
to_next(["▶ next, step 32: OrdinalRegressionPLModule.step()"])
class to_next edge
kirad_base_models_py__MultitaskHead_forward ==> to_next
click to_next "#stage-loss"
kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor_forward -.-> kirad_feature_extraction_whisper_py__WhisperTorchFeatureExtractor__torch_extract_fbank_features
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward_backbone -.->|"log-mel"| kirad_base_models_py__WhisperBackbone_forward
research_stable_ordinal_regression_mtl_mar_2024_model_py__DepAnxClassifier_forward -.->|"768-d"| kirad_base_models_py__MultitaskHead_forward
kirad_base_models_py__MultitaskHead_forward -.-> kirad_base_models_py__MultitaskHead_SharedLayers
kirad_base_models_py__MultitaskHead_SharedLayers -.->|"64-d"| kirad_base_models_py__MultitaskHead_TaskHead
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
| Step |
Function |
File |
What it does |
| — |
DepAnxClassifier |
research/stable/ordinal_regression_mtl_mar_2024/model.py:25 |
DAM 1: log-mel -> Whisper small.en encoder (LoRA) -> mean pool -> multitask CORAL head. |
| 27 |
DepAnxClassifier.forward |
research/stable/ordinal_regression_mtl_mar_2024/model.py:84 |
Backbone then MultitaskHead -> ({task: [ΣW, 1] scores}, lengths). |
| 28 |
DepAnxClassifier.forward_backbone |
research/stable/ordinal_regression_mtl_mar_2024/model.py:89 |
Pad raw audio to 480,000 samples, log-mel on GPU, Whisper encoder -> [ΣW, 768]. |
| — |
DepAnxClassifier.configure_optimizers |
research/stable/ordinal_regression_mtl_mar_2024/model.py:109 |
AdamW with two groups (backbone, head + CORAL biases) and MultiStepLR. |
| 29 |
WhisperTorchFeatureExtractor.forward |
kirad/feature_extraction_whisper.py:138 |
Normalize each window, compute log-mel, shift bins to IDEAL_LOGMEL_ENERGIES. |
| — |
WhisperTorchFeatureExtractor._torch_extract_fbank_features |
kirad/feature_extraction_whisper.py:97 |
Log10 mel spectrogram, clipped to 8 below the max, scaled (x + 4) / 4 as Whisper. |
| 30 |
WhisperBackbone.forward |
kirad/base_models.py:877 |
Whisper encoder on log-mel windows, mean over time -> [ΣW, D] (768 for small.en). |
| — |
KintsugiBackboneBase.apply_lora |
kirad/base_models.py:818 |
Wrap self.backbone with PEFT LoRA from lora_params; no-op (full fine-tune) if empty. |
| 31 |
MultitaskHead.forward |
kirad/base_models.py:1075 |
Shared layers, then one TaskHead per task -> {task: [ΣW, 1] score}. |
| — |
MultitaskHead.SharedLayers |
kirad/base_models.py:1002 |
Shared MLP: Linear+Mish per proj_dim, last Linear without activation (e.g. D->256->64). |
| — |
MultitaskHead.TaskHead |
kirad/base_models.py:1034 |
Per-task head: Linear(in, proj_dim) -> Mish -> Dropout -> Linear(proj_dim, 1, no bias). |
| 25 |
MultiTaskOrdinalRegressionPLModule.training_step |
kirad/base_models.py:722 |
Lightning train step: returns the step dict with total_loss. |
| 26 |
MultiTaskOrdinalRegressionPLModule.step |
kirad/base_models.py:734 |
Run model once, sum each task's loss (task.step) into total_loss. |
4 · Loss
Each task turns its score into 27 (or 21) ordered yes/no questions with CORAL. Train: CORAL loss per window, averaged per recording; val/test: loss of the per-recording mean score. A variance penalty makes windows of the same recording agree.
Main path: steps 32–35 of a train run (walkthrough). Gold boxes open the step; grey boxes are side paths and open the code.
flowchart LR
subgraph kirad_base_models_py___box["base_models.py"]
direction TB
kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step["<b>MultiTaskOrdinalRegressionPLModule.step()</b><br/>Run model once, sum each task's<br/>loss (task.step) into total_loss."]
class kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step opt
click kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/base_models.py#L734" _blank
kirad_base_models_py__OrdinalRegressionPLModule_step["<b>32 · OrdinalRegressionPLModule.step()</b><br/>Accumulate per-recording mean/var<br/>scores for val/test, then return<br/>the loss."]
class kirad_base_models_py__OrdinalRegressionPLModule_step main
click kirad_base_models_py__OrdinalRegressionPLModule_step "../walkthrough/#step-32"
kirad_base_models_py__OrdinalRegressionPLModule_compute_and_log_loss["<b>33 · OrdinalRegressionPLModule.compute_and_log_loss()</b><br/>Loss = coral_w·CORAL +<br/>var_w·Var(window scores) +<br/>kd_w·MSE(teacher), logged."]
class kirad_base_models_py__OrdinalRegressionPLModule_compute_and_log_loss main
click kirad_base_models_py__OrdinalRegressionPLModule_compute_and_log_loss "../walkthrough/#step-33"
end
subgraph kirad_losses_py___box["losses.py"]
direction TB
kirad_losses_py__CORALLoss_forward["<b>35 · CORALLoss.forward()</b><br/>Weighted sum of BCE over cutoffs:<br/>sigmoid(s + b_k) vs [y › k] for<br/>each cutoff k."]
class kirad_losses_py__CORALLoss_forward main
click kirad_losses_py__CORALLoss_forward "../walkthrough/#step-35"
end
subgraph kirad_utils_py___box["utils.py"]
direction TB
kirad_utils_py__average_and_variance_tensor_in_segments["<b>34 · average_and_variance_tensor_in_segments()</b><br/>Per-recording mean and (biased)<br/>variance of window scores: [ΣW,<br/>...] -› two [B, ...]."]
class kirad_utils_py__average_and_variance_tensor_in_segments main
click kirad_utils_py__average_and_variance_tensor_in_segments "../walkthrough/#step-34"
kirad_utils_py__average_tensor_in_segments["<b>average_tensor_in_segments()</b><br/>Mean over each recording's<br/>windows: [ΣW, ...] -› [B, ...]<br/>using `length`."]
class kirad_utils_py__average_tensor_in_segments opt
click kirad_utils_py__average_tensor_in_segments "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/utils.py#L90" _blank
end
from_prev(["◀ from step 31: MultitaskHead.forward()"])
class from_prev edge
from_prev ==> kirad_base_models_py__OrdinalRegressionPLModule_step
click from_prev "#stage-model"
kirad_base_models_py__OrdinalRegressionPLModule_step ==> kirad_base_models_py__OrdinalRegressionPLModule_compute_and_log_loss
kirad_base_models_py__OrdinalRegressionPLModule_compute_and_log_loss ==> kirad_utils_py__average_and_variance_tensor_in_segments
kirad_utils_py__average_and_variance_tensor_in_segments ==> kirad_losses_py__CORALLoss_forward
to_next(["▶ next, step 36: MultiTaskOrdinalRegressionPLModule.on_validation_test_epoch_end()"])
class to_next edge
kirad_losses_py__CORALLoss_forward ==> to_next
click to_next "#stage-metrics"
kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_step -.->|"per task"| kirad_base_models_py__OrdinalRegressionPLModule_step
kirad_utils_py__average_and_variance_tensor_in_segments -.-> kirad_utils_py__average_tensor_in_segments
kirad_base_models_py__OrdinalRegressionPLModule_compute_and_log_loss -.-> kirad_losses_py__CORALLoss_forward
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
5 · Thresholds and metrics
After every validation, scores of all recordings are gathered, five threshold sets are tuned by dynamic programming, a sixth is read from the CORAL biases, and Sn/Sp with an indeterminate band are computed. Test reuses the validation thresholds.
Main path: steps 36–41 of a train run (walkthrough). Gold boxes open the step; grey boxes are side paths and open the code.
flowchart LR
subgraph kirad_base_models_py___box["base_models.py"]
direction TB
kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_on_validation_test_epoch_end["<b>36 · MultiTaskOrdinalRegressionPLModule.on_validation_test_epoch_end()</b><br/>Run each task's epoch end, then<br/>log harmonic mean of shared<br/>metrics across tasks."]
class kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_on_validation_test_epoch_end main
click kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_on_validation_test_epoch_end "../walkthrough/#step-36"
kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end["<b>37 · OrdinalRegressionPLModule.on_validation_test_epoch_end()</b><br/>Gather scores, log W&B table, tune<br/>thresholds on val, compute Sn/Sp<br/>metrics."]
class kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end main
click kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end "../walkthrough/#step-37"
kirad_base_models_py__OrdinalRegressionPLModule_quantize_labels["<b>38 · OrdinalRegressionPLModule.quantize_labels()</b><br/>Map input labels (e.g. PHQ-9 sum)<br/>to output labels (e.g. 0/1/2 for<br/>L/M/H)."]
class kirad_base_models_py__OrdinalRegressionPLModule_quantize_labels main
click kirad_base_models_py__OrdinalRegressionPLModule_quantize_labels "../walkthrough/#step-38"
kirad_base_models_py__OrdinalRegressionPLModule_log_ordinal_metrics["<b>41 · OrdinalRegressionPLModule.log_ordinal_metrics()</b><br/>Log AUROC and min(Sn, Sp) per<br/>binary cut and indet budget, plus<br/>their mean."]
class kirad_base_models_py__OrdinalRegressionPLModule_log_ordinal_metrics main
click kirad_base_models_py__OrdinalRegressionPLModule_log_ordinal_metrics "../walkthrough/#step-41"
kirad_base_models_py__OrdinalRegressionPLModule_log_thresholding_metrics["<b>OrdinalRegressionPLModule.log_thresholding_metrics()</b><br/>Log each tuned method's cost when<br/>scored with every method's<br/>thresholds."]
class kirad_base_models_py__OrdinalRegressionPLModule_log_thresholding_metrics opt
click kirad_base_models_py__OrdinalRegressionPLModule_log_thresholding_metrics "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/base_models.py#L315" _blank
end
subgraph kirad_ordinal_thresholding_py___box["ordinal_thresholding.py"]
direction TB
kirad_ordinal_thresholding_py__OptimalOrdinalThresholdingViaDynamicProgramming_tune_thresholds["<b>40 · OptimalOrdinalThresholdingViaDynamicProgramming.tune_thresholds()</b><br/>Set thresholds by DP over<br/>midpoints of unique scores<br/>(+/-inf); return the best metric."]
class kirad_ordinal_thresholding_py__OptimalOrdinalThresholdingViaDynamicProgramming_tune_thresholds main
click kirad_ordinal_thresholding_py__OptimalOrdinalThresholdingViaDynamicProgramming_tune_thresholds "../walkthrough/#step-40"
kirad_ordinal_thresholding_py__OptimalCostPerSampleOrdinalThresholding_dp_step["<b>OptimalCostPerSampleOrdinalThresholding.dp_step()</b><br/>O(n) DP step: histogram per-sample<br/>costs over candidates, cumsum,<br/>running max."]
class kirad_ordinal_thresholding_py__OptimalCostPerSampleOrdinalThresholding_dp_step opt
click kirad_ordinal_thresholding_py__OptimalCostPerSampleOrdinalThresholding_dp_step "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/ordinal_thresholding.py#L291" _blank
kirad_ordinal_thresholding_py__OptimalCostPerClassOrdinalThresholding_dp_step["<b>OptimalCostPerClassOrdinalThresholding.dp_step()</b><br/>O(T^2) DP step: add prev_cost to<br/>each lower-threshold row and max<br/>over it."]
class kirad_ordinal_thresholding_py__OptimalCostPerClassOrdinalThresholding_dp_step opt
click kirad_ordinal_thresholding_py__OptimalCostPerClassOrdinalThresholding_dp_step "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/ordinal_thresholding.py#L450" _blank
kirad_ordinal_thresholding_py__CORALThresholding_tune_thresholds["<b>CORALThresholding.tune_thresholds()</b><br/>Copy -biases[threshold_indices]<br/>from the CORAL loss; scores and<br/>labels are ignored."]
class kirad_ordinal_thresholding_py__CORALThresholding_tune_thresholds opt
click kirad_ordinal_thresholding_py__CORALThresholding_tune_thresholds "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/ordinal_thresholding.py#L85" _blank
end
subgraph kirad_metrics_py___box["metrics.py"]
direction TB
kirad_metrics_py__MultiCatMetric["<b>MultiCatMetric()</b><br/>Accumulate parallel tensors over<br/>batches and ranks (uuids, scores,<br/>variances, labels)."]
class kirad_metrics_py__MultiCatMetric opt
click kirad_metrics_py__MultiCatMetric "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/metrics.py#L41" _blank
kirad_metrics_py__IndetSnSpArray_build["<b>39 · IndetSnSpArray.build()</b><br/>Sn/Sp/indet_frac for all threshold<br/>pairs (or the given ones) via<br/>histogram cumsums."]
class kirad_metrics_py__IndetSnSpArray_build main
click kirad_metrics_py__IndetSnSpArray_build "../walkthrough/#step-39"
kirad_metrics_py__IndetSnSpArray_roc_curve["<b>IndetSnSpArray.roc_curve()</b><br/>Pareto ROC curve of (Sn, Sp) using<br/>only pairs with indet_frac ‹=<br/>indet_budget."]
class kirad_metrics_py__IndetSnSpArray_roc_curve opt
click kirad_metrics_py__IndetSnSpArray_roc_curve "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/metrics.py#L291" _blank
kirad_metrics_py__IndetSnSpArray_sn_eq_sp_graph["<b>IndetSnSpArray.sn_eq_sp_graph()</b><br/>Best min(Sn, Sp) per indeterminate<br/>fraction; these thresholds are<br/>saved in the ckpt."]
class kirad_metrics_py__IndetSnSpArray_sn_eq_sp_graph opt
click kirad_metrics_py__IndetSnSpArray_sn_eq_sp_graph "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/metrics.py#L305" _blank
end
from_prev(["◀ from step 35: CORALLoss.forward()"])
class from_prev edge
from_prev ==> kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_on_validation_test_epoch_end
click from_prev "#stage-loss"
kirad_base_models_py__MultiTaskOrdinalRegressionPLModule_on_validation_test_epoch_end ==> kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end
kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end ==> kirad_base_models_py__OrdinalRegressionPLModule_quantize_labels
kirad_base_models_py__OrdinalRegressionPLModule_quantize_labels ==> kirad_metrics_py__IndetSnSpArray_build
kirad_metrics_py__IndetSnSpArray_build ==> kirad_ordinal_thresholding_py__OptimalOrdinalThresholdingViaDynamicProgramming_tune_thresholds
kirad_ordinal_thresholding_py__OptimalOrdinalThresholdingViaDynamicProgramming_tune_thresholds ==> kirad_base_models_py__OrdinalRegressionPLModule_log_ordinal_metrics
to_next(["▶ next, step 42: DistributedModelCheckpoint.on_validation_end()"])
class to_next edge
kirad_base_models_py__OrdinalRegressionPLModule_log_ordinal_metrics ==> to_next
click to_next "#stage-outputs"
kirad_metrics_py__MultiCatMetric -.->|"gathered scores"| kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end
kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end -.->|"val only"| kirad_ordinal_thresholding_py__OptimalOrdinalThresholdingViaDynamicProgramming_tune_thresholds
kirad_ordinal_thresholding_py__OptimalOrdinalThresholdingViaDynamicProgramming_tune_thresholds -.-> kirad_ordinal_thresholding_py__OptimalCostPerSampleOrdinalThresholding_dp_step
kirad_ordinal_thresholding_py__OptimalOrdinalThresholdingViaDynamicProgramming_tune_thresholds -.-> kirad_ordinal_thresholding_py__OptimalCostPerClassOrdinalThresholding_dp_step
kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end -.-> kirad_ordinal_thresholding_py__CORALThresholding_tune_thresholds
kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end -.-> kirad_metrics_py__IndetSnSpArray_build
kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end -.->|"Sn=Sp ops (val)"| kirad_metrics_py__IndetSnSpArray_sn_eq_sp_graph
kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end -.-> kirad_base_models_py__OrdinalRegressionPLModule_log_ordinal_metrics
kirad_base_models_py__OrdinalRegressionPLModule_log_ordinal_metrics -.-> kirad_metrics_py__IndetSnSpArray_roc_curve
kirad_base_models_py__OrdinalRegressionPLModule_on_validation_test_epoch_end -.-> kirad_base_models_py__OrdinalRegressionPLModule_log_thresholding_metrics
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
| Step |
Function |
File |
What it does |
| 36 |
MultiTaskOrdinalRegressionPLModule.on_validation_test_epoch_end |
kirad/base_models.py:680 |
Run each task's epoch end, then log harmonic mean of shared metrics across tasks. |
| 37 |
OrdinalRegressionPLModule.on_validation_test_epoch_end |
kirad/base_models.py:423 |
Gather scores, log W&B table, tune thresholds on val, compute Sn/Sp metrics. |
| 38 |
OrdinalRegressionPLModule.quantize_labels |
kirad/base_models.py:222 |
Map input labels (e.g. PHQ-9 sum) to output labels (e.g. 0/1/2 for L/M/H). |
| 41 |
OrdinalRegressionPLModule.log_ordinal_metrics |
kirad/base_models.py:228 |
Log AUROC and min(Sn, Sp) per binary cut and indet budget, plus their mean. |
| — |
OrdinalRegressionPLModule.log_thresholding_metrics |
kirad/base_models.py:315 |
Log each tuned method's cost when scored with every method's thresholds. |
| 40 |
OptimalOrdinalThresholdingViaDynamicProgramming.tune_thresholds |
kirad/ordinal_thresholding.py:179 |
Set thresholds by DP over midpoints of unique scores (+/-inf); return the best metric. |
| — |
OptimalCostPerSampleOrdinalThresholding.dp_step |
kirad/ordinal_thresholding.py:291 |
O(n) DP step: histogram per-sample costs over candidates, cumsum, running max. |
| — |
OptimalCostPerClassOrdinalThresholding.dp_step |
kirad/ordinal_thresholding.py:450 |
O(T^2) DP step: add prev_cost to each lower-threshold row and max over it. |
| — |
CORALThresholding.tune_thresholds |
kirad/ordinal_thresholding.py:85 |
Copy -biases[threshold_indices] from the CORAL loss; scores and labels are ignored. |
| — |
MultiCatMetric |
kirad/metrics.py:41 |
Accumulate parallel tensors over batches and ranks (uuids, scores, variances, labels). |
| 39 |
IndetSnSpArray.build |
kirad/metrics.py:176 |
Sn/Sp/indet_frac for all threshold pairs (or the given ones) via histogram cumsums. |
| — |
IndetSnSpArray.roc_curve |
kirad/metrics.py:291 |
Pareto ROC curve of (Sn, Sp) using only pairs with indet_frac <= indet_budget. |
| — |
IndetSnSpArray.sn_eq_sp_graph |
kirad/metrics.py:305 |
Best min(Sn, Sp) per indeterminate fraction; these thresholds are saved in the ckpt. |
6 · Outputs and analysis
The best checkpoint (with thresholds inside) is saved at the end of validation; scores, metrics, code and datasets go to W&B (_log_to_wandb runs at start-up, before training). After training, utils pulls the scores back for analysis and report cards. cache_backbone is the cache mode, called by run_caching.
Main path: steps 42–44 of a train run (walkthrough). Gold boxes open the step; grey boxes are side paths and open the code.
flowchart LR
subgraph kirad_launcher_utils_py___box["launcher_utils.py"]
direction TB
kirad_launcher_utils_py__DistributedModelCheckpoint_on_validation_end["<b>42 · DistributedModelCheckpoint.on_validation_end()</b><br/>Save best/last ckpt after<br/>validation (with tuned<br/>thresholds); replicate on nodes."]
class kirad_launcher_utils_py__DistributedModelCheckpoint_on_validation_end main
click kirad_launcher_utils_py__DistributedModelCheckpoint_on_validation_end "../walkthrough/#step-42"
kirad_launcher_utils_py__LauncherLogger["<b>LauncherLogger()</b><br/>W&B run for the experiment; logs<br/>code and pandas tables as<br/>artifacts."]
class kirad_launcher_utils_py__LauncherLogger opt
click kirad_launcher_utils_py__LauncherLogger "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/launcher_utils.py#L581" _blank
end
subgraph scripts_launcher_py___box["launcher.py"]
direction TB
scripts_launcher_py___log_to_wandb["<b>_log_to_wandb()</b><br/>Upload experiment + kirad source,<br/>package versions and ideal log-mel<br/>energies to W&B."]
class scripts_launcher_py___log_to_wandb opt
click scripts_launcher_py___log_to_wandb "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/scripts/launcher.py#L232" _blank
scripts_launcher_py___log_datasets_to_wandb["<b>43 · _log_datasets_to_wandb()</b><br/>Upload the metadata table actually<br/>used for each split as a W&B<br/>'dataset' artifact."]
class scripts_launcher_py___log_datasets_to_wandb main
click scripts_launcher_py___log_datasets_to_wandb "../walkthrough/#step-43"
end
subgraph kirad_utils_py___box["utils.py"]
direction TB
kirad_utils_py__cache_backbone["<b>cache_backbone()</b><br/>Run the backbone on all datasets,<br/>gather outputs by uuid across<br/>ranks, log to W&B."]
class kirad_utils_py__cache_backbone opt
click kirad_utils_py__cache_backbone "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/utils.py#L833" _blank
kirad_utils_py__get_dataframe_with_scores["<b>44 · get_dataframe_with_scores()</b><br/>Join a run's metadata CSVs with<br/>its W&B scores-‹task›-‹split›<br/>tables on uuid."]
class kirad_utils_py__get_dataframe_with_scores main
click kirad_utils_py__get_dataframe_with_scores "../walkthrough/#step-44"
kirad_utils_py__indet_analysis["<b>indet_analysis()</b><br/>Tune sn_eq_sp thresholds on val<br/>per budget and binary cut, then<br/>measure them on test."]
class kirad_utils_py__indet_analysis opt
click kirad_utils_py__indet_analysis "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/utils.py#L585" _blank
kirad_utils_py__analyze_dataframe_with_scores["<b>analyze_dataframe_with_scores()</b><br/>Mean AUROC and sn_eq_sp (0% indet)<br/>over binary cuts, per subgroup of<br/>the dataframe."]
class kirad_utils_py__analyze_dataframe_with_scores opt
click kirad_utils_py__analyze_dataframe_with_scores "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/utils.py#L646" _blank
kirad_utils_py__get_wandb_report_card_tsvs["<b>get_wandb_report_card_tsvs()</b><br/>Build a TSV report card per task<br/>from a W&B run and log it back as<br/>an artifact."]
class kirad_utils_py__get_wandb_report_card_tsvs opt
click kirad_utils_py__get_wandb_report_card_tsvs "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/utils.py#L253" _blank
end
subgraph kirad_plotting_py___box["plotting.py"]
direction TB
kirad_plotting_py__plot_indeterminate_analysis["<b>plot_indeterminate_analysis()</b><br/>Plot thresholds and Sn=Sp vs<br/>indeterminate budget, plus ROC<br/>curves per binary cut."]
class kirad_plotting_py__plot_indeterminate_analysis opt
click kirad_plotting_py__plot_indeterminate_analysis "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/plotting.py#L16" _blank
end
from_prev(["◀ from step 41: OrdinalRegressionPLModule.log_ordinal_metrics()"])
class from_prev edge
from_prev ==> kirad_launcher_utils_py__DistributedModelCheckpoint_on_validation_end
click from_prev "#stage-metrics"
kirad_launcher_utils_py__DistributedModelCheckpoint_on_validation_end ==> scripts_launcher_py___log_datasets_to_wandb
scripts_launcher_py___log_datasets_to_wandb ==> kirad_utils_py__get_dataframe_with_scores
scripts_launcher_py___log_to_wandb -.-> kirad_launcher_utils_py__LauncherLogger
scripts_launcher_py___log_datasets_to_wandb -.-> kirad_launcher_utils_py__LauncherLogger
kirad_utils_py__get_wandb_report_card_tsvs -.-> kirad_utils_py__indet_analysis
kirad_utils_py__indet_analysis -.-> kirad_utils_py__get_dataframe_with_scores
kirad_utils_py__get_dataframe_with_scores -.->|"df"| kirad_plotting_py__plot_indeterminate_analysis
kirad_utils_py__get_dataframe_with_scores -.->|"df"| kirad_utils_py__analyze_dataframe_with_scores
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
| Step |
Function |
File |
What it does |
| 42 |
DistributedModelCheckpoint.on_validation_end |
kirad/launcher_utils.py:45 |
Save best/last ckpt after validation (with tuned thresholds); replicate on nodes. |
| — |
LauncherLogger |
kirad/launcher_utils.py:581 |
W&B run for the experiment; logs code and pandas tables as artifacts. |
| — |
_log_to_wandb |
scripts/launcher.py:232 |
Upload experiment + kirad source, package versions and ideal log-mel energies to W&B. |
| 43 |
_log_datasets_to_wandb |
scripts/launcher.py:286 |
Upload the metadata table actually used for each split as a W&B "dataset" artifact. |
| — |
cache_backbone |
kirad/utils.py:833 |
Run the backbone on all datasets, gather outputs by uuid across ranks, log to W&B. |
| 44 |
get_dataframe_with_scores |
kirad/utils.py:442 |
Join a run's metadata CSVs with its W&B scores-<task>-<split> tables on uuid. |
| — |
indet_analysis |
kirad/utils.py:585 |
Tune sn_eq_sp thresholds on val per budget and binary cut, then measure them on test. |
| — |
analyze_dataframe_with_scores |
kirad/utils.py:646 |
Mean AUROC and sn_eq_sp (0% indet) over binary cuts, per subgroup of the dataframe. |
| — |
get_wandb_report_card_tsvs |
kirad/utils.py:253 |
Build a TSV report card per task from a W&B run and log it back as an artifact. |
| — |
plot_indeterminate_analysis |
kirad/plotting.py:16 |
Plot thresholds and Sn=Sp vs indeterminate budget, plus ROC curves per binary cut. |
7 · The other versions (DAM 2, DAM 3)
DAM 2 adds a text backbone over the transcript. DAM 3 first trains a Whisper to imitate BERT's vector from audio (WhisperLLMA), then freezes it and trains only the head.
flowchart LR
subgraph research_stable_ordinal_regression_mtl_jun_2024_model_py___box["mtl_jun_2024/model.py"]
direction TB
research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierBase["<b>DepAnxClassifierBase()</b><br/>Concatenate embeddings of several<br/>backbones (ModuleDict order) and<br/>feed a MultitaskHead."]
class research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierBase opt
click research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierBase "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_jun_2024/model.py#L55" _blank
research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperBERT["<b>DepAnxClassifierWhisperBERT()</b><br/>DAM 2: Whisper audio + BERT<br/>transcript embeddings (768 + 768)<br/>-› multitask head."]
class research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperBERT opt
click research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperBERT "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_jun_2024/model.py#L142" _blank
research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperLLAMA["<b>DepAnxClassifierWhisperLLAMA()</b><br/>Whisper audio + LLaMA transcript<br/>embeddings concatenated -›<br/>multitask head."]
class research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperLLAMA opt
click research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperLLAMA "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_jun_2024/model.py#L169" _blank
research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierLLAMA["<b>DepAnxClassifierLLAMA()</b><br/>Text only: LLaMA transcript<br/>embedding -› multitask head."]
class research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierLLAMA opt
click research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierLLAMA "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_jun_2024/model.py#L189" _blank
end
subgraph research_stable_ordinal_regression_mtl_aug_2024_model_py___box["mtl_aug_2024/model.py"]
direction TB
research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA["<b>WhisperLLMA()</b><br/>DAM 3 phase 1: Whisper encoder<br/>trained to predict a cached text<br/>embedding from audio."]
class research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA opt
click research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_aug_2024/model.py#L32" _blank
research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA_step["<b>WhisperLLMA.step()</b><br/>MSE between per-recording Whisper<br/>embedding and the cached teacher<br/>embedding."]
class research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA_step opt
click research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA_step "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_aug_2024/model.py#L102" _blank
research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier["<b>DepAnxClassifier()</b><br/>DAM 3: frozen Whisper + frozen<br/>WhisperLLMA embeddings (768 + 768)<br/>-› trainable head."]
class research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier opt
click research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_aug_2024/model.py#L150" _blank
research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier_forward_backbone["<b>DepAnxClassifier.forward_backbone()</b><br/>No-grad Whisper + WhisperLLMA,<br/>averaged per recording -› [B,<br/>1536]; lengths set to 1."]
class research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier_forward_backbone opt
click research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier_forward_backbone "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/research/stable/ordinal_regression_mtl_aug_2024/model.py#L221" _blank
end
subgraph kirad_base_models_py___box["base_models.py"]
direction TB
kirad_base_models_py__BERTBackbone["<b>BERTBackbone()</b><br/>BERT on transcript tokens; returns<br/>the pooler output [ΣW, 768] (DAM 2<br/>text branch)."]
class kirad_base_models_py__BERTBackbone opt
click kirad_base_models_py__BERTBackbone "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/base_models.py#L918" _blank
kirad_base_models_py__LLAMABackbone["<b>LLAMABackbone()</b><br/>LLaMA cut to num_layers layers;<br/>embeds text as the last real<br/>token's hidden state."]
class kirad_base_models_py__LLAMABackbone opt
click kirad_base_models_py__LLAMABackbone "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/base_models.py#L941" _blank
kirad_base_models_py__Wav2Vec2Backbone["<b>Wav2Vec2Backbone()</b><br/>wav2vec2 encoder on raw audio,<br/>mean-pooled (not used by the<br/>stable DAM configs)."]
class kirad_base_models_py__Wav2Vec2Backbone opt
click kirad_base_models_py__Wav2Vec2Backbone "https://github.com/Pipotheavenger/kintsugi-rad-docs/blob/main/kirad/base_models.py#L888" _blank
end
research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperBERT -.-> research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierBase
research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperBERT -.->|"text"| kirad_base_models_py__BERTBackbone
research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierWhisperLLAMA -.-> kirad_base_models_py__LLAMABackbone
research_stable_ordinal_regression_mtl_jun_2024_model_py__DepAnxClassifierLLAMA -.-> kirad_base_models_py__LLAMABackbone
research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA -.->|"phase 1: MSE"| research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA_step
research_stable_ordinal_regression_mtl_aug_2024_model_py__WhisperLLMA -.->|"frozen"| research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier
research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier -.-> research_stable_ordinal_regression_mtl_aug_2024_model_py__DepAnxClassifier_forward_backbone
classDef main fill:#FFF4DC,stroke:#A67C1B,stroke-width:2px,color:#1A1A1A
classDef opt fill:#F3F4F6,stroke:#B8BEC7,color:#555,stroke-dasharray:4 3
classDef edge fill:#FFFFFF,stroke:#1F7A5C,color:#1F7A5C,stroke-width:1.5px
| Step |
Function |
File |
What it does |
| — |
DepAnxClassifierBase |
research/stable/ordinal_regression_mtl_jun_2024/model.py:55 |
Concatenate embeddings of several backbones (ModuleDict order) and feed a MultitaskHead. |
| — |
DepAnxClassifierWhisperBERT |
research/stable/ordinal_regression_mtl_jun_2024/model.py:142 |
DAM 2: Whisper audio + BERT transcript embeddings (768 + 768) -> multitask head. |
| — |
DepAnxClassifierWhisperLLAMA |
research/stable/ordinal_regression_mtl_jun_2024/model.py:169 |
Whisper audio + LLaMA transcript embeddings concatenated -> multitask head. |
| — |
DepAnxClassifierLLAMA |
research/stable/ordinal_regression_mtl_jun_2024/model.py:189 |
Text only: LLaMA transcript embedding -> multitask head. |
| — |
WhisperLLMA |
research/stable/ordinal_regression_mtl_aug_2024/model.py:32 |
DAM 3 phase 1: Whisper encoder trained to predict a cached text embedding from audio. |
| — |
WhisperLLMA.step |
research/stable/ordinal_regression_mtl_aug_2024/model.py:102 |
MSE between per-recording Whisper embedding and the cached teacher embedding. |
| — |
DepAnxClassifier |
research/stable/ordinal_regression_mtl_aug_2024/model.py:150 |
DAM 3: frozen Whisper + frozen WhisperLLMA embeddings (768 + 768) -> trainable head. |
| — |
DepAnxClassifier.forward_backbone |
research/stable/ordinal_regression_mtl_aug_2024/model.py:221 |
No-grad Whisper + WhisperLLMA, averaged per recording -> [B, 1536]; lengths set to 1. |
| — |
BERTBackbone |
kirad/base_models.py:918 |
BERT on transcript tokens; returns the pooler output [ΣW, 768] (DAM 2 text branch). |
| — |
LLAMABackbone |
kirad/base_models.py:941 |
LLaMA cut to num_layers layers; embeds text as the last real token's hidden state. |
| — |
Wav2Vec2Backbone |
kirad/base_models.py:888 |
wav2vec2 encoder on raw audio, mean-pooled (not used by the stable DAM configs). |