aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md30
1 files changed, 28 insertions, 2 deletions
diff --git a/README.md b/README.md
index deeef3c..90d108e 100644
--- a/README.md
+++ b/README.md
@@ -63,6 +63,7 @@ cargo run --release -- run --no-manage
| `asist-asr` | Canary en ONNX: ventana deslizante y transcripción final |
| `asist-llm` | llama-server: streaming SSE, historial, llamadas a herramientas |
| `asist-tts` | qwentts: síntesis en streaming y voces clonadas |
+| `asist-tools` | Buscar en internet y mirar por la cámara |
| `asist-app` | Supervisor de procesos, orquestador y binario `asistente` |
Los tres motores viven en `vendor/` como submódulos fijados a un commit
@@ -120,14 +121,37 @@ de configuración valieron más que cualquier cambio de código:
- La plantilla del modelo dejaba `<think>` abierto: **8630 ms → 413 ms** al
primer token.
- El prompt de estilo anulaba las llamadas a herramientas: **0/8 → 8/8**.
+- La cámara capturaba a 720p: **7,8 s → 2,9 s** por imagen a 640x480.
+- Las herramientas se ejecutaban en silencio: **~8,4 s → 4,1 s** hasta oír algo.
Los tres, con el porqué y cómo se midieron, en
[docs/RENDIMIENTO.md](docs/RENDIMIENTO.md).
## Herramientas
-El asistente puede llamar a funciones. Viene con `hora_actual` y con
-`ejecutar_comando`, esta última **apagada**: darle una shell a un modelo que
+El asistente puede llamar a funciones. Vienen cuatro:
+
+| Herramienta | Qué hace | Coste medido |
+|---|---|---|
+| `hora_actual` | Fecha y hora del sistema | 0 ms |
+| `buscar_en_internet` | Busca y resume | 0,5–3,6 s |
+| `mirar_por_la_camara` | Hace una foto y responde sobre lo que ve | 4,2–5,2 s |
+| `ejecutar_comando` | Órdenes del sistema, **apagada** por defecto | — |
+
+Mientras una herramienta trabaja, el asistente dice «Déjame que lo busque» o
+«Voy a mirar». No es adorno: sin eso el turno pasa seis segundos en silencio y
+se lee como un cuelgue. Con el acuse, el primer audio llega en 3–4 s.
+
+**Buscar** admite tres buscadores: `tavily` (con clave, devuelve una respuesta
+ya redactada), `ddgs` (sin clave, la misma librería que hay bajo
+`duckduckgo-mcp`) y `searxng`. El de comando ejecuta un guion que escriba JSON,
+así que meter otro es escribir un guion, no tocar Rust.
+
+**Mirar** aprovecha que el servidor ya carga el proyector multimodal: el mismo
+modelo que conversa describe la imagen. La foto no se guarda en disco ni entra
+en el historial.
+
+`ejecutar_comando` está apagada a conciencia: darle una shell a un modelo que
obedece a lo que oye por el micrófono es un cambio de postura de seguridad.
Cuando se enciende, sólo pasan las órdenes de una lista blanca, sin shell que
interprete metacaracteres y con un plazo máximo.
@@ -160,4 +184,6 @@ frase y comprueba que el reconocedor la recupera.
- CUDA para los motores en C++ (funcionan en CPU, pero muy justos)
- PipeWire o ALSA
- ~6 GB de disco para los modelos
+- `ffmpeg` para la cámara
+- Para buscar: una clave de Tavily en `$TAVILY_API_KEY`, o `uv tool install ddgs`