RealTimeSTT 1.1.1__tar.gz → 1.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- realtimestt-1.2.0/LICENSE +202 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/MANIFEST.in +1 -0
- realtimestt-1.1.1/LICENSE → realtimestt-1.2.0/NOTICE +20 -0
- {realtimestt-1.1.1/realtimestt.egg-info → realtimestt-1.2.0}/PKG-INFO +93 -3
- {realtimestt-1.1.1 → realtimestt-1.2.0}/README.md +82 -1
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RELEASE_NOTES.md +81 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/audio_recorder.py +19 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/audio_recorder_client.py +4 -3
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/initialization.py +4 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/manual_audio_input.py +5 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/realtime.py +6 -7
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/recorder_config.py +8 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/safepipe.py +60 -18
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/state.py +14 -4
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/tail_transcription.py +93 -14
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/text_formatting.py +21 -1
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/install_sherpa_models.py +40 -5
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/model_manifests.py +68 -1
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/base.py +20 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/factory.py +4 -0
- realtimestt-1.2.0/RealtimeSTT/transcription_engines/kroko_fp32_engine.py +491 -0
- realtimestt-1.2.0/RealtimeSTT/transcription_engines/nemotron_ort_streaming.py +491 -0
- realtimestt-1.2.0/RealtimeSTT/transcription_engines/parakeet_onnx_engine.py +147 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/sherpa_onnx_engine.py +52 -2
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT_server/PRODUCTION_SERVER.md +74 -4
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT_server/README.md +1 -1
- realtimestt-1.2.0/RealtimeSTT_server/preview_tail.py +267 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT_server/production_server.py +584 -18
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT_server/stt_server.py +3 -2
- realtimestt-1.2.0/example_fastapi_server/inference_priority.py +69 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/example_fastapi_server/server.py +96 -44
- {realtimestt-1.1.1 → realtimestt-1.2.0/realtimestt.egg-info}/PKG-INFO +93 -3
- {realtimestt-1.1.1 → realtimestt-1.2.0}/realtimestt.egg-info/SOURCES.txt +6 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/realtimestt.egg-info/requires.txt +10 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/setup.py +9 -2
- {realtimestt-1.1.1 → realtimestt-1.2.0}/tests/test_release_guard.py +10 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/tests/test_tail_transcription.py +200 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/__init__.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/assets/__init__.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/assets/warmup_audio.wav +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/audio_input.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/__init__.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/audio_input_worker.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/lifecycle.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/preroll.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/preview_transcription.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/realtime_boundary_detector.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/realtime_callbacks.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/realtime_merge.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/realtime_text_stabilizer.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/recording.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/recording_buffers.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/runtime.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/shutdown.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/silero_vad.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/transcription.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/transcription_api.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/voice_activity.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/core/wakeword.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/engines/__init__.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/engines/base_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/install_kroko.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/__init__.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/_model_utils.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/cohere_transcribe_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/faster_whisper_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/funasr_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/granite_speech_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/hf_transformers_engines.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/kroko_onnx_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/moonshine_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/nemotron_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/omnilingual_asr_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/openai_api_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/openai_whisper_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/parakeet_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/qwen3_asr_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/transcribe_cpp_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT/transcription_engines/whisper_cpp_engine.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT_server/__init__.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT_server/index.html +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT_server/install_packages.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/RealtimeSTT_server/stt_cli_client.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/example_fastapi_server/MULTI_USER_IMPLEMENTATION_GUIDE.md +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/example_fastapi_server/README.md +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/example_fastapi_server/__init__.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/example_fastapi_server/protocol.py +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/example_fastapi_server/requirements.txt +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/example_fastapi_server/run_multi_user_perf.cmd +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/example_fastapi_server/static/index.html +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/realtimestt.egg-info/dependency_links.txt +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/realtimestt.egg-info/entry_points.txt +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/realtimestt.egg-info/top_level.txt +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/requirements.txt +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/setup.cfg +0 -0
- {realtimestt-1.1.1 → realtimestt-1.2.0}/tests/test_preview_transcription.py +0 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
|
|
2
|
+
Apache License
|
|
3
|
+
Version 2.0, January 2004
|
|
4
|
+
http://www.apache.org/licenses/
|
|
5
|
+
|
|
6
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
7
|
+
|
|
8
|
+
1. Definitions.
|
|
9
|
+
|
|
10
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
11
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
12
|
+
|
|
13
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
14
|
+
the copyright owner that is granting the License.
|
|
15
|
+
|
|
16
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
17
|
+
other entities that control, are controlled by, or are under common
|
|
18
|
+
control with that entity. For the purposes of this definition,
|
|
19
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
20
|
+
direction or management of such entity, whether by contract or
|
|
21
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
22
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
23
|
+
|
|
24
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
25
|
+
exercising permissions granted by this License.
|
|
26
|
+
|
|
27
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
28
|
+
including but not limited to software source code, documentation
|
|
29
|
+
source, and configuration files.
|
|
30
|
+
|
|
31
|
+
"Object" form shall mean any form resulting from mechanical
|
|
32
|
+
transformation or translation of a Source form, including but
|
|
33
|
+
not limited to compiled object code, generated documentation,
|
|
34
|
+
and conversions to other media types.
|
|
35
|
+
|
|
36
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
37
|
+
Object form, made available under the License, as indicated by a
|
|
38
|
+
copyright notice that is included in or attached to the work
|
|
39
|
+
(an example is provided in the Appendix below).
|
|
40
|
+
|
|
41
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
42
|
+
form, that is based on (or derived from) the Work and for which the
|
|
43
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
44
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
45
|
+
of this License, Derivative Works shall not include works that remain
|
|
46
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
47
|
+
the Work and Derivative Works thereof.
|
|
48
|
+
|
|
49
|
+
"Contribution" shall mean any work of authorship, including
|
|
50
|
+
the original version of the Work and any modifications or additions
|
|
51
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
52
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
53
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
54
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
55
|
+
means any form of electronic, verbal, or written communication sent
|
|
56
|
+
to the Licensor or its representatives, including but not limited to
|
|
57
|
+
communication on electronic mailing lists, source code control systems,
|
|
58
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
59
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
60
|
+
excluding communication that is conspicuously marked or otherwise
|
|
61
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
62
|
+
|
|
63
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
64
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
65
|
+
subsequently incorporated within the Work.
|
|
66
|
+
|
|
67
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
68
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
69
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
70
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
71
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
72
|
+
Work and such Derivative Works in Source or Object form.
|
|
73
|
+
|
|
74
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
75
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
76
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
77
|
+
(except as stated in this section) patent license to make, have made,
|
|
78
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
79
|
+
where such license applies only to those patent claims licensable
|
|
80
|
+
by such Contributor that are necessarily infringed by their
|
|
81
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
82
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
83
|
+
institute patent litigation against any entity (including a
|
|
84
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
85
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
86
|
+
or contributory patent infringement, then any patent licenses
|
|
87
|
+
granted to You under this License for that Work shall terminate
|
|
88
|
+
as of the date such litigation is filed.
|
|
89
|
+
|
|
90
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
91
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
92
|
+
modifications, and in Source or Object form, provided that You
|
|
93
|
+
meet the following conditions:
|
|
94
|
+
|
|
95
|
+
(a) You must give any other recipients of the Work or
|
|
96
|
+
Derivative Works a copy of this License; and
|
|
97
|
+
|
|
98
|
+
(b) You must cause any modified files to carry prominent notices
|
|
99
|
+
stating that You changed the files; and
|
|
100
|
+
|
|
101
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
102
|
+
that You distribute, all copyright, patent, trademark, and
|
|
103
|
+
attribution notices from the Source form of the Work,
|
|
104
|
+
excluding those notices that do not pertain to any part of
|
|
105
|
+
the Derivative Works; and
|
|
106
|
+
|
|
107
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
108
|
+
distribution, then any Derivative Works that You distribute must
|
|
109
|
+
include a readable copy of the attribution notices contained
|
|
110
|
+
within such NOTICE file, excluding those notices that do not
|
|
111
|
+
pertain to any part of the Derivative Works, in at least one
|
|
112
|
+
of the following places: within a NOTICE text file distributed
|
|
113
|
+
as part of the Derivative Works; within the Source form or
|
|
114
|
+
documentation, if provided along with the Derivative Works; or,
|
|
115
|
+
within a display generated by the Derivative Works, if and
|
|
116
|
+
wherever such third-party notices normally appear. The contents
|
|
117
|
+
of the NOTICE file are for informational purposes only and
|
|
118
|
+
do not modify the License. You may add Your own attribution
|
|
119
|
+
notices within Derivative Works that You distribute, alongside
|
|
120
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
121
|
+
that such additional attribution notices cannot be construed
|
|
122
|
+
as modifying the License.
|
|
123
|
+
|
|
124
|
+
You may add Your own copyright statement to Your modifications and
|
|
125
|
+
may provide additional or different license terms and conditions
|
|
126
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
127
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
128
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
129
|
+
the conditions stated in this License.
|
|
130
|
+
|
|
131
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
132
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
133
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
134
|
+
this License, without any additional terms or conditions.
|
|
135
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
136
|
+
the terms of any separate license agreement you may have executed
|
|
137
|
+
with Licensor regarding such Contributions.
|
|
138
|
+
|
|
139
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
140
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
141
|
+
except as required for reasonable and customary use in describing the
|
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
143
|
+
|
|
144
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
145
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
146
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
147
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
148
|
+
implied, including, without limitation, any warranties or conditions
|
|
149
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
150
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
151
|
+
appropriateness of using or redistributing the Work and assume any
|
|
152
|
+
risks associated with Your exercise of permissions under this License.
|
|
153
|
+
|
|
154
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
155
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
156
|
+
unless required by applicable law (such as deliberate and grossly
|
|
157
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
158
|
+
liable to You for damages, including any direct, indirect, special,
|
|
159
|
+
incidental, or consequential damages of any character arising as a
|
|
160
|
+
result of this License or out of the use or inability to use the
|
|
161
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
162
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
163
|
+
other commercial damages or losses), even if such Contributor
|
|
164
|
+
has been advised of the possibility of such damages.
|
|
165
|
+
|
|
166
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
+
or other liability obligations and/or rights consistent with this
|
|
170
|
+
License. However, in accepting such obligations, You may act only
|
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
173
|
+
defend, and hold each Contributor harmless for any liability
|
|
174
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
175
|
+
of your accepting any such warranty or additional liability.
|
|
176
|
+
|
|
177
|
+
END OF TERMS AND CONDITIONS
|
|
178
|
+
|
|
179
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
180
|
+
|
|
181
|
+
To apply the Apache License to your work, attach the following
|
|
182
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
183
|
+
replaced with your own identifying information. (Don't include
|
|
184
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
185
|
+
comment syntax for the file format. We also recommend that a
|
|
186
|
+
file or class name and description of purpose be included on the
|
|
187
|
+
same "printed page" as the copyright notice for easier
|
|
188
|
+
identification within third-party archives.
|
|
189
|
+
|
|
190
|
+
Copyright [yyyy] [name of copyright owner]
|
|
191
|
+
|
|
192
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
193
|
+
you may not use this file except in compliance with the License.
|
|
194
|
+
You may obtain a copy of the License at
|
|
195
|
+
|
|
196
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
197
|
+
|
|
198
|
+
Unless required by applicable law or agreed to in writing, software
|
|
199
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
200
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
201
|
+
See the License for the specific language governing permissions and
|
|
202
|
+
limitations under the License.
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
RealtimeSTT
|
|
2
|
+
Copyright 2023-2026 Kolja Beigel and the RealtimeSTT contributors
|
|
3
|
+
|
|
4
|
+
This product is licensed under the Apache License, Version 2.0 (see LICENSE).
|
|
5
|
+
|
|
6
|
+
Third-party components
|
|
7
|
+
----------------------
|
|
8
|
+
The Apache-2.0 license covers the RealtimeSTT source code only. Optional
|
|
9
|
+
transcription engines, voice activity detectors, wake-word engines, model
|
|
10
|
+
weights and hosted services used through RealtimeSTT are not part of this
|
|
11
|
+
license grant. They remain under their own licenses and terms, which you must
|
|
12
|
+
review and comply with yourself. See docs/licenses.md for an overview.
|
|
13
|
+
|
|
14
|
+
Earlier MIT-licensed versions
|
|
15
|
+
-----------------------------
|
|
16
|
+
RealtimeSTT releases up to and including 1.1.2 were published under the MIT
|
|
17
|
+
License, and those releases remain available under it. Portions of this
|
|
18
|
+
software originate from those releases and from contributions made under the
|
|
19
|
+
MIT License; for those portions the following notice is retained:
|
|
20
|
+
|
|
1
21
|
MIT License
|
|
2
22
|
|
|
3
23
|
Copyright (c) 2023 Kolja Beigel
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: realtimestt
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: A fast Voice Activity Detection and Transcription System
|
|
5
5
|
Home-page: https://github.com/KoljaB/RealtimeSTT
|
|
6
6
|
Author: Kolja Beigel
|
|
7
7
|
Author-email: kolja.beigel@web.de
|
|
8
|
-
License:
|
|
8
|
+
License: Apache-2.0
|
|
9
9
|
Keywords: real-time,audio,transcription,speech-to-text,voice-activity-detection,VAD,real-time-transcription,ambient-noise-detection,microphone-input,faster_whisper,speech-recognition,voice-assistants,audio-processing,buffered-transcription,pyaudio,ambient-noise-level,voice-deactivity
|
|
10
10
|
Requires-Python: >=3.11,<3.13
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
License-File: LICENSE
|
|
13
|
+
License-File: NOTICE
|
|
13
14
|
Requires-Dist: PyAudio==0.2.14
|
|
14
15
|
Requires-Dist: webrtcvad-wheels==2.0.14
|
|
15
16
|
Requires-Dist: halo==0.0.31
|
|
@@ -20,6 +21,12 @@ Requires-Dist: scipy==1.17.1
|
|
|
20
21
|
Requires-Dist: websockets==16.0
|
|
21
22
|
Requires-Dist: websocket-client==1.9.0
|
|
22
23
|
Requires-Dist: soundfile==0.13.1
|
|
24
|
+
Provides-Extra: parakeet-onnx
|
|
25
|
+
Requires-Dist: onnx-asr==0.12.0; extra == "parakeet-onnx"
|
|
26
|
+
Requires-Dist: onnxruntime==1.30.0; extra == "parakeet-onnx"
|
|
27
|
+
Provides-Extra: nemotron-ort
|
|
28
|
+
Requires-Dist: onnxruntime==1.23.2; extra == "nemotron-ort"
|
|
29
|
+
Requires-Dist: kaldi-native-fbank==1.22.4; extra == "nemotron-ort"
|
|
23
30
|
Provides-Extra: minimal
|
|
24
31
|
Provides-Extra: faster-whisper
|
|
25
32
|
Requires-Dist: faster-whisper==1.2.1; extra == "faster-whisper"
|
|
@@ -134,6 +141,8 @@ Requires-Dist: uvicorn[standard]<1,>=0.30; extra == "all"
|
|
|
134
141
|
Requires-Dist: silero-vad[onnx-cpu]>=6.2.1; python_version >= "3.8" and extra == "all"
|
|
135
142
|
Requires-Dist: transformers; extra == "all"
|
|
136
143
|
Requires-Dist: nemo_toolkit[asr]; extra == "all"
|
|
144
|
+
Requires-Dist: onnx-asr==0.12.0; extra == "all"
|
|
145
|
+
Requires-Dist: onnxruntime==1.30.0; extra == "all"
|
|
137
146
|
Requires-Dist: torch==2.8.0; (python_version >= "3.10" and python_version < "3.12" and platform_system != "Windows") and extra == "all"
|
|
138
147
|
Requires-Dist: torchaudio==2.8.0; (python_version >= "3.10" and python_version < "3.12" and platform_system != "Windows") and extra == "all"
|
|
139
148
|
Requires-Dist: omnilingual-asr>=0.2.0; (python_version >= "3.10" and python_version < "3.12" and platform_system != "Windows") and extra == "all"
|
|
@@ -255,6 +264,10 @@ model after the builder finishes:
|
|
|
255
264
|
|
|
256
265
|
# RealtimeSTT
|
|
257
266
|
|
|
267
|
+
> **License:** RealtimeSTT's own code is Apache-2.0. Engines, models, VADs and
|
|
268
|
+
> wake-word backends keep their own licenses, which you must check yourself:
|
|
269
|
+
> [license notes](docs/licenses.md).
|
|
270
|
+
|
|
258
271
|
RealtimeSTT is a Python speech-to-text library for applications that need
|
|
259
272
|
voice activity detection, fast transcription, optional realtime text updates,
|
|
260
273
|
wake words, and direct access to audio streams. It is designed for assistants,
|
|
@@ -265,6 +278,59 @@ The general-purpose default path uses `faster_whisper`. Other engines are
|
|
|
265
278
|
available through install extras when their optional dependencies and models
|
|
266
279
|
are present.
|
|
267
280
|
|
|
281
|
+
## New in 1.2.0: fast pause transcripts for voice assistants
|
|
282
|
+
|
|
283
|
+
A voice assistant has to decide, every time the user pauses, whether the turn
|
|
284
|
+
is over and what was said. The sooner it has a reliable transcript of the
|
|
285
|
+
words so far, the sooner it can judge the turn, start the language model, and
|
|
286
|
+
answer. RealtimeSTT 1.2.0 makes that transcript (the **Preview**) much faster
|
|
287
|
+
on the production server:
|
|
288
|
+
|
|
289
|
+
- **Live-flush Preview** (`--preview-live-flush`, new `nemotron_ort` engine).
|
|
290
|
+
At a pause the streaming model decodes the audio it has not yet finalized on
|
|
291
|
+
a copy of its state, so the live stream continues undisturbed. The Preview
|
|
292
|
+
arrives in tens of milliseconds instead of waiting for a full re-decode. The
|
|
293
|
+
accurate full-model text follows as a separate `previewRecord` event, and an
|
|
294
|
+
optional second flush stage (`previewRefined`) adds a slightly longer read.
|
|
295
|
+
- **Tail-anchored Preview** (`--preview-input-mode tail`). Instead of
|
|
296
|
+
re-decoding the whole turn at every pause, the final model decodes only the
|
|
297
|
+
newest audio and joins it to the text already recognized. The cost no longer
|
|
298
|
+
grows with the length of the turn. If the join cannot be proven, the server
|
|
299
|
+
decodes the full turn.
|
|
300
|
+
- **Orukeet final model** (`stt-install-sherpa-models --model orukeet`): an
|
|
301
|
+
optional, hash-verified Parakeet TDT derivative for 25 European languages.
|
|
302
|
+
|
|
303
|
+
Measured once on the Linux x86-64 production host, on a 12-second English
|
|
304
|
+
utterance: live-flush Preview **48 ms**, tail-mode Preview **149 ms**, and a
|
|
305
|
+
full-turn Preview **about 710 ms**, from request to event.
|
|
306
|
+
|
|
307
|
+
**These fast paths are CPU only.** `nemotron_ort` runs on ONNX Runtime's CPU
|
|
308
|
+
provider, and the tested profile is the CPU Nemotron/Orukeet pair on Linux
|
|
309
|
+
x86-64. On GPU, `faster_whisper` remains the recommended general-purpose path
|
|
310
|
+
and does not offer live flush.
|
|
311
|
+
|
|
312
|
+
A voice-assistant server with all three enabled:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
python -m pip install "RealtimeSTT[server,sherpa-onnx,nemotron-ort]"
|
|
316
|
+
stt-install-sherpa-models --root ./models/sherpa-onnx --model nemotron
|
|
317
|
+
stt-install-sherpa-models --root ./models/sherpa-onnx --model orukeet
|
|
318
|
+
stt-server-production \
|
|
319
|
+
--engine sherpa_onnx_parakeet --model oruk/orukeet \
|
|
320
|
+
--realtime-engine nemotron_ort \
|
|
321
|
+
--realtime-model ./models/sherpa-onnx/sherpa-onnx-nemotron-3.5-asr-streaming-0.6b-560ms-int8-2026-06-11 \
|
|
322
|
+
--download-root ./models/sherpa-onnx --device cpu \
|
|
323
|
+
--preview-only-transcription \
|
|
324
|
+
--preview-input-mode tail --preview-live-flush
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
The client sends `{"type":"preview","previewRequestId":"pause-1","pauseTextSource":"live_flush"}`
|
|
328
|
+
when it detects a pause. Protocol details, fallbacks and events are in the
|
|
329
|
+
[production server guide](RealtimeSTT_server/PRODUCTION_SERVER.md#live-flush-preview---preview-live-flush).
|
|
330
|
+
The `nemotron-ort` extra pins `onnxruntime==1.23.2`; do not combine it with the
|
|
331
|
+
`parakeet-onnx` extra in one environment. Full change list:
|
|
332
|
+
[release notes](RELEASE_NOTES.md).
|
|
333
|
+
|
|
268
334
|
## Recommended Engine Profiles
|
|
269
335
|
|
|
270
336
|
- **CUDA / GPU:** Keep using the established `faster_whisper` CUDA setup. It
|
|
@@ -290,6 +356,20 @@ See the [production server guide](RealtimeSTT_server/PRODUCTION_SERVER.md) for
|
|
|
290
356
|
the authenticated HTTP/WebSocket deployment recipe and exact pinned model
|
|
291
357
|
directories.
|
|
292
358
|
|
|
359
|
+
### Orukeet CPU performance: official runtime tuning
|
|
360
|
+
|
|
361
|
+
**Official sherpa-ONNX 1.13.8 supports disabling CPU worker spinning through a
|
|
362
|
+
provider configuration file.** On the tested Ubuntu 24.04 x86-64 / Python 3.12
|
|
363
|
+
host, seven threads with spinning disabled beat our earlier custom build:
|
|
364
|
+
**107.2 versus 113.3 ms** for five-second audio over 20 alternating-order rounds.
|
|
365
|
+
The same Orukeet INT8 model and CPU affinity were used; transcripts matched.
|
|
366
|
+
|
|
367
|
+
This configuration uses official PyPI wheels and requires no custom native build.
|
|
368
|
+
Install and enable it explicitly; the standard extra and model installer do not
|
|
369
|
+
automatically select a CPU performance profile. Seven threads is a measured
|
|
370
|
+
setting for one host. See the
|
|
371
|
+
[installation, configuration and benchmark details](docs/engines/sherpa-onnx.md#cpu-performance-and-installation).
|
|
372
|
+
|
|
293
373
|
### Support RealtimeSTT
|
|
294
374
|
|
|
295
375
|
If RealtimeSTT saved you time, one GitHub star is a simple way to help make it more stable.
|
|
@@ -511,7 +591,17 @@ unit tests separate from opt-in real-model tests; see [docs/testing.md](docs/tes
|
|
|
511
591
|
|
|
512
592
|
## License
|
|
513
593
|
|
|
514
|
-
|
|
594
|
+
RealtimeSTT's own source code is licensed under the
|
|
595
|
+
[Apache License 2.0](LICENSE); see also [NOTICE](NOTICE). Releases up to and
|
|
596
|
+
including 1.1.2 were published under the MIT License.
|
|
597
|
+
|
|
598
|
+
This license covers the RealtimeSTT code only. It does not relicense, and does
|
|
599
|
+
not release you from checking and complying with, the licenses and terms of
|
|
600
|
+
the transcription engines, VAD and wake-word engines, model weights or hosted
|
|
601
|
+
services you use through this library. Some of them require attribution,
|
|
602
|
+
share-alike, a commercial license or a provider agreement. Start with the
|
|
603
|
+
[license notes](docs/licenses.md) and verify the upstream terms for the exact
|
|
604
|
+
package, model and revision you ship.
|
|
515
605
|
|
|
516
606
|
## Author
|
|
517
607
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# RealtimeSTT
|
|
2
2
|
|
|
3
|
+
> **License:** RealtimeSTT's own code is Apache-2.0. Engines, models, VADs and
|
|
4
|
+
> wake-word backends keep their own licenses, which you must check yourself:
|
|
5
|
+
> [license notes](docs/licenses.md).
|
|
6
|
+
|
|
3
7
|
RealtimeSTT is a Python speech-to-text library for applications that need
|
|
4
8
|
voice activity detection, fast transcription, optional realtime text updates,
|
|
5
9
|
wake words, and direct access to audio streams. It is designed for assistants,
|
|
@@ -10,6 +14,59 @@ The general-purpose default path uses `faster_whisper`. Other engines are
|
|
|
10
14
|
available through install extras when their optional dependencies and models
|
|
11
15
|
are present.
|
|
12
16
|
|
|
17
|
+
## New in 1.2.0: fast pause transcripts for voice assistants
|
|
18
|
+
|
|
19
|
+
A voice assistant has to decide, every time the user pauses, whether the turn
|
|
20
|
+
is over and what was said. The sooner it has a reliable transcript of the
|
|
21
|
+
words so far, the sooner it can judge the turn, start the language model, and
|
|
22
|
+
answer. RealtimeSTT 1.2.0 makes that transcript (the **Preview**) much faster
|
|
23
|
+
on the production server:
|
|
24
|
+
|
|
25
|
+
- **Live-flush Preview** (`--preview-live-flush`, new `nemotron_ort` engine).
|
|
26
|
+
At a pause the streaming model decodes the audio it has not yet finalized on
|
|
27
|
+
a copy of its state, so the live stream continues undisturbed. The Preview
|
|
28
|
+
arrives in tens of milliseconds instead of waiting for a full re-decode. The
|
|
29
|
+
accurate full-model text follows as a separate `previewRecord` event, and an
|
|
30
|
+
optional second flush stage (`previewRefined`) adds a slightly longer read.
|
|
31
|
+
- **Tail-anchored Preview** (`--preview-input-mode tail`). Instead of
|
|
32
|
+
re-decoding the whole turn at every pause, the final model decodes only the
|
|
33
|
+
newest audio and joins it to the text already recognized. The cost no longer
|
|
34
|
+
grows with the length of the turn. If the join cannot be proven, the server
|
|
35
|
+
decodes the full turn.
|
|
36
|
+
- **Orukeet final model** (`stt-install-sherpa-models --model orukeet`): an
|
|
37
|
+
optional, hash-verified Parakeet TDT derivative for 25 European languages.
|
|
38
|
+
|
|
39
|
+
Measured once on the Linux x86-64 production host, on a 12-second English
|
|
40
|
+
utterance: live-flush Preview **48 ms**, tail-mode Preview **149 ms**, and a
|
|
41
|
+
full-turn Preview **about 710 ms**, from request to event.
|
|
42
|
+
|
|
43
|
+
**These fast paths are CPU only.** `nemotron_ort` runs on ONNX Runtime's CPU
|
|
44
|
+
provider, and the tested profile is the CPU Nemotron/Orukeet pair on Linux
|
|
45
|
+
x86-64. On GPU, `faster_whisper` remains the recommended general-purpose path
|
|
46
|
+
and does not offer live flush.
|
|
47
|
+
|
|
48
|
+
A voice-assistant server with all three enabled:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
python -m pip install "RealtimeSTT[server,sherpa-onnx,nemotron-ort]"
|
|
52
|
+
stt-install-sherpa-models --root ./models/sherpa-onnx --model nemotron
|
|
53
|
+
stt-install-sherpa-models --root ./models/sherpa-onnx --model orukeet
|
|
54
|
+
stt-server-production \
|
|
55
|
+
--engine sherpa_onnx_parakeet --model oruk/orukeet \
|
|
56
|
+
--realtime-engine nemotron_ort \
|
|
57
|
+
--realtime-model ./models/sherpa-onnx/sherpa-onnx-nemotron-3.5-asr-streaming-0.6b-560ms-int8-2026-06-11 \
|
|
58
|
+
--download-root ./models/sherpa-onnx --device cpu \
|
|
59
|
+
--preview-only-transcription \
|
|
60
|
+
--preview-input-mode tail --preview-live-flush
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The client sends `{"type":"preview","previewRequestId":"pause-1","pauseTextSource":"live_flush"}`
|
|
64
|
+
when it detects a pause. Protocol details, fallbacks and events are in the
|
|
65
|
+
[production server guide](RealtimeSTT_server/PRODUCTION_SERVER.md#live-flush-preview---preview-live-flush).
|
|
66
|
+
The `nemotron-ort` extra pins `onnxruntime==1.23.2`; do not combine it with the
|
|
67
|
+
`parakeet-onnx` extra in one environment. Full change list:
|
|
68
|
+
[release notes](RELEASE_NOTES.md).
|
|
69
|
+
|
|
13
70
|
## Recommended Engine Profiles
|
|
14
71
|
|
|
15
72
|
- **CUDA / GPU:** Keep using the established `faster_whisper` CUDA setup. It
|
|
@@ -35,6 +92,20 @@ See the [production server guide](RealtimeSTT_server/PRODUCTION_SERVER.md) for
|
|
|
35
92
|
the authenticated HTTP/WebSocket deployment recipe and exact pinned model
|
|
36
93
|
directories.
|
|
37
94
|
|
|
95
|
+
### Orukeet CPU performance: official runtime tuning
|
|
96
|
+
|
|
97
|
+
**Official sherpa-ONNX 1.13.8 supports disabling CPU worker spinning through a
|
|
98
|
+
provider configuration file.** On the tested Ubuntu 24.04 x86-64 / Python 3.12
|
|
99
|
+
host, seven threads with spinning disabled beat our earlier custom build:
|
|
100
|
+
**107.2 versus 113.3 ms** for five-second audio over 20 alternating-order rounds.
|
|
101
|
+
The same Orukeet INT8 model and CPU affinity were used; transcripts matched.
|
|
102
|
+
|
|
103
|
+
This configuration uses official PyPI wheels and requires no custom native build.
|
|
104
|
+
Install and enable it explicitly; the standard extra and model installer do not
|
|
105
|
+
automatically select a CPU performance profile. Seven threads is a measured
|
|
106
|
+
setting for one host. See the
|
|
107
|
+
[installation, configuration and benchmark details](docs/engines/sherpa-onnx.md#cpu-performance-and-installation).
|
|
108
|
+
|
|
38
109
|
### Support RealtimeSTT
|
|
39
110
|
|
|
40
111
|
If RealtimeSTT saved you time, one GitHub star is a simple way to help make it more stable.
|
|
@@ -256,7 +327,17 @@ unit tests separate from opt-in real-model tests; see [docs/testing.md](docs/tes
|
|
|
256
327
|
|
|
257
328
|
## License
|
|
258
329
|
|
|
259
|
-
|
|
330
|
+
RealtimeSTT's own source code is licensed under the
|
|
331
|
+
[Apache License 2.0](LICENSE); see also [NOTICE](NOTICE). Releases up to and
|
|
332
|
+
including 1.1.2 were published under the MIT License.
|
|
333
|
+
|
|
334
|
+
This license covers the RealtimeSTT code only. It does not relicense, and does
|
|
335
|
+
not release you from checking and complying with, the licenses and terms of
|
|
336
|
+
the transcription engines, VAD and wake-word engines, model weights or hosted
|
|
337
|
+
services you use through this library. Some of them require attribution,
|
|
338
|
+
share-alike, a commercial license or a provider agreement. Start with the
|
|
339
|
+
[license notes](docs/licenses.md) and verify the upstream terms for the exact
|
|
340
|
+
package, model and revision you ship.
|
|
260
341
|
|
|
261
342
|
## Author
|
|
262
343
|
|
|
@@ -1,5 +1,86 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
+
## 1.2.0 - 2026-11-11
|
|
4
|
+
|
|
5
|
+
This minor release relicenses RealtimeSTT under Apache-2.0, adds faster
|
|
6
|
+
Preview paths to the production server, adds the optional Orukeet final model
|
|
7
|
+
and a `nemotron_ort` streaming engine, and includes community fixes merged
|
|
8
|
+
since 1.1.2.
|
|
9
|
+
|
|
10
|
+
### License
|
|
11
|
+
|
|
12
|
+
- RealtimeSTT is now licensed under the Apache License 2.0 (#344). Releases up
|
|
13
|
+
to and including 1.1.2 were published under the MIT License.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Production server: opt-in tail-anchored Preview decoding with
|
|
18
|
+
`--preview-input-mode tail` and `--preview-tail-overlap-seconds`. The
|
|
19
|
+
Preview decodes only the recent speech tail and splices it onto the live
|
|
20
|
+
text; when the splice cannot be proven it decodes the full turn.
|
|
21
|
+
Capabilities report the mode as `preview.decodeMode`.
|
|
22
|
+
- Production server: `--preview-live-flush`. A Preview request with
|
|
23
|
+
`pauseTextSource = "live_flush"` is answered from a snapshot flush of the
|
|
24
|
+
live streaming lane; the full-model decode follows as a `previewRecord`
|
|
25
|
+
event, and an optional second flush stage publishes `previewRefined`.
|
|
26
|
+
Capabilities report `preview.liveFlush`.
|
|
27
|
+
- `nemotron_ort` streaming engine (ONNX Runtime Nemotron with snapshot flush)
|
|
28
|
+
and the `nemotron-ort` extra. It pins `onnxruntime==1.23.2`; do not install
|
|
29
|
+
it in the same environment as the `parakeet-onnx` extra.
|
|
30
|
+
- Optional verified Orukeet final transcription model
|
|
31
|
+
(`stt-install-sherpa-models --model orukeet`) (#328).
|
|
32
|
+
- Spinner status messages are configurable on `AudioToTextRecorder` (#317,
|
|
33
|
+
hardened in #342).
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- Tail merge keeps Devanagari and other Brahmic vowel marks and accepts
|
|
38
|
+
mark-only corrections backed by exact neighbouring words (#338).
|
|
39
|
+
- Words re-decoded in a Preview tail keep the anchor's casing.
|
|
40
|
+
- The final period is added when a transcript ends in a combining vowel sign
|
|
41
|
+
(#329).
|
|
42
|
+
- `feed_audio` no longer crashes on a chunk too short to resample (#330).
|
|
43
|
+
- The server starts with the client's language when the client sends an empty
|
|
44
|
+
language (#332).
|
|
45
|
+
- The client can turn off `silero_deactivity_detection` (#335).
|
|
46
|
+
- GPU installs require a compatible OpenWakeWord (`>=0.6.0`) (#327, #336).
|
|
47
|
+
|
|
48
|
+
### Documentation and tests
|
|
49
|
+
|
|
50
|
+
- Requiring a wake word for each recording is documented (#339).
|
|
51
|
+
- OpenWakeWord backend aliases are covered by tests (#337).
|
|
52
|
+
- Server priority and cancellation fences run in unit CI.
|
|
53
|
+
|
|
54
|
+
## 1.1.2 - 2026-08-30
|
|
55
|
+
|
|
56
|
+
This patch release reduces advisory early-RMS Preview latency while preserving
|
|
57
|
+
the authoritative transcription retry and full-turn accuracy contract. See
|
|
58
|
+
[the release-readiness checklist](docs/release-1.1.2-readiness.md) for the
|
|
59
|
+
required build, deployment, attestation, and publication evidence.
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
|
|
63
|
+
- Production capabilities now advertise the exact `preview.earlyRms` contract:
|
|
64
|
+
request mode, 25 ms first-attempt decoder flush, one-attempt limit, and no
|
|
65
|
+
advisory empty-result retry.
|
|
66
|
+
|
|
67
|
+
### Changed
|
|
68
|
+
|
|
69
|
+
- Signed source/wheel/sdist parity now canonicalizes CRLF/LF line endings for
|
|
70
|
+
shipped HTML and command files; the release privacy scan inspects those text
|
|
71
|
+
assets too.
|
|
72
|
+
- The exact advisory `previewMode = "early_rms"` appends 25 ms of zero PCM to
|
|
73
|
+
its first and only decode and publishes an empty result immediately.
|
|
74
|
+
- Authoritative, missing, unknown, and malformed Preview modes retain the
|
|
75
|
+
existing conditional 500 ms empty-result retry unchanged.
|
|
76
|
+
|
|
77
|
+
### Release boundaries
|
|
78
|
+
|
|
79
|
+
- Miep decides when an early browser RMS pause is advisory; RealtimeSTT does
|
|
80
|
+
not change endpoint detection, transcript authority, or response text.
|
|
81
|
+
- LLM admission-proxy cancellation is a separate deployment component and is
|
|
82
|
+
not part of this Python distribution.
|
|
83
|
+
|
|
3
84
|
## 1.1.1 - 2026-08-28
|
|
4
85
|
|
|
5
86
|
This patch release fixes stale Preview ASR work delaying newer full-turn
|
|
@@ -233,6 +233,10 @@ class AudioToTextRecorder:
|
|
|
233
233
|
on_merged_realtime_transcription_update=None,
|
|
234
234
|
on_realtime_transcription_merge_update=None,
|
|
235
235
|
ultrafast_realtime_max_tail_words: int = 5,
|
|
236
|
+
spinner_listening_text: str = "speak now",
|
|
237
|
+
spinner_wakeword_text: str = "say {wake_words}",
|
|
238
|
+
spinner_transcribing_text: str = "transcribing",
|
|
239
|
+
spinner_recording_text: str = "recording",
|
|
236
240
|
):
|
|
237
241
|
"""
|
|
238
242
|
Initializes an audio recorder and transcription
|
|
@@ -292,6 +296,17 @@ class AudioToTextRecorder:
|
|
|
292
296
|
feed_audio() method.
|
|
293
297
|
- spinner (bool, default=True): Show spinner animation with current
|
|
294
298
|
state.
|
|
299
|
+
- spinner_listening_text (str, default="speak now"): Spinner text
|
|
300
|
+
shown while listening for voice activity. Set to "" to show no
|
|
301
|
+
message.
|
|
302
|
+
- spinner_wakeword_text (str, default="say {wake_words}"): Spinner
|
|
303
|
+
text shown while waiting for wake words. ``{wake_words}`` is
|
|
304
|
+
replaced with the configured wake words. Set to "" to show no
|
|
305
|
+
message.
|
|
306
|
+
- spinner_transcribing_text (str, default="transcribing"): Spinner
|
|
307
|
+
text shown while transcribing. Set to "" to show no message.
|
|
308
|
+
- spinner_recording_text (str, default="recording"): Spinner text
|
|
309
|
+
shown while recording. Set to "" to show no message.
|
|
295
310
|
- level (int, default=logging.WARNING): Logging level.
|
|
296
311
|
- batch_size (int, default=16): Batch size for the main transcription
|
|
297
312
|
|
|
@@ -729,6 +744,10 @@ class AudioToTextRecorder:
|
|
|
729
744
|
ultrafast_realtime_max_tail_words=(
|
|
730
745
|
ultrafast_realtime_max_tail_words
|
|
731
746
|
),
|
|
747
|
+
spinner_listening_text=spinner_listening_text,
|
|
748
|
+
spinner_wakeword_text=spinner_wakeword_text,
|
|
749
|
+
spinner_transcribing_text=spinner_transcribing_text,
|
|
750
|
+
spinner_recording_text=spinner_recording_text,
|
|
732
751
|
)
|
|
733
752
|
|
|
734
753
|
initialize_recorder(
|
|
@@ -515,7 +515,7 @@ class AudioToTextRecorderClient:
|
|
|
515
515
|
if self.debug_mode:
|
|
516
516
|
args.append('--debug') # flag, no need for True/False
|
|
517
517
|
|
|
518
|
-
if self.language:
|
|
518
|
+
if self.language is not None:
|
|
519
519
|
args += ['--language', self.language]
|
|
520
520
|
if self.silero_sensitivity is not None:
|
|
521
521
|
args += ['--silero_sensitivity', str(self.silero_sensitivity)]
|
|
@@ -536,8 +536,9 @@ class AudioToTextRecorderClient:
|
|
|
536
536
|
'--deactivity_silence_confirmation_duration',
|
|
537
537
|
str(self.deactivity_silence_confirmation_duration),
|
|
538
538
|
]
|
|
539
|
-
|
|
540
|
-
|
|
539
|
+
# stt-server defaults this to True, so False has to be sent explicitly too
|
|
540
|
+
args.append('--silero_deactivity_detection' if self.silero_deactivity_detection
|
|
541
|
+
else '--no-silero_deactivity_detection')
|
|
541
542
|
if self.beam_size is not None:
|
|
542
543
|
args += ['--beam_size', str(self.beam_size)]
|
|
543
544
|
if self.beam_size_realtime is not None:
|
|
@@ -287,6 +287,10 @@ def _assign_initial_attributes(recorder, init_args, normalize_wakeword_backend):
|
|
|
287
287
|
recorder.warmup_vad = init_args["warmup_vad"]
|
|
288
288
|
recorder.listen_start = 0
|
|
289
289
|
recorder.spinner = init_args["spinner"]
|
|
290
|
+
recorder.spinner_listening_text = init_args["spinner_listening_text"]
|
|
291
|
+
recorder.spinner_wakeword_text = init_args["spinner_wakeword_text"]
|
|
292
|
+
recorder.spinner_transcribing_text = init_args["spinner_transcribing_text"]
|
|
293
|
+
recorder.spinner_recording_text = init_args["spinner_recording_text"]
|
|
290
294
|
recorder.halo = None
|
|
291
295
|
recorder.state = "inactive"
|
|
292
296
|
recorder.wakeword_detected = False
|
|
@@ -28,6 +28,11 @@ def _numpy_audio_to_pcm16_bytes(chunk, original_sample_rate):
|
|
|
28
28
|
|
|
29
29
|
if original_sample_rate != TARGET_SAMPLE_RATE:
|
|
30
30
|
num_samples = int(len(chunk) * TARGET_SAMPLE_RATE / original_sample_rate)
|
|
31
|
+
if num_samples == 0:
|
|
32
|
+
# Empty, or shorter than one 16 kHz sample: scipy cannot resample to
|
|
33
|
+
# zero samples (ZeroDivisionError). Like the fraction int() already
|
|
34
|
+
# drops from every chunk, a sub-sample chunk yields no output.
|
|
35
|
+
return b""
|
|
31
36
|
chunk = resample(chunk, num_samples)
|
|
32
37
|
|
|
33
38
|
if original_is_float:
|