File size: 10,265 Bytes
465913a 1d85b8e 465913a dcdc5cf 8c035a6 dcdc5cf 8c035a6 f017b18 1d85b8e f017b18 465913a 1d85b8e 465913a d5103c9 465913a dcdc5cf 465913a 1d85b8e 465913a afb7b6d 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 | ---
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. Arquitectura de tres piezas: base `Qwen/Qwen3-4B-Instruct-2507` **congelada e intacta** + un LoRA angosto + spores de conocimiento, 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 angosto** que lo especializa como cerebro de agente. La base queda **congelada**: la habilidad viene del LoRA y el **conocimiento** viene de los spores (sección siguiente) — no de re-entrenar el modelo entero. 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.
### 🧬 Spores de conocimiento (dataset companion)
El proyecto Daimon también publica **[daimon-spores](https://huggingface.co/datasets/lucas-mella/daimon-spores)**: un banco de 17 dominios
de herramientas (uv, docker, react, pytest…) como **KV-caches portables** — un manual
pasado UNA vez por el modelo, cuantizado int4+LZMA (~5.5×), que se antepone como
prefijo de cache para que el modelo "recuerde" el manual **sin gastar tokens de contexto**.
Medido con 3 brazos (base / RAG / spore): uv pasa de 8% → **96%** (supera al RAG).
⚠️ Importante: los spores NO se aplican sobre este adapter. Se atan a `Qwen/Qwen2.5-Coder-1.5B` (base, no Instruct) — otro modelo del mismo ecosistema; daimon-r sigue siendo el cerebro agéntico.
El dataset incluye un loader autocontenido y los benchmarks congelados para reproducir la tabla.
### 🎯 Benchmark de la tarea de Daimon (in-house, harness público)
Este benchmark lo construimos NOSOTROS (nuestro, harness abierto): mide la tarea
específica para la que existe este LoRA — elegir la acción JSON correcta como
agente de navegador/computadora/código de Daimon. Es held-out (vocabulario
disjunto del entrenamiento), determinístico y el harness es código abierto,
pero es nuestra propia cancha y corresponde decirlo.
<div align="center">
<img src="https://huggingface.co/lucas-mella/Daimon-R/resolve/main/daimon-r-benchmarks-light.png" width="640" alt="benchmark agente 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.*
### 💻 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 trabajo del LoRA — 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.
Three-piece architecture — frozen `Qwen/Qwen3-4B-Instruct-2507` base + a narrow LoRA + knowledge spores — 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`)
### 🧬 Knowledge spores (companion dataset)
The Daimon project also ships **[daimon-spores](https://huggingface.co/datasets/lucas-mella/daimon-spores)**: 17 tool domains (uv, docker,
react, pytest…) as **portable KV-caches** — a manual run once through the model,
int4+LZMA quantized (~5.5×), prepended as a cache prefix so the model "remembers" the
manual **without spending context tokens**. 3-arm benched (base / RAG / spore):
uv goes 8% → **96%** (beats RAG).
⚠️ Note: spores do NOT apply on top of this adapter. They bind to `Qwen/Qwen2.5-Coder-1.5B` (base, not Instruct) — a different model in the same ecosystem; daimon-r remains the agentic brain.
The dataset bundles a self-contained loader and frozen benches to reproduce the table.
---
<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>
|