# omkarmulakala/curio_next architecture

> Architecture diagram of the GitHub repository omkarmulakala/curio_next, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/omkarmulakala/curio_next
- Repository: https://github.com/omkarmulakala/curio_next

## Overview

Audio Context Layer adapts Qwen2-Audio-7B-Instruct with LoRA for multiple-choice, audio-grounded question answering. Dataset preparation builds and validates leakage-remediated splits; training loads records, prepares audio/question/answer batches, adapts the language-model decoder, and saves an adapter. For use, inference combines an audio recording, question, and choices to generate an answer; evaluation compares predictions with references and reports metrics and errors. Reporting and training-curve plotting are additional analysis capabilities. CLI wiring is described in the README, but several scripts were not sampled, so uncertain internal calls are omitted.

Main entry points: [`scripts/run_inference.py`](https://github.com/omkarmulakala/curio_next/blob/main/scripts/run_inference.py) (Inference command), [`scripts/train.py`](https://github.com/omkarmulakala/curio_next/blob/main/scripts/train.py) (Train command), [`src/evaluation/evaluate.py`](https://github.com/omkarmulakala/curio_next/blob/main/src/evaluation/evaluate.py) (Evaluation metrics), [`src/data/dataset_loader.py`](https://github.com/omkarmulakala/curio_next/blob/main/src/data/dataset_loader.py) (Manifest loader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Dataset preparation"]
  node_prep["Prepare manifests<br/>[prepare_dataset.py]"]
  node_manifestbuild["Build manifests<br/>[build_manifests.py]"]
  node_splitting["Split and leakage checks<br/>[splitting.py]"]
  node_loader["Manifest loader<br/>[dataset_loader.py]"]
  node_validation["Dataset validation<br/>[validation.py]"]
end

subgraph group_model["Model and training"]
  node_traincli["Train command<br/>[train.py]"]
  node_preprocessing["Conversation preparation<br/>[preprocessing.py]"]
  node_collator["Batch collator<br/>[collator.py]"]
  node_audio_decode["Audio loading<br/>[audio.py]"]
  node_model_loader["Qwen2-Audio<br/>[qwen2_audio.py]"]
  node_lora["LoRA adaptation<br/>[lora.py]"]
  node_trainer["Trainer<br/>[trainer.py]"]
end

subgraph group_inference["Answering"]
  node_inference_cli["Inference command<br/>[run_inference.py]"]
  node_generation["Answer generation<br/>[qwen2_audio.py]"]
end

subgraph group_analysis["Evaluation and analysis"]
  node_evalcli["Evaluation command<br/>[evaluate.py]"]
  node_evaluation["Evaluation metrics<br/>[evaluate.py]"]
  node_metrics["Answer matching<br/>[metrics.py]"]
  node_errors["Error analysis<br/>[error_analysis.py]"]
  node_report["Report generation<br/>[generate_report.py]"]
  node_plots["Training plots<br/>[plots.py]"]
end

node_operator(("Researcher"))
node_rawdata[("DCASE data")]
node_audio[("Audio recordings")]
node_questions["Audio QA inputs"]
node_adapter["Saved adapter"]
node_predictions["Predictions"]
node_results["Metrics and reports"]

node_operator -->|"runs preparation"| node_prep
node_rawdata -->|"provides metadata"| node_prep
node_prep -->|"builds manifests"| node_manifestbuild
node_manifestbuild -->|"assigns splits"| node_splitting
node_splitting -->|"defines split records"| node_loader
node_operator -->|"requests validation"| node_validation
node_validation -->|"loads splits"| node_loader
node_operator -->|"starts training"| node_traincli
node_traincli -->|"loads records"| node_loader
node_traincli -->|"loads model"| node_model_loader
node_traincli -->|"applies adapters"| node_lora
node_traincli -->|"builds trainer"| node_trainer
node_trainer -->|"batches records"| node_collator
node_collator -->|"formats prompts"| node_preprocessing
node_collator -->|"loads audio"| node_audio_decode
node_trainer -->|"saves adapter"| node_adapter
node_operator -->|"requests answers"| node_inference_cli
node_inference_cli -->|"loads records"| node_loader
node_inference_cli -->|"decodes audio"| node_audio_decode
node_inference_cli -->|"loads model"| node_model_loader
node_inference_cli -->|"loads adapter"| node_adapter
node_inference_cli -->|"requests generation"| node_generation
node_generation -->|"formats prompt"| node_preprocessing
node_questions -->|"supplies questions"| node_inference_cli
node_audio -->|"supplies recordings"| node_inference_cli
node_generation -->|"produces answers"| node_predictions
node_operator -->|"requests evaluation"| node_evalcli
node_predictions -->|"provides predictions"| node_evalcli
node_evalcli -->|"evaluates records"| node_evaluation
node_evaluation -->|"computes accuracy"| node_metrics
node_evaluation -->|"identifies errors"| node_errors
node_evaluation -->|"writes metrics"| node_results
node_operator -->|"requests report"| node_report
node_report -->|"generates report"| node_results
node_operator -->|"requests plots"| node_plots

click node_prep "https://github.com/omkarmulakala/curio_next/blob/main/scripts/prepare_dataset.py"
click node_manifestbuild "https://github.com/omkarmulakala/curio_next/blob/main/scripts/build_manifests.py"
click node_splitting "https://github.com/omkarmulakala/curio_next/blob/main/src/data/splitting.py"
click node_loader "https://github.com/omkarmulakala/curio_next/blob/main/src/data/dataset_loader.py"
click node_validation "https://github.com/omkarmulakala/curio_next/blob/main/src/data/validation.py"
click node_traincli "https://github.com/omkarmulakala/curio_next/blob/main/scripts/train.py"
click node_preprocessing "https://github.com/omkarmulakala/curio_next/blob/main/src/data/preprocessing.py"
click node_collator "https://github.com/omkarmulakala/curio_next/blob/main/src/data/collator.py"
click node_audio_decode "https://github.com/omkarmulakala/curio_next/blob/main/src/utils/audio.py"
click node_model_loader "https://github.com/omkarmulakala/curio_next/blob/main/src/models/qwen2_audio.py"
click node_lora "https://github.com/omkarmulakala/curio_next/blob/main/src/models/lora.py"
click node_trainer "https://github.com/omkarmulakala/curio_next/blob/main/src/training/trainer.py"
click node_inference_cli "https://github.com/omkarmulakala/curio_next/blob/main/scripts/run_inference.py"
click node_generation "https://github.com/omkarmulakala/curio_next/blob/main/src/models/qwen2_audio.py"
click node_evalcli "https://github.com/omkarmulakala/curio_next/blob/main/scripts/evaluate.py"
click node_evaluation "https://github.com/omkarmulakala/curio_next/blob/main/src/evaluation/evaluate.py"
click node_metrics "https://github.com/omkarmulakala/curio_next/blob/main/src/evaluation/metrics.py"
click node_errors "https://github.com/omkarmulakala/curio_next/blob/main/src/evaluation/error_analysis.py"
click node_report "https://github.com/omkarmulakala/curio_next/blob/main/scripts/generate_report.py"
click node_plots "https://github.com/omkarmulakala/curio_next/blob/main/src/training/plots.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_prep,node_manifestbuild,node_splitting,node_loader,node_validation toneBlue
class node_traincli,node_preprocessing,node_collator,node_audio_decode,node_model_loader,node_lora,node_trainer,node_rawdata,node_audio toneAmber
class node_inference_cli,node_generation toneMint
class node_evalcli,node_evaluation,node_metrics,node_errors,node_report,node_plots toneRose
class node_operator,node_questions,node_adapter,node_predictions,node_results toneIndigo
```

## Components

### Dataset preparation

- [Prepare manifests](https://github.com/omkarmulakala/curio_next/blob/main/scripts/prepare_dataset.py): `scripts/prepare_dataset.py`
- [Build manifests](https://github.com/omkarmulakala/curio_next/blob/main/scripts/build_manifests.py): `scripts/build_manifests.py`
- [Split and leakage checks](https://github.com/omkarmulakala/curio_next/blob/main/src/data/splitting.py): `src/data/splitting.py`
- [Manifest loader](https://github.com/omkarmulakala/curio_next/blob/main/src/data/dataset_loader.py): `src/data/dataset_loader.py`
- [Dataset validation](https://github.com/omkarmulakala/curio_next/blob/main/src/data/validation.py): `src/data/validation.py`

### Model and training

- [Train command](https://github.com/omkarmulakala/curio_next/blob/main/scripts/train.py): `scripts/train.py`
- [Conversation preparation](https://github.com/omkarmulakala/curio_next/blob/main/src/data/preprocessing.py): `src/data/preprocessing.py`
- [Batch collator](https://github.com/omkarmulakala/curio_next/blob/main/src/data/collator.py): `src/data/collator.py`
- [Audio loading](https://github.com/omkarmulakala/curio_next/blob/main/src/utils/audio.py): `src/utils/audio.py`
- [Qwen2-Audio](https://github.com/omkarmulakala/curio_next/blob/main/src/models/qwen2_audio.py): `src/models/qwen2_audio.py`
- [LoRA adaptation](https://github.com/omkarmulakala/curio_next/blob/main/src/models/lora.py): `src/models/lora.py`
- [Trainer](https://github.com/omkarmulakala/curio_next/blob/main/src/training/trainer.py): `src/training/trainer.py`

### Answering

- [Inference command](https://github.com/omkarmulakala/curio_next/blob/main/scripts/run_inference.py): `scripts/run_inference.py`
- [Answer generation](https://github.com/omkarmulakala/curio_next/blob/main/src/models/qwen2_audio.py): `src/models/qwen2_audio.py`

### Evaluation and analysis

- [Evaluation command](https://github.com/omkarmulakala/curio_next/blob/main/scripts/evaluate.py): `scripts/evaluate.py`
- [Evaluation metrics](https://github.com/omkarmulakala/curio_next/blob/main/src/evaluation/evaluate.py): `src/evaluation/evaluate.py`
- [Answer matching](https://github.com/omkarmulakala/curio_next/blob/main/src/evaluation/metrics.py): `src/evaluation/metrics.py`
- [Error analysis](https://github.com/omkarmulakala/curio_next/blob/main/src/evaluation/error_analysis.py): `src/evaluation/error_analysis.py`
- [Report generation](https://github.com/omkarmulakala/curio_next/blob/main/scripts/generate_report.py): `scripts/generate_report.py`
- [Training plots](https://github.com/omkarmulakala/curio_next/blob/main/src/training/plots.py): `src/training/plots.py`

### Other components

- **Researcher**
- **DCASE data**
- **Audio recordings**
- **Audio QA inputs**
- **Saved adapter**
- **Predictions**
- **Metrics and reports**

## Connections

- Researcher → Prepare manifests: runs preparation
- DCASE data → Prepare manifests: provides metadata
- Prepare manifests → Build manifests: builds manifests
- Build manifests → Split and leakage checks: assigns splits
- Split and leakage checks → Manifest loader: defines split records
- Researcher → Dataset validation: requests validation
- Dataset validation → Manifest loader: loads splits
- Researcher → Train command: starts training
- Train command → Manifest loader: loads records
- Train command → Qwen2-Audio: loads model
- Train command → LoRA adaptation: applies adapters
- Train command → Trainer: builds trainer
- Trainer → Batch collator: batches records
- Batch collator → Conversation preparation: formats prompts
- Batch collator → Audio loading: loads audio
- Trainer → Saved adapter: saves adapter
- Researcher → Inference command: requests answers
- Inference command → Manifest loader: loads records
- Inference command → Audio loading: decodes audio
- Inference command → Qwen2-Audio: loads model
- Inference command → Saved adapter: loads adapter
- Inference command → Answer generation: requests generation
- Answer generation → Conversation preparation: formats prompt
- Audio QA inputs → Inference command: supplies questions
- Audio recordings → Inference command: supplies recordings
- Answer generation → Predictions: produces answers
- Researcher → Evaluation command: requests evaluation
- Predictions → Evaluation command: provides predictions
- Evaluation command → Evaluation metrics: evaluates records
- Evaluation metrics → Answer matching: computes accuracy
- Evaluation metrics → Error analysis: identifies errors
- Evaluation metrics → Metrics and reports: writes metrics
- Researcher → Report generation: requests report
- Report generation → Metrics and reports: generates report
- Researcher → Training plots: requests plots
