Files
ForgeLM/docs/developer/architecture.md
T

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-sys
  • crates/inference-core
  • crates/inference-server
  • crates/api-contracts
  • crates/metrics
  • crates/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.ts
  • tauri-app/src/features/runtime/types.ts
  • tauri-app/src/features/runtime/components/RuntimeStatusCard.tsx
  • tauri-app/src/features/runtime/components/RuntimeSettingsDrawer.tsx
  • tauri-app/src-tauri/src/runtime/*

Conceitos importantes:

  • RuntimeConfig e persistido no backend Tauri
  • RuntimeSnapshot e consumido pelo frontend
  • modo local e remote compartilham a mesma superficie de configuracao
  • readiness do modo local depende de GET /health

Chat e persistencia

Arquivos centrais:

  • tauri-app/src/components/ChatView.tsx
  • tauri-app/src/components/MessageBubble.tsx
  • tauri-app/src/lib/db.ts
  • tauri-app/src/lib/chat.ts

Caracteristicas importantes:

  • conversas e mensagens ficam em sql.js persistido em localStorage
  • 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 local
  • API local - o inference-server rodando na maquina do usuario
  • modo local - o app controla o processo
  • modo remoto - o app consome uma API externa
  • snapshot de runtime - estado serializado do runtime usado pelo frontend

Leitura complementar

  • ../api/overview.md
  • ../cli/overview.md
  • ../app/overview.md