# Architecture ``` Python users Services and many users anuvani_diar.Diarizer / anuvani-diar CLI anuvani_diar.Client · curl · triton_inference/tools/bench.py anuvani-diar-check | HTTP: upload or server path -> job id -> status -> RTTM | v | anuvani-diar-gateway (Rust, axum) | spool, admission, token, jobs, result cache, metrics v | diar-engine (Rust) ------------------------------+ the same engine in both input pool: libsndfile decode, channel mean, validation, window plan (diar-audio, diar-core::front) device pool: one worker per GPU slot, blocks of 8 windows, schedule fifo / fair / share post pool: clustering, the decoder, RTTM text (diar-core, diar-exact) | | v v TorchNN (in process, one CUDA stream per GPU) Triton 24.10: diar_nn_g0..g5 (one per GPU) + resample_cpu the release's own PyTorch model code one container for all GPUs (serve.sh) or one per GPU (compose) ``` | Layer | Where | What it guarantees | |---|---|---| | numerics | `crates/diar-exact` | numpy, scipy, pyannote and CPython arithmetic reproduced operation by operation | | front-end and post-processing | `crates/diar-core` | the release's windows, batches, masks, clustering, decoder and RTTM text | | audio | `crates/diar-audio` | soundfile's decoding with the same libsndfile binary, numpy's channel mean, the release's errors | | engine | `crates/diar-engine` | overlap of decoding, networks and clustering across files and GPUs, with the release's batch shapes | | networks | `python/anuvani_diar/nn`, `triton/models` | the release's model objects and flags; a start-up check of every batch shape | | serving | `crates/diar-gateway`, `crates/diar-triton` | limits, restarts that cost time not results, metrics | | Python | `python/anuvani_diar` | `Diarizer`, `Client`, the CLI and the install check | Read next: `ENGINE.md` (the pools and schedules), `DETERMINISM.md` (why the bytes match), `TESTING.md` (how that is checked), `SECURITY.md`, `../triton_inference/README.md` (serving) and `../triton/README.md` (its Triton images).