File size: 2,919 Bytes
fe96323
 
df2c0a9
 
fe96323
 
d6c9678
df2c0a9
d6c9678
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2a8204e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
da3ac65
 
 
 
 
2a8204e
 
385f196
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
---
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.