devsomosahub commited on
Commit
9196f6f
·
verified ·
1 Parent(s): 2486162

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +173 -1
README.md CHANGED
@@ -12,11 +12,20 @@ Um modelo fine-tunado que converte linguagem natural em portugues para comandos
12
 
13
  ## Modelos Treinados
14
 
 
15
  | Modelo | Base | Repo HuggingFace |
16
  |--------|------|------------------|
17
  | 1.5B (rapido) | Qwen/Qwen2.5-1.5B-Instruct | [devsomosahub/agent-os-adapter-1.5b](https://huggingface.co/devsomosahub/agent-os-adapter-1.5b) |
18
  | 7B (preciso) | Qwen/Qwen2.5-7B-Instruct | [devsomosahub/agent-os-adapter-7b](https://huggingface.co/devsomosahub/agent-os-adapter-7b) |
19
 
 
 
 
 
 
 
 
 
20
  ## Dataset
21
 
22
  - **Repo:** [devsomosahub/agent-os-dataset](https://huggingface.co/datasets/devsomosahub/agent-os-dataset)
@@ -179,6 +188,152 @@ autotrain spacerunner \
179
  ### 4. Acompanhar o treino
180
  Acesse: `https://huggingface.co/spaces/SEU_USER/autotrain-meu-treino`
181
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  ## Erros Comuns e Solucoes
183
 
184
  ### 1. "Script must be base64 encoded"
@@ -219,7 +374,24 @@ BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4")
219
  TrainingArguments(per_device_train_batch_size=1, gradient_accumulation_steps=8)
220
  ```
221
 
222
- ### 7. "openai/arcee-ai/trinity-large-preview:free is not a valid model ID" (PentAGI)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
223
  O PentAGI prefixa o `LLM_SERVER_PROVIDER` ao modelo. Se o provider for `openai` e o modelo `arcee-ai/trinity:free`, vira `openai/arcee-ai/trinity:free`.
224
  **Solucao:** Coloque `LLM_SERVER_PROVIDER=arcee-ai` e `LLM_SERVER_MODEL=trinity-large-preview:free`.
225
 
 
12
 
13
  ## Modelos Treinados
14
 
15
+ ### Adapters LoRA (precisam do modelo base pra rodar)
16
  | Modelo | Base | Repo HuggingFace |
17
  |--------|------|------------------|
18
  | 1.5B (rapido) | Qwen/Qwen2.5-1.5B-Instruct | [devsomosahub/agent-os-adapter-1.5b](https://huggingface.co/devsomosahub/agent-os-adapter-1.5b) |
19
  | 7B (preciso) | Qwen/Qwen2.5-7B-Instruct | [devsomosahub/agent-os-adapter-7b](https://huggingface.co/devsomosahub/agent-os-adapter-7b) |
20
 
21
+ ### Modelos Merged (prontos pra usar, incluem base + adapter)
22
+ | Modelo | Repo HuggingFace | Inference Endpoint |
23
+ |--------|------------------|--------------------|
24
+ | 1.5B merged | [devsomosahub/agent-os-1b5-merged](https://huggingface.co/devsomosahub/agent-os-1b5-merged) | Sim (T4) |
25
+ | 7B merged | [devsomosahub/agent-os-7b-merged](https://huggingface.co/devsomosahub/agent-os-7b-merged) | Sim (A10G) |
26
+
27
+ **IMPORTANTE:** Use os modelos merged pra Inference Endpoints. Os adapters LoRA nao funcionam direto na Inference API.
28
+
29
  ## Dataset
30
 
31
  - **Repo:** [devsomosahub/agent-os-dataset](https://huggingface.co/datasets/devsomosahub/agent-os-dataset)
 
188
  ### 4. Acompanhar o treino
189
  Acesse: `https://huggingface.co/spaces/SEU_USER/autotrain-meu-treino`
190
 
191
+ ## Merge: Adapter LoRA → Modelo Completo
192
+
193
+ Para usar na Inference API ou Inference Endpoints do HuggingFace, o adapter LoRA precisa ser mergeado com o modelo base.
194
+
195
+ ### REGRA CRITICA: Merge SEMPRE em FP16, NUNCA em Q4
196
+
197
+ ```python
198
+ # ERRADO - merge a partir de modelo quantizado Q4 (pesos corrompidos!)
199
+ base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B-Instruct", quantization_config=bnb_config)
200
+ model = PeftModel.from_pretrained(base, "adapter")
201
+ merged = model.merge_and_unload() # SHAPES ERRADAS! Nao funciona.
202
+
203
+ # CERTO - merge a partir de modelo FP16 na CPU
204
+ base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B-Instruct", torch_dtype=torch.float16, device_map="cpu")
205
+ model = PeftModel.from_pretrained(base, "adapter")
206
+ merged = model.merge_and_unload() # OK! Pesos corretos.
207
+ ```
208
+
209
+ O merge Q4 gera erro `size mismatch for weight: copying a param with shape torch.Size([33947648, 1])` no Inference Endpoint. O modelo precisa estar em FP16 completo pra merge funcionar.
210
+
211
+ **RAM necessaria:** 7B em FP16 = ~14GB RAM. Use A100 na cloud ou CPU local com RAM suficiente.
212
+
213
+ ### Script de merge na cloud (HuggingFace AutoTrain)
214
+
215
+ ```python
216
+ # cloud-merge/script.py
217
+ import os, torch
218
+ from peft import PeftModel
219
+ from transformers import AutoModelForCausalLM, AutoTokenizer
220
+ from huggingface_hub import login
221
+
222
+ HF_TOKEN = os.environ["HF_TOKEN"]
223
+ login(token=HF_TOKEN)
224
+
225
+ base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B-Instruct", torch_dtype=torch.float16, device_map="cpu", trust_remote_code=True)
226
+ model = PeftModel.from_pretrained(base, "devsomosahub/agent-os-adapter-7b")
227
+ merged = model.merge_and_unload()
228
+ tok = AutoTokenizer.from_pretrained("devsomosahub/agent-os-adapter-7b", trust_remote_code=True)
229
+
230
+ merged.push_to_hub("devsomosahub/agent-os-7b-merged", token=HF_TOKEN, max_shard_size="2GB")
231
+ tok.push_to_hub("devsomosahub/agent-os-7b-merged", token=HF_TOKEN)
232
+ ```
233
+
234
+ Lancar: `autotrain spacerunner --project-name "merge-7b" --script-path ./cloud-merge --username SEU_USER --token TOKEN --backend spaces-a100-large --env "HF_TOKEN=TOKEN"`
235
+
236
+ ### Limpar quantization_config do config.json
237
+
238
+ Se o modelo merged ficou com `quantization_config` no `config.json` (heranca do treino Q4), o Inference Endpoint falha com erro de `bitsandbytes not found`. Remova manualmente:
239
+
240
+ ```python
241
+ from huggingface_hub import HfApi, hf_hub_download
242
+ import json
243
+ api = HfApi(token="TOKEN")
244
+ path = hf_hub_download("SEU_USER/modelo-merged", "config.json")
245
+ config = json.load(open(path))
246
+ if "quantization_config" in config:
247
+ del config["quantization_config"]
248
+ api.upload_file(path_or_fileobj=json.dumps(config, indent=2).encode(), path_in_repo="config.json", repo_id="SEU_USER/modelo-merged")
249
+ ```
250
+
251
+ ## Inference Endpoints
252
+
253
+ ### Criar Endpoint via SDK
254
+ ```python
255
+ from huggingface_hub import HfApi
256
+ api = HfApi(token="TOKEN")
257
+ endpoint = api.create_inference_endpoint(
258
+ name="agent-os-1b5",
259
+ repository="devsomosahub/agent-os-1b5-merged",
260
+ framework="pytorch",
261
+ task="text-generation",
262
+ accelerator="gpu",
263
+ vendor="aws",
264
+ region="us-east-1",
265
+ type="protected",
266
+ instance_size="x1",
267
+ instance_type="nvidia-t4", # T4 pra 1.5B, A10G pra 7B
268
+ namespace="devsomosahub",
269
+ )
270
+ ```
271
+
272
+ ### GPUs recomendadas por modelo
273
+ | Modelo | GPU minima | instance_type | instance_size |
274
+ |--------|-----------|---------------|---------------|
275
+ | 1.5B merged | T4 (16GB) | nvidia-t4 | x1 |
276
+ | 7B merged | A10G (24GB) | nvidia-a10g | x1 |
277
+
278
+ ### IMPORTANTE: Pausar endpoints quando nao usar!
279
+ Endpoints cobram por hora enquanto rodando (~$0.60/hr T4, ~$1.05/hr A10G).
280
+ ```python
281
+ api.pause_inference_endpoint("agent-os-1b5", namespace="devsomosahub")
282
+ # Para religar:
283
+ api.resume_inference_endpoint("agent-os-1b5", namespace="devsomosahub")
284
+ ```
285
+
286
+ ### O modelo merged precisa de pipeline_tag no README
287
+ Sem `pipeline_tag: text-generation` no README.md, a Inference API nao reconhece o modelo:
288
+ ```markdown
289
+ ---
290
+ pipeline_tag: text-generation
291
+ library_name: transformers
292
+ ---
293
+ ```
294
+
295
+ ### Chamar o Endpoint
296
+ ```python
297
+ import requests
298
+ URL = "https://SEU-ENDPOINT.aws.endpoints.huggingface.cloud"
299
+ headers = {"Authorization": "Bearer HF_TOKEN"}
300
+ prompt = '<|im_start|>system\nYou are a command adapter. Output ONLY valid JSON.<|im_end|>\n<|im_start|>user\nquais tabelas existem<|im_end|>\n<|im_start|>assistant\n'
301
+ r = requests.post(URL, headers=headers, json={"inputs": prompt, "parameters": {"max_new_tokens": 200, "return_full_text": False}})
302
+ print(r.json()[0]["generated_text"])
303
+ ```
304
+
305
+ ## Teste Real: Modelo vs Banco Supabase (Cloud-Hub)
306
+
307
+ Testamos o modelo 1.5B com tabelas que NUNCA viu no treino (Cloud-Hub: users, boards, vms, activity_log, board_memberships).
308
+
309
+ ### Resultados
310
+
311
+ | Query | SQL gerado | Executou no banco? | Observacao |
312
+ |-------|-----------|-------------------|------------|
313
+ | quais colunas tem a tabela vms | `information_schema.columns WHERE table_name='vms'` | OK - 25 colunas | Perfeito |
314
+ | lista os boards com seus donos | `JOIN boards + users` | OK - 11 resultados | Acertou o JOIN |
315
+ | quais usuarios tem role admin | `WHERE role='admin'` | OK - 0 resultados | Query valida |
316
+ | qual o ip das vms rodando | `WHERE power_status='running'` | OK - 11 VMs | Acertou a logica |
317
+
318
+ ### Limitacao: modelo inventa colunas
319
+
320
+ O modelo **generaliza a estrutura** (JSON, action, sql) mas **chuta nomes de colunas** baseado no dataset de treino quando a query e direta. Exemplo:
321
+ - Gerou `nome_completo` em vez de `display_name` (coluna real)
322
+ - Gerou `user_profiles` em vez de `users` (tabela real)
323
+
324
+ ### Solucao: fluxo de 2 passos
325
+
326
+ ```
327
+ 1. User pergunta: "quais admins tem?"
328
+ 2. Agent OS pede ao modelo: "quais colunas tem a tabela users"
329
+ → Modelo: information_schema query (SEMPRE acerta)
330
+ → Executa no banco → descobre colunas reais
331
+ 3. Agent OS pede ao modelo com contexto: "a tabela users tem (id, email, display_name, role). liste os admins"
332
+ → Modelo gera SQL com colunas corretas
333
+ ```
334
+
335
+ O modelo acerta 100% das queries de `information_schema`. O problema so aparece quando ele tenta gerar SQL direto sem conhecer o schema.
336
+
337
  ## Erros Comuns e Solucoes
338
 
339
  ### 1. "Script must be base64 encoded"
 
374
  TrainingArguments(per_device_train_batch_size=1, gradient_accumulation_steps=8)
375
  ```
376
 
377
+ ### 7. Merge Q4 gera pesos corrompidos no Inference Endpoint
378
+ **Erro:** `RuntimeError: size mismatch for weight: copying a param with shape torch.Size([33947648, 1])`
379
+ **Causa:** Merge foi feito com modelo base carregado em Q4 (BitsAndBytes 4-bit). Os pesos quantizados tem shapes diferentes.
380
+ **Solucao:** SEMPRE mergear com modelo base em FP16. Use `device_map="cpu"` se nao tiver VRAM suficiente. Precisa de ~14GB RAM pro 7B.
381
+
382
+ ### 8. Inference Endpoint falha com "bitsandbytes not found"
383
+ **Causa:** O `config.json` do modelo merged herdou `quantization_config` do treino Q4.
384
+ **Solucao:** Remova `quantization_config` do config.json (ver secao Merge acima).
385
+
386
+ ### 9. Memory limit exceeded (14Gi) no AutoTrain Space
387
+ **Causa:** Carregar modelo 7B FP16 na RAM do Space excede o limite.
388
+ **Solucao:** Use `spaces-a100-large` (80GB) em vez de `spaces-a10g-small` (14GB).
389
+
390
+ ### 10. Inference API retorna "410 Gone" ou "model doesn't support task"
391
+ **Causa:** A API antiga `api-inference.huggingface.co` foi desativada. Modelos custom nao rodam na Inference API gratuita.
392
+ **Solucao:** Crie um Inference Endpoint pago. Modelos merged com `pipeline_tag: text-generation` no README funcionam.
393
+
394
+ ### 11. "openai/arcee-ai/trinity-large-preview:free is not a valid model ID" (PentAGI)
395
  O PentAGI prefixa o `LLM_SERVER_PROVIDER` ao modelo. Se o provider for `openai` e o modelo `arcee-ai/trinity:free`, vira `openai/arcee-ai/trinity:free`.
396
  **Solucao:** Coloque `LLM_SERVER_PROVIDER=arcee-ai` e `LLM_SERVER_MODEL=trinity-large-preview:free`.
397