danielbodart commited on
Commit
8c2f9b0
·
verified ·
1 Parent(s): 64a319b

Upload folder using huggingface_hub

Browse files
config.json ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_type": "fastconformer_rnnt",
3
+ "source_model": "nvidia/nemotron-speech-streaming-en-0.6b",
4
+ "format": "coreml",
5
+
6
+ "audio": {
7
+ "sample_rate": 16000,
8
+ "sample_format": "S16_LE",
9
+ "bytes_per_second": 32000
10
+ },
11
+
12
+ "preprocessor": {
13
+ "n_mels": 128,
14
+ "n_fft": 512,
15
+ "hop_length": 160,
16
+ "win_length": 400,
17
+ "window": "hann",
18
+ "preemph": 0.97,
19
+ "dither": 1e-05,
20
+ "normalize": null,
21
+ "pad_to": 0,
22
+ "mel_norm": "slaney",
23
+ "mel_layout": "band_major",
24
+ "_comment": "mel_layout=band_major means output shape is [n_mels, n_frames], not [n_frames, n_mels]. Mel preprocessing runs on the host (not in CoreML)."
25
+ },
26
+
27
+ "encoder": {
28
+ "model_file": "encoder.mlmodelc",
29
+ "layers": 24,
30
+ "dim": 1024,
31
+ "chunk_mel_frames": 56,
32
+ "pre_encode_cache_frames": 9,
33
+ "total_input_frames": 65,
34
+ "compute_units": "CPU_AND_NE",
35
+ "compute_precision": "FLOAT16",
36
+ "cache_last_channel_shape": [1, 24, 70, 1024],
37
+ "cache_last_time_shape": [1, 24, 1024, 8],
38
+ "_comment_cache_layout": "batch-first [B, L, ...] for CoreML. NeMo uses layer-first [L, B, ...] internally; the wrapper transposes.",
39
+ "inputs": {
40
+ "audio_signal": {"dtype": "float32", "shape": [1, 128, 65]},
41
+ "cache_last_channel": {"dtype": "float32", "shape": [1, 24, 70, 1024], "init": "zeros"},
42
+ "cache_last_time": {"dtype": "float32", "shape": [1, 24, 1024, 8], "init": "zeros"},
43
+ "cache_last_channel_len": {"dtype": "int32", "shape": [1], "init": "zeros"}
44
+ },
45
+ "outputs": {
46
+ "encoded": {"dtype": "float16", "shape": [1, 1024, 7]},
47
+ "encoded_length": {"dtype": "int32", "shape": [1]},
48
+ "cache_channel_out": {"dtype": "float16", "shape": [1, 24, 70, 1024], "_comment": "feed back as cache_last_channel"},
49
+ "cache_time_out": {"dtype": "float16", "shape": [1, 24, 1024, 8], "_comment": "feed back as cache_last_time"},
50
+ "cache_len_out": {"dtype": "int32", "shape": [1], "_comment": "feed back as cache_last_channel_len"}
51
+ },
52
+ "_comment_strides": "CoreML output MLMultiArrays may have non-contiguous strides due to ANE alignment padding (e.g. stride=32 for dim size 7). Callers must use stride-aware copy, not flat memcpy."
53
+ },
54
+
55
+ "decoder": {
56
+ "model_file": "decoder.mlmodelc",
57
+ "prediction_layers": 2,
58
+ "prediction_hidden": 640,
59
+ "vocab_size": 1025,
60
+ "blank_id": 1024,
61
+ "max_symbols_per_frame": 10,
62
+ "compute_units": "CPU_ONLY",
63
+ "compute_precision": "FLOAT16",
64
+ "inputs": {
65
+ "encoder_outputs": {"dtype": "float32", "shape": [1, 1024, 1], "_comment": "single encoder frame"},
66
+ "targets": {"dtype": "int32", "shape": [1, 1], "_comment": "previous non-blank token (blank_id for first)"},
67
+ "target_length": {"dtype": "int32", "shape": [1], "value": 1},
68
+ "input_states_1": {"dtype": "float32", "shape": [2, 1, 640], "init": "zeros"},
69
+ "input_states_2": {"dtype": "float32", "shape": [2, 1, 640], "init": "zeros"}
70
+ },
71
+ "outputs": {
72
+ "outputs": {"dtype": "float16", "shape": [1, 1025], "_comment": "logits over vocab, argmax to get token"},
73
+ "output_states_1": {"dtype": "float16", "shape": [2, 1, 640], "_comment": "feed back as input_states_1"},
74
+ "output_states_2": {"dtype": "float16", "shape": [2, 1, 640], "_comment": "feed back as input_states_2"}
75
+ }
76
+ },
77
+
78
+ "streaming": {
79
+ "chunk_duration_ms": 560,
80
+ "chunk_audio_samples": 8960,
81
+ "algorithm": "Cache-aware streaming FastConformer. Feed 560ms audio chunks. For each chunk: compute mel (56 frames), prepend 9 cached frames, run encoder. Then for each encoder output frame, run RNNT greedy decode: feed one encoder frame to decoder, argmax logits, if not blank emit token and loop (up to max_symbols_per_frame), if blank move to next frame. Feed cache outputs back as next chunk's cache inputs. Feed decoder states back for next symbol/frame."
82
+ },
83
+
84
+ "ane_profile": {
85
+ "encoder_ane_ops": 1486,
86
+ "encoder_cpu_ops": 111,
87
+ "encoder_ane_pct": 93.0,
88
+ "cpu_op_breakdown": "select (72, attention masking), softmax (24, one per conformer layer), expand_dims/logical/cast (15, control flow)",
89
+ "decoder": "100% CPU (CPU_ONLY compute units)",
90
+ "inference_speed": "~15.5x realtime on Apple Silicon (M-series)"
91
+ }
92
+ }
fp16/decoder.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:89c4f741f02efc6cb362c7dc94893fb832783cc608d54542752a74653c36cb2f
3
+ size 243
fp16/decoder.mlmodelc/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0711cd32735530249dba2d75b3b9f57fd5d3d25b215bcef244c2e949f194a41f
3
+ size 565
fp16/decoder.mlmodelc/metadata.json ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "storagePrecision" : "Float16",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float16",
10
+ "formattedType" : "MultiArray (Float16 1 × 1025)",
11
+ "shortDescription" : "",
12
+ "shape" : "[1, 1025]",
13
+ "name" : "outputs",
14
+ "type" : "MultiArray"
15
+ },
16
+ {
17
+ "hasShapeFlexibility" : "0",
18
+ "isOptional" : "0",
19
+ "dataType" : "Float16",
20
+ "formattedType" : "MultiArray (Float16 2 × 1 × 640)",
21
+ "shortDescription" : "",
22
+ "shape" : "[2, 1, 640]",
23
+ "name" : "output_states_1",
24
+ "type" : "MultiArray"
25
+ },
26
+ {
27
+ "hasShapeFlexibility" : "0",
28
+ "isOptional" : "0",
29
+ "dataType" : "Float16",
30
+ "formattedType" : "MultiArray (Float16 2 × 1 × 640)",
31
+ "shortDescription" : "",
32
+ "shape" : "[2, 1, 640]",
33
+ "name" : "output_states_2",
34
+ "type" : "MultiArray"
35
+ }
36
+ ],
37
+ "modelParameters" : [
38
+
39
+ ],
40
+ "specificationVersion" : 9,
41
+ "mlProgramOperationTypeHistogram" : {
42
+ "Ios18.linear" : 3,
43
+ "Ios18.expandDims" : 2,
44
+ "Select" : 1,
45
+ "Ios18.relu" : 1,
46
+ "Ios18.lstm" : 2,
47
+ "Ios18.gather" : 1,
48
+ "Stack" : 2,
49
+ "Ios18.add" : 2,
50
+ "Ios18.transpose" : 3,
51
+ "Ios18.cast" : 6,
52
+ "Ios18.squeeze" : 6,
53
+ "Ios18.greaterEqual" : 1,
54
+ "Split" : 2,
55
+ "Identity" : 1
56
+ },
57
+ "computePrecision" : "Mixed (Float16, Int16, Int32)",
58
+ "isUpdatable" : "0",
59
+ "stateSchema" : [
60
+
61
+ ],
62
+ "availability" : {
63
+ "macOS" : "15.0",
64
+ "tvOS" : "18.0",
65
+ "visionOS" : "2.0",
66
+ "watchOS" : "11.0",
67
+ "iOS" : "18.0",
68
+ "macCatalyst" : "18.0"
69
+ },
70
+ "modelType" : {
71
+ "name" : "MLModelType_mlProgram"
72
+ },
73
+ "userDefinedMetadata" : {
74
+ "com.github.apple.coremltools.conversion_date" : "2026-03-22",
75
+ "com.github.apple.coremltools.source" : "torch==2.7.1",
76
+ "com.github.apple.coremltools.version" : "9.0b1",
77
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
78
+ },
79
+ "inputSchema" : [
80
+ {
81
+ "hasShapeFlexibility" : "0",
82
+ "isOptional" : "0",
83
+ "dataType" : "Float32",
84
+ "formattedType" : "MultiArray (Float32 1 × 1024 × 1)",
85
+ "shortDescription" : "",
86
+ "shape" : "[1, 1024, 1]",
87
+ "name" : "encoder_outputs",
88
+ "type" : "MultiArray"
89
+ },
90
+ {
91
+ "hasShapeFlexibility" : "0",
92
+ "isOptional" : "0",
93
+ "dataType" : "Int32",
94
+ "formattedType" : "MultiArray (Int32 1 × 1)",
95
+ "shortDescription" : "",
96
+ "shape" : "[1, 1]",
97
+ "name" : "targets",
98
+ "type" : "MultiArray"
99
+ },
100
+ {
101
+ "hasShapeFlexibility" : "0",
102
+ "isOptional" : "0",
103
+ "dataType" : "Int32",
104
+ "formattedType" : "MultiArray (Int32 1)",
105
+ "shortDescription" : "",
106
+ "shape" : "[1]",
107
+ "name" : "target_length",
108
+ "type" : "MultiArray"
109
+ },
110
+ {
111
+ "hasShapeFlexibility" : "0",
112
+ "isOptional" : "0",
113
+ "dataType" : "Float32",
114
+ "formattedType" : "MultiArray (Float32 2 × 1 × 640)",
115
+ "shortDescription" : "",
116
+ "shape" : "[2, 1, 640]",
117
+ "name" : "input_states_1",
118
+ "type" : "MultiArray"
119
+ },
120
+ {
121
+ "hasShapeFlexibility" : "0",
122
+ "isOptional" : "0",
123
+ "dataType" : "Float32",
124
+ "formattedType" : "MultiArray (Float32 2 × 1 × 640)",
125
+ "shortDescription" : "",
126
+ "shape" : "[2, 1, 640]",
127
+ "name" : "input_states_2",
128
+ "type" : "MultiArray"
129
+ }
130
+ ],
131
+ "generatedClassName" : "decoder",
132
+ "method" : "predict"
133
+ }
134
+ ]
fp16/decoder.mlmodelc/model.mil ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.3)
2
+ [buildInfo = dict<string, string>({{"coremlc-component-MIL", "3510.2.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.7.1"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
3
+ {
4
+ func main<ios18>(tensor<fp32, [1, 1024, 1]> encoder_outputs, tensor<fp32, [2, 1, 640]> input_states_1, tensor<fp32, [2, 1, 640]> input_states_2, tensor<int32, [1]> target_length, tensor<int32, [1, 1]> targets) {
5
+ int32 y_batch_dims_0 = const()[name = string("y_batch_dims_0"), val = int32(0)];
6
+ bool y_validate_indices_0 = const()[name = string("y_validate_indices_0"), val = bool(false)];
7
+ tensor<fp16, [1025, 640]> decoder_prediction_embed_weight_to_fp16 = const()[name = string("decoder_prediction_embed_weight_to_fp16"), val = tensor<fp16, [1025, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(64)))];
8
+ string targets_to_int16_dtype_0 = const()[name = string("targets_to_int16_dtype_0"), val = string("int16")];
9
+ string cast_4_dtype_0 = const()[name = string("cast_4_dtype_0"), val = string("int32")];
10
+ int32 greater_equal_0_y_0 = const()[name = string("greater_equal_0_y_0"), val = int32(0)];
11
+ tensor<int16, [1, 1]> targets_to_int16 = cast(dtype = targets_to_int16_dtype_0, x = targets)[name = string("cast_10")];
12
+ tensor<int32, [1, 1]> cast_4 = cast(dtype = cast_4_dtype_0, x = targets_to_int16)[name = string("cast_9")];
13
+ tensor<bool, [1, 1]> greater_equal_0 = greater_equal(x = cast_4, y = greater_equal_0_y_0)[name = string("greater_equal_0")];
14
+ int32 slice_by_index_0 = const()[name = string("slice_by_index_0"), val = int32(1025)];
15
+ tensor<int32, [1, 1]> add_2 = add(x = cast_4, y = slice_by_index_0)[name = string("add_2")];
16
+ tensor<int32, [1, 1]> select_0 = select(a = cast_4, b = add_2, cond = greater_equal_0)[name = string("select_0")];
17
+ int32 y_cast_fp16_cast_uint16_axis_0 = const()[name = string("y_cast_fp16_cast_uint16_axis_0"), val = int32(0)];
18
+ string select_0_to_int16_dtype_0 = const()[name = string("select_0_to_int16_dtype_0"), val = string("int16")];
19
+ tensor<int16, [1, 1]> select_0_to_int16 = cast(dtype = select_0_to_int16_dtype_0, x = select_0)[name = string("cast_8")];
20
+ tensor<fp16, [1, 1, 640]> y_cast_fp16_cast_uint16_cast_uint16 = gather(axis = y_cast_fp16_cast_uint16_axis_0, batch_dims = y_batch_dims_0, indices = select_0_to_int16, validate_indices = y_validate_indices_0, x = decoder_prediction_embed_weight_to_fp16)[name = string("y_cast_fp16_cast_uint16_cast_uint16")];
21
+ tensor<int32, [3]> input_3_perm_0 = const()[name = string("input_3_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
22
+ int32 split_0_num_splits_0 = const()[name = string("split_0_num_splits_0"), val = int32(2)];
23
+ int32 split_0_axis_0 = const()[name = string("split_0_axis_0"), val = int32(0)];
24
+ string input_states_1_to_fp16_dtype_0 = const()[name = string("input_states_1_to_fp16_dtype_0"), val = string("fp16")];
25
+ tensor<fp16, [2, 1, 640]> input_states_1_to_fp16 = cast(dtype = input_states_1_to_fp16_dtype_0, x = input_states_1)[name = string("cast_7")];
26
+ tensor<fp16, [1, 1, 640]> split_0_cast_fp16_0, tensor<fp16, [1, 1, 640]> split_0_cast_fp16_1 = split(axis = split_0_axis_0, num_splits = split_0_num_splits_0, x = input_states_1_to_fp16)[name = string("split_0_cast_fp16")];
27
+ int32 split_1_num_splits_0 = const()[name = string("split_1_num_splits_0"), val = int32(2)];
28
+ int32 split_1_axis_0 = const()[name = string("split_1_axis_0"), val = int32(0)];
29
+ string input_states_2_to_fp16_dtype_0 = const()[name = string("input_states_2_to_fp16_dtype_0"), val = string("fp16")];
30
+ tensor<fp16, [2, 1, 640]> input_states_2_to_fp16 = cast(dtype = input_states_2_to_fp16_dtype_0, x = input_states_2)[name = string("cast_6")];
31
+ tensor<fp16, [1, 1, 640]> split_1_cast_fp16_0, tensor<fp16, [1, 1, 640]> split_1_cast_fp16_1 = split(axis = split_1_axis_0, num_splits = split_1_num_splits_0, x = input_states_2_to_fp16)[name = string("split_1_cast_fp16")];
32
+ tensor<int32, [1]> input_5_lstm_layer_0_lstm_h0_squeeze_axes_0 = const()[name = string("input_5_lstm_layer_0_lstm_h0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
33
+ tensor<fp16, [1, 640]> input_5_lstm_layer_0_lstm_h0_squeeze_cast_fp16 = squeeze(axes = input_5_lstm_layer_0_lstm_h0_squeeze_axes_0, x = split_0_cast_fp16_0)[name = string("input_5_lstm_layer_0_lstm_h0_squeeze_cast_fp16")];
34
+ tensor<int32, [1]> input_5_lstm_layer_0_lstm_c0_squeeze_axes_0 = const()[name = string("input_5_lstm_layer_0_lstm_c0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
35
+ tensor<fp16, [1, 640]> input_5_lstm_layer_0_lstm_c0_squeeze_cast_fp16 = squeeze(axes = input_5_lstm_layer_0_lstm_c0_squeeze_axes_0, x = split_1_cast_fp16_0)[name = string("input_5_lstm_layer_0_lstm_c0_squeeze_cast_fp16")];
36
+ string input_5_lstm_layer_0_direction_0 = const()[name = string("input_5_lstm_layer_0_direction_0"), val = string("forward")];
37
+ bool input_5_lstm_layer_0_output_sequence_0 = const()[name = string("input_5_lstm_layer_0_output_sequence_0"), val = bool(true)];
38
+ string input_5_lstm_layer_0_recurrent_activation_0 = const()[name = string("input_5_lstm_layer_0_recurrent_activation_0"), val = string("sigmoid")];
39
+ string input_5_lstm_layer_0_cell_activation_0 = const()[name = string("input_5_lstm_layer_0_cell_activation_0"), val = string("tanh")];
40
+ string input_5_lstm_layer_0_activation_0 = const()[name = string("input_5_lstm_layer_0_activation_0"), val = string("tanh")];
41
+ tensor<fp16, [2560, 640]> concat_1_to_fp16 = const()[name = string("concat_1_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(1312128)))];
42
+ tensor<fp16, [2560, 640]> concat_2_to_fp16 = const()[name = string("concat_2_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(4588992)))];
43
+ tensor<fp16, [2560]> concat_0_to_fp16 = const()[name = string("concat_0_to_fp16"), val = tensor<fp16, [2560]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(7865856)))];
44
+ tensor<fp16, [1, 1, 640]> input_3_cast_fp16 = transpose(perm = input_3_perm_0, x = y_cast_fp16_cast_uint16_cast_uint16)[name = string("transpose_4")];
45
+ tensor<fp16, [1, 1, 640]> input_5_lstm_layer_0_cast_fp16_0, tensor<fp16, [1, 640]> input_5_lstm_layer_0_cast_fp16_1, tensor<fp16, [1, 640]> input_5_lstm_layer_0_cast_fp16_2 = lstm(activation = input_5_lstm_layer_0_activation_0, bias = concat_0_to_fp16, cell_activation = input_5_lstm_layer_0_cell_activation_0, direction = input_5_lstm_layer_0_direction_0, initial_c = input_5_lstm_layer_0_lstm_c0_squeeze_cast_fp16, initial_h = input_5_lstm_layer_0_lstm_h0_squeeze_cast_fp16, output_sequence = input_5_lstm_layer_0_output_sequence_0, recurrent_activation = input_5_lstm_layer_0_recurrent_activation_0, weight_hh = concat_2_to_fp16, weight_ih = concat_1_to_fp16, x = input_3_cast_fp16)[name = string("input_5_lstm_layer_0_cast_fp16")];
46
+ tensor<int32, [1]> input_5_lstm_h0_squeeze_axes_0 = const()[name = string("input_5_lstm_h0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
47
+ tensor<fp16, [1, 640]> input_5_lstm_h0_squeeze_cast_fp16 = squeeze(axes = input_5_lstm_h0_squeeze_axes_0, x = split_0_cast_fp16_1)[name = string("input_5_lstm_h0_squeeze_cast_fp16")];
48
+ tensor<int32, [1]> input_5_lstm_c0_squeeze_axes_0 = const()[name = string("input_5_lstm_c0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
49
+ tensor<fp16, [1, 640]> input_5_lstm_c0_squeeze_cast_fp16 = squeeze(axes = input_5_lstm_c0_squeeze_axes_0, x = split_1_cast_fp16_1)[name = string("input_5_lstm_c0_squeeze_cast_fp16")];
50
+ string input_5_direction_0 = const()[name = string("input_5_direction_0"), val = string("forward")];
51
+ bool input_5_output_sequence_0 = const()[name = string("input_5_output_sequence_0"), val = bool(true)];
52
+ string input_5_recurrent_activation_0 = const()[name = string("input_5_recurrent_activation_0"), val = string("sigmoid")];
53
+ string input_5_cell_activation_0 = const()[name = string("input_5_cell_activation_0"), val = string("tanh")];
54
+ string input_5_activation_0 = const()[name = string("input_5_activation_0"), val = string("tanh")];
55
+ tensor<fp16, [2560, 640]> concat_4_to_fp16 = const()[name = string("concat_4_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(7871040)))];
56
+ tensor<fp16, [2560, 640]> concat_5_to_fp16 = const()[name = string("concat_5_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(11147904)))];
57
+ tensor<fp16, [2560]> concat_3_to_fp16 = const()[name = string("concat_3_to_fp16"), val = tensor<fp16, [2560]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(14424768)))];
58
+ tensor<fp16, [1, 1, 640]> input_5_cast_fp16_0, tensor<fp16, [1, 640]> input_5_cast_fp16_1, tensor<fp16, [1, 640]> input_5_cast_fp16_2 = lstm(activation = input_5_activation_0, bias = concat_3_to_fp16, cell_activation = input_5_cell_activation_0, direction = input_5_direction_0, initial_c = input_5_lstm_c0_squeeze_cast_fp16, initial_h = input_5_lstm_h0_squeeze_cast_fp16, output_sequence = input_5_output_sequence_0, recurrent_activation = input_5_recurrent_activation_0, weight_hh = concat_5_to_fp16, weight_ih = concat_4_to_fp16, x = input_5_lstm_layer_0_cast_fp16_0)[name = string("input_5_cast_fp16")];
59
+ int32 obj_3_axis_0 = const()[name = string("obj_3_axis_0"), val = int32(0)];
60
+ tensor<fp16, [2, 1, 640]> output_states_1 = stack(axis = obj_3_axis_0, values = (input_5_lstm_layer_0_cast_fp16_1, input_5_cast_fp16_1))[name = string("obj_3_cast_fp16")];
61
+ int32 obj_axis_0 = const()[name = string("obj_axis_0"), val = int32(0)];
62
+ tensor<fp16, [2, 1, 640]> output_states_2 = stack(axis = obj_axis_0, values = (input_5_lstm_layer_0_cast_fp16_2, input_5_cast_fp16_2))[name = string("obj_cast_fp16")];
63
+ tensor<int32, [3]> transpose_1_perm_0 = const()[name = string("transpose_1_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
64
+ tensor<int32, [3]> input_7_perm_0 = const()[name = string("input_7_perm_0"), val = tensor<int32, [3]>([0, 2, 1])];
65
+ string encoder_outputs_to_fp16_dtype_0 = const()[name = string("encoder_outputs_to_fp16_dtype_0"), val = string("fp16")];
66
+ tensor<fp16, [640, 1024]> joint_enc_weight_to_fp16 = const()[name = string("joint_enc_weight_to_fp16"), val = tensor<fp16, [640, 1024]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(14429952)))];
67
+ tensor<fp16, [640]> joint_enc_bias_to_fp16 = const()[name = string("joint_enc_bias_to_fp16"), val = tensor<fp16, [640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(15740736)))];
68
+ tensor<fp16, [1, 1024, 1]> encoder_outputs_to_fp16 = cast(dtype = encoder_outputs_to_fp16_dtype_0, x = encoder_outputs)[name = string("cast_5")];
69
+ tensor<fp16, [1, 1, 1024]> input_7_cast_fp16 = transpose(perm = input_7_perm_0, x = encoder_outputs_to_fp16)[name = string("transpose_2")];
70
+ tensor<fp16, [1, 1, 640]> linear_0_cast_fp16 = linear(bias = joint_enc_bias_to_fp16, weight = joint_enc_weight_to_fp16, x = input_7_cast_fp16)[name = string("linear_0_cast_fp16")];
71
+ tensor<fp16, [640, 640]> joint_pred_weight_to_fp16 = const()[name = string("joint_pred_weight_to_fp16"), val = tensor<fp16, [640, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(15742080)))];
72
+ tensor<fp16, [640]> joint_pred_bias_to_fp16 = const()[name = string("joint_pred_bias_to_fp16"), val = tensor<fp16, [640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(16561344)))];
73
+ tensor<fp16, [1, 1, 640]> transpose_1_cast_fp16 = transpose(perm = transpose_1_perm_0, x = input_5_cast_fp16_0)[name = string("transpose_3")];
74
+ tensor<fp16, [1, 1, 640]> linear_1_cast_fp16 = linear(bias = joint_pred_bias_to_fp16, weight = joint_pred_weight_to_fp16, x = transpose_1_cast_fp16)[name = string("linear_1_cast_fp16")];
75
+ tensor<int32, [1]> var_78_axes_0 = const()[name = string("op_78_axes_0"), val = tensor<int32, [1]>([2])];
76
+ tensor<fp16, [1, 1, 1, 640]> var_78_cast_fp16 = expand_dims(axes = var_78_axes_0, x = linear_0_cast_fp16)[name = string("op_78_cast_fp16")];
77
+ tensor<int32, [1]> var_80_axes_0 = const()[name = string("op_80_axes_0"), val = tensor<int32, [1]>([1])];
78
+ tensor<fp16, [1, 1, 1, 640]> var_80_cast_fp16 = expand_dims(axes = var_80_axes_0, x = linear_1_cast_fp16)[name = string("op_80_cast_fp16")];
79
+ tensor<fp16, [1, 1, 1, 640]> input_11_cast_fp16 = add(x = var_78_cast_fp16, y = var_80_cast_fp16)[name = string("input_11_cast_fp16")];
80
+ tensor<fp16, [1, 1, 1, 640]> input_13_cast_fp16 = relu(x = input_11_cast_fp16)[name = string("input_13_cast_fp16")];
81
+ tensor<fp16, [1025, 640]> joint_joint_net_2_weight_to_fp16 = const()[name = string("joint_joint_net_2_weight_to_fp16"), val = tensor<fp16, [1025, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(16562688)))];
82
+ tensor<fp16, [1025]> joint_joint_net_2_bias_to_fp16 = const()[name = string("joint_joint_net_2_bias_to_fp16"), val = tensor<fp16, [1025]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(17874752)))];
83
+ tensor<fp16, [1, 1, 1, 1025]> linear_2_cast_fp16 = linear(bias = joint_joint_net_2_bias_to_fp16, weight = joint_joint_net_2_weight_to_fp16, x = input_13_cast_fp16)[name = string("linear_2_cast_fp16")];
84
+ tensor<int32, [1]> var_91_axes_0 = const()[name = string("op_91_axes_0"), val = tensor<int32, [1]>([1])];
85
+ tensor<fp16, [1, 1, 1025]> var_91_cast_fp16 = squeeze(axes = var_91_axes_0, x = linear_2_cast_fp16)[name = string("op_91_cast_fp16")];
86
+ tensor<int32, [1]> var_93_axes_0 = const()[name = string("op_93_axes_0"), val = tensor<int32, [1]>([1])];
87
+ tensor<fp16, [1, 1025]> outputs = squeeze(axes = var_93_axes_0, x = var_91_cast_fp16)[name = string("op_93_cast_fp16")];
88
+ tensor<int32, [1]> target_length_tmp = identity(x = target_length)[name = string("target_length_tmp")];
89
+ } -> (outputs, output_states_1, output_states_2);
90
+ }
fp16/decoder.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:96cac67a1352e45a2418284779dbd5efe5865159b7b92f328247e5ed31485f52
3
+ size 17876866
fp16/decoder.mlpackage/Data/com.apple.CoreML/model.mlmodel ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ee08abd75c1af1efc33b494a228e6cfdb25ec762021850a59b9009a7834421b0
3
+ size 14788
fp16/decoder.mlpackage/Data/com.apple.CoreML/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:96cac67a1352e45a2418284779dbd5efe5865159b7b92f328247e5ed31485f52
3
+ size 17876866
fp16/decoder.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "716E82BC-EEDE-4F16-85FB-29B774C8BD4D": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Weights",
7
+ "name": "weights",
8
+ "path": "com.apple.CoreML/weights"
9
+ },
10
+ "BF97D4BC-AF3A-49CF-AC07-8E15221C4E82": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Specification",
13
+ "name": "model.mlmodel",
14
+ "path": "com.apple.CoreML/model.mlmodel"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "BF97D4BC-AF3A-49CF-AC07-8E15221C4E82"
18
+ }
fp16/encoder.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:53e793cb315f6944401df77bdfc332cd08303e72b27f2875394e001f1a4f5898
3
+ size 243
fp16/encoder.mlmodelc/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:46d6d38cce3cc26144a2a7cee72b7f41cb7b1b422ac7ce010a17daa7ea2cc981
3
+ size 616
fp16/encoder.mlmodelc/metadata.json ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "storagePrecision" : "Mixed (Float16, Int32)",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float16",
10
+ "formattedType" : "MultiArray (Float16 1 × 1024 × 7)",
11
+ "shortDescription" : "",
12
+ "shape" : "[1, 1024, 7]",
13
+ "name" : "encoded",
14
+ "type" : "MultiArray"
15
+ },
16
+ {
17
+ "hasShapeFlexibility" : "0",
18
+ "isOptional" : "0",
19
+ "dataType" : "Int32",
20
+ "formattedType" : "MultiArray (Int32 1)",
21
+ "shortDescription" : "",
22
+ "shape" : "[1]",
23
+ "name" : "encoded_length",
24
+ "type" : "MultiArray"
25
+ },
26
+ {
27
+ "hasShapeFlexibility" : "0",
28
+ "isOptional" : "0",
29
+ "dataType" : "Float16",
30
+ "formattedType" : "MultiArray (Float16 1 × 24 × 70 × 1024)",
31
+ "shortDescription" : "",
32
+ "shape" : "[1, 24, 70, 1024]",
33
+ "name" : "cache_channel_out",
34
+ "type" : "MultiArray"
35
+ },
36
+ {
37
+ "hasShapeFlexibility" : "0",
38
+ "isOptional" : "0",
39
+ "dataType" : "Float16",
40
+ "formattedType" : "MultiArray (Float16 1 × 24 × 1024 × 8)",
41
+ "shortDescription" : "",
42
+ "shape" : "[1, 24, 1024, 8]",
43
+ "name" : "cache_time_out",
44
+ "type" : "MultiArray"
45
+ },
46
+ {
47
+ "hasShapeFlexibility" : "0",
48
+ "isOptional" : "0",
49
+ "dataType" : "Int32",
50
+ "formattedType" : "MultiArray (Int32 1)",
51
+ "shortDescription" : "",
52
+ "shape" : "[1]",
53
+ "name" : "cache_len_out",
54
+ "type" : "MultiArray"
55
+ }
56
+ ],
57
+ "modelParameters" : [
58
+
59
+ ],
60
+ "specificationVersion" : 9,
61
+ "mlProgramOperationTypeHistogram" : {
62
+ "Ios18.expandDims" : 5,
63
+ "Ios18.mul" : 97,
64
+ "Ios18.softmax" : 24,
65
+ "Ios18.matmul" : 72,
66
+ "Ios18.logicalNot" : 2,
67
+ "Ios18.sigmoid" : 24,
68
+ "Split" : 24,
69
+ "Ios18.greaterEqual" : 1,
70
+ "Select" : 72,
71
+ "Tile" : 1,
72
+ "Ios18.add" : 170,
73
+ "Ios18.layerNorm" : 144,
74
+ "Ios18.reshape" : 145,
75
+ "Pad" : 27,
76
+ "Ios18.linear" : 193,
77
+ "Ios18.conv" : 77,
78
+ "Ios18.relu" : 3,
79
+ "Ios18.concat" : 72,
80
+ "Ios18.logicalAnd" : 3,
81
+ "Ios18.silu" : 72,
82
+ "Ios18.transpose" : 224,
83
+ "Ios18.cast" : 5,
84
+ "Stack" : 2,
85
+ "Ios18.clip" : 1,
86
+ "Ios18.sliceByIndex" : 147
87
+ },
88
+ "computePrecision" : "Mixed (Float16, Int32)",
89
+ "isUpdatable" : "0",
90
+ "stateSchema" : [
91
+
92
+ ],
93
+ "availability" : {
94
+ "macOS" : "15.0",
95
+ "tvOS" : "18.0",
96
+ "visionOS" : "2.0",
97
+ "watchOS" : "11.0",
98
+ "iOS" : "18.0",
99
+ "macCatalyst" : "18.0"
100
+ },
101
+ "modelType" : {
102
+ "name" : "MLModelType_mlProgram"
103
+ },
104
+ "userDefinedMetadata" : {
105
+ "com.github.apple.coremltools.conversion_date" : "2026-03-22",
106
+ "com.github.apple.coremltools.source" : "torch==2.7.1",
107
+ "com.github.apple.coremltools.version" : "9.0b1",
108
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
109
+ },
110
+ "inputSchema" : [
111
+ {
112
+ "hasShapeFlexibility" : "0",
113
+ "isOptional" : "0",
114
+ "dataType" : "Float32",
115
+ "formattedType" : "MultiArray (Float32 1 × 128 × 65)",
116
+ "shortDescription" : "",
117
+ "shape" : "[1, 128, 65]",
118
+ "name" : "audio_signal",
119
+ "type" : "MultiArray"
120
+ },
121
+ {
122
+ "hasShapeFlexibility" : "0",
123
+ "isOptional" : "0",
124
+ "dataType" : "Float32",
125
+ "formattedType" : "MultiArray (Float32 1 × 24 × 70 × 1024)",
126
+ "shortDescription" : "",
127
+ "shape" : "[1, 24, 70, 1024]",
128
+ "name" : "cache_last_channel",
129
+ "type" : "MultiArray"
130
+ },
131
+ {
132
+ "hasShapeFlexibility" : "0",
133
+ "isOptional" : "0",
134
+ "dataType" : "Float32",
135
+ "formattedType" : "MultiArray (Float32 1 × 24 × 1024 × 8)",
136
+ "shortDescription" : "",
137
+ "shape" : "[1, 24, 1024, 8]",
138
+ "name" : "cache_last_time",
139
+ "type" : "MultiArray"
140
+ },
141
+ {
142
+ "hasShapeFlexibility" : "0",
143
+ "isOptional" : "0",
144
+ "dataType" : "Int32",
145
+ "formattedType" : "MultiArray (Int32 1)",
146
+ "shortDescription" : "",
147
+ "shape" : "[1]",
148
+ "name" : "cache_last_channel_len",
149
+ "type" : "MultiArray"
150
+ }
151
+ ],
152
+ "generatedClassName" : "encoder",
153
+ "method" : "predict"
154
+ }
155
+ ]
fp16/encoder.mlmodelc/model.mil ADDED
The diff for this file is too large to render. See raw diff
 
fp16/encoder.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d39fe49fba8083210400f198545b5e65d8319107f1eb82167896c52d5b491843
3
+ size 1175523648
fp16/encoder.mlpackage/Data/com.apple.CoreML/model.mlmodel ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a4fe03b263645addcfaa907ea1950a770d5c24a63981bcc96b704cea65d71bb8
3
+ size 698056
fp16/encoder.mlpackage/Data/com.apple.CoreML/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d39fe49fba8083210400f198545b5e65d8319107f1eb82167896c52d5b491843
3
+ size 1175523648
fp16/encoder.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "46E9C84C-1261-481E-995D-D1CC48828B73": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Specification",
7
+ "name": "model.mlmodel",
8
+ "path": "com.apple.CoreML/model.mlmodel"
9
+ },
10
+ "4C4FF97E-3218-47F5-89B3-4A9A6CB8FFCD": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Weights",
13
+ "name": "weights",
14
+ "path": "com.apple.CoreML/weights"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "46E9C84C-1261-481E-995D-D1CC48828B73"
18
+ }
fp16/metadata.json ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "nvidia/nemotron-speech-streaming-en-0.6b",
3
+ "sample_rate": 16000,
4
+ "mel_features": 128,
5
+ "chunk_mel_frames": 56,
6
+ "pre_encode_cache": 9,
7
+ "total_mel_frames": 65,
8
+ "vocab_size": 1024,
9
+ "blank_idx": 1024,
10
+ "encoder_dim": 1024,
11
+ "decoder_hidden": 640,
12
+ "decoder_layers": 2,
13
+ "cache_channel_shape": [
14
+ 24,
15
+ 1,
16
+ 70,
17
+ 1024
18
+ ],
19
+ "cache_time_shape": [
20
+ 24,
21
+ 1,
22
+ 1024,
23
+ 8
24
+ ]
25
+ }