3.9 KiB
Arquitetura do projeto
Esta pagina resume a arquitetura atual do workspace ForgeLM para quem vai manter ou evoluir o sistema.
Mapa do workspace Rust
O Cargo.toml raiz declara os membros:
crates/llama-syscrates/inference-corecrates/inference-servercrates/api-contractscrates/metricscrates/localllm-cli
O app desktop fica fora do workspace Rust principal, em tauri-app/, mas conversa diretamente com esse ecossistema por binario, comandos Tauri e HTTP local.
Responsabilidade de cada modulo
api-contracts
Tipos compartilhados para:
- chat completions
- model listing
- health
- payloads de erro
Serve como contrato comum entre inference-server e consumidores da API.
inference-core
Responsavel pela engine de inferencia local:
- carga do modelo
- sessao de inferencia
- sampler
- perfis de runtime
inference-server
Camada HTTP baseada em Axum:
- leitura de env vars
- montagem de
ServerConfig - auth, CORS e aliases de modelos
- endpoints
/health,/v1/models,/v1/chat/completions
localllm-cli
CLI de operacao e automacao. Hoje ela ja tem uma superficie ampla, mas a parte com execucao real comprovada contra o backend publico atual esta mais concentrada em status, models list e bench throughput.
metrics
Contadores e registros de throughput/token usage usados no backend.
llama-sys
Bindings e integracao de baixo nivel com a stack de inferencia.
tauri-app
App desktop composto por:
- frontend React/Vite
- backend Tauri em Rust
- runtime manager local/remoto
- chat persistente com
sql.js
Fluxo entre API, CLI e app
1. Backend HTTP
inference-server sobe, carrega o modelo e expoe a API HTTP.
2. CLI
A CLI pode falar com a API HTTP por URL configurada via --server e --api-key.
3. App desktop
O app usa duas camadas:
- backend Tauri para gerenciar processo, configuracao e integracoes locais
- frontend React para runtime manager, selecao de modelos e chat
Quando em modo local, o app inicia/para o backend por meio do runtime manager do Tauri. Quando em modo remoto, o app apenas consome uma URL externa.
Runtime manager do app
Arquivos centrais:
tauri-app/src/features/runtime/useRuntimeManager.tstauri-app/src/features/runtime/types.tstauri-app/src/features/runtime/components/RuntimeStatusCard.tsxtauri-app/src/features/runtime/components/RuntimeSettingsDrawer.tsxtauri-app/src-tauri/src/runtime/*
Conceitos importantes:
RuntimeConfige persistido no backend TauriRuntimeSnapshote consumido pelo frontend- modo
localeremotecompartilham a mesma superficie de configuracao - readiness do modo local depende de
GET /health
Chat e persistencia
Arquivos centrais:
tauri-app/src/components/ChatView.tsxtauri-app/src/components/MessageBubble.tsxtauri-app/src/lib/db.tstauri-app/src/lib/chat.ts
Caracteristicas importantes:
- conversas e mensagens ficam em
sql.jspersistido emlocalStorage - o app separa reasoning de resposta final ao analisar
<think>...</think> - tokens por mensagem e por chat ficam persistidos
- memoria do chat envia ate 20 mensagens recentes quando habilitada
Limites e fronteiras atuais
- a API publica ainda e pequena; nao documente ou desenvolva assumindo uma plataforma completa estilo OpenAI
- a CLI esta mais avancada no parser/superficie do que nas capacidades HTTP publicas realmente disponiveis
- o app desktop e a interface mais rica do projeto hoje, mas ainda depende do backend HTTP local/remoto para inferencia real
Termos recomendados
runtime- processo + configuracao + estado operacional do backend localAPI local- oinference-serverrodando na maquina do usuariomodo local- o app controla o processomodo remoto- o app consome uma API externasnapshot de runtime- estado serializado do runtime usado pelo frontend
Leitura complementar
../api/overview.md../cli/overview.md../app/overview.md