Files
ForgeLM/docs/api/endpoints.md
T

226 lines
4.4 KiB
Markdown

# Endpoints HTTP
Esta pagina documenta a superficie HTTP publica atual do ForgeLM.
## Base URL
- default de bind: `0.0.0.0:8080`
- endereco recomendado para consumo local: `http://127.0.0.1:8080`
Quando esta documentacao usa `127.0.0.1`, ela esta descrevendo o endereco tipico de consumo local, nao necessariamente o bind literal do processo.
## GET /health
Retorna um snapshot simples do estado do processo.
### Auth
- nao exige auth
### Exemplo
```bash
curl http://127.0.0.1:8080/health
```
### Resposta
```json
{
"status": "ok",
"model_loaded": true,
"model_id": "meu-modelo",
"uptime_secs": 42
}
```
### Observacoes
- hoje `model_loaded` funciona como um sinal operacional simples do processo em pe
- o app desktop usa `GET /health` como parte do readiness check do runtime local
## GET /v1/models
Lista o modelo canonico e aliases conhecidos.
### Auth
- exige auth apenas se `LOCALLLM_API_KEY` estiver configurada
### Cabecalhos aceitos
- `Authorization: Bearer <token>`
- `x-api-key: <token>`
- ou o cabecalho custom configurado em `LOCALLLM_AUTH_HEADER`
### Exemplo
```bash
curl http://127.0.0.1:8080/v1/models
```
### Resposta
```json
{
"object": "list",
"data": [
{
"id": "default",
"object": "model",
"created": 1710000000,
"owned_by": "local",
"root": "meu-modelo",
"parent": "meu-modelo",
"permission": []
}
]
}
```
### Observacoes
- `root` aponta para o modelo canonico
- `parent` e usado quando um ID e alias do modelo canonico
- o app desktop usa esse endpoint para preencher o seletor de modelo
## POST /v1/chat/completions
Endpoint principal de inferencia.
### Auth
- exige auth apenas se `LOCALLLM_API_KEY` estiver configurada
### Campos principais da request
```json
{
"model": "default",
"messages": [
{ "role": "user", "content": "Explique este projeto" }
],
"max_tokens": 1024,
"temperature": 0.15,
"top_p": 0.95,
"stream": false,
"stop": [],
"n": 1,
"seed": null,
"user": null,
"response_format": null,
"tools": [],
"tool_choice": null,
"parallel_tool_calls": null,
"stream_options": null
}
```
### Defaults importantes
- `max_tokens`: `1024`
- `temperature`: `0.15`
- `top_p`: `0.95`
- `n`: `1`
### Regras de validacao
- `model` deve existir no catalogo de modelos
- `messages` nao pode ser vazio
- `n` precisa ser `1`
- `tools` podem ser rejeitadas se tool calling estiver desabilitado
### Exemplo sem streaming
```bash
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "default",
"messages": [{"role": "user", "content": "Diga ola"}],
"stream": false
}'
```
### Resposta sem streaming
```json
{
"id": "chatcmpl-...",
"object": "chat.completion",
"created": 1710000000,
"model": "meu-modelo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Ola!"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 8,
"total_tokens": 20,
"tokens_per_second": 31.5
}
}
```
### Exemplo com streaming
```bash
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-N \
-d '{
"model": "default",
"messages": [{"role": "user", "content": "Escreva um resumo"}],
"stream": true,
"stream_options": {"include_usage": true}
}'
```
### Streaming SSE
O backend envia eventos `data: ...` no formato `chat.completion.chunk` e termina com:
```text
data: [DONE]
```
O ultimo chunk pode incluir `usage` se `include_usage=true`.
### Erros
Exemplo de payload de erro:
```json
{
"error": {
"message": "Only n=1 is currently supported",
"type": "invalid_request_error",
"param": "n",
"code": "unsupported_value"
}
}
```
### Limitacoes atuais
- o servidor nao implementa toda a plataforma OpenAI
- `parallel_tool_calls` nao deve ser tratado como recurso plenamente suportado
- o campo `content` de mensagens pode aceitar arrays de partes textuais, mas o backend reduz isso a texto consolidado
- reasoning nativo nao aparece como campo separado na API HTTP; o app desktop separa `<think>...</think>` no frontend
## Codigos de status mais comuns
- `200 OK` - sucesso
- `400 Bad Request` - payload invalido ou modo nao suportado
- `401 Unauthorized` - chave ausente/invalida quando auth esta habilitada
- `404 Not Found` - modelo nao encontrado
Para configuracao do servidor e variaveis de ambiente, veja `configuration.md`.