Este projeto é uma API construída com FastAPI que processa áudio recebido via WebSocket. Ele transcreve o áudio usando Whisper, processa o texto com o modelo LLaMA e sintetiza uma resposta em áudio utilizando XTTS. Tudo é configurado e executado em contêineres Docker para facilitar a instalação e a execução.
- Transcrição de áudio: Recebe áudio via WebSocket e transcreve utilizando Whisper.
- Processamento de texto: Processa a transcrição com o modelo LLaMA para gerar respostas inteligentes.
- Síntese de áudio: Converte a resposta gerada em áudio usando XTTS.
- Execução em Docker: Todos os componentes são configurados para rodar em contêineres Docker.
- Docker versão 20.10 ou superior
- Docker Compose versão 1.29 ou superior
Crie um arquivo .env
na raiz do projeto com base no exemplo .env.example
. Preencha as variáveis necessárias:
PORT=8000
LLAMA_MODEL=nome_do_modelo_llama
LLAMA_ENDPOINT=http://localhost:11434
WHISPER_MODEL=base
WHISPER_DEVICE=cuda
DEBUG_MODE=true
VOICE_NAME=man
Na raiz do projeto, execute o seguinte comando:
docker-compose up -d --build
Isso irá:
- Construir e iniciar o serviço de API.
- Iniciar o contêiner do modelo LLaMA.
Caso prefira, você pode usar a imagem disponível no Docker Hub em vez de construir localmente. Execute:
docker pull ricardoreichert/NOMEDAIMAGEM:tagname
Substitua NOMEDAIMAGEM
e tagname
pelos valores correspondentes da imagem no repositório.
Se optar por usar a imagem do Docker Hub, será necessário ajustar o arquivo docker-compose.yml
para referenciar a imagem ao invés de construir localmente. Por exemplo:
services:
api:
image: ricardoreichert/NOMEDAIMAGEM:tagname
container_name: api_container
ports:
- '${PORT}:${PORT}'
environment:
- LLAMA_ENDPOINT=$LLAMA_ENDPOINT
- PORT=$PORT
- WHISPER_MODEL=$WHISPER_MODEL
- WHISPER_DEVICE=$WHISPER_DEVICE
env_file:
- .env
networks:
- app_network
-
Request: Envie um arquivo de áudio no formato binário pelo WebSocket. O áudio deve estar no formato WAV.
-
Response: O servidor retorna uma resposta JSON contendo a transcrição e a resposta gerada pelo modelo LLaMA, além de enviar o áudio sintetizado:
{ "transcription": "Texto transcrito do áudio", "llama": "Resposta gerada pelo modelo LLaMA" }
Em seguida, o servidor também envia o áudio sintetizado no formato WAV como bytes pelo WebSocket.
Após iniciar os contêineres:
- A API estará disponível em
http://localhost:8000
. - A conexão WebSocket para envio de áudio pode ser feita em
ws://localhost:8000/ws
.
Conecte-se ao endpoint WebSocket para enviar arquivos de áudio e receber respostas transcritas e sintetizadas.
Os logs do servidor são configurados para exibir mensagens no terminal. Ative o modo de depuração (DEBUG_MODE=true
) no arquivo .env
para obter informações detalhadas.
main.py
: Contém a API e o processamento principal.xtts_handler.py
: Módulo responsável por gerenciar a síntese de áudio usando XTTS.Dockerfile
: Define como a imagem Docker do serviço é construída.docker-compose.yml
: Configuração para orquestrar os contêineres do projeto.
-
É obrigatório o uso de GPU para o funcionamento completo da API, incluindo a transcrição com Whisper e o processamento com LLaMA.
-
Certifique-se de que o modelo LLaMA esteja configurado corretamente no contêiner
ollama-ai
. -
Mais informações sobre o funcionamento do contêiner Ollama estão disponíveis em Ollama Docker Hub.
-
O Whisper requer uma GPU para funcionar com melhor desempenho. Certifique-se de que o driver NVIDIA esteja instalado e funcionando corretamente.
- Conexão recusada no endpoint LLaMA: Verifique se o contêiner
ollama-ai
está ativo e acessível na porta correta. - Erro na síntese de áudio: Certifique-se de que os arquivos de referência de voz estejam disponíveis na pasta
audios/
.