Upload README.md with huggingface_hub
Browse files
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
|