Skip to content

feat(relay): gate caller audio until recipient answers (pre-greeting)#68

Merged
HyeonsangKim merged 1 commit into
mainfrom
feat/pre-greeting-audio-gate
Jul 5, 2026
Merged

feat(relay): gate caller audio until recipient answers (pre-greeting)#68
HyeonsangKim merged 1 commit into
mainfrom
feat/pre-greeting-audio-gate

Conversation

@sonsangwoo1116

Copy link
Copy Markdown
Contributor

Summary

수신자 첫 발화(= 공식 인사말 발사 시점) 전에 발신자 마이크로 들어온 오디오를 Session A에 넣지 않고 드랍합니다. 연결 직전 소음이 안내문으로 환각 생성되어 공식 인사말보다 먼저 재생되던 문제(#67 배포 후 콜 9739b661에서 재확인)를 차단합니다.

Changes

  • src/realtime/pipeline/voice_to_voice.pyhandle_user_audio / handle_user_audio_commit에 인사말 게이트(guard clause) 추가. 기존 call.first_message_sent 플래그 재사용 — 수신자 첫 발화 감지 시 인사말 발사와 동시에 게이트가 열림. ring buffer 앞에서 드랍하므로 recovery 재전송 경로도 차단. 첫 드랍 시 1회 로깅([Gate] Dropping pre-greeting user audio)으로 prod 진단 흔적 유지
  • tests/test_voice_to_voice_pipeline.py — 게이트 닫힘/커밋 차단 테스트 2건 추가, 기존 user-audio 테스트 9건은 게이트 오픈 전제로 갱신
  • tests/component/test_loopback_call.py — 동일 갱신 1건

Blast Radius

  • FullAgentPipeline/TextToVoicePipeline은 해당 메서드가 원래 no-op이라 무영향
  • 인터페이스 변경 없음 (AudioRouter, routes/stream.py 호출부 그대로)
  • 보이스메일/무응답 시나리오는 기존에도 인사말이 안 나가는 동일 조건이라 동작 변화 없음

Quality Gate

  • Score: 93/100 (A)
  • Status: PASS (지적사항 3건 반영: 드랍 로그, public 속성 사용, 테스트 대칭성)

Test Plan

  • 단위+컴포넌트 459개 전체 통과
  • 머지(자동 배포) 후 실콜: 벨 울리는 동안 발신자가 말해도 수신자에게 인사말 전 아무것도 재생되지 않는지 확인
  • relay.log에서 [Gate] Dropping pre-greeting user audio 확인

🤖 Generated with Claude Code

수신자가 전화를 받고 첫 발화를 하기 전에 발신자 마이크로 들어온
소음/발화가 Session A에서 번역·환각되어, 공식 인사말보다 먼저
가짜 안내문으로 재생되는 문제를 차단한다 (prod 콜 9739b661에서
"연결해드리겠습니다, 잠시만 기다려주세요" 환각 재생 확인).

- handle_user_audio / handle_user_audio_commit에 인사말 게이트 추가:
  first_message_sent(수신자 첫 발화 감지 = 인사말 발사 시점) 전의
  caller 오디오는 전부 드랍
- ring buffer 앞에서 드랍하므로 recovery 재전송으로도 되살아나지 않음
- 첫 드랍 시 1회 로깅으로 prod 진단 가능성 유지
- 게이트 테스트 2건 추가, 기존 user-audio 테스트는 게이트 오픈 상태로 갱신

Quality Score: 93/100
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
wigvo-web Ready Ready Preview, Comment Jul 5, 2026 6:36pm

@HyeonsangKim HyeonsangKim merged commit 54d2081 into main Jul 5, 2026
5 checks passed
@sonsangwoo1116

Copy link
Copy Markdown
Contributor Author

추가 커밋: in-progress(수신 확정) 후 5초 내 수신자 발화 미감지 시 인사말 강제 발사 fallback (FIRST_MESSAGE_FALLBACK_S, 기본 5.0). 게이트로 인한 무발화 데드락 리스크 해소. 리뷰 94/100 PASS, 전체 462 테스트 통과.

@sonsangwoo1116

Copy link
Copy Markdown
Contributor Author

추가 커밋 2건:

  1. 인사말 fallback — in-progress(수신 확정) 후 5초 내 수신자 발화 미감지 시 인사말 강제 발사 (게이트 데드락 방지, FIRST_MESSAGE_FALLBACK_S)
  2. 인사말 보호막 — 안내문 잘림(prod 콜 0b76c79f/8ee94fdc) 근본 수정. 인사말이 수신자 '여보세요' 시작 순간 트리거되어 TTS 청크가 is_recipient_speaking 드랍(발화+1.5s 쿨다운)에 삼켜지던 문제. 발사~예상 재생 완료까지 TTS 드랍 우회 + 인터럽트 clear 억제. done 조기해제 레이스/15s 하드캡 포함.

리뷰 89/100 PASS(Major 2건 반영 완료), 전체 469 테스트 통과.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants