aorabdel commited on
Commit
cc1f49e
·
verified ·
1 Parent(s): b041c25

Sync model repo (text/metadata)

Browse files
Files changed (6) hide show
  1. .python-version +1 -0
  2. README.md +131 -158
  3. example.py +2 -4
  4. metadata.yaml +2 -0
  5. pyproject.toml +28 -0
  6. uv.lock +521 -0
.python-version ADDED
@@ -0,0 +1 @@
 
 
1
+ 3.12
README.md CHANGED
@@ -1,218 +1,191 @@
1
  ---
2
- library_name: litert
3
  license: apache-2.0
 
 
4
  base_model: openai/whisper-medium
5
  base_model_relation: quantized
6
  tags:
7
- - automatic-speech-recognition
8
- - whisper
9
- - int8
10
- - quantized
11
- - litert
12
- - tflite
13
  - arm
14
- - edge-ai
15
- - speech-recognition
 
 
 
16
  - librispeech
17
- pipeline_tag: automatic-speech-recognition
18
- datasets:
19
- - librispeech_asr
20
- metrics:
21
- - wer
22
- - cer
23
- model-index:
24
- - name: whisper-medium-int8-litert
25
- results:
26
- - task:
27
- type: automatic-speech-recognition
28
- name: Automatic Speech Recognition
29
- dataset:
30
- type: librispeech_asr
31
- name: LibriSpeech ASR (test-clean)
32
- split: test
33
- args:
34
- evaluation_samples: 2620
35
- metrics:
36
- - type: wer
37
- value: 2.86
38
- name: WER (test-clean)
39
- - type: cer
40
- value: 1.26
41
- name: CER (test-clean)
42
  ---
43
 
44
- # Whisper-medium INT8 (LiteRT)
45
 
