MemberJunction / MemberJunction/MJ

Realtime turn detection (VAD sensitivity) is not configurable — provider default fires on room noise

Open
#3,534 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
TSQL
Stars
29
Forks
6
Avg merge
2d 1h
Merged PRs (30d)
323

Description

### Summary

`buildTurnDetection` returns turn-detection settings only when `disableAutoResponse` is set, and hardcodes them when it does:

```js
buildTurnDetection: (disableAutoResponse) => disableAutoResponse
? { type: 'server_vad', create_response: false, interrupt_response: true }
: undefined,
```

Otherwise the provider default applies and there is no way to tune it. In practice that default is hair-trigger: in a normal room the agent fires on background noise, a cough, or a nearby conversation, and starts answering nobody.

There is no Config-bag route to `threshold`, `prefix_padding_ms`, or `silence_duration_ms` — `ExtractRealtimeFeatures` doesn't recognise them, so they can only be reached by a raw `audio` override, which then has to reconstruct the whole block including the transcription model.

### Why it matters more than it sounds

This is deployment-specific, not app-specific. A kiosk in a busy office, a laptop in a quiet room, and a call-centre headset want different values, and none of them is a code change. Right now the only lever is patching the provider profile.

We also learned the hard way that it cuts both ways: we raised the threshold to 0.72 with a 900 ms silence window and made the agent **deaf** — it stopped registering the user entirely, which presents as "the voice agent is broken", not as "the mic gate is too high". Landing on something usable took measurement, and a deployment shouldn't have to do that by patching `node_modules`.

### Ask

Recognise turn-detection settings in the Config bag (alongside `voice`, `effortLevel`, etc.) and merge them over the profile default, so a deployment can tune sensitivity without touching the provider driver.

Found on 5.51.0.

Contributor guide

Open the contributing guide

Research direction

Start by tracing buildTurnDetection and ExtractRealtimeFeatures, then find how Config-bag settings are passed to the provider profile. Confirm the existing disableAutoResponse behavior and profile defaults before adding the requested turn-detection configuration path. Done means threshold, prefix_padding_ms, and silence_duration_ms can be tuned without a raw audio override or provider-driver patch.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
audio-video-rtc
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
70/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.