Smart Turn v3 (Apple Silicon)
Original model: pipecat-ai/smart-turn-v3 (Pipecat)
On-device end-of-turn classifier for voice agents, packaged by TheStage AI for Apple Silicon. At each VAD pause, scores whether the user has finished speaking (vs mid-sentence hesitation).
| Runtime | TheStage Apple SDK (TheStageVoiceAgent, turn_detection_mode: .dnn) |
| Architecture | mel front-end + int8 Whisper-Tiny encoder + completion head |
| HF engines | TheStageAI/smart-turn-v3 |
Overview
VAD is the cheap gate (onset + pause). Smart-turn is the semantic check run only at pauses, single-flight, with a hard silence floor so it cannot hang. The model sees the continuous waveform from onset through the pause — never VAD-filtered audio.
System Requirements
| Property | Value |
|---|---|
| Hardware | Apple Silicon Mac, or physical iPhone / iPad |
| macOS | 15.0+ |
| iOS | 18.0+ |
| Xcode | 16.0+ |
| Swift | 6.0+ |
| Flutter (optional) | 3.24+ |
Simulator is not supported — run on real Apple Silicon hardware.
TheStage AI Access Token
Create a token at app.thestage.ai and pass it to the SDK:
try await TheStageAI.shared.initialize(apiToken: "th_…")
await TheStageFlutterSDK.initialize(api_token: 'th_…');
Token is checked online in initialize (once per app process when reachable). Inference runs fully on-device. Offline initialize fails — reconnect and call initialize again.
TheStage Apple SDK
Docs: TheStage Apple SDK · Voice Agent
Installation (SwiftPM)
In Xcode: File → Add Package Dependencies…, paste https://github.com/TheStageAI/AppleSDK.git, and add the TheStageSDK product. Or in Package.swift:
.package(
url: "https://github.com/TheStageAI/AppleSDK.git",
exact: Version(1, 1, 0)
)
Installation (Flutter / iOS)
# pubspec.yaml
dependencies:
thestage_apple_sdk:
git:
url: https://github.com/TheStageAI/AppleSDK.git
path: plugin/thestage_apple_sdk
ref: 1.1.0
Swift — via voice agent
import TheStageSDK
try await TheStageAI.shared.initialize(apiToken: "th_…")
var config = TheStageAgentConfig(
vad: "TheStageAI/silero-vad",
stt: "TheStageAI/thewhisper-large-v3-turbo",
tts: "TheStageAI/neutts-nano-multilingual",
llm: "TheStageAI/Qwen3-0.6B"
)
config.turn_detection_mode = .dnn
config.turn_detector = "TheStageAI/smart-turn-v3"
config.turn_eot_threshold = 0.85
config.turn_eot_confirm_count = 2 // debounce mid-sentence spikes
let agent = try await TheStageVoiceAgent(config: config)
Key knobs
| Field | Default | Meaning |
|---|---|---|
turn_eot_threshold |
0.85 |
Completion prob that counts as "done" |
turn_eot_confirm_count |
2 |
Consecutive "done" verdicts before commit |
turn_pause_trigger_ms |
256 |
Trailing silence before first model call |
turn_reeval_interval_ms |
120 |
Re-run cadence on a sustained pause |
turn_max_silence_ms |
2000 |
Hard fallback silence |
turn_window_ms |
8000 |
Trailing audio window fed to the model |
Knobs hot-apply at runtime via agent.update_turn_config(...).
Acknowledgments
This work builds on smart-turn-v3 by Pipecat: pipecat-ai/smart-turn-v3.
This Apple Silicon package is produced by TheStage AI; it is not an official Pipecat release.
Links
- Original model: pipecat-ai/smart-turn-v3
- Platform: app.thestage.ai
- TheStage Apple SDK: github.com/TheStageAI/AppleSDK
- Docs: docs.thestage.ai
- Subscribe for updates: TheStageAI X
- Contact email: contact@thestage.ai
Model tree for TheStageAI/smart-turn-v3
Base model
pipecat-ai/smart-turn-v3