46
- This is an INT8-quantized version of [Whisper-medium](https://huggingface.co/openai/whisper-medium), OpenAI's automatic speech recognition model, optimized for edge deployment on ARM smartphones using [LiteRT](https://ai.google.dev/edge/litert) (TensorFlow Lite). The model was quantized with the AI Edge Quantizer's dynamic-range INT8 recipe (`dynamic_wi8_afp32` — TFLite hybrid quantization: INT8 per-channel weights offline plus INT8 activations quantized dynamically inside each kernel via a per-tensor scale computed on-the-fly, with INT8 × INT8 → INT32 arithmetic; activation tensors are stored as FP32 on graph edges between kernels — that is what `_afp32` in the recipe name refers to) and exported to a multi-signature `.tflite` file with an autoregressive decoder KV cache, for efficient on-device inference on ARM Cortex-A processors — validated here on a Vivo X300 Android smartphone.
47
 
48
- ## Key Highlights
49
 
50
- Compared to the FP32 baseline:
51
 
52
- - **3.92x smaller** — 2914.22 MB to 743.15 MB
53
- - **19.7x faster end-to-end** — 174164.24 ms to 8853.61 ms (p50, on-device Android latency, Vivo X300)
54
- - **No accuracy regression, large speed gain** — WER improved slightly (2.88% to 2.86%) while the real-time factor (RTFx) improved from 0.07x (far slower than real-time) to 1.45x (real-time capable)
55
 
56
- ## Model Details
57
 
58
- ### Model Description
 
 
 
 
 
 
 
59
 
60
- Quantized version of Whisper-medium, an encoder-decoder Transformer for automatic speech recognition, re-authored into separate encoder/decoder signatures with explicit self- and cross-attention KV cache tensors, then quantized to dynamic-range INT8 (TFLite hybrid quantization: INT8 per-channel weights offline + INT8 activations quantized dynamically inside each kernel; INT8 × INT8 → INT32 arithmetic; activation tensors stored as FP32 on graph edges between kernels) and converted to LiteRT for fast autoregressive decoding on ARM smartphones.
61
 
62
- - **Developed by:** OpenAI (base model); INT8 quantization and LiteRT export produced by the maintainers of this optimization pipeline
63
- - **Model type:** Automatic Speech Recognition
64
- - **License:** Apache 2.0
65
- - **Base model:** [openai/whisper-medium](https://huggingface.co/openai/whisper-medium) — quantized, not finetuned
 
 
 
66
 
67
- ### Model Sources
68
 
69
- - **Repository:** https://huggingface.co/openai/whisper-medium
 
 
 
 
 
 
 
70
 
71
- ## How to Get Started with the Model
72
 
73
- ### Install dependencies
74
 
75
- ```bash
76
- pip install ai-edge-litert transformers numpy soundfile
77
- ```
78
 
79
- ### Download the model
 
 
 
 
 
 
 
 
 
80
 
81
- ```python
82
- from huggingface_hub import hf_hub_download
83
 
84
- model_path = hf_hub_download(
85
- repo_id="your-org/whisper-medium-int8-litert",
86
- filename="optimized.tflite",
87
- )
88
- ```
 
 
89
 
90
- ### Run inference
91
 
92
- ```bash
93
- python example.py
94
- ```
95
 
96
- `example.py` loads `optimized.tflite` and the local tokenizer/feature-extractor files (relative to the script) and transcribes `sample_input.flac` (16 kHz mono audio, or any `soundfile`-readable format — it is resampled automatically), writing the result to `transcription.json`.
97
 
98
- Or use the core inference pattern directly:
 
 
 
 
 
 
99
 
100
- ```python
101
- from ai_edge_litert.interpreter import Interpreter
102
 
103
- # Load model once and reuse both signature runners across every call
104
- interpreter = Interpreter(model_path="optimized.tflite")
105
- interpreter.allocate_tensors()
106
- encode_runner = interpreter.get_signature_runner("encode")
107
- decode_runner = interpreter.get_signature_runner("decode")
108
 
109
- # Encode: log-mel features [1, 80, 3000] -> cross-attention KV cache (once per audio clip)
110
- encode_outputs = encode_runner(args_0=input_features) # input_features: float32 [1, 80, 3000]
111
 
112
- # Decode: one step at a time, feeding back the updated self-attention KV cache.
113
- # Each call takes: decoder_token [1,1] int64, input_pos [1] int64,
114
- # self_attn_mask [1,1,1,448] float32, self-attention KV cache, cross-attention KV cache
115
- # and returns: logits [1,1,51865] + the updated self-attention KV cache.
116
- outputs = decode_runner(**decode_inputs)
117
 
118
- # See example.py for the full greedy-decoding loop (prompt handling, token
119
- # suppression, EOS stopping) and tensor-role classification by shape/dtype.
120
- ```
121
 
122
- ## Evaluation
123
 
124
- ### Testing Data, Factors & Metrics
 
 
 
 
 
 
 
125
 
126
- #### Testing Data
127
 
128
- Evaluated on 2,620 samples from LibriSpeech ASR (`test-clean` split).
129
 
130
- #### Metrics
131
 
132
- - **WER (Word Error Rate)** — the percentage of words that must be substituted, deleted, or inserted to turn the model's transcription into the reference transcript; lower is better.
133
- - **CER (Character Error Rate)** — the same edit-distance measure computed at the character level, useful for catching small spelling-level errors that WER can overstate; lower is better.
134
 
135
- Both metrics are computed after Whisper-style text normalization on both the reference and hypothesis transcripts.
 
 
 
136
 
137
- ### Results
138
 
139
- #### Accuracy
 
 
140
 
141
- | Metric | FP32 (Original) | INT8 (Optimized) | Delta |
142
- |:---|:---:|:---:|:---:|
143
- | WER | 2.88% | 2.86% | -0.03 pp |
144
- | CER | 1.27% | 1.26% | -0.01 pp |
145
 
146
- #### Efficiency
147
 
148
- These are real on-device measurements captured over ADB on a Vivo X300 Android smartphone (aarch64, LiteRT + XNNPACK/KleidiAI, 4 threads) — not x86 dev-box numbers.
 
 
 
 
 
149
 
150
- | Metric | FP32 (Original) | INT8 (Optimized) | Improvement |
151
- |:---|:---:|:---:|:---:|
152
- | Model Size (.tflite) | 2914.22 MB | 743.15 MB | **3.92x smaller** |
153
- | Android Latency (p50, end-to-end) | 174164.24 ms | 8853.61 ms | **19.7x faster** |
154
- | Android RTFx (real-time factor) | 0.07x | 1.45x | **from far-below-real-time to 1.45x real-time** |
155
- | Android Peak Memory (USS) | 6178.08 MB | 3150.16 MB | **1.96x less (49.0% less)** |
156
 
157
- ## Technical Specifications
 
 
 
 
158
 
159
- ### Objective
160
 
161
- English-language speech-to-text transcription via autoregressive greedy decoding.
162
 
163
- ### Quantization
164
 
165
- - **Method**: AI Edge Quantizer (AEQ), `dynamic_wi8_afp32` recipe
166
- - **Precision**: INT8 weights (symmetric, per-channel, offline) + INT8 activations (per-tensor, quantized dynamically inside each kernel from the incoming FP32 tensor). Kernel arithmetic is INT8 × INT8 → INT32 accumulation on XNNPACK / KleidiAI INT8 GEMM kernels; activation tensors are stored as FP32 on graph edges between kernels (that is the meaning of `_afp32` in the recipe name — storage format, not arithmetic).
167
- - **Mode**: Dynamic-range (TFLite hybrid) — no calibration dataset is needed since activation scales are computed on-the-fly at runtime rather than derived from a representative dataset offline
168
- - **Skipped layers**: None — no layers excluded from quantization; the recipe applies uniformly across the multi-signature encode/decode graph
169
- - **Backend**: LiteRT (TFLite) with XNNPACK + KleidiAI kernels on ARM
170
 
171
- ### Export Pipeline
172
 
173
- 1. Load the pretrained FP32 Hugging Face Whisper model
174
- 2. Re-author the encoder and decoder as separate exportable modules with explicit self-attention and cross-attention KV cache inputs/outputs
175
- 3. Load the original HF weights into the re-authored modules
176
- 4. Convert to a multi-signature (`encode` / `decode`) FP32 LiteRT model
177
- 5. Quantize with the AI Edge Quantizer's `dynamic_wi8_afp32` recipe — dynamic-range INT8 (TFLite hybrid): INT8 per-channel weights offline plus INT8 activations quantized dynamically inside each kernel (per-tensor scale computed on-the-fly, INT8 × INT8 → INT32 arithmetic, activations stored as FP32 on graph edges between kernels); no calibration data required
178
- 6. Export the final quantized `.tflite` file
179
 
180
- ### Preprocessing
181
 
182
- | Property | Value |
183
- |---|---|
184
- | Input shape | `[1, 80, 3000]` (log-mel features) |
185
- | Data type | float32 |
186
- | Sample rate | 16000 Hz, mono |
187
- | Feature extraction | 80-bin log-mel spectrogram, 30s window (padded/truncated) |
188
 
189
- **Steps**:
190
- 1. Load audio (any `soundfile`-readable format) and downmix to mono by averaging channels if stereo
191
- 2. Resample to 16000 Hz via linear interpolation if the source sample rate differs
192
- 3. Compute the log-mel spectrogram via the Whisper feature extractor (`processor.feature_extractor(waveform, sampling_rate=16000).input_features`)
193
 
194
- **Normalization**: Handled internally by the Whisper feature extractor (log-mel scaling) — no separate normalization step is required.
195
 
196
- ### Postprocessing
197
 
198
- | Property | Value |
199
- |---|---|
200
- | Output format | Greedy-decoded token sequence, decoded to a text string |
201
- | Decoding | Greedy (argmax over logits), autoregressive, accelerated with self-attention + cross-attention KV cache |
202
-
203
- **Steps**:
204
- 1. Seed the decoder with the forced prompt: `[decoder_start_token_id, "<|en|>", "<|transcribe|>", "<|notimestamps|>"]` (language pinned to English, task pinned to transcription)
205
- 2. At each step, run the `decode` signature on the previous token, position index, and additive causal self-attention mask, reusing the encoder's cross-attention KV cache and the updated self-attention KV cache from the previous step
206
- 3. Apply the model's configured suppressed-token list every step, and the begin-suppress-token list on the first generated step
207
- 4. Take `argmax` over the resulting logits to select the next token
208
- 5. Stop when the EOS token is generated or after 128 new tokens, whichever comes first
209
- 6. Decode the final token sequence with `tokenizer.decode(token_ids, skip_special_tokens=True)` and strip surrounding whitespace
210
-
211
- ## Known Limitations
212
-
213
- - Evaluated on the LibriSpeech `test-clean` split only (2,620 samples) — accuracy on `test-other` or other, noisier splits has not been measured
214
- - Fixed maximum of 128 generated tokens per utterance
215
- - Greedy decoding only — no beam search, so transcriptions may differ from beam-search results reported elsewhere for Whisper-medium
216
- - Evaluated only for English transcription (language forced to `"en"`, task forced to `"transcribe"`); other languages and the translation task are untested
217
- - Latency and memory numbers are specific to the Vivo X300 (aarch64, LiteRT + XNNPACK/KleidiAI, 4 threads) — absolute numbers on other ARM chipsets, thread counts, or Android versions may differ
218
- - WER/CER are computed after Whisper-style text normalization, which affects numeric values (e.g., digit/number formatting) — raw, unnormalized transcripts will show different error rates
 
1
  ---
 
2
  license: apache-2.0
3
+ pipeline_tag: automatic-speech-recognition
4
+ library_name: litert
5
  base_model: openai/whisper-medium
6
  base_model_relation: quantized
7
  tags:
 
 
 
 
 
 
8
  - arm
9
+ - arm-optimized
10
+ - premium-smartphone
11
+ - litert
12
+ - int8
13
+ - whisper
14
  - librispeech
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  ---
16
 
17
+ # Whisper Medium optimized for Arm-based Premium Smartphone
18
 
19
+ Whisper Medium automatic speech recognition optimized as an INT8 LiteRT model for Arm-based Premium Smartphone systems.
20
 
21
+ ## Summary
22
 
23
+ This repository contains an Arm-optimized version of openai/whisper-medium for automatic speech recognition. The model is provided in LiteRT (.tflite), targeting Premium Smartphone systems.
24
 
25
+ This version is intended to demonstrate efficient inference on Arm-based platforms while preserving the original model's intended behavior. Arm has evaluated this model on LibriSpeech ASR and measured performance on a Vivo X300 (C1-Ultra, C1-Premium, C1-Pro, android Android 16 / OriginOS 6).
 
 
26
 
27
+ **Key results**
28
 
29
+ | Area | Result |
30
+ |---|---|
31
+ | Model format | LiteRT (.tflite) |
32
+ | Target device class | Premium Smartphone |
33
+ | Reference device | Vivo X300 (C1-Ultra, C1-Premium, C1-Pro, android Android 16 / OriginOS 6) |
34
+ | Primary performance result | 8853.61 ms p50 end-to-end latency (RTFx 1.45x real-time) |
35
+ | Accuracy result | WER 2.86%, CER 1.26% |
36
+ | Size / memory result | 743.15 MB, 3.92x smaller than FP32 |
37
 
38
+ ## Original model
39
 
40
+ | Field | Value |
41
+ |---|---|
42
+ | Original model | openai/whisper-medium |
43
+ | Original source | Hugging Face |
44
+ | Original developer | OpenAI |
45
+ | Original model card | [openai/whisper-medium](https://huggingface.co/openai/whisper-medium) |
46
+ | Original license | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) |
47
 
48
+ ## Model files
49
 
50
+ | File | Description |
51
+ |---|---|
52
+ | `whisper-medium-int8-litert.tflite` | Arm-optimized model for deployment |
53
+ | `example.py` | Minimal inference example |
54
+ | `pyproject.toml` | Pinned runtime dependencies for `example.py`, resolved with uv |
55
+ | `uv.lock` | Locked dependency resolution for `pyproject.toml` |
56
+ | `config.yaml` | Model I/O contract used by the example |
57
+ | `benchmarks/` | FP32 baseline and Arm-optimized benchmark records |
58
 
59
+ ## Performance
60
 
61
+ Performance was measured on the reference configuration below. Results are intended to make the optimization reproducible but do not guarantee identical performance on every Arm-based system.
62
 
63
+ **Reference configuration**
 
 
64
 
65
+ | Field | Value |
66
+ |---|---|
67
+ | Device / platform | Vivo X300 |
68
+ | CPU / accelerator | C1-Ultra, C1-Premium, C1-Pro (aarch64, 8 cores), CPU |
69
+ | OS | android - Android 16 / OriginOS 6 |
70
+ | Runtime | LiteRT 0.9.0 |
71
+ | Backend / delegate | XNNPACK + KleidiAI |
72
+ | Batch size | 1 |
73
+ | Precision | INT8 dynamic PTQ, per-channel symmetric weights, INT8 activations quantized dynamically per-tensor at runtime (stored FP32 on graph edges between kernels) |
74
+ | Runs | 10 warmup + 50 measured |
75
 
76
+ **Performance results**
 
77
 
78
+ | Metric | Original / baseline | Arm-optimized | Improvement |
79
+ |---|---:|---:|---:|
80
+ | p50 latency | 174164.25 ms | 8853.61 ms | 19.67x |
81
+ | p90 latency | 174412.33 ms | 9117.33 ms | 19.13x |
82
+ | RTFx (real-time factor) | 0.07x | 1.45x | 19.67x |
83
+ | Model size | 2914.22 MB | 743.15 MB | 3.92x smaller |
84
+ | Peak memory | 6178.08 MB | 3150.16 MB | 1.96x less |
85
 
86
+ ## Accuracy
87
 
88
+ Accuracy was evaluated using the same preprocessing, input resolution, and evaluation protocol described below. Where possible, the optimized model is compared against the original model under the same evaluation conditions.
 
 
89
 
90
+ **Evaluation setup**
91
 
92
+ | Field | Value |
93
+ |---|---|
94
+ | Dataset | LibriSpeech ASR |
95
+ | Split | test-clean |
96
+ | Number of samples | 2620 |
97
+ | Metric(s) | WER (Word Error Rate), CER (Character Error Rate) |
98
+ | Evaluation runtime | LiteRT |
99
 
100
+ **Accuracy results**
 
101
 
102
+ | Metric | Original / baseline | Arm-optimized | Change |
103
+ |---|---:|---:|---:|
104
+ | WER | 2.86% | 2.86% | 0.00 pp |
105
+ | CER | 1.26% | 1.26% | 0.00 pp |
 
106
 
107
+ Accuracy was measured using the evaluation setup described above. Users should re-evaluate the model on their own data before production use.
 
108
 
109
+ ## Arm optimization approach
 
 
 
 
110
 
111
+ Arm optimized this model for efficient inference on Arm-based platforms using a hardware-aware conversion and validation flow.
 
 
112
 
113
+ For this release, Arm used:
114
 
115
+ | Optimization area | Applied? | Notes |
116
+ |---|---|---|
117
+ | Model conversion | Yes | Re-authored the encoder/decoder as separate LiteRT multi-signature (encode/decode) modules and converted to .tflite |
118
+ | Quantization | Yes | AI Edge Quantizer dynamic_wi8_afp32 recipe - INT8 per-channel symmetric weights quantized offline plus INT8 activations quantized dynamically per-tensor at runtime; activations stored FP32 on graph edges; INT8 x INT8 -> INT32 kernel arithmetic; no calibration dataset required |
119
+ | Runtime/backend selection | Yes | XNNPACK + KleidiAI kernels selected for the LiteRT CPU delegate (4 threads) |
120
+ | Graph/runtime compatibility updates | Yes | Performed as part of the LiteRT export pipeline - the encoder/decoder were re-authored with explicit self-attention and cross-attention KV cache tensors and exported as a multi-signature (encode/decode) graph for autoregressive decoding |
121
+ | Accuracy validation | Yes | Compared against the original model or published baseline |
122
+ | Performance validation | Yes | Measured on the reference Arm platform |
123
 
124
+ The goal of this process is to improve deployment characteristics such as latency, memory use, model size, and runtime compatibility while preserving the model's intended behavior. Detailed conversion scripts, calibration configuration, or backend-specific implementation details may be provided separately where appropriate.
125
 
126
+ ## Using this model
127
 
128
+ ### Install dependencies
129
 
130
+ Dependencies are declared in `pyproject.toml`, which ships with this repository. Resolve and install them into a local virtual environment with uv:
 
131
 
132
+ ```bash
133
+ uv python install
134
+ uv sync --frozen
135
+ ```
136
 
137
+ ### Run the example
138
 
139
+ ```bash
140
+ uv run example.py
141
+ ```
142
 
143
+ Note: The Python/uv example runs on AWS Graviton (Ubuntu arm64) to confirm runtime compatibility only, and is intended as a guideline for building an equivalent run script on smartphone devices.
 
 
 
144
 
145
+ ### Expected input
146
 
147
+ | Property | Value |
148
+ |---|---|
149
+ | Input shape | [1, 80, 3000] (log-mel spectrogram features) |
150
+ | Input type | float32 |
151
+ | Input range | N/A (log-mel spectrogram, not a bounded range); raw audio input is 16000 Hz mono PCM in flac, wav, mp3, or ogg format |
152
+ | Preprocessing | Load audio (soundfile.read), downmix to mono, resample to 16000 Hz via linear interpolation if needed, compute an 80-bin log-mel spectrogram via the WhisperProcessor feature extractor (30s window, padded/truncated) to produce the [1, 80, 3000] float32 input tensor |
153
 
154
+ ### Expected output
 
 
 
 
 
155
 
156
+ | Property | Value |
157
+ |---|---|
158
+ | Output shape | N/A (variable-length autoregressive token sequence; per-step logits shape [1, 1, 51865]) |
159
+ | Output type | text string (decoded from int64 token ids) |
160
+ | Postprocessing | Greedy argmax decoding per step using self-attention and cross-attention KV cache, then decode token ids to text (skipping special tokens) and strip surrounding whitespace |
161
 
162
+ ## Intended use
163
 
164
+ This model is intended for developers evaluating automatic speech recognition workloads on Arm-based platforms. It is suitable as a reference implementation for benchmarking, prototyping, and integration exploration.
165
 
166
+ ## Limitations
167
 
168
+ - Performance depends on the target device, runtime version, backend/delegate support, memory configuration, and system load.
169
+ - Accuracy was evaluated on LibriSpeech ASR test-clean and may not generalize to all domains.
170
+ - This release preserves the original model's intended task and behavior, but users should validate it for their own application, data, and deployment environment.
171
+ - This repository is not a replacement for the original model documentation.
 
172
 
173
+ ## Additional notes
174
 
175
+ - Decoding is greedy only (no beam search), capped at 128 generated tokens per utterance, with language forced to English and task forced to transcription.
176
+ - Latency and memory figures are specific to the Vivo X300 (aarch64, LiteRT + XNNPACK/KleidiAI, 4 threads); numbers on other Arm chipsets, thread counts, or Android versions may differ.
177
+ - WER/CER are computed after Whisper-style text normalization, which affects the numeric values (e.g., digit/number formatting); raw, unnormalized transcripts will show different error rates.
178
+ - Evaluated only on the LibriSpeech test-clean split (2,620 samples); accuracy on test-other or noisier splits has not been measured.
 
 
179
 
180
+ ## About this version
181
 
182
+ This repository contains a converted version of the openai/whisper-medium model, originally developed by OpenAI.
183
+ Arm has converted the model to enable efficient execution on Arm-based platforms. No changes have been made to the model's intended behavior.
 
 
 
 
184
 
185
+ ## Original model and documentation
 
 
 
186
 
187
+ For full details of the original model, please refer to the original [model card](https://huggingface.co/openai/whisper-medium).
188
 
189
+ ## Purpose of this release
190
 
191
+ This version is provided by Arm as a reference implementation to demonstrate performance on Arm-based systems. It is not a production-ready or supported solution. Users should evaluate the model independently for their use-case. Arm provides no warranties or ongoing support for this version.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
example.py CHANGED
@@ -1,10 +1,8 @@
1
  """Minimal inference example for Whisper Medium (LiteRT / TFLite, INT8).
2
 
3
- Loads the multi-signature ``optimized.tflite`` model (encode + decode
4
  signatures with self-attention and cross-attention KV caches) and
5
  transcribes a single audio file with greedy decoding.
6
-
7
- Dependencies: ai-edge-litert, transformers, numpy, soundfile
8
  """
9
 
10
  import json
@@ -17,7 +15,7 @@ from transformers import WhisperProcessor
17
 
18
  # ── Configuration ──────────────────────────────────────────────────────────
19
  SCRIPT_DIR = Path(__file__).parent
20
- MODEL_PATH = str(SCRIPT_DIR / "optimized.tflite")
21
  AUDIO_PATH = str(SCRIPT_DIR / "sample_input.flac")
22
  PROCESSOR_DIR = str(SCRIPT_DIR) # tokenizer.json / processor_config.json live here
23
 
 
1
  """Minimal inference example for Whisper Medium (LiteRT / TFLite, INT8).
2
 
3
+ Loads the multi-signature ``whisper-medium-int8-litert.tflite`` model (encode + decode
4
  signatures with self-attention and cross-attention KV caches) and
5
  transcribes a single audio file with greedy decoding.
 
 
6
  """
7
 
8
  import json
 
15
 
16
  # ── Configuration ──────────────────────────────────────────────────────────
17
  SCRIPT_DIR = Path(__file__).parent
18
+ MODEL_PATH = str(SCRIPT_DIR / "whisper-medium-int8-litert.tflite")
19
  AUDIO_PATH = str(SCRIPT_DIR / "sample_input.flac")
20
  PROCESSOR_DIR = str(SCRIPT_DIR) # tokenizer.json / processor_config.json live here
21
 
metadata.yaml CHANGED
@@ -11,6 +11,8 @@ description: >-
11
  id: Arm/whisper-medium-int8-litert
12
  filename: whisper-medium-int8-litert.tflite
13
  base_model_id: openai/whisper-medium
 
 
14
  profile: Arm-Optimized
15
  weight_dtype: int8
16
  quantization:
 
11
  id: Arm/whisper-medium-int8-litert
12
  filename: whisper-medium-int8-litert.tflite
13
  base_model_id: openai/whisper-medium
14
+ vendor: OpenAI
15
+ base_model_url: https://huggingface.co/openai/whisper-medium
16
  profile: Arm-Optimized
17
  weight_dtype: int8
18
  quantization:
pyproject.toml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [project]
2
+ name = "whisper-medium-int8-litert-runtime"
3
+ version = "0.1.0"
4
+ description = "Runtime dependencies for example.py (Whisper Medium INT8, LiteRT)"
5
+ requires-python = ">=3.12,<3.13"
6
+ dependencies = [
7
+ "ai-edge-litert==2.2.0",
8
+ "transformers==5.16.1",
9
+ "numpy==2.5.2",
10
+ "soundfile==0.14.0",
11
+ ]
12
+
13
+ [tool.uv]
14
+ package = false
15
+
16
+ [tool.ai-portal.deployment]
17
+ schema-version = "1"
18
+ runtime = "litert"
19
+ required-capabilities = ["XNNPACK"]
20
+
21
+ [tool.ai-portal.deployment.ubuntu]
22
+ packages = []
23
+
24
+ [tool.ai-portal.deployment.raspbian]
25
+ packages = []
26
+
27
+ [tool.ai-portal.deployment.files]
28
+ expected = ["transcription.json"]
uv.lock ADDED
@@ -0,0 +1,521 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version = 1
2
+ revision = 3
3
+ requires-python = "==3.12.*"
4
+
5
+ [[package]]
6
+ name = "ai-edge-litert"
7
+ version = "2.2.0"
8
+ source = { registry = "https://pypi.org/simple" }
9
+ dependencies = [
10
+ { name = "backports-strenum" },
11
+ { name = "flatbuffers" },
12
+ { name = "ml-dtypes" },
13
+ { name = "numpy" },
14
+ { name = "protobuf" },
15
+ { name = "tqdm" },
16
+ { name = "typing-extensions" },
17
+ ]
18
+ wheels = [
19
+ { url = "https://files.pythonhosted.org/packages/1f/09/778399be516866419e3de6257e4f7ab6b8563b2fc204b6353f2361a8b025/ai_edge_litert-2.2.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:90fe45c8a0557e15b873f685e33ecaa2302782a8cb09a1ca754d536d5fa30945", size = 10835492, upload-time = "2026-08-12T19:03:33.631Z" },
20
+ { url = "https://files.pythonhosted.org/packages/4f/ef/be6341bb3cc935e47a521ea1a173a022d1680d309545579a12dbc739df40/ai_edge_litert-2.2.0-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:6d3fe2047461fbdd251425960be7a3674dbbf707bd019a01ffe6eb43cc653434", size = 14052423, upload-time = "2026-08-12T18:47:18.261Z" },
21
+ { url = "https://files.pythonhosted.org/packages/fa/bc/c4788c401cbe1bb082cb09220b1e35ae8a8f89451b494f4e151a8c93bf4f/ai_edge_litert-2.2.0-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:4e151f07229b2f714f9b34ea42a9cacffc98953b1f6e832adee4479f6b81f50a", size = 21258447, upload-time = "2026-08-13T02:13:57.891Z" },
22
+ { url = "https://files.pythonhosted.org/packages/32/81/818bc82bad14f176c2ac6a42e28750a87aa7b3732ebcc2c94a617de2f26b/ai_edge_litert-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:86815ff3378ac9fa4bb5548bcede1be7d050bd59a8ebaf1c056b7aef69fedcee", size = 17914562, upload-time = "2026-08-12T21:19:44.442Z" },
23
+ ]
24
+
25
+ [[package]]
26
+ name = "annotated-doc"
27
+ version = "0.0.5"
28
+ source = { registry = "https://pypi.org/simple" }
29
+ sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" }
30
+ wheels = [
31
+ { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" },
32
+ ]
33
+
34
+ [[package]]
35
+ name = "anyio"
36
+ version = "4.14.2"
37
+ source = { registry = "https://pypi.org/simple" }
38
+ dependencies = [
39
+ { name = "idna" },
40
+ { name = "typing-extensions" },
41
+ ]
42
+ sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" }
43
+ wheels = [
44
+ { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" },
45
+ ]
46
+
47
+ [[package]]
48
+ name = "backports-strenum"
49
+ version = "1.3.1"
50
+ source = { registry = "https://pypi.org/simple" }
51
+ sdist = { url = "https://files.pythonhosted.org/packages/35/c7/2ed54c32fed313591ffb21edbd48db71e68827d43a61938e5a0bc2b6ec91/backports_strenum-1.3.1.tar.gz", hash = "sha256:77c52407342898497714f0596e86188bb7084f89063226f4ba66863482f42414", size = 7257, upload-time = "2023-12-09T14:36:40.937Z" }
52
+ wheels = [
53
+ { url = "https://files.pythonhosted.org/packages/d6/50/56cf20e2ee5127b603b81d5a69580a1a325083e2b921aa8f067da83927c0/backports_strenum-1.3.1-py3-none-any.whl", hash = "sha256:cdcfe36dc897e2615dc793b7d3097f54d359918fc448754a517e6f23044ccf83", size = 8304, upload-time = "2023-12-09T14:36:39.905Z" },
54
+ ]
55
+
56
+ [[package]]
57
+ name = "certifi"
58
+ version = "2026.7.22"
59
+ source = { registry = "https://pypi.org/simple" }
60
+ sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" }
61
+ wheels = [
62
+ { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" },
63
+ ]
64
+
65
+ [[package]]
66
+ name = "cffi"
67
+ version = "2.1.1"
68
+ source = { registry = "https://pypi.org/simple" }
69
+ dependencies = [
70
+ { name = "pycparser", marker = "implementation_name != 'PyPy'" },
71
+ ]
72
+ sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" }
73
+ wheels = [
74
+ { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" },
75
+ { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" },
76
+ { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" },
77
+ { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" },
78
+ { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" },
79
+ { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" },
80
+ { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" },
81
+ { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" },
82
+ { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" },
83
+ { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" },
84
+ { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" },
85
+ { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" },
86
+ ]
87
+
88
+ [[package]]
89
+ name = "click"
90
+ version = "8.5.0"
91
+ source = { registry = "https://pypi.org/simple" }
92
+ sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" }
93
+ wheels = [
94
+ { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" },
95
+ ]
96
+
97
+ [[package]]
98
+ name = "colorama"
99
+ version = "0.4.6"
100
+ source = { registry = "https://pypi.org/simple" }
101
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
102
+ wheels = [
103
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
104
+ ]
105
+
106
+ [[package]]
107
+ name = "filelock"
108
+ version = "3.32.4"
109
+ source = { registry = "https://pypi.org/simple" }
110
+ sdist = { url = "https://files.pythonhosted.org/packages/6d/30/03b03951873a1a0ffc7e8ca0e10c15597b59e8d0e39260704cd2ea087bc4/filelock-3.32.4.tar.gz", hash = "sha256:2bde2e4cf732e0153406d8a7bc80620ecf5e621fe0d25e41143c4e3b4733ff30", size = 222126, upload-time = "2026-08-23T17:37:55.363Z" }
111
+ wheels = [
112
+ { url = "https://files.pythonhosted.org/packages/01/a4/9b63d595d748e3aff8812b65eacc1a2c4bd90b7c2012e08e72373b4835eb/filelock-3.32.4-py3-none-any.whl", hash = "sha256:22e58ca3b1ae3b98993b762d7338367ae64fe50252bf78d59da3bfebcdf1cedd", size = 99864, upload-time = "2026-08-23T17:37:53.913Z" },
113
+ ]
114
+
115
+ [[package]]
116
+ name = "flatbuffers"
117
+ version = "25.12.19"
118
+ source = { registry = "https://pypi.org/simple" }
119
+ wheels = [
120
+ { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" },
121
+ ]
122
+
123
+ [[package]]
124
+ name = "fsspec"
125
+ version = "2026.7.0"
126
+ source = { registry = "https://pypi.org/simple" }
127
+ sdist = { url = "https://files.pythonhosted.org/packages/00/78/f34251dadb8f3921264a1d9b8946f5e542014ee2614b285261b4e40e6775/fsspec-2026.7.0.tar.gz", hash = "sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88", size = 317040, upload-time = "2026-07-28T16:34:51.052Z" }
128
+ wheels = [
129
+ { url = "https://files.pythonhosted.org/packages/fd/3c/6a2bf344106328fd04963664a60b9bb6496fc25df8e962fcdc1367285fb9/fsspec-2026.7.0-py3-none-any.whl", hash = "sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279", size = 206583, upload-time = "2026-07-28T16:34:49.538Z" },
130
+ ]
131
+
132
+ [[package]]
133
+ name = "h11"
134
+ version = "0.16.0"
135
+ source = { registry = "https://pypi.org/simple" }
136
+ sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
137
+ wheels = [
138
+ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
139
+ ]
140
+
141
+ [[package]]
142
+ name = "hf-xet"
143
+ version = "1.6.0"
144
+ source = { registry = "https://pypi.org/simple" }
145
+ sdist = { url = "https://files.pythonhosted.org/packages/1b/ab/522a2ab67f27971a9d48ca666d4fca85ef7d5282d142e31fd087e27b1bbe/hf_xet-1.6.0.tar.gz", hash = "sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef", size = 920527, upload-time = "2026-08-03T22:33:13.243Z" }
146
+ wheels = [
147
+ { url = "https://files.pythonhosted.org/packages/a2/50/7afa2c9c787405864fc47a0d1bbc02c62e9101947ed43c1f43899fc7d91d/hf_xet-1.6.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d", size = 4071729, upload-time = "2026-08-03T22:33:00.721Z" },
148
+ { url = "https://files.pythonhosted.org/packages/4b/69/55b8dcf636142ae660fec1869fcac14c4da2e8412e14d6eee1523be77e9f/hf_xet-1.6.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a", size = 3876287, upload-time = "2026-08-03T22:33:02.251Z" },
149
+ { url = "https://files.pythonhosted.org/packages/67/4e/a28359bf1c1ecf11eba22123168c138698f7cb576ac678f5a2e16cd5da08/hf_xet-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f", size = 4464663, upload-time = "2026-08-03T22:33:03.802Z" },
150
+ { url = "https://files.pythonhosted.org/packages/9a/69/1f0cbc2fb22ae6082d094f743d1b8945a3f36f6089cb95f42b7ee348cda7/hf_xet-1.6.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7", size = 4262538, upload-time = "2026-08-03T22:33:05.287Z" },
151
+ { url = "https://files.pythonhosted.org/packages/d1/3a/4f4f2301ade26e404462d3336fa11f7958d914cabbabdd6e03c3c5d5658c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb", size = 4460520, upload-time = "2026-08-03T22:33:06.81Z" },
152
+ { url = "https://files.pythonhosted.org/packages/ab/5f/311725e2a905534dfee2dcb5b08414f249147f1f12252bfc2bd24caa075c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c", size = 4675937, upload-time = "2026-08-03T22:33:08.616Z" },
153
+ { url = "https://files.pythonhosted.org/packages/98/b7/8c59a66d15205024662f1d66968136f13893f96df1ddc5087e2e281fc95f/hf_xet-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b", size = 4033128, upload-time = "2026-08-03T22:33:10.171Z" },
154
+ { url = "https://files.pythonhosted.org/packages/73/63/ca511b6f802f28cf3489b280fe77475bcca8de85e81a6299d7916b5b5555/hf_xet-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3", size = 3859359, upload-time = "2026-08-03T22:33:11.725Z" },
155
+ ]
156
+
157
+ [[package]]
158
+ name = "httpcore"
159
+ version = "1.0.9"
160
+ source = { registry = "https://pypi.org/simple" }
161
+ dependencies = [
162
+ { name = "certifi" },
163
+ { name = "h11" },
164
+ ]
165
+ sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
166
+ wheels = [
167
+ { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
168
+ ]
169
+
170
+ [[package]]
171
+ name = "httpx"
172
+ version = "0.28.1"
173
+ source = { registry = "https://pypi.org/simple" }
174
+ dependencies = [
175
+ { name = "anyio" },
176
+ { name = "certifi" },
177
+ { name = "httpcore" },
178
+ { name = "idna" },
179
+ ]
180
+ sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
181
+ wheels = [
182
+ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
183
+ ]
184
+
185
+ [[package]]
186
+ name = "huggingface-hub"
187
+ version = "1.29.0"
188
+ source = { registry = "https://pypi.org/simple" }
189
+ dependencies = [
190
+ { name = "click" },
191
+ { name = "filelock" },
192
+ { name = "fsspec" },
193
+ { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" },
194
+ { name = "httpx" },
195
+ { name = "packaging" },
196
+ { name = "pyyaml" },
197
+ { name = "tqdm" },
198
+ { name = "typing-extensions" },
199
+ ]
200
+ sdist = { url = "https://files.pythonhosted.org/packages/64/35/42316e8f6908b6d21bc8df017cc6efba94fb5edbf99b64e28dd142325e20/huggingface_hub-1.29.0.tar.gz", hash = "sha256:6ebb385a581435325cf6d5c5b233d5d4bc91175834d99fd65dae14379b36e9ad", size = 963121, upload-time = "2026-08-27T12:18:37.432Z" }
201
+ wheels = [
202
+ { url = "https://files.pythonhosted.org/packages/4e/a5/47c2ea9b228ccbcba8467e9a64823146e8ebbad29855e591d8f5eedcc9c7/huggingface_hub-1.29.0-py3-none-any.whl", hash = "sha256:b00f7782afc14db4bc6572763810a635bdfbab8623d957bfb553bd18e03852cd", size = 795768, upload-time = "2026-08-27T12:18:35.431Z" },
203
+ ]
204
+
205
+ [[package]]
206
+ name = "idna"
207
+ version = "3.19"
208
+ source = { registry = "https://pypi.org/simple" }
209
+ sdist = { url = "https://files.pythonhosted.org/packages/5f/f7/abb373e5757eaec4b922b92f97ec8d6d7e057cf06778247604fbc4e7c3f3/idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15", size = 215237, upload-time = "2026-08-18T05:14:24.27Z" }
210
+ wheels = [
211
+ { url = "https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4", size = 68550, upload-time = "2026-08-18T05:14:22.343Z" },
212
+ ]
213
+
214
+ [[package]]
215
+ name = "markdown-it-py"
216
+ version = "4.2.0"
217
+ source = { registry = "https://pypi.org/simple" }
218
+ dependencies = [
219
+ { name = "mdurl" },
220
+ ]
221
+ sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
222
+ wheels = [
223
+ { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
224
+ ]
225
+
226
+ [[package]]
227
+ name = "mdurl"
228
+ version = "0.1.2"
229
+ source = { registry = "https://pypi.org/simple" }
230
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
231
+ wheels = [
232
+ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
233
+ ]
234
+
235
+ [[package]]
236
+ name = "ml-dtypes"
237
+ version = "0.6.0"
238
+ source = { registry = "https://pypi.org/simple" }
239
+ dependencies = [
240
+ { name = "numpy" },
241
+ ]
242
+ sdist = { url = "https://files.pythonhosted.org/packages/12/72/307d7c4bd0600601c7133fba5cb78af7db968152951c1cd473abb1cda782/ml_dtypes-0.6.0.tar.gz", hash = "sha256:5e60251d32ced5598972e4d5e06a2f044341f9291402551a3f6f0ec44f9299b0", size = 3032327, upload-time = "2026-08-13T14:14:40.215Z" }
243
+ wheels = [
244
+ { url = "https://files.pythonhosted.org/packages/84/6a/441eb053b078954f7fea284dfb288701884d0a1404d39babb858e1649023/ml_dtypes-0.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5359c588cc62de6f78d7430f06b65853d884955494d86d6ad90b6dd64a3f3a08", size = 565447, upload-time = "2026-08-13T14:14:01.737Z" },
245
+ { url = "https://files.pythonhosted.org/packages/ed/cf/87e8a6c57eed63a91782a0d229856ddf73e138ce004dd71e2799a9dcdb33/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37da32aa97749251025666d62372775019594577b9c9e9cfda83bed48d778fdb", size = 360227, upload-time = "2026-08-13T14:14:02.938Z" },
246
+ { url = "https://files.pythonhosted.org/packages/c7/f9/7d76c1eae866f5d4636401b31b6d6dd90e4b4ced1fa7cfdfcca9c60e4bd3/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b4a480aa8fd54a1805b8ac10f3f91763926a74f73c0c364c10f9231854f4170", size = 409890, upload-time = "2026-08-13T14:14:04.248Z" },
247
+ { url = "https://files.pythonhosted.org/packages/ba/db/9c61ec2760b5cbfb1c6558d5c991a6d8fd3271053c32db20506a9a90272b/ml_dtypes-0.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e9d53925597fbffafd2a37048dadeddd0bdaba58058f6ae0869ed709a184d", size = 439333, upload-time = "2026-08-13T14:14:05.501Z" },
248
+ { url = "https://files.pythonhosted.org/packages/6a/57/780ca3e5ab135b9fbdd8e5441abf5f801b30398371b691291e05ab9834c0/ml_dtypes-0.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:6eaed129a4afe90694b8685e2f9b6294849f5eda4af9a15be83a4326eeebd775", size = 552268, upload-time = "2026-08-13T14:14:06.866Z" },
249
+ ]
250
+
251
+ [[package]]
252
+ name = "numpy"
253
+ version = "2.5.2"
254
+ source = { registry = "https://pypi.org/simple" }
255
+ sdist = { url = "https://files.pythonhosted.org/packages/9a/80/db0b4559e57ec36362bedbb05530a87fafbcb6067708c946967a41d449e7/numpy-2.5.2.tar.gz", hash = "sha256:d482d171c406ae88c5b19cad3b6a1c4c5209f886ab74bc44c2c865c23f52d860", size = 20773161, upload-time = "2026-08-09T13:48:27.962Z" }
256
+ wheels = [
257
+ { url = "https://files.pythonhosted.org/packages/69/72/dccb0aaf40972777283303919f613964227266d0c13adebb79ac124f1c3e/numpy-2.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:14e373cfc6387177e8409dac3c7159be8eb05cd77096cd7c950268b86f62831c", size = 16891693, upload-time = "2026-08-09T13:44:51.702Z" },
258
+ { url = "https://files.pythonhosted.org/packages/60/2e/b5aee50a1f74ac815cf8331812cb8251e29024025de462e0c047641c614c/numpy-2.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4bbd96c833ecc8cc069ce518078fc8c60cb9cbfb0fea5b7a803ad65035596d03", size = 11903109, upload-time = "2026-08-09T13:44:55.501Z" },
259
+ { url = "https://files.pythonhosted.org/packages/f3/f4/29e78102a80601cf034d4e9767022cffeca2c3b4c926e1754572ca95593d/numpy-2.5.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:6e8172ddfcf5cf74b811d372b570b83c60bd2de87a6fbfbebdadb4a9bd9c6cbb", size = 5350202, upload-time = "2026-08-09T13:44:58.401Z" },
260
+ { url = "https://files.pythonhosted.org/packages/11/4b/dcd3b7eadaf4035d2c7a4289d232523a6964f602598ef7674e4bd7291f93/numpy-2.5.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f188481f1669e26f62b701e8205d19e460fa4a9b52a1414ba382330e4a3414", size = 6687736, upload-time = "2026-08-09T13:45:00.813Z" },
261
+ { url = "https://files.pythonhosted.org/packages/e5/21/4947e0e9d6c9fc2e2ff15b8949049ee44f63adb9cacc729ab8793f97e712/numpy-2.5.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ee9c4eeb8454b3660a8b53493563c3e121c2fc94fbd72b848ef814ed7b676a9", size = 15612696, upload-time = "2026-08-09T13:45:04.151Z" },
262
+ { url = "https://files.pythonhosted.org/packages/3a/5f/62d28cf019460c7f1394105b4d49d9911a9c444cb77ab0bd95a204c5a6de/numpy-2.5.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3cdec01fa790a186d430433fdd4d4ffb70eed6f0eeb4bf05c8dbe2dce0a9bcb8", size = 16722264, upload-time = "2026-08-09T13:45:07.714Z" },
263
+ { url = "https://files.pythonhosted.org/packages/14/25/3f0be4c1b9fdf5dd5e708a6806978564d7c46a055c000496309ff2a2f8af/numpy-2.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7999d4ddb0c4025018373fd787510d46e04c769467af22869707b3c1cfd459ab", size = 16974396, upload-time = "2026-08-09T13:45:11.316Z" },
264
+ { url = "https://files.pythonhosted.org/packages/22/72/6262cbdeeb45da9d971e40715f579d791603ba8ec0b5e2db1ac55454421d/numpy-2.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1f017dc0875c9209d219f97feceb7d54c2661bb243deb4114478e1295808af7", size = 18476044, upload-time = "2026-08-09T13:45:14.869Z" },
265
+ { url = "https://files.pythonhosted.org/packages/36/33/29208b8b075bde62d26a81d14b358c42b0f69b6cabd98d4ff97f37f22b05/numpy-2.5.2-cp312-cp312-win32.whl", hash = "sha256:d6a48072864e3324e194a8fbb3c657bcc5b5c869dbc64c9537b1d5c862572c0a", size = 6072817, upload-time = "2026-08-09T13:45:17.867Z" },
266
+ { url = "https://files.pythonhosted.org/packages/7f/b9/87fea2769fe1c47c1b5b01d8310772c9d1a85d485de7cf386ef7a3332b02/numpy-2.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:28ac63476ec7651484215ee7fa15a1f78b57c14621f01e392afe17b9a1390ce4", size = 12464674, upload-time = "2026-08-09T13:45:20.734Z" },
267
+ { url = "https://files.pythonhosted.org/packages/14/52/032b97e00461ab0809bbe4c588b035620e5a14b8cdee47ecddefc7b17d33/numpy-2.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:27650bb0e7140fa3d37b9923b4803645e0b125d190f326eecfd3f4dad8e8ade1", size = 10397131, upload-time = "2026-08-09T13:45:23.73Z" },
268
+ ]
269
+
270
+ [[package]]
271
+ name = "packaging"
272
+ version = "26.3"
273
+ source = { registry = "https://pypi.org/simple" }
274
+ sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" }
275
+ wheels = [
276
+ { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" },
277
+ ]
278
+
279
+ [[package]]
280
+ name = "protobuf"
281
+ version = "7.36.0"
282
+ source = { registry = "https://pypi.org/simple" }
283
+ sdist = { url = "https://files.pythonhosted.org/packages/a7/e7/0553e21d25ca4d9f573135775348a372c3ec34a93a71d5f297c3bac38341/protobuf-7.36.0.tar.gz", hash = "sha256:e8e09cb0d794c6687926fa558a8a6e72aa10edb997d5ca61da0765f12a3e00ea", size = 510034, upload-time = "2026-08-20T16:34:01.071Z" }
284
+ wheels = [
285
+ { url = "https://files.pythonhosted.org/packages/8f/ae/58e3ca96cb2e118cc546b677359b3c6659f79a140935c08dec94c7998585/protobuf-7.36.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:9103532dffd80c6fab7e50c65a31007680a06eb57537d437bb1b35812c138a37", size = 453256, upload-time = "2026-08-20T16:33:53.945Z" },
286
+ { url = "https://files.pythonhosted.org/packages/f0/15/5162230af4912697f0fe406f6800f80760945babcff0e2c2fe6c84ef2d5d/protobuf-7.36.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:bf94a5917c71058262de683669bc0a797a7669d3de71f0b36d058e3194f47b44", size = 341436, upload-time = "2026-08-20T16:33:55.134Z" },
287
+ { url = "https://files.pythonhosted.org/packages/d7/09/1670b2bfc9a45e807e520c3e9be36524db9ccc7dc05ea17af7681cabdc61/protobuf-7.36.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:3297e60abdff301e5f74393d87f6cc59dacab5f024a89548a6e8de1d26576b16", size = 354440, upload-time = "2026-08-20T16:33:56.077Z" },
288
+ { url = "https://files.pythonhosted.org/packages/c7/f8/bd5804695ba400e423c33fd4d9f58c28d86633d5ba1945c36ff3967d98cb/protobuf-7.36.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:70f5ec8eb0da81a44360c0dc0beac99a0d78071d21956a7076bae8bd2051841b", size = 340439, upload-time = "2026-08-20T16:33:56.992Z" },
289
+ { url = "https://files.pythonhosted.org/packages/ef/9f/acd02338235a3e7d03168c4303478347b7624fc8189ff4e7f0d2654bbe86/protobuf-7.36.0-cp310-abi3-win32.whl", hash = "sha256:7326fd717bdc419162a735938d89d4032332bcc3408804012b24ff3a37086071", size = 440216, upload-time = "2026-08-20T16:33:57.99Z" },
290
+ { url = "https://files.pythonhosted.org/packages/0e/4e/12cb93270967a2affff5b3f720694700d4d87712a67afd05c8cb3f6fa52c/protobuf-7.36.0-cp310-abi3-win_amd64.whl", hash = "sha256:1781cc1de61249b750848029bca452c0a8b7e990080316b9bbc2518b2117b488", size = 453731, upload-time = "2026-08-20T16:33:58.951Z" },
291
+ { url = "https://files.pythonhosted.org/packages/01/c3/629999e78d46c1115c11886d51c6bd68c17ce4a944f1ea3e153a91316a33/protobuf-7.36.0-py3-none-any.whl", hash = "sha256:53374d53fc29a67f7dbbf0ade47d7526a0f0137bf0f9c90e48d8a60790ef748c", size = 177024, upload-time = "2026-08-20T16:34:00.053Z" },
292
+ ]
293
+
294
+ [[package]]
295
+ name = "pycparser"
296
+ version = "3.0"
297
+ source = { registry = "https://pypi.org/simple" }
298
+ sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" }
299
+ wheels = [
300
+ { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" },
301
+ ]
302
+
303
+ [[package]]
304
+ name = "pygments"
305
+ version = "2.21.0"
306
+ source = { registry = "https://pypi.org/simple" }
307
+ sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" }
308
+ wheels = [
309
+ { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" },
310
+ ]
311
+
312
+ [[package]]
313
+ name = "pyyaml"
314
+ version = "6.0.3"
315
+ source = { registry = "https://pypi.org/simple" }
316
+ sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
317
+ wheels = [
318
+ { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" },
319
+ { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" },
320
+ { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" },
321
+ { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" },
322
+ { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" },
323
+ { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" },
324
+ { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" },
325
+ { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" },
326
+ { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" },
327
+ { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
328
+ ]
329
+
330
+ [[package]]
331
+ name = "regex"
332
+ version = "2026.7.19"
333
+ source = { registry = "https://pypi.org/simple" }
334
+ sdist = { url = "https://files.pythonhosted.org/packages/20/98/04b13f1ddfb63158025291c02e03eb42fbb7acb51d091d541050eb4e35e8/regex-2026.7.19.tar.gz", hash = "sha256:7e77b324909c1617cbb4c668677e2c6ae13f44d7c1de0d4f15f2e3c10f3315b5", size = 416440, upload-time = "2026-07-19T00:19:48.923Z" }
335
+ wheels = [
336
+ { url = "https://files.pythonhosted.org/packages/3b/b9/d11d7e501ac8fd7d617684423ebb9561e0b998481c1e4cbc0cb212c5d74a/regex-2026.7.19-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2cc3460cedf7579948486eab03bc9ad7089df4d7281c0f47f4afe03e8d13f02d", size = 496778, upload-time = "2026-07-19T00:17:05.677Z" },
337
+ { url = "https://files.pythonhosted.org/packages/3f/a9/a5ab6f312f24318019170dc485d5421fe4f89e43a98640da50d95a8a7041/regex-2026.7.19-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0e9554c8785eac5cffe6300f69a91f58ba72bc88a5f8d661235ad7c6aa5b8ccd", size = 297122, upload-time = "2026-07-19T00:17:07.59Z" },
338
+ { url = "https://files.pythonhosted.org/packages/b3/63/4cab4d7f2d384a144d420b763d97674cb70619c878ea6fcd7640d0e62143/regex-2026.7.19-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7da47a0f248977f08e2cb659ff3c17ddc13a4d39b3a7baa0a81bf5b415430f6", size = 292009, upload-time = "2026-07-19T00:17:09.648Z" },
339
+ { url = "https://files.pythonhosted.org/packages/22/85/102a81b218298957d4ea7d2f084fae537a71add9d6ff93c8e67284c5f45e/regex-2026.7.19-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93db40c8de0815baab96a06e08a984bac71f989d13bab789e382158c5d426797", size = 796708, upload-time = "2026-07-19T00:17:11.542Z" },
340
+ { url = "https://files.pythonhosted.org/packages/78/b5/dc136af5629938a037cd2b304c12240e132ec92f38be8ff9cc89af2a1f2d/regex-2026.7.19-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:66bd62c59a5427746e8c44becae1d9b99d22fb13f30f492083dfb9ad7c45cc18", size = 865651, upload-time = "2026-07-19T00:17:13.312Z" },
341
+ { url = "https://files.pythonhosted.org/packages/e0/75/67402ae3cd9c8c988a4c805d15ee3eef015e7ca4cb112cf3e640fc1f4153/regex-2026.7.19-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1649eb39fcc9ea80c4d2f110fde2b8ab2aef3877b98f02ab9b14e961f418c511", size = 911756, upload-time = "2026-07-19T00:17:15.015Z" },
342
+ { url = "https://files.pythonhosted.org/packages/2a/8e/096d00c7c480ef2ff4265349b14e2261d4ab787ba1f74e2e80d1c58079c3/regex-2026.7.19-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dce8ec9695f531a1b8a6f314fd4b393adcccf2ea861db480cdf97a301d01a68", size = 801798, upload-time = "2026-07-19T00:17:17.208Z" },
343
+ { url = "https://files.pythonhosted.org/packages/f0/41/e7ecac6edb5722417f85cc67eaf386322fbe8acf6918ec2fdc37c20dd9d0/regex-2026.7.19-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3080a7fd38ef049bd489e01c970c97dd84ff446a885b0f1f6b26d9b1ad13ce11", size = 776933, upload-time = "2026-07-19T00:17:19.347Z" },
344
+ { url = "https://files.pythonhosted.org/packages/6f/69/03c9b3f058d66403e0ca2c938696e81d51cd4c6d47ec5265f02f96948d9a/regex-2026.7.19-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d793a7988e04fcb1e2e135567443d82173225d657419ec09414a9b5a145b986", size = 784338, upload-time = "2026-07-19T00:17:21.057Z" },
345
+ { url = "https://files.pythonhosted.org/packages/f6/f7/b38ab3d43f284afbb618fcd15d0e77eb786ae461ce1f6bc7494619ddc0f2/regex-2026.7.19-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e8b0abe7d870f53ca5143895fef7d1041a0c831a140d3dc2c760dd7ba25d4a8b", size = 860452, upload-time = "2026-07-19T00:17:23.119Z" },
346
+ { url = "https://files.pythonhosted.org/packages/15/5c/ff60ef0571121714f3cf9920bc183071e384a10b556d042e0fdb06cc07a5/regex-2026.7.19-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:4e5413bd5f13d3a4e3539ca98f70f75e7fca92518dd7f117f030ebedd10b60cb", size = 765958, upload-time = "2026-07-19T00:17:24.81Z" },
347
+ { url = "https://files.pythonhosted.org/packages/aa/0f/bd34021162c0ab47f9a315bd56cd5642e920c8e5668a75ef6c6a6fca590d/regex-2026.7.19-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:73b133a9e6fb512858e7f065e96f1180aa46646bc74a83aea62f1d314f3dd035", size = 851765, upload-time = "2026-07-19T00:17:26.993Z" },
348
+ { url = "https://files.pythonhosted.org/packages/2a/20/a2ca43edade0595cccfdc98636739f536d9e26898e7dbddc2b9e98898953/regex-2026.7.19-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dbe6493fbd27321b1d1f2dd4f5c7e5bd4d8b1d7cab7f32fd67db3d0b2ed8248a", size = 789714, upload-time = "2026-07-19T00:17:28.699Z" },
349
+ { url = "https://files.pythonhosted.org/packages/5d/47/e02db4015d424fc83c00ea0ac8c5e5ec14397943de9abf909d5ce3a25931/regex-2026.7.19-cp312-cp312-win32.whl", hash = "sha256:ddd67571c10869f65a5d7dde536d1e066e306cc90de57d7de4d5f34802428bb5", size = 267157, upload-time = "2026-07-19T00:17:31.051Z" },
350
+ { url = "https://files.pythonhosted.org/packages/08/8e/c780c131f79b42ed22d1bd7da4096c2c35f813e835acd02ef0f018bd892c/regex-2026.7.19-cp312-cp312-win_amd64.whl", hash = "sha256:e30d40268a28d54ce0437031750497004c22602b8e3ab891f759b795a003b312", size = 277777, upload-time = "2026-07-19T00:17:32.848Z" },
351
+ { url = "https://files.pythonhosted.org/packages/3e/4c/e4d7e086449bdf379d89774bf1f89dc4a41943f3c5a6125a03905b34b5fb/regex-2026.7.19-cp312-cp312-win_arm64.whl", hash = "sha256:de9208bb427130c82a5dbfd104f92c8876fc9559278c880b3002755bbbe9c83d", size = 277136, upload-time = "2026-07-19T00:17:34.803Z" },
352
+ ]
353
+
354
+ [[package]]
355
+ name = "rich"
356
+ version = "15.0.0"
357
+ source = { registry = "https://pypi.org/simple" }
358
+ dependencies = [
359
+ { name = "markdown-it-py" },
360
+ { name = "pygments" },
361
+ ]
362
+ sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
363
+ wheels = [
364
+ { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
365
+ ]
366
+
367
+ [[package]]
368
+ name = "safetensors"
369
+ version = "0.8.0"
370
+ source = { registry = "https://pypi.org/simple" }
371
+ sdist = { url = "https://files.pythonhosted.org/packages/45/06/f955dbbb1859e3bd23c8ac6141af5106e7ad5fedec4a3a6e3d60f94b7001/safetensors-0.8.0.tar.gz", hash = "sha256:fabaf3e0f18a6618d9b36560682562157f77c2b71fcffc7b432be2baed9d753d", size = 325846, upload-time = "2026-06-09T07:52:25.563Z" }
372
+ wheels = [
373
+ { url = "https://files.pythonhosted.org/packages/39/a0/f718cda65b05407d228f97602cf60dca269c979867aa5beb25410de26cd3/safetensors-0.8.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c554f85858e05226d3c2828e32395e677434685d6d94594a41643361c5e837f0", size = 473568, upload-time = "2026-06-09T07:52:18.829Z" },
374
+ { url = "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25", size = 484562, upload-time = "2026-06-09T07:52:17.518Z" },
375
+ { url = "https://files.pythonhosted.org/packages/09/7d/65a7de0af421317bb36a067241e4235fff194eed60b961ed6d3f59a3fc60/safetensors-0.8.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a46e5ff292c356d6991e60942ba7f79817682d3a2cef0702136448cb9c4d235", size = 502844, upload-time = "2026-06-09T07:52:07.624Z" },
376
+ { url = "https://files.pythonhosted.org/packages/91/4f/3175c9d75634e0e0dda0082794193521035edd7c70a6f212bf33ca06ddf4/safetensors-0.8.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4124502b78f03534117c848f87a39b8f31e577b15eff423bf8bfb95f2a8c30d0", size = 511823, upload-time = "2026-06-09T07:52:09.565Z" },
377
+ { url = "https://files.pythonhosted.org/packages/20/87/846c289e7aa2299eff406335717cf43ce8777194ece8aad75772e0411615/safetensors-0.8.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bc0a787ba8a35be368ee3574edfa2b1ad389eebd0a72e482ae275490e3f6c98", size = 633461, upload-time = "2026-06-09T07:52:11.128Z" },
378
+ { url = "https://files.pythonhosted.org/packages/76/22/8d64d9df2c45d5ded401df889d0ad90882804ca172d79ec4f0df8f727fe0/safetensors-0.8.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040070828e36dc8e122178bbbd5830ff9e97920affb84cbe0f46442497bed358", size = 545148, upload-time = "2026-06-09T07:52:13.603Z" },
379
+ { url = "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774", size = 516040, upload-time = "2026-06-09T07:52:16.29Z" },
380
+ { url = "https://files.pythonhosted.org/packages/46/fb/cdaed17ceb2948784fd9c36b6fd3e951b608547cea81a48e8ee6f8cfdfcb/safetensors-0.8.0-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:fcdd41ec4628fee5799f807c73c353629130fbd942aa23d83c623dd6c9d52d78", size = 513832, upload-time = "2026-06-09T07:52:12.37Z" },
381
+ { url = "https://files.pythonhosted.org/packages/0d/49/1e15de264dcc3b77943d2d0c56a95809956883b1c2d6d585c792523f180b/safetensors-0.8.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e9f537aa183a38ace122d27303dcd986b26bd2a7591f9181d7f0c396f4677ca", size = 559930, upload-time = "2026-06-09T07:52:14.743Z" },
382
+ { url = "https://files.pythonhosted.org/packages/2a/43/bf38443278eab4b1be1fce2931e2b012ad9cb7df52ada751d0aab8f7659a/safetensors-0.8.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:87eec7ffed2b809f05a398a8becb7d013f19f7837cd15d9748580d6cf30dbaf4", size = 678670, upload-time = "2026-06-09T07:52:20.032Z" },
383
+ { url = "https://files.pythonhosted.org/packages/72/e3/68cd3fa5b48488e84add63e04cb12f3bc28ae4638c06d4508c6e88823d0e/safetensors-0.8.0-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:4a95ae2b05d7726d751da4ebf626a2ca782b706e101bd894c95bc2450b1cffcc", size = 786679, upload-time = "2026-06-09T07:52:21.322Z" },
384
+ { url = "https://files.pythonhosted.org/packages/29/4b/1c19c509d56e01f4fbb3d0a2e597450f6cc04d1d56cf52defb0a62dfd715/safetensors-0.8.0-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:3ae091f16662658bdc019a4ff6cb4c085bb7d725eb5978b183ffd265863b6d2d", size = 765683, upload-time = "2026-06-09T07:52:22.594Z" },
385
+ { url = "https://files.pythonhosted.org/packages/27/43/41c1621732edd934d868a00d1b891584c892a7b62a9aab82ea5a0a5623ee/safetensors-0.8.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8e080062fcde23be189565e1c3305d16751a218ecf9412c8601e64204eb6f846", size = 722361, upload-time = "2026-06-09T07:52:23.924Z" },
386
+ { url = "https://files.pythonhosted.org/packages/8e/3f/73ccf82579412b4a71c4ca673f10b5f1f888d7cf5af7fe24f27d30307be4/safetensors-0.8.0-cp310-abi3-win32.whl", hash = "sha256:2ddf52eac562eda224f99acfa7889d02968c1fd59a5b011ae7d8137c37e9c02d", size = 342401, upload-time = "2026-06-09T07:52:28.895Z" },
387
+ { url = "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", hash = "sha256:096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f", size = 355540, upload-time = "2026-06-09T07:52:27.832Z" },
388
+ { url = "https://files.pythonhosted.org/packages/8d/fc/7eedc3510d97878876e32774eebbeb61c43f148a96e915c84229a3e967aa/safetensors-0.8.0-cp310-abi3-win_arm64.whl", hash = "sha256:f7838e5135a406ad3e02efdcb8cf2e5397d368b0154537c4fec682dbc544d452", size = 340500, upload-time = "2026-06-09T07:52:26.745Z" },
389
+ ]
390
+
391
+ [[package]]
392
+ name = "shellingham"
393
+ version = "1.5.4"
394
+ source = { registry = "https://pypi.org/simple" }
395
+ sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" }
396
+ wheels = [
397
+ { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
398
+ ]
399
+
400
+ [[package]]
401
+ name = "soundfile"
402
+ version = "0.14.0"
403
+ source = { registry = "https://pypi.org/simple" }
404
+ dependencies = [
405
+ { name = "cffi" },
406
+ { name = "numpy" },
407
+ { name = "typing-extensions" },
408
+ ]
409
+ sdist = { url = "https://files.pythonhosted.org/packages/d2/db/949331952a6fb1c5b12e9de80fd08747966c2039d1a61db4764fbd3981c2/soundfile-0.14.0.tar.gz", hash = "sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11", size = 47842, upload-time = "2026-06-06T08:58:47.869Z" }
410
+ wheels = [
411
+ { url = "https://files.pythonhosted.org/packages/b1/d1/5e338af9ca6ed0786cd5bb03f6d60de1c325728c1189014f3b59aae7403c/soundfile-0.14.0-py2.py3-none-any.whl", hash = "sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8", size = 26799, upload-time = "2026-06-06T08:58:33.269Z" },
412
+ { url = "https://files.pythonhosted.org/packages/7e/72/c6b21e58d3113596e7e8de0a08d6f1d95173492cfbca0a4db14148cbba2a/soundfile-0.14.0-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4", size = 1144568, upload-time = "2026-06-06T08:58:35.231Z" },
413
+ { url = "https://files.pythonhosted.org/packages/63/7a/dfdd6f8c748988427119f75eb860a3cedd858d1aea1fe28f39ad8559ef22/soundfile-0.14.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c", size = 1103726, upload-time = "2026-06-06T08:58:37.948Z" },
414
+ { url = "https://files.pythonhosted.org/packages/4a/f8/fc39fad6f879633461d27394cd1ddaf1f769ffa0597dca35872f51b16461/soundfile-0.14.0-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377", size = 1238050, upload-time = "2026-06-06T08:58:39.932Z" },
415
+ { url = "https://files.pythonhosted.org/packages/7b/a2/70fd4432b924684c372df8b0a45708c36c057ef3596c9eb53e0a806b980b/soundfile-0.14.0-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d", size = 1315963, upload-time = "2026-06-06T08:58:41.716Z" },
416
+ { url = "https://files.pythonhosted.org/packages/d9/34/c9e80783d83eab739a9531fdee03675d53e0bf1b2ccb4bb3af5844675046/soundfile-0.14.0-py2.py3-none-win32.whl", hash = "sha256:0a6ae43c50c71b4e020cc55382925cb89451c1ed1a0c3d0f5d802da269226849", size = 902199, upload-time = "2026-06-06T08:58:43.289Z" },
417
+ { url = "https://files.pythonhosted.org/packages/ed/97/b39c18ac1df45e755ca22b8b00e872929da5d107998a207a5e4ac831bfda/soundfile-0.14.0-py2.py3-none-win_amd64.whl", hash = "sha256:299491d3499460fb1b74bb4bd78b57ffc2d243a5fafa7b6ec1b264875c78453e", size = 1021480, upload-time = "2026-06-06T08:58:45.016Z" },
418
+ { url = "https://files.pythonhosted.org/packages/f4/83/55c65e61cf457805ce2ec157c1c6ae17715d0851aa2374422de0538838ca/soundfile-0.14.0-py2.py3-none-win_arm64.whl", hash = "sha256:e090704718e124e7c844695236f1fce8d18a5e761eaf7c82dfcd124620805f98", size = 888858, upload-time = "2026-06-06T08:58:46.593Z" },
419
+ ]
420
+
421
+ [[package]]
422
+ name = "tokenizers"
423
+ version = "0.23.1"
424
+ source = { registry = "https://pypi.org/simple" }
425
+ dependencies = [
426
+ { name = "huggingface-hub" },
427
+ ]
428
+ sdist = { url = "https://files.pythonhosted.org/packages/c1/60/21f715d9faba5f5407ff759472ade058ec4a507ad62bcea47cb847239a73/tokenizers-0.23.1.tar.gz", hash = "sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa", size = 365748, upload-time = "2026-04-27T14:43:25.606Z" }
429
+ wheels = [
430
+ { url = "https://files.pythonhosted.org/packages/87/39/b87a87d5bb9470610b80a2d31df42fcffeaf35118b8b97952b2aff598cc7/tokenizers-0.23.1-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224", size = 3146732, upload-time = "2026-04-27T14:43:15.427Z" },
431
+ { url = "https://files.pythonhosted.org/packages/e2/6a/068ed9f6e444c9d7e9d55ce134181325700f3d7f30410721bdc8f848d727/tokenizers-0.23.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e", size = 3054954, upload-time = "2026-04-27T14:43:13.745Z" },
432
+ { url = "https://files.pythonhosted.org/packages/6c/36/e006edf031154cba92b8416057d92c3abe3635e4c4b0aa0b5b9bb39dde70/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3", size = 3374081, upload-time = "2026-04-27T14:43:01.241Z" },
433
+ { url = "https://files.pythonhosted.org/packages/a2/ef/7735d226f9c7f874a6bee5e3f27fb25ecabdf207d37b8cf45286d0795893/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6", size = 3247641, upload-time = "2026-04-27T14:43:03.856Z" },
434
+ { url = "https://files.pythonhosted.org/packages/b9/d9/24827036f6e21297bfffda0768e58eb6096a4f411e932964a01707857931/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959", size = 3585624, upload-time = "2026-04-27T14:43:10.664Z" },
435
+ { url = "https://files.pythonhosted.org/packages/0c/9a/22f3582b3a4f49358293a5206e25317621ee4526bfe9cdaa0f07a12e770e/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51", size = 3844062, upload-time = "2026-04-27T14:43:05.643Z" },
436
+ { url = "https://files.pythonhosted.org/packages/7e/65/b8f8814eef95800f20721384136d9a1d22241d50b2874357cb70542c392f/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a", size = 3460098, upload-time = "2026-04-27T14:43:08.854Z" },
437
+ { url = "https://files.pythonhosted.org/packages/0d/d5/1353e5f677ec27c2494fb6a6725e82d56c985f53e90ec511369e7e4f02c6/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4", size = 3346235, upload-time = "2026-04-27T14:43:12.377Z" },
438
+ { url = "https://files.pythonhosted.org/packages/71/89/39b6b8fc073fb6d413d0147aa333dc7eff7be65639ac9d19930a0b21bf33/tokenizers-0.23.1-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a", size = 3426398, upload-time = "2026-04-27T14:43:07.264Z" },
439
+ { url = "https://files.pythonhosted.org/packages/0f/80/127c854da64827e5b79264ce524993a90dddcb320e5cd42412c5c02f9e8a/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e", size = 9823279, upload-time = "2026-04-27T14:43:17.222Z" },
440
+ { url = "https://files.pythonhosted.org/packages/fe/ba/44c2502feb1a058f096ddfb4e0996ef3225a01a388e1a9b094e91689fe93/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288", size = 9644986, upload-time = "2026-04-27T14:43:19.45Z" },
441
+ { url = "https://files.pythonhosted.org/packages/9e/c1/464019a9fb059870bfe4eebb4ba12208f3042035e258bf5e782906bd3847/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4", size = 9976181, upload-time = "2026-04-27T14:43:21.463Z" },
442
+ { url = "https://files.pythonhosted.org/packages/79/94/3ac1432bda31626071e9b6a12709b97ae05131c804b94c8f3ac622c5da32/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96", size = 10113853, upload-time = "2026-04-27T14:43:23.617Z" },
443
+ { url = "https://files.pythonhosted.org/packages/6a/dd/631b21433c771b1382535326f0eca80b9c9cee2e64961dd993bc9ac4669e/tokenizers-0.23.1-cp310-abi3-win32.whl", hash = "sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948", size = 2536263, upload-time = "2026-04-27T14:43:29.888Z" },
444
+ { url = "https://files.pythonhosted.org/packages/97/c9/2553f72aaf65a2797d4229e37fa7fbe38ffbf3e32912d31bdd78b3323e59/tokenizers-0.23.1-cp310-abi3-win_amd64.whl", hash = "sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7", size = 2798223, upload-time = "2026-04-27T14:43:28.51Z" },
445
+ { url = "https://files.pythonhosted.org/packages/cd/2b/2be299bab55fc595e3d38567edb1a87f86e594842968fa9515a07bdcf422/tokenizers-0.23.1-cp310-abi3-win_arm64.whl", hash = "sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9", size = 2664127, upload-time = "2026-04-27T14:43:26.949Z" },
446
+ ]
447
+
448
+ [[package]]
449
+ name = "tqdm"
450
+ version = "4.70.0"
451
+ source = { registry = "https://pypi.org/simple" }
452
+ dependencies = [
453
+ { name = "colorama", marker = "sys_platform == 'win32'" },
454
+ ]
455
+ sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" }
456
+ wheels = [
457
+ { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" },
458
+ ]
459
+
460
+ [[package]]
461
+ name = "transformers"
462
+ version = "5.16.1"
463
+ source = { registry = "https://pypi.org/simple" }
464
+ dependencies = [
465
+ { name = "huggingface-hub" },
466
+ { name = "numpy" },
467
+ { name = "packaging" },
468
+ { name = "pyyaml" },
469
+ { name = "regex" },
470
+ { name = "safetensors" },
471
+ { name = "tokenizers" },
472
+ { name = "tqdm" },
473
+ { name = "typer" },
474
+ ]
475
+ sdist = { url = "https://files.pythonhosted.org/packages/ad/2e/ba418680ab901dae269360bb8642485eae04f1af91ee2ebb8bd6f3607305/transformers-5.16.1.tar.gz", hash = "sha256:17b0eac726ddc55e84ac58946063e0c6d37fd000c456b581f050ea0f4e822869", size = 9650542, upload-time = "2026-08-26T14:48:58.789Z" }
476
+ wheels = [
477
+ { url = "https://files.pythonhosted.org/packages/0d/4d/ee3728674c0bbc637bb4af88ccf0be697f92e4e90b55f5dc110c44d61b61/transformers-5.16.1-py3-none-any.whl", hash = "sha256:2f2d5b98a5ad3718713653734298fa620754ed683702a635ebb587df3ed29c7e", size = 12080592, upload-time = "2026-08-26T14:48:55.083Z" },
478
+ ]
479
+
480
+ [[package]]
481
+ name = "typer"
482
+ version = "0.27.2"
483
+ source = { registry = "https://pypi.org/simple" }
484
+ dependencies = [
485
+ { name = "annotated-doc" },
486
+ { name = "colorama", marker = "sys_platform == 'win32'" },
487
+ { name = "rich" },
488
+ { name = "shellingham" },
489
+ ]
490
+ sdist = { url = "https://files.pythonhosted.org/packages/16/f7/57713ba479fd405eb76de31404b2c744c289e336b2d999511ebf51e496f7/typer-0.27.2.tar.gz", hash = "sha256:269b7eb9d3c202ca84b4bc9618cb04ebb43d3d4d1e567e4c768607232c05f945", size = 204045, upload-time = "2026-08-28T10:26:55.046Z" }
491
+ wheels = [
492
+ { url = "https://files.pythonhosted.org/packages/dc/bf/205d0004930ede8f542fb58f601526fccf4ae7626075ca1e6c4de5d3d652/typer-0.27.2-py3-none-any.whl", hash = "sha256:b3a5fc4342d5fc8fda8fc3010b1cf117e9249aab7fae800c2eff62fd3842d97d", size = 123130, upload-time = "2026-08-28T10:26:53.752Z" },
493
+ ]
494
+
495
+ [[package]]
496
+ name = "typing-extensions"
497
+ version = "4.16.0"
498
+ source = { registry = "https://pypi.org/simple" }
499
+ sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
500
+ wheels = [
501
+ { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
502
+ ]
503
+
504
+ [[package]]
505
+ name = "whisper-medium-int8-litert-runtime"
506
+ version = "0.1.0"
507
+ source = { virtual = "." }
508
+ dependencies = [
509
+ { name = "ai-edge-litert" },
510
+ { name = "numpy" },
511
+ { name = "soundfile" },
512
+ { name = "transformers" },
513
+ ]
514
+
515
+ [package.metadata]
516
+ requires-dist = [
517
+ { name = "ai-edge-litert", specifier = "==2.2.0" },
518
+ { name = "numpy", specifier = "==2.5.2" },
519
+ { name = "soundfile", specifier = "==0.14.0" },
520
+ { name = "transformers", specifier = "==5.16.1" },
521
+ ]