File size: 5,832 Bytes
1a0b19c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# Plano Validado (Context7): HF Spaces + HF CLI + Jobs

Este plano foi corrigido com base nas boas praticas documentadas no Hugging Face Hub/CLI via Context7.

## 1) Arquitetura recomendada

- `Space (Docker)`: roda o bot Discord e serve consultas RAG.
- `HF Job`: reconstrói o indice FAISS sob demanda ou por agendamento.
- `Dataset repo (Hub)`: armazena os artefatos versionados do indice (`faiss.index`, `meta.json`, `manifest.json`).

Motivo: o acoplamento direto de volume entre Space e Job nao deve ser assumido. Para integracao confiavel entre componentes, use artefato no Hub.

## 2) Persistencia correta no Space

No Space, habilite Persistent Storage em `Settings > Hardware`.

Use os caminhos abaixo:

- `HF_HOME=/data/.huggingface`
- `LOCAL_STORAGE_DIR=/data/storage`

Observacao:
- `/data` e o caminho de volume persistente em Spaces.
- qualquer dado fora de `/data` pode ser efemero.

## 3) Fluxo operacional (producao)

### 3.1 Build de indice (Job)

1. Job baixa os documentos (repo/dataset/origem definida).
2. Job gera `faiss.index` + `meta.json`.
3. Job publica artefatos no dataset de indices (com commit e tag/revisao).
4. Job atualiza `manifest.json` com `revision`, `created_at`, `embed_model`, `num_chunks`.

### 3.2 Consumo no Space

1. Bot inicia.
2. Bot baixa o ultimo artefato aprovado do dataset.
3. Bot salva localmente em `/data/storage` para cache quente.
4. Bot consulta `manifest.json` periodicamente e faz hot-reload quando `revision` muda.

Resultado:
- sem depender de restart para atualizar base;
- rollback simples por revisao/tag do dataset.

### 3.3 Envio de `@docs_rag` para estrutura HF

Padrao recomendado: separar fonte documental e artefato de indice.

- Dataset 1 (fonte): `<org-ou-user>/rag-docs`
- Dataset 2 (indice): `<org-ou-user>/rag-index`

Estrutura no Hub:

- `rag-docs/docs_rag/...` (originais .pdf/.doc/.docx/.rtf)
- `rag-index/artifacts/faiss.index`
- `rag-index/artifacts/meta.json`
- `rag-index/artifacts/manifest.json`

Comandos para publicar `./docs_rag`:

```bash
# criar dataset de documentos (uma vez)
hf repo create <org-ou-user>/rag-docs --repo-type dataset --private

# upload completo da pasta local docs_rag para /docs_rag no dataset
hf upload <org-ou-user>/rag-docs ./docs_rag docs_rag --repo-type dataset --commit-message "docs: carga inicial"
```

Incremental (atualizacoes futuras):

```bash
hf upload <org-ou-user>/rag-docs ./docs_rag docs_rag --repo-type dataset --commit-message "docs: update <timestamp>"
```

Upload otimizado (filtro e higiene):

```bash
hf upload <org-ou-user>/rag-docs ./docs_rag docs_rag \
  --repo-type dataset \
  --commit-message "docs: update <timestamp>" \
  --exclude "**/.DS_Store" \
  --exclude "**/Thumbs.db" \
  --exclude "**/~$*" \
  --exclude "**/*.tmp" \
  --exclude "**/*.log" \
  --exclude "**/__pycache__/**"
```

Upload otimizado com whitelist de extensoes (recomendado):

```bash
hf upload <org-ou-user>/rag-docs ./docs_rag docs_rag \
  --repo-type dataset \
  --commit-message "docs: update <timestamp>" \
  --include "**/*.pdf" \
  --include "**/*.doc" \
  --include "**/*.docx" \
  --include "**/*.rtf" \
  --exclude "**/.DS_Store" \
  --exclude "**/Thumbs.db" \
  --exclude "**/~$*"
```

Opcional para acervo muito grande (lote por pasta):

```bash
hf upload <org-ou-user>/rag-docs ./docs_rag/legislacao_grifada_e_anotada_atualiz_em_01_01_2026 docs_rag/legislacao_grifada_e_anotada_atualiz_em_01_01_2026 --repo-type dataset --commit-message "docs: lote legislacao"
hf upload <org-ou-user>/rag-docs ./docs_rag/sumulas_tse_stj_stf_e_tnu_atualiz_01_01_2026_2 docs_rag/sumulas_tse_stj_stf_e_tnu_atualiz_01_01_2026_2 --repo-type dataset --commit-message "docs: lote sumulas"
```

Observacoes operacionais:
- o Job deve ler da pasta `docs_rag/` no dataset de documentos.
- o Job publica o resultado no dataset de indice (`rag-index`).
- o Space nunca depende diretamente do filesystem do Job.

## 4) Comandos HF CLI (baseline)

## 4.1 Autenticacao e diagnostico

```bash
hf auth whoami
hf env
```

## 4.2 Criar repo de artefatos (dataset)

```bash
hf repo create <org-ou-user>/rag-index --repo-type dataset --private
```

## 4.3 Upload de artefatos do indice

```bash
hf upload <org-ou-user>/rag-index ./artifacts . --repo-type dataset --commit-message "reindex: <timestamp>"
```

## 4.4 Rodar Job manual

```bash
hf jobs run python:3.12 python ingest_job.py
```

## 4.5 Agendar Job

Use os comandos de agendamento de jobs (`hf jobs scheduled ...`) para periodicidade (ex.: diario).

## 5) Variaveis e segredos

### 5.1 Space (Variables)

- `HF_HOME=/data/.huggingface`
- `LOCAL_STORAGE_DIR=/data/storage`
- `INDEX_REPO_ID=<org-ou-user>/rag-index`
- `INDEX_REPO_TYPE=dataset`
- `INDEX_POLL_SECONDS=60`

### 5.2 Space/Job (Secrets)

- `HF_TOKEN` (escopo minimo necessario)
- `OPENROUTER_API_KEY`
- `DISCORD_TOKEN`

Regra:
- nunca commitar token no repo;
- sempre usar Secrets do Space/Job.

## 6) Checklist de robustez

- validar autenticacao antes de operacoes: `hf auth whoami`.
- validar ambiente com `hf env`.
- publicar indice com metadados (`manifest.json`).
- fazer pinagem por revisao para reproducibilidade.
- manter estrategia de rollback (tag da ultima versao estavel).
- registrar logs de reindex e troca de revisao no bot.

## 7) Custo e desempenho

- Space CPU pequeno atende bem para consulta RAG leve.
- Reindex em Job CPU normalmente e suficiente.
- `/data` reduz redownload ao manter cache com `HF_HOME`.
- separar inferencia (OpenRouter) da indexacao reduz custo total.

## 8) Criticos corrigidos neste plano

- removida suposicao de persistencia em `storage/` fora de `/data`.
- removida suposicao de compartilhamento direto de volume entre Space e Job.
- adicionada camada de artefato versionado no Hub para sincronizacao segura.
- adicionadas operacoes minimas de CLI para auditoria e rollback.