새로운 STT/TTS 모델이 출시될 때마다, 각 모델은 자신만의 저장소(repo), 환경(env), 그리고 고유한 특성들을 가지고 나옵니다. 실제로 이를 시스템에 통합하려면 매번 글루 코드(glue code)를 다시 작성해야 했습니다. 그것이 제가 vox(https://github.com/eleven-am/vox)를 만든 이유입니다.
이는 음성 모델을 위한 로컬 런타임(local runtime)입니다. 모델을 풀(pull)하면 적절한 어댑터(adapter)를 자동으로 설치해주고, 하나의 API를 제공합니다. STT와 TTS 모두 OpenAI 호환 엔드포인트(endpoints) 뒤에 위치하므로, /v1/audio/speech 및 /v1/audio/transcriptions는 기존 클라이언트들과 대부분 바로 작동합니다. 모델은 적합한 백엔드(CTranslate2, ONNX, Torch, NeMo, vLLM 등)를 통해 실행되지만, 사용자는 어떤 백엔드인지 신경 쓸 필요가 없습니다.
제가 실제로 중요하게 생각하는 부분은 저의 주요 사용 사례인 WebRTC입니다. gRPC, POST+SSE 또는 WebSocket을 통해 에이전트를 Vox에 연결할 수 있습니다. 사용자가 브라우저를 통해 접속하면, Vox가 마이크 측면을 처리합니다: 음성 활동 감지(voice activity detection), 전사(transcription), 그리고 사용자가 말을 멈춘 시점을 파악하여 해당 이벤트들을 스트리밍합니다. 여러분은 실행 중인 어떤 LLM으로부터든 답변 텍스트를 보내기만 하면 되며, Vox는 이를 WebRTC를 통해 사용자에게 말해줍니다(끼어들기(barge-in) 기능 포함). 즉, Vox는 귀와 입 역할을 하고, 여러분은 뇌를 가져오면 됩니다.
이 프로젝트는 주로 개인적인 용도로 진행해 온 1인 프로젝트였습니다. 몇 달 동안 작업해 왔는데, 누군가 audio.cpp(https://www.reddit.com/r/LocalLLaMA/comments/1uk7khq/audiocpp_vibevoice_15b_released_90min_podcast_in/)에 대해 게시한 것을 보고 저의 것도 공유하기로 했습니다.
비판과 유지 관리자(maintainers) 모두 환영합니다.