Audio Classification
Transformers
ONNX
Safetensors
English
dualturn_endpointing
feature-extraction
turn-taking
endpointing
end-of-turn
voice-activity-detection
voice-agents
conversation
speech
audio
mimi
dualturn
real-time
custom_code
Instructions to use anyreach-ai/dualturn-endpointing with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use anyreach-ai/dualturn-endpointing with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("audio-classification", model="anyreach-ai/dualturn-endpointing", trust_remote_code=True)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("anyreach-ai/dualturn-endpointing", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
| from transformers import PretrainedConfig | |
| class DualTurnConfig(PretrainedConfig): | |
| """Configuration for DualTurnModel. | |
| The backbone is a two-stream transformer (TurnTakingModel) that encodes | |
| dual-channel audio via Mimi and predicts per-frame turn-taking signals. | |
| The endpoint classifier is a lightweight sklearn model (logistic regression | |
| or gradient boosting) that converts the 10 backbone signals at a VAD-offset | |
| anchor into P(ST) β probability the user has finished their turn. | |
| """ | |
| model_type = "dualturn" | |
| def __init__( | |
| self, | |
| # ββ Backbone ββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| backbone_input_mode: str = "continuous", # "continuous" | "discrete" | |
| mimi_sample_rate: int = 24_000, # Mimi encoder input SR | |
| mimi_frame_rate: float = 12.5, # frames per second | |
| mimi_frame_ms: float = 80.0, # ms per frame | |
| # ββ Signals βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| signal_keys: list = None, | |
| # ββ Endpoint classifier βββββββββββββββββββββββββββββββββββββββββββ | |
| st_threshold: float = 0.30, | |
| vad_edge_threshold: float = 0.50, # vad_user edge for anchor | |
| agent_voice_min: float = 0.15, # min agent VAD to consider voicing | |
| fvad_alpha_short: float = 0.3, # Silero smoothing (fast) | |
| fvad_alpha_long: float = 0.7, # Silero smoothing (slow) | |
| **kwargs, | |
| ): | |
| super().__init__(**kwargs) | |
| self.backbone_input_mode = backbone_input_mode | |
| self.mimi_sample_rate = mimi_sample_rate | |
| self.mimi_frame_rate = mimi_frame_rate | |
| self.mimi_frame_ms = mimi_frame_ms | |
| self.signal_keys = signal_keys or [ | |
| "vad_user", "vad_agent", | |
| "eot_user", "eot_agent", | |
| "bot_user", "bot_agent", | |
| "fvad_user_short", "fvad_user_long", | |
| "fvad_agent_short", "fvad_agent_long", | |
| ] | |
| self.st_threshold = st_threshold | |
| self.vad_edge_threshold = vad_edge_threshold | |
| self.agent_voice_min = agent_voice_min | |
| self.fvad_alpha_short = fvad_alpha_short | |
| self.fvad_alpha_long = fvad_alpha_long | |