4.5 KiB
Visao geral da API e backend
O backend do ForgeLM e um servidor HTTP local escrito em Rust, montado sobre Axum e conectado a uma engine de inferencia em inference-core.
Componentes principais
crates/inference-server- inicializacao do servidor, leitura de configuracao por variaveis de ambiente e roteamento HTTPcrates/api-contracts- tipos de request/response para chat, health, models e erroscrates/inference-core- engine, sessoes, perfis de runtime e samplercrates/metrics- contadores de throughput e metricas de geracao
Endpoints publicos
Hoje o servidor expoe:
GET /healthGET /v1/modelsPOST /v1/chat/completions
Essa superficie e pequena de proposito: o foco atual do projeto esta em chat local, descoberta de modelos e integracao com o runtime manager do app.
Inicializacao do servidor
O binario principal do backend esta em crates/inference-server/src/main.rs.
Na inicializacao, o servidor:
- configura tracing/logs
- le variaveis de ambiente como
LOCALLLM_MODEL,LOCALLLM_PROFILE,LOCALLLM_ADDR,LOCALLLM_GPU_LAYERSeLOCALLLM_CTX - cria a configuracao da engine a partir do perfil selecionado
- carrega e aquece o modelo (
warmup()) - monta o router com CORS e estado compartilhado
- faz bind no endereco configurado e serve as rotas HTTP
Perfil de runtime
Os perfis atuais ficam em crates/inference-core/src/profile.rs:
Turbo4B- foco em throughput, contexto moderado e uso de GPU agressivoBalanced9B- equilibrio entre qualidade e custoCpuFallback- fallback para maquinas sem GPU
Esses perfis definem defaults como n_gpu_layers, n_ctx, n_batch, n_ubatch, flash_attn e n_threads.
Auth e CORS
A configuracao de compatibilidade HTTP mora em crates/inference-server/src/compat.rs.
- auth e opcional; se
LOCALLLM_API_KEYnao estiver configurada, a API aceita requests sem chave GET /healthnao passa por verificacao de authGET /v1/modelsePOST /v1/chat/completionspassam porauthorize_request()- CORS aceita
*por default ou uma lista configuravel porLOCALLLM_CORS_ORIGINS
Cabecalhos aceitos para auth:
- cabecalho configurado em
LOCALLLM_AUTH_HEADER(default:authorization) Authorizationx-api-key
Se LOCALLLM_AUTH_SCHEME estiver configurado, o backend tenta remover esse prefixo antes de comparar a chave.
Catalogo de modelos
O backend monta um catalogo de modelos em memoria a partir do nome canonico do modelo carregado e de aliases opcionais configurados por LOCALLLM_MODEL_ALIASES.
Regras importantes:
- o modelo carregado vira o ID canonico principal
- aliases adicionais podem apontar para o mesmo
root local-modeledefaultentram como aliases comuns quando possivelGET /v1/modelsretorna tanto o canonico quanto os aliases conhecidos
Chat completions
O endpoint de chat aceita mensagens em formato semelhante ao da OpenAI, com suporte para:
- roles
system,developer,user,assistantetool stream: true|falsestopcomo string unica, array de strings ounullresponse_formattoolsetool_choicestream_options.include_usage
O servidor, porem, continua com escopo limitado. Alguns campos sao aceitos por compatibilidade de contrato, mas isso nao significa paridade total com a plataforma OpenAI.
Streaming
No modo stream, o backend usa SSE e envia chunks no formato chat.completion.chunk.
Dois modos de streaming existem internamente:
LiveTokens- emite tokens incrementais quando o fluxo suporta token streamingBuffered- produz a resposta inteira e a entrega em blocos compativeis
O chunk final pode incluir usage quando stream_options.include_usage=true.
Erros e validacao
Os erros seguem ErrorResponse { error: ApiError } com:
messagetypeparamopcionalcodeopcional
Validacoes conhecidas:
modelinexistente retornamodel_not_foundmessagesvazia retornaempty_messagesn != 1retornaunsupported_valuetoolscom tool calls desabilitadas retornatool_calls_disabled
Limitacoes atuais
- nao ha endpoints publicos para embeddings, uploads, files ou responses API
ndiferente de1nao e suportadoresponse_formate tool calling passam por compatibilidade de prompt/pos-processamento, nao por enforcement forte de decoderparallel_tool_callsexiste no contrato, mas nao deve ser tratado como capacidade plena documentadaGET /healthe um health check operacional; nao e uma prova profunda de qualidade do modelo
Para referencia detalhada de requests e respostas, siga para endpoints.md e configuration.md.