feat(conversation): OpenAI gpt-realtime-2.1 라이브 음성 대화 Premium 백엔드

- realtime-token Edge Function: 티어 검증 + realtime_session 쿼터 + ephemeral key 발급
- useRealtimeConversation 훅: WebRTC 직결 (마이크 → OpenAI, 오디오 자동 재생)
- VoiceConversationPage: conversationBackend 분기 + 연결 실패 시 로컬 fallback
- AppConfig.conversationBackend + SettingsModal 음성 대화 엔진 선택
- ErrorCode 799 ConversationRealtimeTokenFailed, i18n ko/en
This commit is contained in:
Yun Chan 2026-07-21 12:10:13 +09:00
parent 983c60cda2
commit 8f7d300b89
15 changed files with 762 additions and 40 deletions

View file

@ -134,6 +134,11 @@
"settings.backend.premium": "Premium (Claude AI, 구독)",
"settings.backend.localHint": "로컬 Ollama 서버로 텍스트를 다듬습니다. 완전 무료, 인터넷 불필요.",
"settings.backend.premiumHint": "Anthropic Claude AI로 고품질 다듬기. 로그인 + 구독 필요. 네트워크 실패 시 Local로 자동 전환.",
"settings.conversationBackend": "음성 대화 엔진",
"settings.convBackend.local": "Local (STT→LLM→TTS, 무료)",
"settings.convBackend.realtime": "Live (OpenAI gpt-realtime, 구독)",
"settings.convBackend.localHint": "로컬 파이프라인으로 대화합니다. 완전 무료, 인터넷 불필요.",
"settings.convBackend.realtimeHint": "OpenAI Realtime 모델과 실시간 음성 대화. 1초 미만 응답 + 말 끊기 지원. 로그인 + Pro 구독 필요. 연결 실패 시 Local로 자동 전환.",
"settings.llmModel": "LLM 모델",
"settings.postProcess": "음성 후처리",
"settings.defaultAction": "기본 후처리 명령어",
@ -408,6 +413,9 @@
"conversation.error.phase.llm": "응답 생성",
"conversation.error.phase.tts": "음성 재생",
"conversation.error.noSpeech": "음성이 감지되지 않았습니다. 마이크를 확인하고 다시 말씀해 주세요.",
"conversation.realtime.badge": "LIVE",
"conversation.realtime.connecting": "연결 중",
"conversation.realtime.fallback": "라이브 연결 실패 — 로컬 대화로 전환했습니다.",
"rag.title": "지식 베이스",
"rag.addDocument": "문서 추가",
"rag.documents": "문서",