videosdk-live/Namo-Turn-Detector-v1-Ukrainian

🤗 Hugging Face sourcevoice-activity-detectionapache-2.0678 MBother✓ 4 checksumsupdated today
Submit in one command

Run it next to your model folder. It makes the torrent, checks your files against Hugging Face, and submits it. You just start seeding and paste your key from your account. It only reads your files and never changes them. Read the script first if you like.

curl -fsSL https://pirateface.co/package.sh | bash -s -- --repo videosdk-live/Namo-Turn-Detector-v1-Ukrainian ./model-folder
Needs a seeder →

🎯 Namo Turn Detector v1 - Ukrainian

🚀 Namo Turn Detection Model for Ukrainian


📋 Overview

The Namo Turn Detector is a specialized AI model designed to solve one of the most challenging problems in conversational AI: knowing when a user has finished speaking.

This Ukrainian-specialist model uses advanced natural language understanding to distinguish between:

  • ✅ Complete utterances (user is done speaking)
  • 🔄 Incomplete utterances (user will continue speaking)

Built on DistilBERT architecture and optimized with quantized ONNX format, it delivers enterprise-grade performance with minimal latency.

🔑 Key Features

  • Turn Detection Specialist: Detects end-of-turn vs. continuation in Ukrainian speech transcripts.
  • Low Latency: Optimized with quantized ONNX for <15ms inference.
  • Robust Performance: 86.2% accuracy on diverse Ukrainian utterances.
  • Easy Integration: Compatible with Python, ONNX Runtime, and VideoSDK Agents SDK.
  • Enterprise Ready: Supports real-time conversational AI and voice assistants.

📊 Performance Metrics

Metric Score
🎯 Accuracy 86.22%
📈 F1-Score 85.80%
🎪 Precision 83.04%
🎭 Recall 88.76%
⚡ Latency <15ms
💾 Model Size ~135MB

📊 Evaluated on 900+ Ukrainian utterances from diverse conversational contexts

⚡️ Speed Analysis

🔧 Train & Test Scripts

🛠️ Installation

To use this model, you will need to install the following libraries.

pip install onnxruntime transformers huggingface_hub

🚀 Quick Start

You can run inference directly from Hugging Face repository.

import numpy as np
import onnxruntime as ort
from transformers import AutoTokenizer
from huggingface_hub import hf_hub_download

class TurnDetector:
    def __init__(self, repo_id="videosdk-live/Namo-Turn-Detector-v1-Ukrainian"):
        """
        Initializes the detector by downloading the model and tokenizer
        from the Hugging Face Hub.
        """
        print(f"Loading model from repo: {repo_id}")
        
        # Download the model and tokenizer from the Hub
        # Authentication is handled automatically if you are logged in
        model_path = hf_hub_download(repo_id=repo_id, filename="model_quant.onnx")
        self.tokenizer = AutoTokenizer.from_pretrained(repo_id)
        
        # Set up the ONNX Runtime inference session
        self.session = ort.InferenceSession(model_path)
        self.max_length = 512
        print("✅ Model and tokenizer loaded successfully.")

    def predict(self, text: str) -> tuple:
        """
        Predicts if a given text utterance is the end of a turn.
        Returns (predicted_label, confidence) where:
        - predicted_label: 0 for "Not End of Turn", 1 for "End of Turn"
        - confidence: confidence score between 0 and 1
        """
        # Tokenize the input text
        inputs = self.tokenizer(
            text,
            truncation=True,
            max_length=self.max_length,
            return_tensors="np"
        )
        
        # Prepare the feed dictionary for the ONNX model
        feed_dict = {
            "input_ids": inputs["input_ids"],
            "attention_mask": inputs["attention_mask"]
        }
        
        # Run inference
        outputs = self.session.run(None, feed_dict)
        logits = outputs[0]

        probabilities = self._softmax(logits[0])
        predicted_label = np.argmax(probabilities)
        confidence = float(np.max(probabilities))

        return predicted_label, confidence

    def _softmax(self, x, axis=None):
        if axis is None:
            axis = -1
        exp_x = np.exp(x - np.max(x, axis=axis, keepdims=True))
        return exp_x / np.sum(exp_x, axis=axis, keepdims=True)

# --- Example Usage ---
if __name__ == "__main__":
    detector = TurnDetector()
    
    sentences = [
        "Карл VI відмовився від претензій на іспанський трон.",      # Expected: End of Turn
        "Учням 1-4 класів спрощену систему М.", # Expected: Not End of Turn
    ]
    
    for sentence in sentences:
        predicted_label, confidence = detector.predict(sentence)
        result = "End of Turn" if predicted_label == 1 else "Not End of Turn"
        print(f"'{sentence}' -> {result} (confidence: {confidence:.3f})")
        print("-" * 50)

🤖 VideoSDK Agents Integration

Integrate this turn detector directly with VideoSDK Agents for production-ready conversational AI applications.

from videosdk_agents import NamoTurnDetectorV1, pre_download_namo_turn_v1_model

#download model
pre_download_namo_turn_v1_model(language="uk")

# Initialize Ukrainian turn detector for VideoSDK Agents
turn_detector = NamoTurnDetectorV1(language="uk")

📚 Complete Integration Guide - Learn how to use NamoTurnDetectorV1 with VideoSDK Agents

📖 Citation

@model{namo_turn_detector_uk_2025,
  title={Namo Turn Detector v1: Ukrainian},
  author={VideoSDK Team},
  year={2025},
  publisher={Hugging Face},
  url={https://huggingface.co/videosdk-live/Namo-Turn-Detector-v1-Ukrainian},
  note={ONNX-optimized DistilBERT for turn detection in Ukrainian}
}

📄 License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Made with ❤️ by the VideoSDK Team