This commit is contained in:
pengzhendong
2026-08-31 04:42:20 +00:00
parent c7dd390b21
commit 453356a523
+49 -49
View File
@@ -23197,7 +23197,7 @@
res = model.generate(input=kwargs["input"])
print(res)
</code></pre></details></div>
<div class="api-detail" id="e466"><span class="dtag badge-c">class</span><h2>_BatchRequest</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L40" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>class _BatchRequest:
<div class="api-detail" id="e466"><span class="dtag badge-c">class</span><h2>_BatchRequest</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L41" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>class _BatchRequest:
def __init__(self, inputs, kwargs):
self.inputs = inputs
self.kwargs = kwargs
@@ -23206,7 +23206,7 @@
self.result = None
self.error = None
</code></pre></details></div>
<div class="api-detail" id="e467"><span class="dtag badge-c">class</span><h2>ThreadSafeGenerateModel</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L50" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Protect mutable AutoModel runtime configuration across session threads.</p>
<div class="api-detail" id="e467"><span class="dtag badge-c">class</span><h2>ThreadSafeGenerateModel</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L51" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Protect mutable AutoModel runtime configuration across session threads.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code>class ThreadSafeGenerateModel:
&quot;&quot;&quot;Protect mutable AutoModel runtime configuration across session threads.&quot;&quot;&quot;
@@ -23220,15 +23220,15 @@
def __getattr__(self, name):
return getattr(self.model, name)
</code></pre></details><h3 class="mt">Methods</h3><div class="mblk"><code>.generate(*args, **kwargs)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L57" target="_blank" class="gh-link">L57</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def generate(self, *args, **kwargs):
</code></pre></details><h3 class="mt">Methods</h3><div class="mblk"><code>.generate(*args, **kwargs)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L58" target="_blank" class="gh-link">L58</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def generate(self, *args, **kwargs):
with self.lock:
return self.model.generate(*args, **kwargs)
</code></pre></details></div></div>
<div class="api-detail" id="e468"><span class="dtag badge-m">method</span><h2><code>ThreadSafeGenerateModel.generate(*args, **kwargs)</code></h2><div class="dmod">funasr.bin.realtime_ws.ThreadSafeGenerateModel · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L57" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def generate(self, *args, **kwargs):
<div class="api-detail" id="e468"><span class="dtag badge-m">method</span><h2><code>ThreadSafeGenerateModel.generate(*args, **kwargs)</code></h2><div class="dmod">funasr.bin.realtime_ws.ThreadSafeGenerateModel · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L58" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def generate(self, *args, **kwargs):
with self.lock:
return self.model.generate(*args, **kwargs)
</code></pre></details></div>
<div class="api-detail" id="e469"><span class="dtag badge-c">class</span><h2>RealtimeBatchingEngine</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L65" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Serialize the shared engine while batching compatible session requests.</p>
<div class="api-detail" id="e469"><span class="dtag badge-c">class</span><h2>RealtimeBatchingEngine</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L66" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Serialize the shared engine while batching compatible session requests.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code>class RealtimeBatchingEngine:
&quot;&quot;&quot;Serialize the shared engine while batching compatible session requests.&quot;&quot;&quot;
@@ -23259,7 +23259,7 @@
)
if isinstance(value, list):
return (
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L65" target="_blank" class="src-more">View full source on GitHub →</a></details><h3 class="mt">Methods</h3><div class="mblk"><code>.generate(inputs, **kwargs)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L114" target="_blank" class="gh-link">L114</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def generate(self, inputs, **kwargs):
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L66" target="_blank" class="src-more">View full source on GitHub →</a></details><h3 class="mt">Methods</h3><div class="mblk"><code>.generate(inputs, **kwargs)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L115" target="_blank" class="gh-link">L115</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def generate(self, inputs, **kwargs):
request_inputs = list(inputs) if isinstance(inputs, (list, tuple)) else [inputs]
if not request_inputs:
return []
@@ -23280,7 +23280,7 @@
raise request.error
return request.result
</code></pre></details></div></div>
<div class="api-detail" id="e470"><span class="dtag badge-m">method</span><h2><code>RealtimeBatchingEngine.generate(inputs, **kwargs)</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeBatchingEngine · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L114" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def generate(self, inputs, **kwargs):
<div class="api-detail" id="e470"><span class="dtag badge-m">method</span><h2><code>RealtimeBatchingEngine.generate(inputs, **kwargs)</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeBatchingEngine · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L115" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def generate(self, inputs, **kwargs):
request_inputs = list(inputs) if isinstance(inputs, (list, tuple)) else [inputs]
if not request_inputs:
return []
@@ -23301,7 +23301,7 @@
raise request.error
return request.result
</code></pre></details></div>
<div class="api-detail" id="e471"><span class="dtag badge-f">function</span><h2><code>detect_and_fix_hallucination(text, max_ngram_length, max_occurrences)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L334" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Detect repeated patterns (hallucination) and truncate to keep one occurrence.</p>
<div class="api-detail" id="e471"><span class="dtag badge-f">function</span><h2><code>detect_and_fix_hallucination(text, max_ngram_length, max_occurrences)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L335" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Detect repeated patterns (hallucination) and truncate to keep one occurrence.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code>def detect_and_fix_hallucination(text, max_ngram_length=12, max_occurrences=3):
&quot;&quot;&quot;Detect repeated patterns (hallucination) and truncate to keep one occurrence.&quot;&quot;&quot;
if not text or len(text) &lt; max_ngram_length * 2:
@@ -23332,8 +23332,8 @@
continue
count += 1
return count
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L334" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e472"><span class="dtag badge-c">class</span><h2>ClientEndpointVAD</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L437" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Track an utterance start without loading or running a VAD model.</p>
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L335" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e472"><span class="dtag badge-c">class</span><h2>ClientEndpointVAD</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L438" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Track an utterance start without loading or running a VAD model.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code>class ClientEndpointVAD:
&quot;&quot;&quot;Track an utterance start without loading or running a VAD model.&quot;&quot;&quot;
@@ -23346,20 +23346,20 @@
def reset(self):
self.current_speech_start = None
</code></pre></details><h3 class="mt">Methods</h3><div class="mblk"><code>.start_utterance(start_ms)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L443" target="_blank" class="gh-link">L443</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def start_utterance(self, start_ms):
</code></pre></details><h3 class="mt">Methods</h3><div class="mblk"><code>.start_utterance(start_ms)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L444" target="_blank" class="gh-link">L444</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def start_utterance(self, start_ms):
if self.current_speech_start is None:
self.current_speech_start = start_ms
</code></pre></details></div><div class="mblk"><code>.reset()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L447" target="_blank" class="gh-link">L447</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def reset(self):
</code></pre></details></div><div class="mblk"><code>.reset()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L448" target="_blank" class="gh-link">L448</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def reset(self):
self.current_speech_start = None
</code></pre></details></div></div>
<div class="api-detail" id="e473"><span class="dtag badge-m">method</span><h2><code>ClientEndpointVAD.start_utterance(start_ms)</code></h2><div class="dmod">funasr.bin.realtime_ws.ClientEndpointVAD · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L443" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def start_utterance(self, start_ms):
<div class="api-detail" id="e473"><span class="dtag badge-m">method</span><h2><code>ClientEndpointVAD.start_utterance(start_ms)</code></h2><div class="dmod">funasr.bin.realtime_ws.ClientEndpointVAD · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L444" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def start_utterance(self, start_ms):
if self.current_speech_start is None:
self.current_speech_start = start_ms
</code></pre></details></div>
<div class="api-detail" id="e474"><span class="dtag badge-m">method</span><h2><code>ClientEndpointVAD.reset()</code></h2><div class="dmod">funasr.bin.realtime_ws.ClientEndpointVAD · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L447" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def reset(self):
<div class="api-detail" id="e474"><span class="dtag badge-m">method</span><h2><code>ClientEndpointVAD.reset()</code></h2><div class="dmod">funasr.bin.realtime_ws.ClientEndpointVAD · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L448" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def reset(self):
self.current_speech_start = None
</code></pre></details></div>
<div class="api-detail" id="e475"><span class="dtag badge-c">class</span><h2>HybridSpeakerTracker</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L451" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Speaker diarization: streaming ClusterBackend + final re-clustering.</p>
<div class="api-detail" id="e475"><span class="dtag badge-c">class</span><h2>HybridSpeakerTracker</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L452" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Speaker diarization: streaming ClusterBackend + final re-clustering.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code>class HybridSpeakerTracker:
&quot;&quot;&quot;Speaker diarization: streaming ClusterBackend + final re-clustering.&quot;&quot;&quot;
@@ -23390,7 +23390,7 @@
self.all_chunks = deque(maxlen=max_history_chunks)
self.all_embeddings = deque(maxlen=max_history_chunks)
self.last_speaker_id = 0
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L451" target="_blank" class="src-more">View full source on GitHub →</a></details><h3 class="mt">Methods</h3><div class="mblk"><code>.assign_streaming(audio_samples, seg_start_s, seg_end_s, sentence)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L483" target="_blank" class="gh-link">L483</a><div class="mdoc"><p>Assign speaker ID during streaming using ClusterBackend.</p>
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L452" target="_blank" class="src-more">View full source on GitHub →</a></details><h3 class="mt">Methods</h3><div class="mblk"><code>.assign_streaming(audio_samples, seg_start_s, seg_end_s, sentence)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L484" target="_blank" class="gh-link">L484</a><div class="mdoc"><p>Assign speaker ID during streaming using ClusterBackend.</p>
</div><details class="src-block"><summary>📄 Source</summary><pre><code> def assign_streaming(self, audio_samples, seg_start_s, seg_end_s, sentence):
&quot;&quot;&quot;Assign speaker ID during streaming using ClusterBackend.&quot;&quot;&quot;
vad_seg = [[seg_start_s, seg_end_s, audio_samples]]
@@ -23413,7 +23413,7 @@
self.distribute_spk(temp, sv_output)
sentence[&quot;spk&quot;] = temp[0].get(&quot;spk&quot;, self.last_speaker_id)
self.last_speaker_id = sentence[&quot;spk&quot;]
</code></pre></details></div><div class="mblk"><code>.finalize(sentences, min_split_s)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L573" target="_blank" class="gh-link">L573</a><div class="mdoc"><p>Final re-clustering for accurate speaker assignment.</p>
</code></pre></details></div><div class="mblk"><code>.finalize(sentences, min_split_s)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L574" target="_blank" class="gh-link">L574</a><div class="mdoc"><p>Final re-clustering for accurate speaker assignment.</p>
</div><details class="src-block"><summary>📄 Source</summary><pre><code> def finalize(self, sentences, min_split_s=3.0):
&quot;&quot;&quot;Final re-clustering for accurate speaker assignment.&quot;&quot;&quot;
if not self.all_embeddings or not sentences:
@@ -23444,13 +23444,13 @@
prefix.update(text=prefix_text, end=history_start_ms)
final_sentences.append(prefix)
current.update(
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L573" target="_blank" class="src-more">View full source →</a></details></div><div class="mblk"><code>.reset()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L667" target="_blank" class="gh-link">L667</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def reset(self):
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L574" target="_blank" class="src-more">View full source →</a></details></div><div class="mblk"><code>.reset()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L668" target="_blank" class="gh-link">L668</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def reset(self):
self.speaker_centers = []
self.speaker_center_updates = []
self.all_chunks.clear()
self.all_embeddings.clear()
self.last_speaker_id = 0
</code></pre></details></div><div class="mblk"><code>.session_stats()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L674" target="_blank" class="gh-link">L674</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def session_stats(self):
</code></pre></details></div><div class="mblk"><code>.session_stats()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L675" target="_blank" class="gh-link">L675</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def session_stats(self):
return {
&quot;speaker_history_chunks&quot;: len(self.all_chunks),
&quot;speaker_history_embeddings&quot;: len(self.all_embeddings),
@@ -23460,7 +23460,7 @@
&quot;last_speaker_id&quot;: self.last_speaker_id,
}
</code></pre></details></div></div>
<div class="api-detail" id="e476"><span class="dtag badge-m">method</span><h2><code>HybridSpeakerTracker.assign_streaming(audio_samples, seg_start_s, seg_end_s, sentence)</code></h2><div class="dmod">funasr.bin.realtime_ws.HybridSpeakerTracker · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L483" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Assign speaker ID during streaming using ClusterBackend.</p>
<div class="api-detail" id="e476"><span class="dtag badge-m">method</span><h2><code>HybridSpeakerTracker.assign_streaming(audio_samples, seg_start_s, seg_end_s, sentence)</code></h2><div class="dmod">funasr.bin.realtime_ws.HybridSpeakerTracker · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L484" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Assign speaker ID during streaming using ClusterBackend.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code> def assign_streaming(self, audio_samples, seg_start_s, seg_end_s, sentence):
&quot;&quot;&quot;Assign speaker ID during streaming using ClusterBackend.&quot;&quot;&quot;
vad_seg = [[seg_start_s, seg_end_s, audio_samples]]
@@ -23484,7 +23484,7 @@
sentence[&quot;spk&quot;] = temp[0].get(&quot;spk&quot;, self.last_speaker_id)
self.last_speaker_id = sentence[&quot;spk&quot;]
</code></pre></details></div>
<div class="api-detail" id="e477"><span class="dtag badge-m">method</span><h2><code>HybridSpeakerTracker.finalize(sentences, min_split_s)</code></h2><div class="dmod">funasr.bin.realtime_ws.HybridSpeakerTracker · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L573" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Final re-clustering for accurate speaker assignment.</p>
<div class="api-detail" id="e477"><span class="dtag badge-m">method</span><h2><code>HybridSpeakerTracker.finalize(sentences, min_split_s)</code></h2><div class="dmod">funasr.bin.realtime_ws.HybridSpeakerTracker · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L574" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Final re-clustering for accurate speaker assignment.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code> def finalize(self, sentences, min_split_s=3.0):
&quot;&quot;&quot;Final re-clustering for accurate speaker assignment.&quot;&quot;&quot;
if not self.all_embeddings or not sentences:
@@ -23515,15 +23515,15 @@
prefix.update(text=prefix_text, end=history_start_ms)
final_sentences.append(prefix)
current.update(
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L573" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e478"><span class="dtag badge-m">method</span><h2><code>HybridSpeakerTracker.reset()</code></h2><div class="dmod">funasr.bin.realtime_ws.HybridSpeakerTracker · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L667" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def reset(self):
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L574" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e478"><span class="dtag badge-m">method</span><h2><code>HybridSpeakerTracker.reset()</code></h2><div class="dmod">funasr.bin.realtime_ws.HybridSpeakerTracker · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L668" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def reset(self):
self.speaker_centers = []
self.speaker_center_updates = []
self.all_chunks.clear()
self.all_embeddings.clear()
self.last_speaker_id = 0
</code></pre></details></div>
<div class="api-detail" id="e479"><span class="dtag badge-m">method</span><h2><code>HybridSpeakerTracker.session_stats()</code></h2><div class="dmod">funasr.bin.realtime_ws.HybridSpeakerTracker · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L674" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def session_stats(self):
<div class="api-detail" id="e479"><span class="dtag badge-m">method</span><h2><code>HybridSpeakerTracker.session_stats()</code></h2><div class="dmod">funasr.bin.realtime_ws.HybridSpeakerTracker · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L675" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def session_stats(self):
return {
&quot;speaker_history_chunks&quot;: len(self.all_chunks),
&quot;speaker_history_embeddings&quot;: len(self.all_embeddings),
@@ -23533,7 +23533,7 @@
&quot;last_speaker_id&quot;: self.last_speaker_id,
}
</code></pre></details></div>
<div class="api-detail" id="e480"><span class="dtag badge-c">class</span><h2>RealtimeASRSession</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L685" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Manages a single streaming ASR session.</p>
<div class="api-detail" id="e480"><span class="dtag badge-c">class</span><h2>RealtimeASRSession</h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L686" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Manages a single streaming ASR session.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code>class RealtimeASRSession:
&quot;&quot;&quot;Manages a single streaming ASR session.&quot;&quot;&quot;
@@ -23564,7 +23564,7 @@
# length-L segment. Under concurrency that saturates the GPU and long-segment
# requests time out. Capping the partial window to the most recent
# `partial_window_sec` seconds makes interim re-decoding ~O(L) per segment
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L685" target="_blank" class="src-more">View full source on GitHub →</a></details><h3 class="mt">Methods</h3><div class="mblk"><code>.add_audio(pcm_bytes)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L745" target="_blank" class="gh-link">L745</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def add_audio(self, pcm_bytes):
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L686" target="_blank" class="src-more">View full source on GitHub →</a></details><h3 class="mt">Methods</h3><div class="mblk"><code>.add_audio(pcm_bytes)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L746" target="_blank" class="gh-link">L746</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def add_audio(self, pcm_bytes):
audio_int16 = np.frombuffer(pcm_bytes, dtype=np.int16)
audio_float = audio_int16.astype(np.float32) / 32768.0
chunk_start_sample = self.total_samples
@@ -23589,10 +23589,10 @@
logger.info(f&quot;Locked: [{seg[0]}-{seg[1]}ms] \&quot;{seg_text[:40]}\&quot;&quot;)
self._compact_audio_buffer()
</code></pre></details></div><div class="mblk"><code>.should_decode()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L879" target="_blank" class="gh-link">L879</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def should_decode(self):
</code></pre></details></div><div class="mblk"><code>.should_decode()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L880" target="_blank" class="gh-link">L880</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def should_decode(self):
threshold = self.first_chunk_samples if not self.first_decode_done else self.chunk_samples
return (self.total_samples - self.last_decode_samples) &gt;= threshold
</code></pre></details></div><div class="mblk"><code>.decode(is_final)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L884" target="_blank" class="gh-link">L884</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def decode(self, is_final=False):
</code></pre></details></div><div class="mblk"><code>.decode(is_final)</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L885" target="_blank" class="gh-link">L885</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def decode(self, is_final=False):
if is_final and self.endpoint_mode == &quot;client&quot;:
return self.commit()
@@ -23622,7 +23622,7 @@
if len(seg_audio) &lt; self.chunk_samples // 2:
return self._build_response(is_final)
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L884" target="_blank" class="src-more">View full source →</a></details></div><div class="mblk"><code>.commit()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L952" target="_blank" class="gh-link">L952</a><div class="mdoc"><p>Finalize one client-delimited utterance while keeping the session open.</p>
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L885" target="_blank" class="src-more">View full source →</a></details></div><div class="mblk"><code>.commit()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L953" target="_blank" class="gh-link">L953</a><div class="mdoc"><p>Finalize one client-delimited utterance while keeping the session open.</p>
</div><details class="src-block"><summary>📄 Source</summary><pre><code> def commit(self):
&quot;&quot;&quot;Finalize one client-delimited utterance while keeping the session open.&quot;&quot;&quot;
if self.endpoint_mode != &quot;client&quot;:
@@ -23640,7 +23640,7 @@
response = self._build_response(is_final=True)
self._reset_utterance_state()
return response
</code></pre></details></div><div class="mblk"><code>.get_partial_decode_audio()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1015" target="_blank" class="gh-link">L1015</a><div class="mdoc"><p>Return the bounded audio window used for unstable partial decoding.</p>
</code></pre></details></div><div class="mblk"><code>.get_partial_decode_audio()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1016" target="_blank" class="gh-link">L1016</a><div class="mdoc"><p>Return the bounded audio window used for unstable partial decoding.</p>
</div><details class="src-block"><summary>📄 Source</summary><pre><code> def get_partial_decode_audio(self):
&quot;&quot;&quot;Return the bounded audio window used for unstable partial decoding.&quot;&quot;&quot;
seg_start_sample = int(self.vad.current_speech_start * self.sample_rate / 1000)
@@ -23654,7 +23654,7 @@
decode_start_sample = max(self.audio_buffer_start_sample, decode_start_sample)
start_ms = int(decode_start_sample * 1000 / self.sample_rate)
return self._slice_audio(decode_start_sample, self.total_samples), start_ms
</code></pre></details></div><div class="mblk"><code>.session_stats()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1274" target="_blank" class="gh-link">L1274</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def session_stats(self):
</code></pre></details></div><div class="mblk"><code>.session_stats()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1282" target="_blank" class="gh-link">L1282</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def session_stats(self):
stats = {
&quot;duration_ms&quot;: int(self.total_samples * 1000 / self.sample_rate),
&quot;total_samples&quot;: self.total_samples,
@@ -23669,7 +23669,7 @@
if self.spk_tracker:
stats.update(self.spk_tracker.session_stats())
return stats
</code></pre></details></div><div class="mblk"><code>.reset()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1290" target="_blank" class="gh-link">L1290</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def reset(self):
</code></pre></details></div><div class="mblk"><code>.reset()</code> <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1298" target="_blank" class="gh-link">L1298</a><div class="mdoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source</summary><pre><code> def reset(self):
self.audio_buffer = np.array([], dtype=np.float32)
self.audio_buffer_start_sample = 0
self.total_samples = 0
@@ -23686,7 +23686,7 @@
if self.spk_tracker:
self.spk_tracker.reset()
</code></pre></details></div></div>
<div class="api-detail" id="e481"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.add_audio(pcm_bytes)</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L745" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def add_audio(self, pcm_bytes):
<div class="api-detail" id="e481"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.add_audio(pcm_bytes)</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L746" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def add_audio(self, pcm_bytes):
audio_int16 = np.frombuffer(pcm_bytes, dtype=np.int16)
audio_float = audio_int16.astype(np.float32) / 32768.0
chunk_start_sample = self.total_samples
@@ -23712,11 +23712,11 @@
self._compact_audio_buffer()
</code></pre></details></div>
<div class="api-detail" id="e482"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.should_decode()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L879" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def should_decode(self):
<div class="api-detail" id="e482"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.should_decode()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L880" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def should_decode(self):
threshold = self.first_chunk_samples if not self.first_decode_done else self.chunk_samples
return (self.total_samples - self.last_decode_samples) &gt;= threshold
</code></pre></details></div>
<div class="api-detail" id="e483"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.decode(is_final)</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L884" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def decode(self, is_final=False):
<div class="api-detail" id="e483"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.decode(is_final)</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L885" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def decode(self, is_final=False):
if is_final and self.endpoint_mode == &quot;client&quot;:
return self.commit()
@@ -23746,8 +23746,8 @@
if len(seg_audio) &lt; self.chunk_samples // 2:
return self._build_response(is_final)
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L884" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e484"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.commit()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L952" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Finalize one client-delimited utterance while keeping the session open.</p>
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L885" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e484"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.commit()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L953" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Finalize one client-delimited utterance while keeping the session open.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code> def commit(self):
&quot;&quot;&quot;Finalize one client-delimited utterance while keeping the session open.&quot;&quot;&quot;
if self.endpoint_mode != &quot;client&quot;:
@@ -23766,7 +23766,7 @@
self._reset_utterance_state()
return response
</code></pre></details></div>
<div class="api-detail" id="e485"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.get_partial_decode_audio()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1015" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Return the bounded audio window used for unstable partial decoding.</p>
<div class="api-detail" id="e485"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.get_partial_decode_audio()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1016" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p>Return the bounded audio window used for unstable partial decoding.</p>
</div><details class="src-block"><summary>📄 Source code</summary><pre><code> def get_partial_decode_audio(self):
&quot;&quot;&quot;Return the bounded audio window used for unstable partial decoding.&quot;&quot;&quot;
seg_start_sample = int(self.vad.current_speech_start * self.sample_rate / 1000)
@@ -23781,7 +23781,7 @@
start_ms = int(decode_start_sample * 1000 / self.sample_rate)
return self._slice_audio(decode_start_sample, self.total_samples), start_ms
</code></pre></details></div>
<div class="api-detail" id="e486"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.session_stats()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1274" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def session_stats(self):
<div class="api-detail" id="e486"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.session_stats()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1282" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def session_stats(self):
stats = {
&quot;duration_ms&quot;: int(self.total_samples * 1000 / self.sample_rate),
&quot;total_samples&quot;: self.total_samples,
@@ -23797,7 +23797,7 @@
stats.update(self.spk_tracker.session_stats())
return stats
</code></pre></details></div>
<div class="api-detail" id="e487"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.reset()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1290" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def reset(self):
<div class="api-detail" id="e487"><span class="dtag badge-m">method</span><h2><code>RealtimeASRSession.reset()</code></h2><div class="dmod">funasr.bin.realtime_ws.RealtimeASRSession · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1298" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code> def reset(self):
self.audio_buffer = np.array([], dtype=np.float32)
self.audio_buffer_start_sample = 0
self.total_samples = 0
@@ -23814,7 +23814,7 @@
if self.spk_tracker:
self.spk_tracker.reset()
</code></pre></details></div>
<div class="api-detail" id="e488"><span class="dtag badge-f">function</span><h2><code>load_models(args)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1314" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def load_models(args):
<div class="api-detail" id="e488"><span class="dtag badge-f">function</span><h2><code>load_models(args)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1322" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def load_models(args):
global _vllm_engine, _asr_kwargs, _vad_model, _spk_model
if _vllm_engine is None:
from funasr import AutoModel
@@ -23844,13 +23844,13 @@
logger.info(f&quot;Loaded {len(hotwords)} hotwords from &#x27;{hw_file}&#x27;&quot;)
if getattr(args, &#x27;language&#x27;, None):
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1314" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e489"><span class="dtag badge-f">function</span><h2><code>create_speaker_tracker(spk_model, args)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1383" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def create_speaker_tracker(spk_model, args):
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1322" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e489"><span class="dtag badge-f">function</span><h2><code>create_speaker_tracker(spk_model, args)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1391" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def create_speaker_tracker(spk_model, args):
if not getattr(args, &quot;enable_spk&quot;, False) or spk_model is None:
return None
return HybridSpeakerTracker(spk_model, args.device)
</code></pre></details></div>
<div class="api-detail" id="e490"><span class="dtag badge-f">function</span><h2><code>create_vad(vad_model, args)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1389" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def create_vad(vad_model, args):
<div class="api-detail" id="e490"><span class="dtag badge-f">function</span><h2><code>create_vad(vad_model, args)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1397" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def create_vad(vad_model, args):
if getattr(args, &quot;endpoint_mode&quot;, &quot;server&quot;) == &quot;client&quot;:
return ClientEndpointVAD()
@@ -23874,7 +23874,7 @@
setattr(session_model, name, session_config)
return DynamicStreamingVAD(session_model)
</code></pre></details></div>
<div class="api-detail" id="e491"><span class="dtag badge-f">function</span><h2><code>log_session_stats(session)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1419" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def log_session_stats(session):
<div class="api-detail" id="e491"><span class="dtag badge-f">function</span><h2><code>log_session_stats(session)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1427" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def log_session_stats(session):
stats = session.session_stats()
logger.info(
&quot;Session stats: duration_ms=%d audio_buffer_samples=%d &quot;
@@ -23892,7 +23892,7 @@
)
return stats
</code></pre></details></div>
<div class="api-detail" id="e492"><span class="dtag badge-f">function</span><h2><code>build_websocket_serve_kwargs(args)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1567" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def build_websocket_serve_kwargs(args):
<div class="api-detail" id="e492"><span class="dtag badge-f">function</span><h2><code>build_websocket_serve_kwargs(args)</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1575" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def build_websocket_serve_kwargs(args):
return {
&quot;max_size&quot;: args.ws_max_size,
&quot;ping_interval&quot;: _positive_or_none(args.ws_ping_interval),
@@ -23900,7 +23900,7 @@
&quot;close_timeout&quot;: args.ws_close_timeout,
}
</code></pre></details></div>
<div class="api-detail" id="e493"><span class="dtag badge-f">function</span><h2><code>build_arg_parser()</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1593" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def build_arg_parser():
<div class="api-detail" id="e493"><span class="dtag badge-f">function</span><h2><code>build_arg_parser()</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1601" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def build_arg_parser():
parser = argparse.ArgumentParser(description=&quot;Fun-ASR-Nano Streaming WebSocket Server&quot;)
parser.add_argument(&quot;--port&quot;, type=int, default=10095)
parser.add_argument(&quot;--model&quot;, type=str, default=&quot;FunAudioLLM/Fun-ASR-Nano-2512&quot;)
@@ -23930,8 +23930,8 @@
parser.add_argument(
&quot;--decode-max-batch-size&quot;,
type=int,
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1593" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e494"><span class="dtag badge-f">function</span><h2><code>cli_main()</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1694" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def cli_main():
</code></pre><a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1601" target="_blank" class="src-more">View full source on GitHub →</a></details></div>
<div class="api-detail" id="e494"><span class="dtag badge-f">function</span><h2><code>cli_main()</code></h2><div class="dmod">funasr.bin.realtime_ws · <a href="https://github.com/modelscope/FunASR/blob/main/funasr/bin/realtime_ws.py#L1702" target="_blank">View on GitHub ↗</a></div><div class="ddoc"><p class="muted">No documentation yet.</p></div><details class="src-block"><summary>📄 Source code</summary><pre><code>def cli_main():
args = build_arg_parser().parse_args()
asyncio.run(main(args))
</code></pre></details></div>