File size: 10,483 Bytes
465913a dcdc5cf 465913a d5103c9 465913a 64609a0 d5103c9 dcdc5cf d5103c9 64609a0 dcdc5cf 64609a0 465913a d5103c9 465913a dcdc5cf 465913a | 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 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | ---
license: apache-2.0
base_model: Qwen/Qwen3-4B-Instruct-2507
language:
- es
- en
tags:
- daimon
- lora
- tool-calling
- agent
- code
- spanish
library_name: gguf
---
<div align="center">
<img src="https://huggingface.co/lucas-mella/Daimon-R/resolve/main/daimon-R.png" width="220" alt="daimon r"/>
</div>
---
## 🇪🇸 Español
**daimon r** es el cerebro razonador (4B) de **Daimon**, un asistente personal local-first:
corre en tu máquina, no en la nube. Fine-tune **LoRA** de `Qwen/Qwen3-4B-Instruct-2507` para el núcleo
de Daimon: **acciones de agente (tool-calling JSON), código y conversación en español nativo**.
**Qué es exactamente**: el modelo base `Qwen/Qwen3-4B-Instruct-2507` (GGUF cuantizado, intacto) + un
**LoRA de ~66MB** que lo especializa como cerebro de agente. Es un modelo estándar:
funciona con llama.cpp / LM Studio / cualquier stack GGUF, **sin necesidad del software
de Daimon** — abajo está el contrato completo de prompts para usarlo standalone.
### 📊 Benchmark (medido, reproducible)
<div align="center">
<img src="https://huggingface.co/lucas-mella/Daimon-R/resolve/main/daimon-r-benchmarks-light.png" width="640" alt="benchmark daimon r vs base"/>
</div>
| Métrica (198 casos held-out) | Base Qwen3-4B-Instruct-2507 | **daimon r** | |
|---|---|---|---|
| JSON válido / valid JSON | 100.0% | **100.0%** | ➖ empata |
| Acción correcta / correct action | 75.3% | **100.0%** | ✅ gana |
| Acción + campos correctos / correct fields | 47.5% | **100.0%** | ✅ gana |
*Benchmark objetivo y reproducible: 198 escenarios sintéticos held-out (vocabulario
disjunto del entrenamiento, cero solapamiento textual), calificados determinísticamente —
JSON parseable, acción esperada, campos correctos (`ref`/`path`/`command`/…). Sin juez LLM.
Medido sobre estos GGUF exactos servidos con llama.cpp. Script:
[`agent_actions_eval.py`](https://github.com/lucasmella-stack/daimon) — los JSONs de
resultados se generan antes de cada publicación.*
### 🔍 Benchmarks de la comunidad (independientes de nuestro propio bench)
Además del benchmark de agent-actions de arriba (que es nuestro propio esquema),
corrimos Qwen3-4B-Instruct-2507 y este modelo contra benchmarks ESTÁNDAR de la comunidad,
en las mismas condiciones exactas (misma cuantización GGUF, mismo serving,
mismo harness) para que la comparación sea justa:
| Benchmark | Base Qwen3-4B-Instruct-2507 | **Este modelo** | |
|---|---|---|---|
| HumanEval | 74.4% | **72.0%** | ❌ pierde |
| MBPP | 82.5% | **75.8%** | ❌ pierde |
| MMLU (subset) | 68.4% | **68.4%** | ➖ empata |
| BFCL-lite (tool-calling estandar) | 76.0% | **77.0%** | ✅ gana |
*HumanEval/MBPP: pass@1 con ejecución real de tests ocultos (no similitud de
texto). MMLU: subset de 15 materias, precisión 0-shot. BFCL-lite: subset AST
del Berkeley Function-Calling Leaderboard v3 (simple/multiple/parallel/
parallel_multiple/irrelevance) — mide tool-calling en un esquema DISTINTO al
nuestro.*
**El trade-off, explícito**: este LoRA es un **especialista de agente**, no un
fine-tune general-purpose. Los puntos que cede en código/conocimiento general
son el costo deliberado de la ganancia enorme en su tarea núcleo (la tabla de
arriba: de ~47% a ~100% en acciones correctas). Para programar "a mano" usá el
modelo base; para operar como agente de Daimon, este. Si una dimensión pierde,
se muestra perdiendo — preferimos que la card sea creíble a que sea linda.
### 🧠 Con qué se entrenó (por contribución)
- **Acciones de agente (in-house, sintético)** — escenarios browser/computer/code con el
esquema JSON exacto de producción de Daimon (`{"thought": …, "action": "click", "ref": …}`),
generados por construcción (la respuesta correcta se conoce con certeza, sin teacher API).
Es lo que mueve las tres métricas de arriba.
- **Comportamiento e identidad Daimon (in-house)** — 231 seeds: persona en primera persona,
honestidad ante lo que no sabe, registro rioplatense conciso, convención de canvas HTML.
- El **código, el razonamiento y el multilingüe** vienen del modelo base (por eso el LoRA es
chico y el nivel de código se mantiene intacto). Probamos también mezclas grandes con
datasets públicos (xLAM, ToolACE, código, español nativo) y fine-tunes sobre el historial
real de commits — **ninguna de esas variantes le ganó a esta en el gate, así que no se
publicaron**. Solo publicamos lo que gana una comparación pre-registrada contra el base.
### 💻 Requisitos de hardware
| Recurso | Requisito |
|---|---|
| Disco | ~2.6 GB (base GGUF + LoRA) |
| RAM | 8 GB mínimo |
| GPU / memoria unificada | ≥ 4 GB VRAM (ej. GTX 1650) o Apple Silicon ≥ 8 GB de memoria unificada |
### ✅ Probalo vos mismo (verificable)
```bash
huggingface-cli download lucas-mella/Daimon-R --local-dir ./daimon
llama-server -m ./daimon/Qwen3-4B-Instruct-2507-Q4_K_M.gguf --lora ./daimon/daimon-r-lora-f16.gguf -c 4096
```
Después probá una acción de agente (el núcleo de lo que se entrenó — este es un caso
real del set de evaluación, verificado contra estos pesos exactos antes de publicar):
```bash
curl -s http://127.0.0.1:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
"temperature": 0,
"messages": [
{"role": "system", "content": "Sos el navegador autónomo de Daimon. En cada paso recibís el objetivo, la página actual (elementos interactivos con su ref + texto visible) y el historial. Respondé SOLO con un objeto JSON de esta forma:\n{\"thought\":\"...\",\"action\":\"navigate|click|fill|scroll|back|done\",\"ref\":<n>,\"text\":\"...\",\"url\":\"...\"}"},
{"role": "user", "content": "Objetivo: poné 'gatos' en 'Email'\n\nURL: https://un-sitio-de-noticias.test/\nTítulo: Un Sitio De Noticias\nElementos:\n [0] input \"Nombre\"\n [1] input \"Email\"\nTexto:\nun sitio de noticias\n\nHistorial: (vacío)\n\nPróxima acción (JSON):"}
]
}'
```
Respuesta esperada (un único objeto JSON, sin prosa alrededor):
`{"thought": "…", "action": "fill", "ref": 1, "text": "gatos"}`
SHA-256 del LoRA publicado: `ee6ad40ac3e2c6019a4526b0f0ce6c423b16a32a875315b24008e6c789149f06`.
### 🔌 Cómo usarlo standalone (sin el software de Daimon)
El modelo no depende de ninguna app: es un GGUF estándar servido con llama.cpp
(o LM Studio, Ollama con adapter, etc.). Lo único que necesitás es hablarle con
los **system prompts con los que fue entrenado**. Tiene 4 modos:
<details>
<summary><b>1. Agente de navegador</b> — devuelve UNA acción JSON por paso</summary>
System prompt (exacto):
```text
Sos el navegador autónomo de Daimon. En cada paso recibís el objetivo, la página actual (elementos interactivos con su ref + texto visible) y el historial. Respondé SOLO con un objeto JSON de esta forma:
{"thought":"...","action":"navigate|click|fill|scroll|back|done","ref":<n>,"text":"...","url":"...","answer":"..."}
- navigate requiere url. click/fill requieren ref (de la lista). fill además text.
- Cuando cumpliste el objetivo: action='done' y poné el resultado en answer.
- Un solo JSON, sin markdown ni texto extra.
```
En el user message pasás: `Objetivo: ...`, la URL/título, la lista de elementos
(`[0] input "Email"` …), el texto visible y el historial. Respuesta:
`{"thought": "…", "action": "fill", "ref": 1, "text": "gatos"}`.
</details>
<details>
<summary><b>2. Agente de computadora</b> — click/type/key/hotkey/scroll sobre una ventana</summary>
System prompt (exacto):
```text
Sos el control de computadora de Daimon. Cada paso recibís el objetivo, la ventana actual (elementos con su ref + nombre) y el historial. Respondé SOLO con un JSON:
{"thought":"...","action":"click|type|key|hotkey|scroll|done","ref":<n>,"text":"...","key":"...","keys":["ctrl","c"],"dy":<n>,"answer":"..."}
- click requiere ref (de la lista). type escribe text en el foco actual. key presiona una tecla; hotkey una combinación (keys). scroll usa dy (negativo = abajo).
- Cuando cumpliste el objetivo: action='done' con answer.
- Un solo JSON, sin markdown ni texto extra.
```
</details>
<details>
<summary><b>3. Agente de código</b> — read_file/write_file/run/done sobre un workspace</summary>
System prompt (exacto):
```text
Sos el agente de código autónomo de Daimon. Trabajás sobre el repo real. En cada paso recibís la tarea, el árbol del workspace y el historial de acciones/observaciones. Respondé SOLO con un JSON:
{"thought":"...","action":"read_file|write_file|run|done","path":"rel/ruta","content":"...","command":"...","answer":"..."}
- read_file: leé antes de editar. write_file: contenido COMPLETO del archivo. run: comandos de verificación (tests/build) o shell. done: cuando terminaste, con answer.
- Editá de a poco y verificá con tests/build. Un solo JSON, sin markdown.
```
</details>
<details>
<summary><b>4. Tool-calling genérico</b> — formato estándar <code><tool_call></code> de Qwen</summary>
Para function-calling clásico (tus propias tools con JSON schema), usá el
formato nativo: listá las herramientas en el system prompt y pedí respuestas
`<tool_call>\n{"name": ..., "arguments": {...}}\n</tool_call>`. Medido en
BFCL-lite (tabla de abajo) — el fine-tune lo mantiene por encima del base.
</details>
El loop del agente (ejecutar la acción, observar, re-prompt con el historial)
lo implementás vos — el modelo es el cerebro que decide la próxima acción.
---
## 🇬🇧 English
**daimon r** is the 4B reasoning brain of **Daimon**, a local-first personal AI assistant.
LoRA fine-tune of `Qwen/Qwen3-4B-Instruct-2507` for Daimon's core: **agent actions (JSON tool-calling),
code, and native-Spanish conversation**. Benchmark table above — measured on these exact
GGUFs, deterministic grading, no LLM judge; losing dimensions are shown losing.
Hardware: ~2.6 GB disk, 8 GB+ RAM, GPU optional — see the Spanish
table (unified-memory Apple Silicon works via llama.cpp Metal).
### Files
- `Qwen3-4B-Instruct-2507-Q4_K_M.gguf` — base model (GGUF)
- `daimon-r-lora-f16.gguf` — Daimon LoRA (apply with `--lora`)
---
<sub>Base: Qwen/Qwen3-4B-Instruct-2507 (Apache-2.0). LoRA + data mix: Daimon project — coming soon.
Watch <a href="https://huggingface.co/lucas-mella">@lucas-mella</a>.</sub>
|