Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vox Assistant (Jarvis)

Assistente de voz para desktop estilo Jarvis, feito em Tauri 2 + React + Rust + Python.

Você ativa o Jarvis com o wake word "Hey Jarvis" (ou digitando no chat), ele transcreve sua fala, entende o que você quer (comando ou conversa livre) e responde por voz — também pode abrir sites, rodar scripts, monitorar o sistema e lembrar de conversas passadas.

Arquitetura

O projeto é um monorepo gerenciado com pnpm workspaces:

apps/
  desktop/                  App desktop (Tauri 2 + React 19 + Vite)
    src/                    UI React (chat, orbe de status, aba de comandos)
    src-tauri/              Camada Rust: áudio, SQLite, despacho de ações, TTS
packages/
  vox-core-python/          Pipeline de voz em Python (STT + wake word + LLM)
  vox-plugins-sdk/          (placeholder) SDK futuro de plugins
vox.db                      Banco SQLite com comandos e memória de longo prazo

Fluxo de uma interação:

React UI ──▶ Rust (Tauri) ──▶ Python (vox-pipeline) ──▶ resposta
   ▲              │  audio/captura       │
   │              ▼                      ├─ Wake word (openwakeword: "Hey Jarvis")
   │   TTS (voz em pt-BR)                ├─ Transcrição (faster-whisper)
   └──── Rust fala a resposta ◀── LLM    └─ Intenção (Trie/regex/fuzzy) ou
                                             Llama 3 via Ollama (com RAG + memória)
  • O Rust captura o microfone (via cpal), detecta fala/silêncio (RMS) e envia os chunks de áudio em base64 para o Python via stdin (JSON por linha).
  • O Python detecta o wake word, transcreve com Whisper, classifica a intenção e devolve o resultado pelo stdout.
  • Comandos e memória de longo prazo vivem no SQLite (vox.db). Conversas são gravadas com embeddings (nomic-embed-text) e recuperadas por similaridade de cosseno (RAG) quando você fala com o Jarvis.

Pré-requisitos

  • macOS (o app usa pbpaste, osascript, afplay e a TTS nativa do sistema)
  • mise com as ferramentas do mise.toml (node LTS, pnpm, rust, python 3.11) — ou instale node/pnpm/rust/python manualmente
  • uv (gerencia o ambiente Python do pipeline)
  • Ollama rodando com os modelos llama3 e nomic-embed-text

Instalação

  1. Instale as ferramentas com mise (opcional, se você preferir gerenciar manualmente ignore):

    mise install
  2. Instale e suba o Ollama com os modelos necessários:

    ollama pull llama3
    ollama pull nomic-embed-text

    Mantenha o Ollama rodando em background (o Jarvis depende dele para conversar).

  3. Instale as dependências do workspace:

    pnpm install

    Na primeira execução, o Python também baixa o modelo de transcrição do Whisper (small) e os modelos de wake word do openwakeword automaticamente.

Executando

cd apps/desktop
pnpm tauri dev

O app abre sem janela visível — procure o ícone Jarvis AI na barra de menu (tray). Clique nele para mostrar/ocultar a janela.

Como usar

  1. Clique no ícone 🎙️ Mic ON (canto superior direito) para ligar o microfone.
  2. Diga "Hey Jarvis" — o orbe fica verde (ouvindo) e você ouve um Tink.
  3. Fale o comando, ex.: "abrir chrome", "que horas são" ou qualquer conversa: "qual é a capital do Japão?".
  4. O Jarvis responde por voz e mostra a conversa no chat.

Você também pode digitar no campo do chat em vez de falar.

Aba "Comandos"

A aba ⚙️ Comandos mostra as regras cadastradas (a "Árvore de Intenções") e permite adicionar ou remover comandos:

Campo Exemplo
ID abrir_youtube
Ação open:https://youtube.com
Frases (separadas por vírgula) abrir youtube, abre o youtube

Tipos de ação

Ação O que faz Exemplo
open:<url> Abre URL/site open:https://youtube.com
sh:<script> Executa comando shell/AppleScript sh:osascript -e 'tell application "Finder" to empty trash'
llm_clipboard:<instrução> Envia o conteúdo do clipboard ao LLM llm_clipboard:Explique este código:
sys_info:<instrução> Lê CPU/memória e manda o LLM resumir sys_info:Relate o uso de CPU e memória:
net_audit:<instrução> Lista portas abertas e manda o LLM auditar net_audit:Analise se há portas suspeitas:
play_music Abre o Spotify
get_time Mostra a hora atual

Frases podem ter slots ({query}) para capturar valores. Ex.: com ação open:https://www.youtube.com/results?search_query={query} e frase pesquisar por {query} no youtube, dizer "pesquisar por gatos no youtube" abre a busca.

Memória

  • Curto prazo: o Jarvis mantém o contexto da conversa atual.
  • Longo prazo: cada conversa é salva como memória no SQLite com embedding; nas próximas interações ele recupera as memórias mais parecidas (similaridade > 60%) e usa como contexto (RAG).

Limitações

  • Somente macOS no momento (depende de pbpaste, osascript, afplay, lsof, top e TTS nativa).
  • Requer Ollama rodando com llama3 e nomic-embed-text para conversa livre.
  • Comandos como sys_info: e net_audit: usam comandos específicos do macOS.

Estrutura de referência

Caminho Responsabilidade
apps/desktop/src/App.tsx UI React (chat, orbe, aba de comandos)
apps/desktop/src-tauri/src/lib.rs Orquestração: pipeline Python, áudio, TTS, tray, despacho de ações
apps/desktop/src-tauri/src/audio.rs Captura do microfone (cpal)
apps/desktop/src-tauri/src/db.rs Banco SQLite de comandos
packages/vox-core-python/src/vox_core_python/cli.py Pipeline de voz: wake word, Whisper, LLM, RAG
packages/vox-core-python/src/vox_core_python/intent.py Classificação de intenção (Trie, regex com slots, fuzzy)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages