aoiandroid alexwengg commited on
Commit
f1bc4df
·
0 Parent(s):

Duplicate from FluidInference/parakeet-tdt-ctc-110m-coreml

Browse files

Co-authored-by: Alex Weng <alexwengg@users.noreply.huggingface.co>

.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
Decoder.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dc7174d25586869ffb33e6c519cfcc882bf04b2f0e527b8b84a38fe4d469f618
3
+ size 243
Decoder.mlmodelc/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:407846e00c895ee447ee5795eb61c0437b4d5ed8ae33e603173fb3f79d871151
3
+ size 562
Decoder.mlmodelc/metadata.json ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "shortDescription" : "Parakeet TDT-CTC decoder (RNNT prediction network)",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32 1 × 640 × 1)",
11
+ "shortDescription" : "",
12
+ "shape" : "[1, 640, 1]",
13
+ "name" : "decoder",
14
+ "type" : "MultiArray"
15
+ },
16
+ {
17
+ "hasShapeFlexibility" : "0",
18
+ "isOptional" : "0",
19
+ "dataType" : "Float32",
20
+ "formattedType" : "MultiArray (Float32 1 × 1 × 640)",
21
+ "shortDescription" : "",
22
+ "shape" : "[1, 1, 640]",
23
+ "name" : "h_out",
24
+ "type" : "MultiArray"
25
+ },
26
+ {
27
+ "hasShapeFlexibility" : "0",
28
+ "isOptional" : "0",
29
+ "dataType" : "Float32",
30
+ "formattedType" : "MultiArray (Float32 1 × 1 × 640)",
31
+ "shortDescription" : "",
32
+ "shape" : "[1, 1, 640]",
33
+ "name" : "c_out",
34
+ "type" : "MultiArray"
35
+ }
36
+ ],
37
+ "storagePrecision" : "Float16",
38
+ "modelParameters" : [
39
+
40
+ ],
41
+ "author" : "Fluid Inference",
42
+ "specificationVersion" : 8,
43
+ "mlProgramOperationTypeHistogram" : {
44
+ "Select" : 1,
45
+ "Ios17.squeeze" : 2,
46
+ "Ios17.gather" : 1,
47
+ "Ios17.cast" : 8,
48
+ "Ios17.lstm" : 1,
49
+ "Ios17.transpose" : 2,
50
+ "Ios17.add" : 1,
51
+ "Identity" : 1,
52
+ "Ios17.greaterEqual" : 1,
53
+ "Ios17.expandDims" : 2
54
+ },
55
+ "computePrecision" : "Mixed (Float16, Float32, Int16, Int32)",
56
+ "isUpdatable" : "0",
57
+ "stateSchema" : [
58
+
59
+ ],
60
+ "availability" : {
61
+ "macOS" : "14.0",
62
+ "tvOS" : "17.0",
63
+ "visionOS" : "1.0",
64
+ "watchOS" : "10.0",
65
+ "iOS" : "17.0",
66
+ "macCatalyst" : "17.0"
67
+ },
68
+ "modelType" : {
69
+ "name" : "MLModelType_mlProgram"
70
+ },
71
+ "inputSchema" : [
72
+ {
73
+ "hasShapeFlexibility" : "0",
74
+ "isOptional" : "0",
75
+ "dataType" : "Int32",
76
+ "formattedType" : "MultiArray (Int32 1 × 1)",
77
+ "shortDescription" : "",
78
+ "shape" : "[1, 1]",
79
+ "name" : "targets",
80
+ "type" : "MultiArray"
81
+ },
82
+ {
83
+ "hasShapeFlexibility" : "0",
84
+ "isOptional" : "0",
85
+ "dataType" : "Int32",
86
+ "formattedType" : "MultiArray (Int32 1)",
87
+ "shortDescription" : "",
88
+ "shape" : "[1]",
89
+ "name" : "target_length",
90
+ "type" : "MultiArray"
91
+ },
92
+ {
93
+ "hasShapeFlexibility" : "0",
94
+ "isOptional" : "0",
95
+ "dataType" : "Float32",
96
+ "formattedType" : "MultiArray (Float32 1 × 1 × 640)",
97
+ "shortDescription" : "",
98
+ "shape" : "[1, 1, 640]",
99
+ "name" : "h_in",
100
+ "type" : "MultiArray"
101
+ },
102
+ {
103
+ "hasShapeFlexibility" : "0",
104
+ "isOptional" : "0",
105
+ "dataType" : "Float32",
106
+ "formattedType" : "MultiArray (Float32 1 × 1 × 640)",
107
+ "shortDescription" : "",
108
+ "shape" : "[1, 1, 640]",
109
+ "name" : "c_in",
110
+ "type" : "MultiArray"
111
+ }
112
+ ],
113
+ "userDefinedMetadata" : {
114
+ "com.github.apple.coremltools.conversion_date" : "2026-03-16",
115
+ "com.github.apple.coremltools.source" : "torch==2.7.0",
116
+ "com.github.apple.coremltools.version" : "9.0b1",
117
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
118
+ },
119
+ "generatedClassName" : "Decoder",
120
+ "method" : "predict"
121
+ }
122
+ ]
Decoder.mlmodelc/model.mil ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.0)
2
+ [buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3510.2.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.7.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
3
+ {
4
+ func main<ios17>(tensor<fp32, [1, 1, 640]> c_in, tensor<fp32, [1, 1, 640]> h_in, tensor<int32, [1]> target_length, tensor<int32, [1, 1]> targets) {
5
+ tensor<int32, []> y_batch_dims_0 = const()[name = tensor<string, []>("y_batch_dims_0"), val = tensor<int32, []>(0)];
6
+ tensor<bool, []> y_validate_indices_0 = const()[name = tensor<string, []>("y_validate_indices_0"), val = tensor<bool, []>(false)];
7
+ tensor<fp16, [1025, 640]> module_prediction_embed_weight_to_fp16 = const()[name = tensor<string, []>("module_prediction_embed_weight_to_fp16"), val = tensor<fp16, [1025, 640]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
8
+ tensor<string, []> targets_to_int16_dtype_0 = const()[name = tensor<string, []>("targets_to_int16_dtype_0"), val = tensor<string, []>("int16")];
9
+ tensor<string, []> cast_1_dtype_0 = const()[name = tensor<string, []>("cast_1_dtype_0"), val = tensor<string, []>("int32")];
10
+ tensor<int32, []> greater_equal_0_y_0 = const()[name = tensor<string, []>("greater_equal_0_y_0"), val = tensor<int32, []>(0)];
11
+ tensor<int16, [1, 1]> targets_to_int16 = cast(dtype = targets_to_int16_dtype_0, x = targets)[name = tensor<string, []>("cast_9")];
12
+ tensor<int32, [1, 1]> cast_1 = cast(dtype = cast_1_dtype_0, x = targets_to_int16)[name = tensor<string, []>("cast_8")];
13
+ tensor<bool, [1, 1]> greater_equal_0 = greater_equal(x = cast_1, y = greater_equal_0_y_0)[name = tensor<string, []>("greater_equal_0")];
14
+ tensor<int32, []> slice_by_index_0 = const()[name = tensor<string, []>("slice_by_index_0"), val = tensor<int32, []>(1025)];
15
+ tensor<int32, [1, 1]> add_1 = add(x = cast_1, y = slice_by_index_0)[name = tensor<string, []>("add_1")];
16
+ tensor<int32, [1, 1]> select_0 = select(a = cast_1, b = add_1, cond = greater_equal_0)[name = tensor<string, []>("select_0")];
17
+ tensor<int32, []> y_cast_fp16_cast_uint16_axis_0 = const()[name = tensor<string, []>("y_cast_fp16_cast_uint16_axis_0"), val = tensor<int32, []>(0)];
18
+ tensor<string, []> select_0_to_int16_dtype_0 = const()[name = tensor<string, []>("select_0_to_int16_dtype_0"), val = tensor<string, []>("int16")];
19
+ tensor<int16, [1, 1]> select_0_to_int16 = cast(dtype = select_0_to_int16_dtype_0, x = select_0)[name = tensor<string, []>("cast_7")];
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 = module_prediction_embed_weight_to_fp16)[name = tensor<string, []>("y_cast_fp16_cast_uint16_cast_uint16")];
21
+ tensor<int32, [3]> input_3_perm_0 = const()[name = tensor<string, []>("input_3_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
22
+ tensor<int32, [1]> input_lstm_h0_squeeze_axes_0 = const()[name = tensor<string, []>("input_lstm_h0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
23
+ tensor<string, []> h_in_to_fp16_dtype_0 = const()[name = tensor<string, []>("h_in_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
24
+ tensor<fp16, [1, 1, 640]> h_in_to_fp16 = cast(dtype = h_in_to_fp16_dtype_0, x = h_in)[name = tensor<string, []>("cast_6")];
25
+ tensor<fp16, [1, 640]> input_lstm_h0_squeeze_cast_fp16 = squeeze(axes = input_lstm_h0_squeeze_axes_0, x = h_in_to_fp16)[name = tensor<string, []>("input_lstm_h0_squeeze_cast_fp16")];
26
+ tensor<int32, [1]> input_lstm_c0_squeeze_axes_0 = const()[name = tensor<string, []>("input_lstm_c0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
27
+ tensor<string, []> c_in_to_fp16_dtype_0 = const()[name = tensor<string, []>("c_in_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
28
+ tensor<fp16, [1, 1, 640]> c_in_to_fp16 = cast(dtype = c_in_to_fp16_dtype_0, x = c_in)[name = tensor<string, []>("cast_5")];
29
+ tensor<fp16, [1, 640]> input_lstm_c0_squeeze_cast_fp16 = squeeze(axes = input_lstm_c0_squeeze_axes_0, x = c_in_to_fp16)[name = tensor<string, []>("input_lstm_c0_squeeze_cast_fp16")];
30
+ tensor<string, []> input_direction_0 = const()[name = tensor<string, []>("input_direction_0"), val = tensor<string, []>("forward")];
31
+ tensor<bool, []> input_output_sequence_0 = const()[name = tensor<string, []>("input_output_sequence_0"), val = tensor<bool, []>(true)];
32
+ tensor<string, []> input_recurrent_activation_0 = const()[name = tensor<string, []>("input_recurrent_activation_0"), val = tensor<string, []>("sigmoid")];
33
+ tensor<string, []> input_cell_activation_0 = const()[name = tensor<string, []>("input_cell_activation_0"), val = tensor<string, []>("tanh")];
34
+ tensor<string, []> input_activation_0 = const()[name = tensor<string, []>("input_activation_0"), val = tensor<string, []>("tanh")];
35
+ tensor<fp16, [2560, 640]> concat_1_to_fp16 = const()[name = tensor<string, []>("concat_1_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1312128)))];
36
+ tensor<fp16, [2560, 640]> concat_2_to_fp16 = const()[name = tensor<string, []>("concat_2_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(4588992)))];
37
+ tensor<fp16, [2560]> concat_0_to_fp16 = const()[name = tensor<string, []>("concat_0_to_fp16"), val = tensor<fp16, [2560]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(7865856)))];
38
+ tensor<fp16, [1, 1, 640]> input_3_cast_fp16 = transpose(perm = input_3_perm_0, x = y_cast_fp16_cast_uint16_cast_uint16)[name = tensor<string, []>("transpose_2")];
39
+ tensor<fp16, [1, 1, 640]> input_cast_fp16_0, tensor<fp16, [1, 640]> input_cast_fp16_1, tensor<fp16, [1, 640]> input_cast_fp16_2 = lstm(activation = input_activation_0, bias = concat_0_to_fp16, cell_activation = input_cell_activation_0, direction = input_direction_0, initial_c = input_lstm_c0_squeeze_cast_fp16, initial_h = input_lstm_h0_squeeze_cast_fp16, output_sequence = input_output_sequence_0, recurrent_activation = input_recurrent_activation_0, weight_hh = concat_2_to_fp16, weight_ih = concat_1_to_fp16, x = input_3_cast_fp16)[name = tensor<string, []>("input_cast_fp16")];
40
+ tensor<int32, [1]> obj_3_axes_0 = const()[name = tensor<string, []>("obj_3_axes_0"), val = tensor<int32, [1]>([0])];
41
+ tensor<fp16, [1, 1, 640]> obj_3_cast_fp16 = expand_dims(axes = obj_3_axes_0, x = input_cast_fp16_1)[name = tensor<string, []>("obj_3_cast_fp16")];
42
+ tensor<string, []> obj_3_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("obj_3_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
43
+ tensor<int32, [1]> obj_axes_0 = const()[name = tensor<string, []>("obj_axes_0"), val = tensor<int32, [1]>([0])];
44
+ tensor<fp16, [1, 1, 640]> obj_cast_fp16 = expand_dims(axes = obj_axes_0, x = input_cast_fp16_2)[name = tensor<string, []>("obj_cast_fp16")];
45
+ tensor<string, []> obj_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("obj_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
46
+ tensor<int32, [3]> transpose_0_perm_0 = const()[name = tensor<string, []>("transpose_0_perm_0"), val = tensor<int32, [3]>([1, 2, 0])];
47
+ tensor<string, []> transpose_0_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("transpose_0_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
48
+ tensor<fp16, [1, 640, 1]> transpose_0_cast_fp16 = transpose(perm = transpose_0_perm_0, x = input_cast_fp16_0)[name = tensor<string, []>("transpose_1")];
49
+ tensor<fp32, [1, 640, 1]> decoder = cast(dtype = transpose_0_cast_fp16_to_fp32_dtype_0, x = transpose_0_cast_fp16)[name = tensor<string, []>("cast_2")];
50
+ tensor<fp32, [1, 1, 640]> c_out = cast(dtype = obj_cast_fp16_to_fp32_dtype_0, x = obj_cast_fp16)[name = tensor<string, []>("cast_3")];
51
+ tensor<fp32, [1, 1, 640]> h_out = cast(dtype = obj_3_cast_fp16_to_fp32_dtype_0, x = obj_3_cast_fp16)[name = tensor<string, []>("cast_4")];
52
+ tensor<int32, [1]> target_length_tmp = identity(x = target_length)[name = tensor<string, []>("target_length_tmp")];
53
+ } -> (decoder, h_out, c_out);
54
+ }
Decoder.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dd90b58597ee2c172c672dffe13b1110898ba07394c1a15efc96cc8c6b18411b
3
+ size 7871040
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:b9ef589f858f577a3e0d3df097ede3efe407d7152d3022a965a7e78744f84404
3
+ size 7973
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:dd90b58597ee2c172c672dffe13b1110898ba07394c1a15efc96cc8c6b18411b
3
+ size 7871040
Decoder.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "5F11CFA7-5015-4466-A6AA-0AE65C954D95": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Weights",
7
+ "name": "weights",
8
+ "path": "com.apple.CoreML/weights"
9
+ },
10
+ "D180DDE9-941D-455C-B839-91C0843D02DE": {
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": "D180DDE9-941D-455C-B839-91C0843D02DE"
18
+ }
JointDecision.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:42f7757cc6603cf025dd490169edef879c355b62a178243e1ca4d538e762af2f
3
+ size 243
JointDecision.mlmodelc/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9ef957d12add316f594b2e8766202ce2b06341e3e5ebaea35b9ff2c3d7a0f4f7
3
+ size 583
JointDecision.mlmodelc/metadata.json ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "shortDescription" : "Parakeet TDT-CTC single-step joint decision",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Int32",
10
+ "formattedType" : "MultiArray (Int32 1 × 1 × 1)",
11
+ "shortDescription" : "",
12
+ "shape" : "[1, 1, 1]",
13
+ "name" : "token_id",
14
+ "type" : "MultiArray"
15
+ },
16
+ {
17
+ "hasShapeFlexibility" : "0",
18
+ "isOptional" : "0",
19
+ "dataType" : "Float32",
20
+ "formattedType" : "MultiArray (Float32 1 × 1 × 1)",
21
+ "shortDescription" : "",
22
+ "shape" : "[1, 1, 1]",
23
+ "name" : "token_prob",
24
+ "type" : "MultiArray"
25
+ },
26
+ {
27
+ "hasShapeFlexibility" : "0",
28
+ "isOptional" : "0",
29
+ "dataType" : "Int32",
30
+ "formattedType" : "MultiArray (Int32 1 × 1 × 1)",
31
+ "shortDescription" : "",
32
+ "shape" : "[1, 1, 1]",
33
+ "name" : "duration",
34
+ "type" : "MultiArray"
35
+ },
36
+ {
37
+ "hasShapeFlexibility" : "0",
38
+ "isOptional" : "0",
39
+ "dataType" : "Int32",
40
+ "formattedType" : "MultiArray (Int32 1 × 1 × 1 × 64)",
41
+ "shortDescription" : "",
42
+ "shape" : "[1, 1, 1, 64]",
43
+ "name" : "top_k_ids",
44
+ "type" : "MultiArray"
45
+ },
46
+ {
47
+ "hasShapeFlexibility" : "0",
48
+ "isOptional" : "0",
49
+ "dataType" : "Float32",
50
+ "formattedType" : "MultiArray (Float32 1 × 1 × 1 × 64)",
51
+ "shortDescription" : "",
52
+ "shape" : "[1, 1, 1, 64]",
53
+ "name" : "top_k_logits",
54
+ "type" : "MultiArray"
55
+ }
56
+ ],
57
+ "storagePrecision" : "Float16",
58
+ "modelParameters" : [
59
+
60
+ ],
61
+ "author" : "Fluid Inference",
62
+ "specificationVersion" : 8,
63
+ "mlProgramOperationTypeHistogram" : {
64
+ "Ios17.reduceArgmax" : 2,
65
+ "Ios17.linear" : 3,
66
+ "Ios17.transpose" : 2,
67
+ "Ios17.sliceByIndex" : 2,
68
+ "Ios17.add" : 1,
69
+ "Ios17.topk" : 1,
70
+ "Ios16.relu" : 1,
71
+ "Ios16.softmax" : 1,
72
+ "Ios17.expandDims" : 3,
73
+ "Ios17.squeeze" : 1,
74
+ "Ios17.cast" : 6,
75
+ "Ios17.gatherAlongAxis" : 1
76
+ },
77
+ "computePrecision" : "Mixed (Float16, Float32, Int16, Int32, UInt16)",
78
+ "isUpdatable" : "0",
79
+ "stateSchema" : [
80
+
81
+ ],
82
+ "availability" : {
83
+ "macOS" : "14.0",
84
+ "tvOS" : "17.0",
85
+ "visionOS" : "1.0",
86
+ "watchOS" : "10.0",
87
+ "iOS" : "17.0",
88
+ "macCatalyst" : "17.0"
89
+ },
90
+ "modelType" : {
91
+ "name" : "MLModelType_mlProgram"
92
+ },
93
+ "inputSchema" : [
94
+ {
95
+ "hasShapeFlexibility" : "0",
96
+ "isOptional" : "0",
97
+ "dataType" : "Float32",
98
+ "formattedType" : "MultiArray (Float32 1 × 512 × 1)",
99
+ "shortDescription" : "",
100
+ "shape" : "[1, 512, 1]",
101
+ "name" : "encoder_step",
102
+ "type" : "MultiArray"
103
+ },
104
+ {
105
+ "hasShapeFlexibility" : "0",
106
+ "isOptional" : "0",
107
+ "dataType" : "Float32",
108
+ "formattedType" : "MultiArray (Float32 1 × 640 × 1)",
109
+ "shortDescription" : "",
110
+ "shape" : "[1, 640, 1]",
111
+ "name" : "decoder_step",
112
+ "type" : "MultiArray"
113
+ }
114
+ ],
115
+ "userDefinedMetadata" : {
116
+ "com.github.apple.coremltools.conversion_date" : "2026-03-16",
117
+ "com.github.apple.coremltools.source" : "torch==2.7.0",
118
+ "com.github.apple.coremltools.version" : "9.0b1",
119
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
120
+ },
121
+ "generatedClassName" : "JointDecisionSingleStep",
122
+ "method" : "predict"
123
+ }
124
+ ]
JointDecision.mlmodelc/model.mil ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.0)
2
+ [buildInfo = dict<tensor<string, []>, tensor<string, []>>({{"coremlc-component-MIL", "3510.2.1"}, {"coremlc-version", "3500.32.1"}, {"coremltools-component-torch", "2.7.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "9.0b1"}})]
3
+ {
4
+ func main<ios17>(tensor<fp32, [1, 640, 1]> decoder_step, tensor<fp32, [1, 512, 1]> encoder_step) {
5
+ tensor<int32, [3]> input_1_perm_0 = const()[name = tensor<string, []>("input_1_perm_0"), val = tensor<int32, [3]>([0, 2, 1])];
6
+ tensor<string, []> encoder_step_to_fp16_dtype_0 = const()[name = tensor<string, []>("encoder_step_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
7
+ tensor<int32, [3]> input_3_perm_0 = const()[name = tensor<string, []>("input_3_perm_0"), val = tensor<int32, [3]>([0, 2, 1])];
8
+ tensor<string, []> decoder_step_to_fp16_dtype_0 = const()[name = tensor<string, []>("decoder_step_to_fp16_dtype_0"), val = tensor<string, []>("fp16")];
9
+ tensor<fp16, [640, 512]> joint_module_enc_weight_to_fp16 = const()[name = tensor<string, []>("joint_module_enc_weight_to_fp16"), val = tensor<fp16, [640, 512]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(64)))];
10
+ tensor<fp16, [640]> joint_module_enc_bias_to_fp16 = const()[name = tensor<string, []>("joint_module_enc_bias_to_fp16"), val = tensor<fp16, [640]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(655488)))];
11
+ tensor<fp16, [1, 512, 1]> encoder_step_to_fp16 = cast(dtype = encoder_step_to_fp16_dtype_0, x = encoder_step)[name = tensor<string, []>("cast_5")];
12
+ tensor<fp16, [1, 1, 512]> input_1_cast_fp16 = transpose(perm = input_1_perm_0, x = encoder_step_to_fp16)[name = tensor<string, []>("transpose_1")];
13
+ tensor<fp16, [1, 1, 640]> linear_0_cast_fp16 = linear(bias = joint_module_enc_bias_to_fp16, weight = joint_module_enc_weight_to_fp16, x = input_1_cast_fp16)[name = tensor<string, []>("linear_0_cast_fp16")];
14
+ tensor<fp16, [640, 640]> joint_module_pred_weight_to_fp16 = const()[name = tensor<string, []>("joint_module_pred_weight_to_fp16"), val = tensor<fp16, [640, 640]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(656832)))];
15
+ tensor<fp16, [640]> joint_module_pred_bias_to_fp16 = const()[name = tensor<string, []>("joint_module_pred_bias_to_fp16"), val = tensor<fp16, [640]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1476096)))];
16
+ tensor<fp16, [1, 640, 1]> decoder_step_to_fp16 = cast(dtype = decoder_step_to_fp16_dtype_0, x = decoder_step)[name = tensor<string, []>("cast_4")];
17
+ tensor<fp16, [1, 1, 640]> input_3_cast_fp16 = transpose(perm = input_3_perm_0, x = decoder_step_to_fp16)[name = tensor<string, []>("transpose_0")];
18
+ tensor<fp16, [1, 1, 640]> linear_1_cast_fp16 = linear(bias = joint_module_pred_bias_to_fp16, weight = joint_module_pred_weight_to_fp16, x = input_3_cast_fp16)[name = tensor<string, []>("linear_1_cast_fp16")];
19
+ tensor<int32, [1]> var_23_axes_0 = const()[name = tensor<string, []>("op_23_axes_0"), val = tensor<int32, [1]>([2])];
20
+ tensor<fp16, [1, 1, 1, 640]> var_23_cast_fp16 = expand_dims(axes = var_23_axes_0, x = linear_0_cast_fp16)[name = tensor<string, []>("op_23_cast_fp16")];
21
+ tensor<int32, [1]> var_24_axes_0 = const()[name = tensor<string, []>("op_24_axes_0"), val = tensor<int32, [1]>([1])];
22
+ tensor<fp16, [1, 1, 1, 640]> var_24_cast_fp16 = expand_dims(axes = var_24_axes_0, x = linear_1_cast_fp16)[name = tensor<string, []>("op_24_cast_fp16")];
23
+ tensor<fp16, [1, 1, 1, 640]> input_5_cast_fp16 = add(x = var_23_cast_fp16, y = var_24_cast_fp16)[name = tensor<string, []>("input_5_cast_fp16")];
24
+ tensor<fp16, [1, 1, 1, 640]> input_7_cast_fp16 = relu(x = input_5_cast_fp16)[name = tensor<string, []>("input_7_cast_fp16")];
25
+ tensor<fp16, [1030, 640]> joint_module_joint_net_2_weight_to_fp16 = const()[name = tensor<string, []>("joint_module_joint_net_2_weight_to_fp16"), val = tensor<fp16, [1030, 640]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(1477440)))];
26
+ tensor<fp16, [1030]> joint_module_joint_net_2_bias_to_fp16 = const()[name = tensor<string, []>("joint_module_joint_net_2_bias_to_fp16"), val = tensor<fp16, [1030]>(BLOBFILE(path = tensor<string, []>("@model_path/weights/weight.bin"), offset = tensor<uint64, []>(2795904)))];
27
+ tensor<fp16, [1, 1, 1, 1030]> linear_2_cast_fp16 = linear(bias = joint_module_joint_net_2_bias_to_fp16, weight = joint_module_joint_net_2_weight_to_fp16, x = input_7_cast_fp16)[name = tensor<string, []>("linear_2_cast_fp16")];
28
+ tensor<int32, [4]> token_logits_begin_0 = const()[name = tensor<string, []>("token_logits_begin_0"), val = tensor<int32, [4]>([0, 0, 0, 0])];
29
+ tensor<int32, [4]> token_logits_end_0 = const()[name = tensor<string, []>("token_logits_end_0"), val = tensor<int32, [4]>([1, 1, 1, 1025])];
30
+ tensor<bool, [4]> token_logits_end_mask_0 = const()[name = tensor<string, []>("token_logits_end_mask_0"), val = tensor<bool, [4]>([true, true, true, false])];
31
+ tensor<fp16, [1, 1, 1, 1025]> token_logits_cast_fp16 = slice_by_index(begin = token_logits_begin_0, end = token_logits_end_0, end_mask = token_logits_end_mask_0, x = linear_2_cast_fp16)[name = tensor<string, []>("token_logits_cast_fp16")];
32
+ tensor<int32, [4]> duration_logits_begin_0 = const()[name = tensor<string, []>("duration_logits_begin_0"), val = tensor<int32, [4]>([0, 0, 0, 1025])];
33
+ tensor<int32, [4]> duration_logits_end_0 = const()[name = tensor<string, []>("duration_logits_end_0"), val = tensor<int32, [4]>([1, 1, 1, 1030])];
34
+ tensor<bool, [4]> duration_logits_end_mask_0 = const()[name = tensor<string, []>("duration_logits_end_mask_0"), val = tensor<bool, [4]>([true, true, true, true])];
35
+ tensor<fp16, [1, 1, 1, 5]> duration_logits_cast_fp16 = slice_by_index(begin = duration_logits_begin_0, end = duration_logits_end_0, end_mask = duration_logits_end_mask_0, x = linear_2_cast_fp16)[name = tensor<string, []>("duration_logits_cast_fp16")];
36
+ tensor<int32, []> var_43_axis_0 = const()[name = tensor<string, []>("op_43_axis_0"), val = tensor<int32, []>(-1)];
37
+ tensor<bool, []> var_43_keep_dims_0 = const()[name = tensor<string, []>("op_43_keep_dims_0"), val = tensor<bool, []>(false)];
38
+ tensor<string, []> var_43_output_dtype_0 = const()[name = tensor<string, []>("op_43_output_dtype_0"), val = tensor<string, []>("int32")];
39
+ tensor<int32, [1, 1, 1]> token_id = reduce_argmax(axis = var_43_axis_0, keep_dims = var_43_keep_dims_0, output_dtype = var_43_output_dtype_0, x = token_logits_cast_fp16)[name = tensor<string, []>("op_43_cast_fp16")];
40
+ tensor<int32, []> var_49 = const()[name = tensor<string, []>("op_49"), val = tensor<int32, []>(-1)];
41
+ tensor<fp16, [1, 1, 1, 1025]> token_probs_all_cast_fp16 = softmax(axis = var_49, x = token_logits_cast_fp16)[name = tensor<string, []>("token_probs_all_cast_fp16")];
42
+ tensor<int32, [1]> var_58_axes_0 = const()[name = tensor<string, []>("op_58_axes_0"), val = tensor<int32, [1]>([-1])];
43
+ tensor<int32, [1, 1, 1, 1]> var_58 = expand_dims(axes = var_58_axes_0, x = token_id)[name = tensor<string, []>("op_58")];
44
+ tensor<int32, []> var_59 = const()[name = tensor<string, []>("op_59"), val = tensor<int32, []>(-1)];
45
+ tensor<bool, []> var_61_validate_indices_0 = const()[name = tensor<string, []>("op_61_validate_indices_0"), val = tensor<bool, []>(false)];
46
+ tensor<string, []> var_58_to_int16_dtype_0 = const()[name = tensor<string, []>("op_58_to_int16_dtype_0"), val = tensor<string, []>("int16")];
47
+ tensor<int16, [1, 1, 1, 1]> var_58_to_int16 = cast(dtype = var_58_to_int16_dtype_0, x = var_58)[name = tensor<string, []>("cast_3")];
48
+ tensor<fp16, [1, 1, 1, 1]> var_61_cast_fp16_cast_int16 = gather_along_axis(axis = var_59, indices = var_58_to_int16, validate_indices = var_61_validate_indices_0, x = token_probs_all_cast_fp16)[name = tensor<string, []>("op_61_cast_fp16_cast_int16")];
49
+ tensor<int32, [1]> var_63_axes_0 = const()[name = tensor<string, []>("op_63_axes_0"), val = tensor<int32, [1]>([-1])];
50
+ tensor<fp16, [1, 1, 1]> var_63_cast_fp16 = squeeze(axes = var_63_axes_0, x = var_61_cast_fp16_cast_int16)[name = tensor<string, []>("op_63_cast_fp16")];
51
+ tensor<string, []> var_63_cast_fp16_to_fp32_dtype_0 = const()[name = tensor<string, []>("op_63_cast_fp16_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
52
+ tensor<int32, []> var_66_axis_0 = const()[name = tensor<string, []>("op_66_axis_0"), val = tensor<int32, []>(-1)];
53
+ tensor<bool, []> var_66_keep_dims_0 = const()[name = tensor<string, []>("op_66_keep_dims_0"), val = tensor<bool, []>(false)];
54
+ tensor<string, []> var_66_output_dtype_0 = const()[name = tensor<string, []>("op_66_output_dtype_0"), val = tensor<string, []>("int32")];
55
+ tensor<int32, [1, 1, 1]> duration = reduce_argmax(axis = var_66_axis_0, keep_dims = var_66_keep_dims_0, output_dtype = var_66_output_dtype_0, x = duration_logits_cast_fp16)[name = tensor<string, []>("op_66_cast_fp16")];
56
+ tensor<int32, []> var_72 = const()[name = tensor<string, []>("op_72"), val = tensor<int32, []>(64)];
57
+ tensor<int32, []> var_76_axis_0 = const()[name = tensor<string, []>("op_76_axis_0"), val = tensor<int32, []>(-1)];
58
+ tensor<bool, []> var_76_ascending_0 = const()[name = tensor<string, []>("op_76_ascending_0"), val = tensor<bool, []>(false)];
59
+ tensor<bool, []> var_76_sort_0 = const()[name = tensor<string, []>("op_76_sort_0"), val = tensor<bool, []>(true)];
60
+ tensor<bool, []> var_76_return_indices_0 = const()[name = tensor<string, []>("op_76_return_indices_0"), val = tensor<bool, []>(true)];
61
+ tensor<string, []> var_76_cast_fp16_cast_int16_output_indices_dtype_0 = const()[name = tensor<string, []>("op_76_cast_fp16_cast_int16_output_indices_dtype_0"), val = tensor<string, []>("uint16")];
62
+ tensor<fp16, [1, 1, 1, 64]> var_76_cast_fp16_cast_int16_0, tensor<uint16, [1, 1, 1, 64]> var_76_cast_fp16_cast_int16_1 = topk(ascending = var_76_ascending_0, axis = var_76_axis_0, k = var_72, output_indices_dtype = var_76_cast_fp16_cast_int16_output_indices_dtype_0, return_indices = var_76_return_indices_0, sort = var_76_sort_0, x = token_logits_cast_fp16)[name = tensor<string, []>("op_76_cast_fp16_cast_int16")];
63
+ tensor<string, []> var_76_cast_fp16_cast_int16_1_to_int32_dtype_0 = const()[name = tensor<string, []>("op_76_cast_fp16_cast_int16_1_to_int32_dtype_0"), val = tensor<string, []>("int32")];
64
+ tensor<string, []> var_76_cast_fp16_0_to_fp32_dtype_0 = const()[name = tensor<string, []>("op_76_cast_fp16_0_to_fp32_dtype_0"), val = tensor<string, []>("fp32")];
65
+ tensor<fp32, [1, 1, 1, 64]> top_k_logits = cast(dtype = var_76_cast_fp16_0_to_fp32_dtype_0, x = var_76_cast_fp16_cast_int16_0)[name = tensor<string, []>("cast_0")];
66
+ tensor<int32, [1, 1, 1, 64]> top_k_ids = cast(dtype = var_76_cast_fp16_cast_int16_1_to_int32_dtype_0, x = var_76_cast_fp16_cast_int16_1)[name = tensor<string, []>("cast_1")];
67
+ tensor<fp32, [1, 1, 1]> token_prob = cast(dtype = var_63_cast_fp16_to_fp32_dtype_0, x = var_63_cast_fp16)[name = tensor<string, []>("cast_2")];
68
+ } -> (token_id, token_prob, duration, top_k_ids, top_k_logits);
69
+ }
JointDecision.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b3f771cb65b190f1873e39629676ed79b65a8361522f451b37bdba8b1106e6ff
3
+ size 2798028
JointDecisionSingleStep.mlpackage/Data/com.apple.CoreML/model.mlmodel ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4b5bf959656c8f51446b19664a8ded1a1a8630ddd42a75325387e3c9dd6400d4
3
+ size 10668
JointDecisionSingleStep.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:b3f771cb65b190f1873e39629676ed79b65a8361522f451b37bdba8b1106e6ff
3
+ size 2798028
JointDecisionSingleStep.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "9837468A-52AB-4172-B88E-85F05A9261A0": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Specification",
7
+ "name": "model.mlmodel",
8
+ "path": "com.apple.CoreML/model.mlmodel"
9
+ },
10
+ "E9AA441F-A636-4AF4-BE59-ECD44D3C22F6": {
11
+ "author": "com.apple.CoreML",
12
+ "description": "CoreML Model Weights",
13
+ "name": "weights",
14
+ "path": "com.apple.CoreML/weights"
15
+ }
16
+ },
17
+ "rootModelIdentifier": "9837468A-52AB-4172-B88E-85F05A9261A0"
18
+ }
Preprocessor.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d813d089b82b1edfdc558d902d91421c527c2db4ba85e36c4a611ea99eba8248
3
+ size 243
Preprocessor.mlmodelc/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:69e29c6cf43349318661a4aaade4bc0cc124a5780582d283614056cc76eb2907
3
+ size 499
Preprocessor.mlmodelc/metadata.json ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "metadataOutputVersion" : "3.0",
4
+ "shortDescription" : "Parakeet TDT-CTC Mel+Encoder (15s window)",
5
+ "outputSchema" : [
6
+ {
7
+ "hasShapeFlexibility" : "0",
8
+ "isOptional" : "0",
9
+ "dataType" : "Float32",
10
+ "formattedType" : "MultiArray (Float32 1 × 512 × 188)",
11
+ "shortDescription" : "",
12
+ "shape" : "[1, 512, 188]",
13
+ "name" : "encoder",
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" : "encoder_length",
24
+ "type" : "MultiArray"
25
+ }
26
+ ],
27
+ "storagePrecision" : "Float16",
28
+ "modelParameters" : [
29
+
30
+ ],
31
+ "author" : "Fluid Inference",
32
+ "specificationVersion" : 8,
33
+ "mlProgramOperationTypeHistogram" : {
34
+ "Tile" : 2,
35
+ "Stack" : 1,
36
+ "Ios17.greaterEqual" : 1,
37
+ "Ios16.silu" : 51,
38
+ "Ios17.sub" : 4,
39
+ "Identity" : 1,
40
+ "Ios16.reduceSum" : 4,
41
+ "Pad" : 35,
42
+ "Ios17.logicalNot" : 2,
43
+ "Ios17.sliceByIndex" : 37,
44
+ "Ios17.concat" : 1,
45
+ "Ios17.pow" : 2,
46
+ "Ios17.sqrt" : 1,
47
+ "Ios17.floor" : 3,
48
+ "Ios17.floorDiv" : 1,
49
+ "Ios17.expandDims" : 13,
50
+ "Ios17.less" : 2,
51
+ "Ios17.mul" : 72,
52
+ "Ios17.transpose" : 123,
53
+ "Ios17.matmul" : 52,
54
+ "Ios16.sigmoid" : 17,
55
+ "Ios17.conv" : 58,
56
+ "Ios17.reshape" : 105,
57
+ "Split" : 17,
58
+ "Ios17.log" : 1,
59
+ "Ios17.cast" : 7,
60
+ "Ios17.linear" : 137,
61
+ "Ios17.realDiv" : 3,
62
+ "Select" : 54,
63
+ "Ios16.relu" : 3,
64
+ "Ios16.softmax" : 17,
65
+ "Ios17.add" : 129,
66
+ "Ios17.layerNorm" : 85,
67
+ "Ios17.logicalAnd" : 2
68
+ },
69
+ "computePrecision" : "Mixed (Float16, Float32, Int32)",
70
+ "isUpdatable" : "0",
71
+ "stateSchema" : [
72
+
73
+ ],
74
+ "availability" : {
75
+ "macOS" : "14.0",
76
+ "tvOS" : "17.0",
77
+ "visionOS" : "1.0",
78
+ "watchOS" : "10.0",
79
+ "iOS" : "17.0",
80
+ "macCatalyst" : "17.0"
81
+ },
82
+ "modelType" : {
83
+ "name" : "MLModelType_mlProgram"
84
+ },
85
+ "inputSchema" : [
86
+ {
87
+ "hasShapeFlexibility" : "0",
88
+ "isOptional" : "0",
89
+ "dataType" : "Float32",
90
+ "formattedType" : "MultiArray (Float32 1 × 240000)",
91
+ "shortDescription" : "",
92
+ "shape" : "[1, 240000]",
93
+ "name" : "audio_signal",
94
+ "type" : "MultiArray"
95
+ },
96
+ {
97
+ "hasShapeFlexibility" : "0",
98
+ "isOptional" : "0",
99
+ "dataType" : "Int32",
100
+ "formattedType" : "MultiArray (Int32 1)",
101
+ "shortDescription" : "",
102
+ "shape" : "[1]",
103
+ "name" : "audio_length",
104
+ "type" : "MultiArray"
105
+ }
106
+ ],
107
+ "userDefinedMetadata" : {
108
+ "com.github.apple.coremltools.conversion_date" : "2026-03-16",
109
+ "com.github.apple.coremltools.source" : "torch==2.7.0",
110
+ "com.github.apple.coremltools.version" : "9.0b1",
111
+ "com.github.apple.coremltools.source_dialect" : "TorchScript"
112
+ },
113
+ "generatedClassName" : "Preprocessor",
114
+ "method" : "predict"
115
+ }
116
+ ]
Preprocessor.mlmodelc/model.mil ADDED
The diff for this file is too large to render. See raw diff
 
Preprocessor.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a1c90b88b52667ee4f349b39994003cc2a9fb1b12c310752399d90c880286a7b
3
+ size 215951360
Preprocessor.mlpackage/Data/com.apple.CoreML/model.mlmodel ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2cdb59bc9293df8a1d993f534033e212d64fb12bdfad98fe96964b804b8d4d1e
3
+ size 525105
Preprocessor.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:a1c90b88b52667ee4f349b39994003cc2a9fb1b12c310752399d90c880286a7b
3
+ size 215951360
Preprocessor.mlpackage/Manifest.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fileFormatVersion": "1.0.0",
3
+ "itemInfoEntries": {
4
+ "39C01B3A-5AD3-4DB9-950C-0AFE37EBAB79": {
5
+ "author": "com.apple.CoreML",
6
+ "description": "CoreML Model Weights",
7
+ "name": "weights",
8
+ "path": "com.apple.CoreML/weights"
9
+ },
10
+ "A9DC3D62-1D15-47F5-86AD-D33E82326E53": {
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": "A9DC3D62-1D15-47F5-86AD-D33E82326E53"
18
+ }
README.md ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: cc-by-4.0
3
+ language:
4
+ - en
5
+ metrics:
6
+ - wer
7
+ base_model:
8
+ - nvidia/parakeet-tdt_ctc-110m
9
+ pipeline_tag: automatic-speech-recognition
10
+ tags:
11
+ - automatic-speech-recognition
12
+ - speech
13
+ - audio
14
+ - Transducer
15
+ - TDT
16
+ - FastConformer
17
+ - Conformer
18
+ - pytorch
19
+ - NeMo
20
+ - hf-asr-leaderboard
21
+ ---
22
+ # Parakeet-TDT-CTC 110M — CoreML
23
+
24
+ CoreML export of [nvidia/parakeet-tdt_ctc-110m](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m) for on-device speech recognition on Apple Silicon via [FluidAudio](https://github.com/FluidInference/FluidAudio).
25
+
26
+
27
+ ## CoreML Components
28
+
29
+ | File | Size | Description |
30
+ |------|------|-------------|
31
+ | `Preprocessor.mlmodelc` | 207 MB | Fused mel-spectrogram + FastConformer encoder |
32
+ | `Decoder.mlmodelc` | 7.5 MB | 1-layer LSTM prediction network |
33
+ | `JointDecision.mlmodelc` | 2.7 MB | Single-step joint network (token + duration) |
34
+ | `parakeet_vocab.json` | 18 KB | 1024-token BPE vocabulary |
35
+ | `config.json` | 2.5 KB | Model metadata and I/O contracts |
36
+
37
+ **Input:** 16 kHz mono audio, fixed 15-second window (240,000 samples).
38
+ **Output:** Token IDs, probabilities, and TDT duration predictions per encoder frame.
39
+
40
+ ## Performance
41
+
42
+ Benchmarked with FluidAudio CLI on Apple M2 (release build):
43
+
44
+ | Benchmark | WER |
45
+ |-----------|-----|
46
+ | LibriSpeech test-clean | **3.0%** |
47
+ | RTFx (overall) | **102x** real-time |
48
+ | Peak memory | 0.3 GB |
49
+
50
+ NVIDIA's reference WER (greedy, GPU):
51
+
52
+ | Benchmark | WER |
53
+ |-----------|-----|
54
+ | LibriSpeech test-clean | 2.4% |
55
+ | LibriSpeech test-other | 5.2% |
56
+ | AMI | 15.88% |
57
+ | Earnings-22 | 12.42% |
58
+ | GigaSpeech | 10.52% |
59
+ | TEDLIUM-v3 | 4.16% |
60
+
61
+ ## Usage with FluidAudio
62
+
63
+ ```bash
64
+ # Transcribe
65
+ fluidaudiocli transcribe audio.wav --model-version tdt-ctc-110m
66
+
67
+ # Benchmark
68
+ fluidaudiocli asr-benchmark --subset test-clean --model-version tdt-ctc-110m
69
+ ```
70
+
71
+ Models auto-download from this repo on first use. To pre-fetch:
72
+
73
+ ```bash
74
+ fluidaudiocli download --model-version tdt-ctc-110m
75
+ ```
76
+
77
+ ## Conversion
78
+
79
+ Exported from NeMo using [mobius/models/stt/parakeet-tdt-ctc-110m/coreml/convert-tdt-coreml.py](https://github.com/FluidInference/mobius):
80
+
81
+ - Preprocessor fuses mel-spectrogram extraction and the FastConformer encoder into a single CoreML model
82
+ - JointDecision is the single-step variant (encoder_step + decoder_step inputs) used by FluidAudio's TDT decoder
83
+ - All models exported as MLProgram (iOS 17+ / macOS 14+), float32 precision
84
+
85
+ ## References
86
+
87
+ - [Fast Conformer with Linearly Scalable Attention](https://arxiv.org/abs/2305.05084)
88
+ - [Efficient Sequence Transduction by Jointly Predicting Tokens and Durations](https://arxiv.org/abs/2304.06795)
89
+ - [NVIDIA NeMo](https://github.com/NVIDIA/NeMo)
config.json ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_id": "nvidia/parakeet-tdt_ctc-110m",
3
+ "model_type": "hybrid_tdt_ctc",
4
+ "sample_rate": 16000,
5
+ "max_audio_seconds": 15.0,
6
+ "max_audio_samples": 240000,
7
+ "max_symbol_steps": 1,
8
+ "vocab_size": 1024,
9
+ "blank_id": 1024,
10
+ "joint_extra_outputs": 5,
11
+ "duration_bins": [
12
+ 0,
13
+ 1,
14
+ 2,
15
+ 3,
16
+ 4
17
+ ],
18
+ "encoder_dim": 512,
19
+ "decoder_dim": 640,
20
+ "decoder_hidden": 640,
21
+ "decoder_layers": 1,
22
+ "checkpoint": {
23
+ "type": "pretrained",
24
+ "model_id": "nvidia/parakeet-tdt_ctc-110m"
25
+ },
26
+ "coreml": {
27
+ "compute_units": "CPU_ONLY",
28
+ "compute_precision": "FLOAT32"
29
+ },
30
+ "components": {
31
+ "preprocessor": {
32
+ "inputs": {
33
+ "audio_signal": [
34
+ 1,
35
+ 240000
36
+ ],
37
+ "audio_length": [
38
+ 1
39
+ ]
40
+ },
41
+ "outputs": {
42
+ "encoder": [
43
+ 1,
44
+ 512,
45
+ 188
46
+ ],
47
+ "encoder_length": [
48
+ 1
49
+ ]
50
+ },
51
+ "path": "Preprocessor.mlpackage"
52
+ },
53
+ "decoder": {
54
+ "inputs": {
55
+ "targets": [
56
+ 1,
57
+ 1
58
+ ],
59
+ "target_length": [
60
+ 1
61
+ ],
62
+ "h_in": [
63
+ 1,
64
+ 1,
65
+ 640
66
+ ],
67
+ "c_in": [
68
+ 1,
69
+ 1,
70
+ 640
71
+ ]
72
+ },
73
+ "outputs": {
74
+ "decoder": [
75
+ 1,
76
+ 640,
77
+ 1
78
+ ],
79
+ "h_out": [
80
+ 1,
81
+ 1,
82
+ 640
83
+ ],
84
+ "c_out": [
85
+ 1,
86
+ 1,
87
+ 640
88
+ ]
89
+ },
90
+ "path": "Decoder.mlpackage"
91
+ },
92
+ "joint_decision": {
93
+ "inputs": {
94
+ "encoder": [
95
+ 1,
96
+ 512,
97
+ 188
98
+ ],
99
+ "decoder": [
100
+ 1,
101
+ 640,
102
+ 1
103
+ ]
104
+ },
105
+ "outputs": {
106
+ "token_id": "int32",
107
+ "token_prob": "float32",
108
+ "duration": "int32"
109
+ },
110
+ "path": "JointDecision.mlpackage"
111
+ },
112
+ "joint_decision_single_step": {
113
+ "inputs": {
114
+ "encoder_step": [
115
+ 1,
116
+ 512,
117
+ 1
118
+ ],
119
+ "decoder_step": [
120
+ 1,
121
+ 640,
122
+ 1
123
+ ]
124
+ },
125
+ "outputs": {
126
+ "token_id": [
127
+ 1,
128
+ 1,
129
+ 1
130
+ ],
131
+ "token_prob": [
132
+ 1,
133
+ 1,
134
+ 1
135
+ ],
136
+ "duration": [
137
+ 1,
138
+ 1,
139
+ 1
140
+ ],
141
+ "top_k_ids": "int32",
142
+ "top_k_logits": "float32"
143
+ },
144
+ "path": "JointDecisionSingleStep.mlpackage"
145
+ }
146
+ }
147
+ }
parakeet_vocab.json ADDED
@@ -0,0 +1,1026 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "0": "<unk>",
3
+ "1": "▁t",
4
+ "2": "▁th",
5
+ "3": "▁a",
6
+ "4": "in",
7
+ "5": "re",
8
+ "6": "▁the",
9
+ "7": "▁w",
10
+ "8": "▁s",
11
+ "9": "▁o",
12
+ "10": "er",
13
+ "11": "ou",
14
+ "12": "at",
15
+ "13": "nd",
16
+ "14": "it",
17
+ "15": "▁h",
18
+ "16": "▁c",
19
+ "17": "▁b",
20
+ "18": "is",
21
+ "19": "en",
22
+ "20": "on",
23
+ "21": "ing",
24
+ "22": "▁f",
25
+ "23": "▁to",
26
+ "24": "▁m",
27
+ "25": "es",
28
+ "26": "▁p",
29
+ "27": "or",
30
+ "28": "an",
31
+ "29": "▁d",
32
+ "30": "ll",
33
+ "31": "▁I",
34
+ "32": "ed",
35
+ "33": "▁and",
36
+ "34": "▁l",
37
+ "35": "▁of",
38
+ "36": "▁in",
39
+ "37": "▁y",
40
+ "38": "ar",
41
+ "39": "▁g",
42
+ "40": "▁you",
43
+ "41": "as",
44
+ "42": "om",
45
+ "43": "▁n",
46
+ "44": "ve",
47
+ "45": "▁that",
48
+ "46": "le",
49
+ "47": "ic",
50
+ "48": "us",
51
+ "49": "ow",
52
+ "50": "et",
53
+ "51": "al",
54
+ "52": "▁e",
55
+ "53": "ut",
56
+ "54": "▁it",
57
+ "55": "ot",
58
+ "56": "▁be",
59
+ "57": "▁T",
60
+ "58": "ion",
61
+ "59": "▁is",
62
+ "60": "▁wh",
63
+ "61": "▁re",
64
+ "62": "▁on",
65
+ "63": "▁we",
66
+ "64": "ent",
67
+ "65": "▁A",
68
+ "66": "ay",
69
+ "67": "▁ha",
70
+ "68": "▁Th",
71
+ "69": "id",
72
+ "70": "▁S",
73
+ "71": "ac",
74
+ "72": "gh",
75
+ "73": "ver",
76
+ "74": "ke",
77
+ "75": "▁for",
78
+ "76": "im",
79
+ "77": "ly",
80
+ "78": "ur",
81
+ "79": "ld",
82
+ "80": "▁he",
83
+ "81": "▁st",
84
+ "82": "all",
85
+ "83": "ro",
86
+ "84": "st",
87
+ "85": "se",
88
+ "86": "ct",
89
+ "87": "ith",
90
+ "88": "ir",
91
+ "89": "am",
92
+ "90": "▁this",
93
+ "91": "if",
94
+ "92": "▁W",
95
+ "93": "oo",
96
+ "94": "ri",
97
+ "95": "▁was",
98
+ "96": "ght",
99
+ "97": "▁u",
100
+ "98": "▁with",
101
+ "99": "ad",
102
+ "100": "ch",
103
+ "101": "▁se",
104
+ "102": "▁k",
105
+ "103": "▁an",
106
+ "104": "▁The",
107
+ "105": "▁li",
108
+ "106": "▁do",
109
+ "107": "▁B",
110
+ "108": "▁have",
111
+ "109": "▁as",
112
+ "110": "th",
113
+ "111": "▁are",
114
+ "112": "▁sh",
115
+ "113": "ust",
116
+ "114": "ce",
117
+ "115": "ally",
118
+ "116": "ill",
119
+ "117": "▁H",
120
+ "118": "▁j",
121
+ "119": "ter",
122
+ "120": "▁go",
123
+ "121": "▁And",
124
+ "122": "ation",
125
+ "123": "▁C",
126
+ "124": "▁so",
127
+ "125": "ome",
128
+ "126": "▁not",
129
+ "127": "op",
130
+ "128": "il",
131
+ "129": "ore",
132
+ "130": "▁ne",
133
+ "131": "▁can",
134
+ "132": "▁me",
135
+ "133": "▁at",
136
+ "134": "ould",
137
+ "135": "ant",
138
+ "136": "▁M",
139
+ "137": "▁like",
140
+ "138": "ere",
141
+ "139": "▁they",
142
+ "140": "ra",
143
+ "141": "ers",
144
+ "142": "▁ab",
145
+ "143": "▁de",
146
+ "144": "▁kn",
147
+ "145": "ge",
148
+ "146": "▁Y",
149
+ "147": "▁ch",
150
+ "148": "ul",
151
+ "149": "pp",
152
+ "150": "▁or",
153
+ "151": "▁al",
154
+ "152": "▁con",
155
+ "153": "▁com",
156
+ "154": "ess",
157
+ "155": "▁su",
158
+ "156": "out",
159
+ "157": "▁your",
160
+ "158": "▁So",
161
+ "159": "ate",
162
+ "160": "▁one",
163
+ "161": "▁all",
164
+ "162": "▁ex",
165
+ "163": "est",
166
+ "164": "▁fr",
167
+ "165": "▁just",
168
+ "166": "▁pro",
169
+ "167": "▁know",
170
+ "168": "▁O",
171
+ "169": "ain",
172
+ "170": "▁but",
173
+ "171": "ol",
174
+ "172": "ive",
175
+ "173": "▁v",
176
+ "174": "use",
177
+ "175": "very",
178
+ "176": "art",
179
+ "177": "qu",
180
+ "178": "▁my",
181
+ "179": "el",
182
+ "180": "▁N",
183
+ "181": "nt",
184
+ "182": "▁It",
185
+ "183": "▁what",
186
+ "184": "ab",
187
+ "185": "▁P",
188
+ "186": "▁wor",
189
+ "187": "▁out",
190
+ "188": "▁there",
191
+ "189": "▁up",
192
+ "190": "um",
193
+ "191": "▁from",
194
+ "192": "pe",
195
+ "193": "▁tw",
196
+ "194": "▁r",
197
+ "195": "and",
198
+ "196": "ight",
199
+ "197": "ort",
200
+ "198": "un",
201
+ "199": "▁L",
202
+ "200": "ist",
203
+ "201": "▁about",
204
+ "202": "ide",
205
+ "203": "ig",
206
+ "204": "ake",
207
+ "205": "▁D",
208
+ "206": "em",
209
+ "207": "os",
210
+ "208": "king",
211
+ "209": "rou",
212
+ "210": "ind",
213
+ "211": "our",
214
+ "212": "res",
215
+ "213": "▁We",
216
+ "214": "▁get",
217
+ "215": "▁E",
218
+ "216": "▁G",
219
+ "217": "ack",
220
+ "218": "▁le",
221
+ "219": "ity",
222
+ "220": "od",
223
+ "221": "▁F",
224
+ "222": "ard",
225
+ "223": "▁pl",
226
+ "224": "▁our",
227
+ "225": "▁int",
228
+ "226": "ment",
229
+ "227": "▁will",
230
+ "228": "ies",
231
+ "229": "▁by",
232
+ "230": "ink",
233
+ "231": "ca",
234
+ "232": "▁if",
235
+ "233": "red",
236
+ "234": "her",
237
+ "235": "ie",
238
+ "236": "▁us",
239
+ "237": "▁some",
240
+ "238": "▁don",
241
+ "239": "ven",
242
+ "240": "ood",
243
+ "241": "ast",
244
+ "242": "▁R",
245
+ "243": "▁his",
246
+ "244": "▁tim",
247
+ "245": "▁tr",
248
+ "246": "▁more",
249
+ "247": "ich",
250
+ "248": "ous",
251
+ "249": "ame",
252
+ "250": "▁going",
253
+ "251": "▁had",
254
+ "252": "▁them",
255
+ "253": "ook",
256
+ "254": "▁pe",
257
+ "255": "▁Wh",
258
+ "256": "▁You",
259
+ "257": "▁But",
260
+ "258": "ine",
261
+ "259": "▁here",
262
+ "260": "▁would",
263
+ "261": "cause",
264
+ "262": "right",
265
+ "263": "so",
266
+ "264": "ost",
267
+ "265": "ure",
268
+ "266": "▁has",
269
+ "267": "ect",
270
+ "268": "▁think",
271
+ "269": "▁fe",
272
+ "270": "ong",
273
+ "271": "▁see",
274
+ "272": "▁when",
275
+ "273": "▁who",
276
+ "274": "▁were",
277
+ "275": "▁really",
278
+ "276": "▁their",
279
+ "277": "▁want",
280
+ "278": "one",
281
+ "279": "ople",
282
+ "280": "▁then",
283
+ "281": "▁time",
284
+ "282": "▁sa",
285
+ "283": "ap",
286
+ "284": "▁te",
287
+ "285": "▁He",
288
+ "286": "▁ye",
289
+ "287": "ck",
290
+ "288": "▁her",
291
+ "289": "▁thing",
292
+ "290": "▁right",
293
+ "291": "▁which",
294
+ "292": "itt",
295
+ "293": "ice",
296
+ "294": "act",
297
+ "295": "▁people",
298
+ "296": "ty",
299
+ "297": "▁two",
300
+ "298": "▁J",
301
+ "299": "▁im",
302
+ "300": "ther",
303
+ "301": "ci",
304
+ "302": "ose",
305
+ "303": "▁cl",
306
+ "304": "▁qu",
307
+ "305": "▁man",
308
+ "306": "▁also",
309
+ "307": "ree",
310
+ "308": "▁en",
311
+ "309": "ud",
312
+ "310": "▁how",
313
+ "311": "reat",
314
+ "312": "ak",
315
+ "313": "hing",
316
+ "314": "ag",
317
+ "315": "▁any",
318
+ "316": "ff",
319
+ "317": "ace",
320
+ "318": "per",
321
+ "319": "▁because",
322
+ "320": "▁very",
323
+ "321": "own",
324
+ "322": "▁ad",
325
+ "323": "▁act",
326
+ "324": "▁been",
327
+ "325": "▁now",
328
+ "326": "▁ag",
329
+ "327": "▁into",
330
+ "328": "▁comp",
331
+ "329": "ars",
332
+ "330": "ions",
333
+ "331": "are",
334
+ "332": "ite",
335
+ "333": "iv",
336
+ "334": "▁these",
337
+ "335": "ays",
338
+ "336": "ep",
339
+ "337": "▁This",
340
+ "338": "▁she",
341
+ "339": "ans",
342
+ "340": "ah",
343
+ "341": "een",
344
+ "342": "▁over",
345
+ "343": "ry",
346
+ "344": "▁lo",
347
+ "345": "age",
348
+ "346": "▁pr",
349
+ "347": "▁sp",
350
+ "348": "ue",
351
+ "349": "▁co",
352
+ "350": "ick",
353
+ "351": "ber",
354
+ "352": "▁did",
355
+ "353": "ip",
356
+ "354": "ach",
357
+ "355": "▁back",
358
+ "356": "▁no",
359
+ "357": "▁cont",
360
+ "358": "▁other",
361
+ "359": "▁every",
362
+ "360": "pt",
363
+ "361": "▁need",
364
+ "362": "▁him",
365
+ "363": "▁U",
366
+ "364": "▁In",
367
+ "365": "▁work",
368
+ "366": "irst",
369
+ "367": "▁part",
370
+ "368": "▁look",
371
+ "369": "ittle",
372
+ "370": "ble",
373
+ "371": "iz",
374
+ "372": "▁un",
375
+ "373": "▁make",
376
+ "374": "omet",
377
+ "375": "nder",
378
+ "376": "ish",
379
+ "377": "na",
380
+ "378": "▁little",
381
+ "379": "▁off",
382
+ "380": "▁than",
383
+ "381": "▁got",
384
+ "382": "ually",
385
+ "383": "▁per",
386
+ "384": "▁good",
387
+ "385": "▁way",
388
+ "386": "▁could",
389
+ "387": "▁ac",
390
+ "388": "▁imp",
391
+ "389": "able",
392
+ "390": "▁where",
393
+ "391": "iff",
394
+ "392": "▁That",
395
+ "393": "▁res",
396
+ "394": "ount",
397
+ "395": "pl",
398
+ "396": "ance",
399
+ "397": "▁first",
400
+ "398": "▁ro",
401
+ "399": "▁pre",
402
+ "400": "ass",
403
+ "401": "▁say",
404
+ "402": "int",
405
+ "403": "ated",
406
+ "404": "ire",
407
+ "405": "uch",
408
+ "406": "ase",
409
+ "407": "▁somet",
410
+ "408": "ound",
411
+ "409": "▁down",
412
+ "410": "▁diff",
413
+ "411": "sel",
414
+ "412": "▁gu",
415
+ "413": "▁am",
416
+ "414": "ress",
417
+ "415": "▁lot",
418
+ "416": "ence",
419
+ "417": "▁dis",
420
+ "418": "orm",
421
+ "419": "ix",
422
+ "420": "▁po",
423
+ "421": "ving",
424
+ "422": "enty",
425
+ "423": "▁K",
426
+ "424": "▁spe",
427
+ "425": "und",
428
+ "426": "he",
429
+ "427": "▁much",
430
+ "428": "▁ar",
431
+ "429": "round",
432
+ "430": "▁app",
433
+ "431": "co",
434
+ "432": "ark",
435
+ "433": "▁new",
436
+ "434": "ater",
437
+ "435": "ult",
438
+ "436": "end",
439
+ "437": "▁even",
440
+ "438": "▁start",
441
+ "439": "ations",
442
+ "440": "rough",
443
+ "441": "ile",
444
+ "442": "fter",
445
+ "443": "▁well",
446
+ "444": "be",
447
+ "445": "▁They",
448
+ "446": "▁three",
449
+ "447": "ign",
450
+ "448": "ild",
451
+ "449": "▁said",
452
+ "450": "ough",
453
+ "451": "ang",
454
+ "452": "▁too",
455
+ "453": "ade",
456
+ "454": "▁bl",
457
+ "455": "ens",
458
+ "456": "▁inc",
459
+ "457": "ia",
460
+ "458": "▁those",
461
+ "459": "▁mo",
462
+ "460": "▁take",
463
+ "461": "▁through",
464
+ "462": "▁fl",
465
+ "463": "▁kind",
466
+ "464": "▁things",
467
+ "465": "▁bet",
468
+ "466": "▁only",
469
+ "467": "▁St",
470
+ "468": "▁let",
471
+ "469": "cess",
472
+ "470": "▁Ch",
473
+ "471": "ary",
474
+ "472": "vel",
475
+ "473": "▁If",
476
+ "474": "xt",
477
+ "475": "other",
478
+ "476": "av",
479
+ "477": "ical",
480
+ "478": "ord",
481
+ "479": "▁again",
482
+ "480": "▁something",
483
+ "481": "onna",
484
+ "482": "fore",
485
+ "483": "▁may",
486
+ "484": "ting",
487
+ "485": "▁bu",
488
+ "486": "▁differe",
489
+ "487": "urn",
490
+ "488": "▁gonna",
491
+ "489": "▁does",
492
+ "490": "uct",
493
+ "491": "og",
494
+ "492": "▁twenty",
495
+ "493": "▁gr",
496
+ "494": "▁Ye",
497
+ "495": "wn",
498
+ "496": "▁should",
499
+ "497": "▁comm",
500
+ "498": "ition",
501
+ "499": "▁under",
502
+ "500": "▁hel",
503
+ "501": "ory",
504
+ "502": "▁fo",
505
+ "503": "▁use",
506
+ "504": "igh",
507
+ "505": "ife",
508
+ "506": "▁actually",
509
+ "507": "▁tal",
510
+ "508": "▁call",
511
+ "509": "ents",
512
+ "510": "ious",
513
+ "511": "ull",
514
+ "512": "▁There",
515
+ "513": "▁Yeah",
516
+ "514": "▁most",
517
+ "515": "▁ke",
518
+ "516": "ors",
519
+ "517": "ved",
520
+ "518": "ys",
521
+ "519": "▁sc",
522
+ "520": "▁happ",
523
+ "521": "ope",
524
+ "522": "▁help",
525
+ "523": "atch",
526
+ "524": "▁What",
527
+ "525": "▁rem",
528
+ "526": "ple",
529
+ "527": "▁Now",
530
+ "528": "▁br",
531
+ "529": "ool",
532
+ "530": "oth",
533
+ "531": "▁four",
534
+ "532": "self",
535
+ "533": "▁str",
536
+ "534": "ne",
537
+ "535": "thing",
538
+ "536": "▁put",
539
+ "537": "ial",
540
+ "538": "▁great",
541
+ "539": "ail",
542
+ "540": "ub",
543
+ "541": "ning",
544
+ "542": "▁sm",
545
+ "543": "▁feel",
546
+ "544": "▁five",
547
+ "545": "ody",
548
+ "546": "undred",
549
+ "547": "iss",
550
+ "548": "ank",
551
+ "549": "get",
552
+ "550": "aking",
553
+ "551": "▁many",
554
+ "552": "▁hundred",
555
+ "553": "▁years",
556
+ "554": "▁being",
557
+ "555": "▁come",
558
+ "556": "▁mean",
559
+ "557": "ily",
560
+ "558": "▁different",
561
+ "559": "▁after",
562
+ "560": "▁ser",
563
+ "561": "▁show",
564
+ "562": "form",
565
+ "563": "ful",
566
+ "564": "oy",
567
+ "565": "▁six",
568
+ "566": "▁vide",
569
+ "567": "▁V",
570
+ "568": "▁its",
571
+ "569": "▁point",
572
+ "570": "▁day",
573
+ "571": "▁des",
574
+ "572": "ons",
575
+ "573": "▁bit",
576
+ "574": "▁bel",
577
+ "575": "▁before",
578
+ "576": "▁aw",
579
+ "577": "▁end",
580
+ "578": "▁Oh",
581
+ "579": "▁still",
582
+ "580": "ath",
583
+ "581": "▁long",
584
+ "582": "▁'",
585
+ "583": "ise",
586
+ "584": "ob",
587
+ "585": "day",
588
+ "586": "▁add",
589
+ "587": "ft",
590
+ "588": "ves",
591
+ "589": "ces",
592
+ "590": "ady",
593
+ "591": "▁cr",
594
+ "592": "▁around",
595
+ "593": "▁try",
596
+ "594": "les",
597
+ "595": "vers",
598
+ "596": "kay",
599
+ "597": "ian",
600
+ "598": "ates",
601
+ "599": "▁find",
602
+ "600": "ward",
603
+ "601": "▁As",
604
+ "602": "▁eight",
605
+ "603": "lic",
606
+ "604": "▁same",
607
+ "605": "▁pos",
608
+ "606": "▁em",
609
+ "607": "▁made",
610
+ "608": "▁supp",
611
+ "609": "▁life",
612
+ "610": "▁Be",
613
+ "611": "pect",
614
+ "612": "▁dec",
615
+ "613": "▁play",
616
+ "614": "ange",
617
+ "615": "▁att",
618
+ "616": "▁pers",
619
+ "617": "ways",
620
+ "618": "▁high",
621
+ "619": "▁hand",
622
+ "620": "▁next",
623
+ "621": "▁cons",
624
+ "622": "▁own",
625
+ "623": "▁inv",
626
+ "624": "ower",
627
+ "625": "▁ind",
628
+ "626": "ert",
629
+ "627": "ng",
630
+ "628": "ave",
631
+ "629": "▁year",
632
+ "630": "▁big",
633
+ "631": "ating",
634
+ "632": "▁world",
635
+ "633": "▁rel",
636
+ "634": "▁sure",
637
+ "635": "▁tra",
638
+ "636": "ew",
639
+ "637": "ered",
640
+ "638": "▁fin",
641
+ "639": "▁Well",
642
+ "640": "▁sl",
643
+ "641": "▁doing",
644
+ "642": "bs",
645
+ "643": "▁set",
646
+ "644": "▁rec",
647
+ "645": "ual",
648
+ "646": "cial",
649
+ "647": "▁ph",
650
+ "648": "erm",
651
+ "649": "▁love",
652
+ "650": "ph",
653
+ "651": "▁real",
654
+ "652": "▁last",
655
+ "653": "ict",
656
+ "654": "▁bo",
657
+ "655": "▁ra",
658
+ "656": "ible",
659
+ "657": "▁wr",
660
+ "658": "mer",
661
+ "659": "▁count",
662
+ "660": "ities",
663
+ "661": "▁always",
664
+ "662": "inet",
665
+ "663": "ments",
666
+ "664": "uc",
667
+ "665": "▁might",
668
+ "666": "▁inter",
669
+ "667": "▁video",
670
+ "668": "gin",
671
+ "669": "▁tell",
672
+ "670": "▁never",
673
+ "671": "vent",
674
+ "672": "▁import",
675
+ "673": "ied",
676
+ "674": "▁sy",
677
+ "675": "▁How",
678
+ "676": "ically",
679
+ "677": "ought",
680
+ "678": "▁thir",
681
+ "679": "▁rep",
682
+ "680": "ks",
683
+ "681": "ib",
684
+ "682": "▁fam",
685
+ "683": "ject",
686
+ "684": "▁bas",
687
+ "685": "▁She",
688
+ "686": "▁give",
689
+ "687": "akes",
690
+ "688": "▁ninet",
691
+ "689": "▁reg",
692
+ "690": "▁min",
693
+ "691": "▁op",
694
+ "692": "▁def",
695
+ "693": "▁didn",
696
+ "694": "te",
697
+ "695": "▁cour",
698
+ "696": "▁why",
699
+ "697": "▁ent",
700
+ "698": "▁place",
701
+ "699": "▁ins",
702
+ "700": "▁car",
703
+ "701": "ather",
704
+ "702": "▁person",
705
+ "703": "ular",
706
+ "704": "▁inst",
707
+ "705": "▁prod",
708
+ "706": "lect",
709
+ "707": "▁Al",
710
+ "708": "▁today",
711
+ "709": "▁bec",
712
+ "710": "▁sur",
713
+ "711": "▁All",
714
+ "712": "▁another",
715
+ "713": "▁bus",
716
+ "714": "▁keep",
717
+ "715": "ell",
718
+ "716": "ese",
719
+ "717": "riend",
720
+ "718": "▁quest",
721
+ "719": "▁talk",
722
+ "720": "als",
723
+ "721": "ings",
724
+ "722": "▁mon",
725
+ "723": "cond",
726
+ "724": "old",
727
+ "725": "▁acc",
728
+ "726": "▁la",
729
+ "727": "▁num",
730
+ "728": "ident",
731
+ "729": "▁che",
732
+ "730": "iness",
733
+ "731": "▁turn",
734
+ "732": "▁ear",
735
+ "733": "▁No",
736
+ "734": "ousand",
737
+ "735": "▁better",
738
+ "736": "ific",
739
+ "737": "▁loo",
740
+ "738": "▁gl",
741
+ "739": "oc",
742
+ "740": "▁important",
743
+ "741": "ited",
744
+ "742": "▁An",
745
+ "743": "▁thousand",
746
+ "744": "ility",
747
+ "745": "llow",
748
+ "746": "▁used",
749
+ "747": "▁gen",
750
+ "748": "▁sim",
751
+ "749": "li",
752
+ "750": "▁happen",
753
+ "751": "▁Un",
754
+ "752": "▁Let",
755
+ "753": "air",
756
+ "754": "ock",
757
+ "755": "ably",
758
+ "756": "gg",
759
+ "757": "▁watch",
760
+ "758": "▁For",
761
+ "759": "▁sw",
762
+ "760": "ren",
763
+ "761": "ute",
764
+ "762": "ever",
765
+ "763": "▁pol",
766
+ "764": "▁sch",
767
+ "765": "▁When",
768
+ "766": "▁such",
769
+ "767": "▁fif",
770
+ "768": "▁home",
771
+ "769": "▁cle",
772
+ "770": "▁contin",
773
+ "771": "ouse",
774
+ "772": "▁friend",
775
+ "773": "uring",
776
+ "774": "▁Okay",
777
+ "775": "gr",
778
+ "776": "▁able",
779
+ "777": "▁stud",
780
+ "778": "▁eff",
781
+ "779": "hip",
782
+ "780": "body",
783
+ "781": "▁top",
784
+ "782": "ness",
785
+ "783": "▁exper",
786
+ "784": "▁pret",
787
+ "785": "▁both",
788
+ "786": "▁done",
789
+ "787": "cri",
790
+ "788": "▁mark",
791
+ "789": "▁while",
792
+ "790": "▁old",
793
+ "791": "ros",
794
+ "792": "ont",
795
+ "793": "▁second",
796
+ "794": "ative",
797
+ "795": "▁thought",
798
+ "796": "▁best",
799
+ "797": "▁found",
800
+ "798": "iew",
801
+ "799": "▁belie",
802
+ "800": "▁each",
803
+ "801": "erest",
804
+ "802": "▁tri",
805
+ "803": "▁eas",
806
+ "804": "▁ca",
807
+ "805": "▁fact",
808
+ "806": "▁care",
809
+ "807": "▁fun",
810
+ "808": "atter",
811
+ "809": "ures",
812
+ "810": "▁head",
813
+ "811": "▁lear",
814
+ "812": "▁water",
815
+ "813": "▁hard",
816
+ "814": "▁few",
817
+ "815": "▁side",
818
+ "816": "ween",
819
+ "817": "▁exp",
820
+ "818": "▁away",
821
+ "819": "its",
822
+ "820": "▁ext",
823
+ "821": "lud",
824
+ "822": "▁run",
825
+ "823": "▁trans",
826
+ "824": "ince",
827
+ "825": "▁sk",
828
+ "826": "▁open",
829
+ "827": "cus",
830
+ "828": "▁between",
831
+ "829": "▁called",
832
+ "830": "▁wee",
833
+ "831": "▁pretty",
834
+ "832": "ason",
835
+ "833": "▁far",
836
+ "834": "ember",
837
+ "835": "omm",
838
+ "836": "▁interest",
839
+ "837": "any",
840
+ "838": "ner",
841
+ "839": "uff",
842
+ "840": "▁pres",
843
+ "841": "▁cur",
844
+ "842": "▁child",
845
+ "843": "ee",
846
+ "844": "▁toget",
847
+ "845": "▁together",
848
+ "846": "olog",
849
+ "847": "▁God",
850
+ "848": "ond",
851
+ "849": "▁char",
852
+ "850": "▁looking",
853
+ "851": "stem",
854
+ "852": "az",
855
+ "853": "cent",
856
+ "854": "▁ob",
857
+ "855": "▁ass",
858
+ "856": "land",
859
+ "857": "▁doesn",
860
+ "858": "▁business",
861
+ "859": "▁course",
862
+ "860": "▁ten",
863
+ "861": "ps",
864
+ "862": "arch",
865
+ "863": "ced",
866
+ "864": "ms",
867
+ "865": "ize",
868
+ "866": "nce",
869
+ "867": "▁ref",
870
+ "868": "▁name",
871
+ "869": "ross",
872
+ "870": "▁grow",
873
+ "871": "oney",
874
+ "872": "▁went",
875
+ "873": "ics",
876
+ "874": "teen",
877
+ "875": "▁cou",
878
+ "876": "▁prob",
879
+ "877": "▁ret",
880
+ "878": "▁guys",
881
+ "879": "▁came",
882
+ "880": "ash",
883
+ "881": "led",
884
+ "882": "▁Eur",
885
+ "883": "ues",
886
+ "884": "▁ide",
887
+ "885": "gan",
888
+ "886": "▁everything",
889
+ "887": "▁getting",
890
+ "888": "▁ask",
891
+ "889": "▁cor",
892
+ "890": "▁build",
893
+ "891": "▁sign",
894
+ "892": "▁small",
895
+ "893": "uck",
896
+ "894": "▁el",
897
+ "895": "▁col",
898
+ "896": "▁Is",
899
+ "897": "ational",
900
+ "898": "stand",
901
+ "899": "cy",
902
+ "900": "▁conf",
903
+ "901": "der",
904
+ "902": "▁bre",
905
+ "903": "▁cap",
906
+ "904": "▁mod",
907
+ "905": "ets",
908
+ "906": "ike",
909
+ "907": "▁number",
910
+ "908": "▁comple",
911
+ "909": "ertain",
912
+ "910": "▁ever",
913
+ "911": "▁coll",
914
+ "912": "▁hum",
915
+ "913": "▁Europe",
916
+ "914": "▁cre",
917
+ "915": "▁met",
918
+ "916": "▁exam",
919
+ "917": "▁move",
920
+ "918": "▁pass",
921
+ "919": "▁left",
922
+ "920": "▁system",
923
+ "921": "▁includ",
924
+ "922": "▁Thank",
925
+ "923": "cept",
926
+ "924": "▁wom",
927
+ "925": "▁product",
928
+ "926": "ten",
929
+ "927": "▁rest",
930
+ "928": "▁probably",
931
+ "929": "▁dri",
932
+ "930": "▁Do",
933
+ "931": "▁gener",
934
+ "932": "▁anything",
935
+ "933": "▁lar",
936
+ "934": "▁My",
937
+ "935": "▁school",
938
+ "936": "▁lead",
939
+ "937": "▁sub",
940
+ "938": "▁ty",
941
+ "939": "▁plan",
942
+ "940": "▁seem",
943
+ "941": "▁whole",
944
+ "942": "irect",
945
+ "943": "▁light",
946
+ "944": "▁must",
947
+ "945": "▁mom",
948
+ "946": "▁opp",
949
+ "947": "▁support",
950
+ "948": "▁family",
951
+ "949": "ices",
952
+ "950": "amp",
953
+ "951": "▁proble",
954
+ "952": "▁dr",
955
+ "953": "ready",
956
+ "954": "▁using",
957
+ "955": "ense",
958
+ "956": "▁prov",
959
+ "957": "ush",
960
+ "958": "ax",
961
+ "959": "▁power",
962
+ "960": "▁Re",
963
+ "961": "alth",
964
+ "962": "▁ev",
965
+ "963": "▁stand",
966
+ "964": "▁war",
967
+ "965": "ts",
968
+ "966": "▁",
969
+ "967": "e",
970
+ "968": "t",
971
+ "969": "o",
972
+ "970": "a",
973
+ "971": "n",
974
+ "972": "i",
975
+ "973": "s",
976
+ "974": "r",
977
+ "975": "h",
978
+ "976": "l",
979
+ "977": "d",
980
+ "978": "u",
981
+ "979": "c",
982
+ "980": "m",
983
+ "981": "y",
984
+ "982": "g",
985
+ "983": "w",
986
+ "984": "f",
987
+ "985": "p",
988
+ "986": ".",
989
+ "987": "b",
990
+ "988": ",",
991
+ "989": "v",
992
+ "990": "k",
993
+ "991": "'",
994
+ "992": "I",
995
+ "993": "T",
996
+ "994": "A",
997
+ "995": "S",
998
+ "996": "x",
999
+ "997": "W",
1000
+ "998": "j",
1001
+ "999": "B",
1002
+ "1000": "C",
1003
+ "1001": "H",
1004
+ "1002": "?",
1005
+ "1003": "M",
1006
+ "1004": "O",
1007
+ "1005": "Y",
1008
+ "1006": "N",
1009
+ "1007": "P",
1010
+ "1008": "E",
1011
+ "1009": "q",
1012
+ "1010": "L",
1013
+ "1011": "D",
1014
+ "1012": "z",
1015
+ "1013": "G",
1016
+ "1014": "F",
1017
+ "1015": "R",
1018
+ "1016": "!",
1019
+ "1017": "J",
1020
+ "1018": "U",
1021
+ "1019": "K",
1022
+ "1020": "V",
1023
+ "1021": "Q",
1024
+ "1022": "Z",
1025
+ "1023": "X"
1026
+ }