🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
⚠️ Malware / Trojaner / VirenWindows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC(10.09.2026 um 20:11 Uhr)
⚠️ Malware / Trojaner / VirenVorsicht: Android-Malware verschlüsselt Ihre Handys und nimmt heimlich Fotos auf(11.09.2026 um 09:35 Uhr)
🕵️ SicherheitslückenMicrosoft geht endlich eines der nervigsten Probleme von Windows 11 an(11.09.2026 um 11:58 Uhr)
💾 IT Security ToolsSysinternals Suite(11.09.2026 um 12:00 Uhr)
🕵️ SicherheitslückenDefender 0-Day ShieldBreak (CVE-2026-69414) nicht sauber gepatcht - BornCity(11.09.2026 um 12:52 Uhr)
🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
⚠️ Malware / Trojaner / VirenWindows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC(10.09.2026 um 20:11 Uhr)
⚠️ Malware / Trojaner / VirenVorsicht: Android-Malware verschlüsselt Ihre Handys und nimmt heimlich Fotos auf(11.09.2026 um 09:35 Uhr)
🕵️ SicherheitslückenMicrosoft geht endlich eines der nervigsten Probleme von Windows 11 an(11.09.2026 um 11:58 Uhr)
💾 IT Security ToolsSysinternals Suite(11.09.2026 um 12:00 Uhr)
🕵️ SicherheitslückenDefender 0-Day ShieldBreak (CVE-2026-69414) nicht sauber gepatcht - BornCity(11.09.2026 um 12:52 Uhr)

🔧 Programmierung 🕛 vor 2 Monaten 5 Min Lesezeit
0

Fail the Build When Your Voice Agent Gets Worse

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

In this series we've turned a raw call recording into a structured CallReport

(post 1) and looked at how to extract signals cheaply enough to run on every

call (post 2). Now the payoff: using those signals to stop regressions

before they ship.



A voice agent's behavior drifts. You change a prompt, swap a model, pick a new TTS

voice — and the agent gets subtly slower to respond, colder in tone, or starts

skipping a required disclosure. None of that shows up in a normal test suite,

because the regression lives in the audio. So let's put the audio in the test

suite.





The idea: golden recordings as test fixtures



Treat a small set of representative call recordings as fixtures. On every change,

analyze them and assert on the report. If a prompt change pushes a number past a

threshold, the build goes red — same as any other failing test.




CODE
import audiotrace
import pytest

# A few representative calls checked into the repo (or pulled from storage).
GOLDEN_CALLS = [
"tests/calls/happy_path.wav",
"tests/calls/frustrated_customer.wav",
"tests/calls/compliance_heavy.wav",
]


@pytest.mark.parametrize("path", GOLDEN_CALLS)
def test_call_quality_does_not_regress(path):
report = audiotrace.analyze(path, num_speakers=2)

# Latency: the agent must stay responsive.
assert report.latency.total_ms < 6000, "agent got too slow"

# Quality: overall score must stay healthy.
assert report.quality.overall_score >= 0.80

# The agent shouldn't be talking over the caller.
assert report.quality.interruptions <= 2


def test_required_disclosure_present():
report = audiotrace.analyze("tests/calls/compliance_heavy.wav")
# Compliance flags surface missing/again-required disclosures.
assert "missing_disclosure" not in report.events.compliance_flags


def test_agent_does_not_frustrate_callers():
report = audiotrace.analyze("tests/calls/happy_path.wav")
assert report.sentiment.caller_frustration is False
assert report.sentiment.overall >= 0.0 # net-neutral-or-better tone






Because analyze() runs locally with no API calls, this works in CI with no

secrets and no network — the recordings and the open models are all you need.





Catching drift, not just hard failures



Absolute thresholds catch cliffs. To catch drift, compare against a baseline you

commit alongside the code:




CODE
import json
import audiotrace

def snapshot(path):
r = audiotrace.analyze(path, num_speakers=2)
return {
"pace_wpm": r.quality.speaking_pace_wpm,
"overall": r.quality.overall_score,
"latency_ms": r.latency.total_ms,
"sentiment": r.sentiment.overall,
}

def test_no_drift_from_baseline():
baseline = json.load(open("tests/baseline.json"))
current = snapshot("tests/calls/happy_path.wav")

# Latency may not grow more than 15% vs. the committed baseline.
assert current["latency_ms"] <= baseline["latency_ms"] * 1.15
# Tone may not drop more than 0.1 absolute.
assert current["sentiment"] >= baseline["sentiment"] - 0.1






When you intentionally improve the agent, you regenerate baseline.json and

commit it — the same workflow as snapshot testing.





Emit it as OpenTelemetry spans



CI catches regressions before they ship; observability catches what happens in

production. The CallReport maps cleanly onto OpenTelemetry, so voice-call

signals sit right next to the rest of your traces:




CODE
from opentelemetry import trace
import audiotrace

tracer = trace.get_tracer("audiotrace")

def trace_call(path: str):
report = audiotrace.analyze(path)
with tracer.start_as_current_span("voice_call") as span:
span.set_attribute("call.duration_ms", report.media.duration_ms)
span.set_attribute("call.quality_score", report.quality.overall_score)
span.set_attribute("call.caller_frustrated", report.sentiment.caller_frustration)
span.set_attribute("call.cost_usd", report.cost.total_usd)
span.set_attribute("call.outcome", report.events.outcome)

# The latency waterfall becomes child spans (STT, LLM, TTS, ...).
for stage in report.latency.waterfall:
child = tracer.start_span(stage.name, start_time=stage.start_ms)
child.end()
return report









Hang it off your LangChain / LangSmith traces



If you already trace your agent's reasoning in LangSmith, AudioTrace fills in the

half it can't see — what actually reached the caller's ear. Attach the report to

the run as metadata so the audio signals live next to the token-level trace:




CODE
from langsmith import Client
import audiotrace

client = Client()

def attach_audio_signals(run_id: str, recording: str):
report = audiotrace.analyze(recording)
client.update_run(
run_id,
extra={
"audio": {
"quality_score": report.quality.overall_score,
"caller_frustration": report.sentiment.caller_frustration,
"speaking_pace_wpm": report.quality.speaking_pace_wpm,
"drop_off": report.events.drop_off,
"total_cost_usd": report.cost.total_usd,
}
},
)






Now a single LangSmith run shows both what the model thought and how the call

sounded — and the same signals that flag a bad call in production are the

examples you feed back in to fine-tune the next, better agent.





Wrapping the series



Three ideas, one thread:




  1. A voice call is a rich artifact your token-level tooling can't read — so turn
    it into a typed CallReport.

  2. Split the work by measure vs. estimate, and don't reach for a big model
    when a cheap measurement will do.

  3. Put those signals where they pay off: red builds on regressions and
    spans/traces in production.



A lot of progress in AI isn't a new model — it's packaging hard-won engineering

into something others can pip install. That's what AudioTrace is trying to be

for voice agents.




CODE
pip install audiotrace






⭐ Repo: github.com/dimastatz/audiotrace

it's early, and provider integrations + richer compliance checks are exactly where

contributions help most.



Keep building!

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
The Gemini desktop app is now available for Windows
1 Quelle
Windows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC
1 Quelle
Vorsicht: Android-Malware verschlüsselt Ihre Handys und nimmt heimlich Fotos auf
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Fail the Build When Your Voice Agent Gets Worse

Thematisch verwandte Begriffe: Fail, Build, When, Your · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...