fix: 음성통화 STT 환각 완화 + 툴콜 턴 TTS 누락 수정 + 볼륨 슬라이더

- voice_engine.py: condition_on_previous_text=False로 whisper가 애매한
  구간에서 그럴듯한 문장을 지어내는 환각 완화
- app.js/voice-call.js: 툴 사용 턴(웹검색 등)에서 finalAnswer가 partialContent를
  통째로 덮어쓰면서 음성통화의 spokenUpTo 오프셋이 무효화돼 텍스트는 나오는데
  음성이 안 나오는 버그 수정
- index.html/voice-call.js: 통화 중 GainNode 기반 인앱 볼륨 슬라이더 추가
  (일부 모바일 브라우저에서 마이크 사용 중엔 하드웨어 볼륨 버튼이 통화
  오디오에 반영 안 되는 문제 우회)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
kim
2026-07-09 23:58:25 +09:00
co-authored by Claude Sonnet 5
parent 73967d1f55
commit b8bfb501b9
4 changed files with 58 additions and 5 deletions
+6 -2
View File
@@ -119,7 +119,9 @@ class Engine:
f.write(audio_bytes)
path = f.name
try:
segments, info = self.stt_model.transcribe(path, language=language or None, beam_size=5, vad_filter=True)
segments, info = self.stt_model.transcribe(
path, language=language or None, beam_size=5, vad_filter=True, condition_on_previous_text=False,
)
text = ''.join(seg.text for seg in segments).strip()
return text, (info.language if info else language)
finally:
@@ -140,7 +142,9 @@ class Engine:
# ── Streaming STT (partial decode of an accumulating PCM buffer) ──────
def transcribe_pcm(self, pcm: bytes, language: str):
audio = pcm16_bytes_to_float(pcm)
segments, info = self.stt_model.transcribe(audio, language=language or None, beam_size=1, vad_filter=True)
segments, info = self.stt_model.transcribe(
audio, language=language or None, beam_size=1, vad_filter=True, condition_on_previous_text=False,
)
text = ''.join(seg.text for seg in segments).strip()
return text, (info.language if info else language)