mesa-react / README.md
Guilherme Silberfarb Costa
melhorias gerais
da3ac65
---
title: Mesa React
emoji: "🌖"
colorFrom: blue
colorTo: indigo
sdk: docker
app_port: 7860
pinned: false
---
# MESA Frame (FastAPI + React)
Rearquitetura do app MESA com:
- `backend/` em FastAPI
- `frontend/` em React (Vite)
- Reuso do core estatistico e de negocio original (elaboracao + visualizacao)
## Estrutura
- `backend/app/main.py`: inicializacao da API
- `backend/app/api/`: rotas de sessao, elaboracao e visualizacao
- `backend/app/services/`: orquestracao dos fluxos
- `backend/app/core/elaboracao`: core de elaboracao reaproveitado
- `backend/app/core/visualizacao`: core de visualizacao reaproveitado
- `frontend/src`: interface React
## Backend
```bash
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
./run_backend.sh
```
API: `http://localhost:8000`
Swagger: `http://localhost:8000/docs`
## Frontend
```bash
cd frontend
npm install
npm run dev
```
Frontend: `http://localhost:5173`
Para apontar para outro backend:
```bash
VITE_API_BASE=http://localhost:8000 npm run dev
```
## Repositório de modelos `.dai`
Os modelos usados em **Pesquisa**, **Elaboração** (carregar modelo existente) e
**Visualização** (carregar modelo existente) podem vir de duas fontes:
- `local` (pasta do projeto)
- `hf_dataset` (dataset no Hugging Face)
Variáveis de ambiente do backend:
- `MODELOS_REPOSITORIO_PROVIDER` (`local` ou `hf_dataset`)
- `MODELOS_REPOSITORIO_LOCAL_DIR` (opcional, quando `local`)
- `MODELOS_REPOSITORIO_HF_REPO_ID` (ex.: `gui-sparim/repositorio_mesa`)
- `MODELOS_REPOSITORIO_HF_REVISION` (ex.: `main`)
- `MODELOS_REPOSITORIO_HF_SUBDIR` (ex.: `modelos_dai`)
- `HF_TOKEN` (opcional para dataset privado)
Regra automática de provider:
- Em runtime HF Spaces (`SPACE_ID`/`SPACE_AUTHOR_NAME`/`HF_SPACE_ID`), o backend força `hf_dataset`.
- Fora do HF Spaces, o fallback continua `local` quando o provider não é informado.
No modo `hf_dataset`, o backend consulta a revisão atual do dataset e só
sincroniza novamente quando detectar mudança de revisão.
## Login simples
O app exige autenticação para qualquer rota `/api` (exceto `health` e `login`).
- Endpoint de login: `POST /api/auth/login` com `usuario` e `matricula`
- O frontend usa token no header `X-Auth-Token`
- Usuários padrão: `backend/app/core/auth/usuarios.json`
Variáveis opcionais:
- `APP_USERS_FILE` para apontar um JSON alternativo de usuários
- `APP_USERS_JSON` para injetar o JSON via secret/variável de ambiente
## Logs de auditoria
Logs são gravados em JSONL por escopo:
- `auth`
- `repositorio`
- `elaboracao`
- `visualizacao`
Comportamento por ambiente:
- **Local (`MODELOS_REPOSITORIO_PROVIDER=local`)**: logs desativados.
- **Produção HF (`MODELOS_REPOSITORIO_PROVIDER=hf_dataset`)**: logs gravados e lidos no dataset, em `logs/`.
Variável opcional:
- `APP_LOGS_MODE` (`auto`/`enabled`/`disabled`) para forçar o modo de logs.