3.2 KiB
Visao geral do app desktop
O app desktop do ForgeLM vive em tauri-app/ e combina:
- frontend React/Vite
- backend Tauri em Rust
- runtime manager para API local/remota
- chat persistente com banco local em memoria exportado para
localStorage
Funcao do app
O app foi desenhado para ser a interface principal de uso do runtime local. Ele permite:
- iniciar ou parar a API local quando o modo e
local - apontar para uma API existente quando o modo e
remote - escolher/importar modelos
.gguf - conversar com o backend via
POST /v1/chat/completions - persistir historico de chats e mensagens
- separar trechos de reasoning (
<think>...</think>) da resposta final no frontend
Arquitetura em alto nivel
Frontend
Arquivos principais:
src/App.tsx- shell principal do appsrc/components/Sidebar.tsx- sidebar com runtime card, seletor de modelo e lista de chatssrc/components/ChatView.tsx- fluxo de chat, streaming, memoria e persistencia de mensagenssrc/features/runtime/*- runtime manager unificado
Backend Tauri
Arquivos principais:
src-tauri/src/lib.rs- comandos Tauri expostos ao frontendsrc-tauri/src/runtime/*- estado, config, spawn, health probe e snapshot do runtime local
Runtime manager
O runtime manager e a peca central do app.
Estados principais:
stoppedstartingreadydegradedstoppingerror
Modos de conexao:
local- o app controla o processo do backendremote- o app so consome uma API externa ja existente
O frontend usa useRuntimeManager() como source of truth para:
- snapshot atual do runtime
- URL resolvida da API
- save de config
- start/stop do runtime local
Selecao de modelos
O app carrega modelos via GET /v1/models usando useModels().
Comportamentos importantes:
- se nao houver endpoint configurado, o estado fica em erro e a lista e limpa
- se a API responder sem modelos, o model selector fica vazio
- se o modelo antes selecionado nao existir mais na lista, o app seleciona o primeiro disponivel
Persistencia local
O chat usa sql.js com schema local gerenciado por src/lib/db.ts.
Tabelas principais:
chatsmessages
Campos persistidos por mensagem incluem:
rolecontentreasoning_contentprompt_tokenscompletion_tokenstotal_tokenstokens_per_second
Importante: isso nao e um banco nativo do sistema operacional. O app injeta sql.js por CDN e persiste a exportacao do banco em localStorage.
Chat e streaming
ChatView.tsx envia requests para POST /v1/chat/completions.
Recursos atuais:
- streaming opcional
- memoria opcional com ate 20 mensagens recentes
- separacao visual de reasoning (
<think>...</think>) no frontend - contadores de tokens por mensagem e por chat
- edicao, reenvio e exclusao de mensagens
Limitacoes atuais
- o app depende de um binario
localllmacessivel quando o modo local e usado - o fallback browser-only nao substitui os recursos desktop do Tauri
- o chat depende da pequena API HTTP atual; o app nao expoe magica propria fora dela
- o runtime manager faz polling periodico do snapshot; ele nao usa ainda um fluxo completo de eventos push
Para uso pratico, siga para user-guide.md.