




[Referência da API](docs/API.md) · [Exemplos de cliente](docs/API_EXAMPLES.md) · [Issues](https://git.evandro.dev.br/evandro/OllaHubBackend/issues)
## O que é
Um servidor HTTP e WebSocket em Rust ([Actix Web](https://actix.rs)) que cuida do [Ollama](https://ollama.com) por você: verifica se ele está instalado e respondendo, instala quando falta, lista e baixa modelos de um catálogo e conversa com eles por WebSocket. Traz também criptografia AES-256-GCM e um CRUD de usuários, com JWT e Swagger UI. O `.env.example` indica que os tokens vêm de um frontend separado.
## Por que usar
- **Setup do Ollama num lugar só.** `GET /v2/api/ollama/check` diz se o Ollama está no `PATH`, qual a versão e se a API responde (`reachable`, `unreachable` ou `degraded`). `POST /v2/api/ollama/install` instala por sistema: no Windows baixa o `OllamaSetup.exe` e roda `/silent`, no Linux usa o script oficial e no macOS extrai o zip em `/Applications`.
- **Chat que prepara o modelo.** Em `/v2/ws/chat`, se o modelo pedido não estiver instalado, o servidor o baixa antes de responder e avisa o progresso por mensagens de status.
- **Contrato documentado pelo código.** O OpenAPI é gerado com [utoipa](https://github.com/juhaku/utoipa) e servido no Swagger UI em `/docs`.
**Quando não usar:** exposto na internet ou em produção. Rotas que baixam e executam instaladores são públicas, os usuários ficam só em memória e o chat não faz streaming incremental. Se você só precisa conversar com um Ollama já instalado, a API dele na porta `11434` basta.
> [!IMPORTANT]
> **Nem toda rota exige JWT.** O middleware só protege `/api/v1/*`, `/v2/api/crypto*` e `/v2/api/models*`. Ficam **públicas** `/health`, `/v2/health`, `/v2/api/ollama/*` (inclusive `POST /v2/api/ollama/install`, que baixa e executa o instalador do Ollama), `/docs` e os WebSockets `/v2/ws*`. Por padrão o servidor escuta só em `127.0.0.1`; só mude `HOST` sabendo disso. O `.env.example` vem com um `JWT_SECRET` preenchido (sem ele, o padrão é `changeme-dev-secret`): troque pelo seu.
## Como funciona
- `src/main.rs`, `src/config.rs` e `src/state.rs`: sobem o servidor, leem a configuração das variáveis de ambiente e montam o `AppContext` (eventos, criptografia, URL do Ollama, catálogo, segredo JWT).
- `src/api/`: rotas v2 de saúde, modelos, Ollama e criptografia.
- `src/core/models.rs`: lê o `modelList.json` (93 modelos; a API expõe `name` e `description`), consulta `/api/tags` e baixa com `/api/pull` do Ollama.
- `src/services/install/`: instalação do Ollama por sistema operacional.
- `src/ws/`: WebSockets de eventos (`/v2/ws`) e de chat (`/v2/ws/chat`).
- `src/crypto/`: AES-256-GCM com nonce aleatório de 12 bytes antes do ciphertext; a chave fica em hex em `