JARVIS/docs/stack.svg
sito 55e967b940 Portabilidad, licencia GPL-3.0 y diagrama del stack
Portabilidad (el repo estaba escrito como si solo sirviera para el portatil
del autor):
- num_gpu ya NO se fija en los Modelfile: Ollama reparte las capas segun la
  VRAM, asi el modelo va igual en GPU pequeña, grande o CPU. Se documenta
  cuando conviene fijarlo (solo tarjetas de 4 GB muy justas).
- install.sh detecta el gestor de paquetes (apt/dnf/pacman/zypper) y la GPU
  (NVIDIA/AMD/ninguna), sin asumir Debian ni CUDA.
- README reescrito: el hardware es una REFERENCIA (lo probado), no un
  requisito. Nueva seccion de portabilidad: cualquier distro, cualquier
  escritorio (ventanas necesitan X11+xdotool, degradan solas en Wayland),
  GPU opcional.
- Eliminado config/jarvis-herramientas.json: llevaba rutas personales.

Licencia: GPL-3.0 (copyleft).

docs/stack.svg: diagrama del stack (oir-pensar-hacer-hablar), reemplaza el
ASCII en el README. Anadido que el RAG sube la recuperacion de 48 a 82%
(hit@1) medido.
2026-08-16 15:53:35 +02:00

105 lines
5 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1060 600" font-family="'DejaVu Sans','Segoe UI',system-ui,sans-serif">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#0f0d0c"/>
<stop offset="1" stop-color="#080706"/>
</linearGradient>
<radialGradient id="core" cx="0.5" cy="0.42" r="0.6">
<stop offset="0" stop-color="#ffb27a"/>
<stop offset="0.45" stop-color="#e8622a"/>
<stop offset="1" stop-color="#7a2d10"/>
</radialGradient>
<marker id="arw" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M0 0 L10 5 L0 10 z" fill="#e8622a"/>
</marker>
<style>
.stage { fill:#161210; stroke:#e8622a; stroke-width:1.5; }
.side { fill:#12100f; stroke:#e8622a; stroke-width:1.2; stroke-dasharray:5 4; opacity:.92; }
.kicker { fill:#e8622a; font-size:11.5px; font-weight:700; letter-spacing:2.5px; }
.tech { fill:#f4ede7; font-size:17px; font-weight:700; }
.role { fill:#b9afa7; font-size:12px; }
.flow { stroke:#e8622a; stroke-width:2.2; fill:none; marker-end:url(#arw); }
.glyph { fill:none; stroke:#e8c6a8; stroke-width:2.2; stroke-linecap:round; stroke-linejoin:round; }
</style>
</defs>
<rect width="1060" height="600" rx="20" fill="url(#bg)"/>
<!-- marco: la maquina, todo local -->
<rect x="24" y="68" width="1012" height="452" rx="18" fill="none" stroke="#4a3a30" stroke-width="1.4"/>
<text x="530" y="40" text-anchor="middle" fill="#f4ede7" font-size="24" font-weight="800" letter-spacing="1">JARVIS</text>
<text x="530" y="58" text-anchor="middle" fill="#8f857d" font-size="12.5" letter-spacing="1">asistente de voz local · todo en 127.0.0.1 · sin nube</text>
<!-- microfono -->
<g transform="translate(62,242)">
<rect x="-8" y="-18" width="16" height="27" rx="8" class="glyph"/>
<path d="M-13 2 a13 13 0 0 0 26 0 M0 15 v9 M-8 24 h16" class="glyph"/>
</g>
<line x1="90" y1="246" x2="110" y2="246" class="flow"/>
<!-- OIR -->
<rect x="112" y="188" width="168" height="116" rx="12" class="stage"/>
<text x="130" y="216" class="kicker">OÍR</text>
<text x="130" y="243" class="tech">whisper.cpp</text>
<text x="130" y="267" class="role">reconoce la voz</text>
<text x="130" y="285" class="role">GPU si hay; si no, CPU</text>
<line x1="280" y1="246" x2="318" y2="246" class="flow"/>
<!-- PENSAR (con el reactor) -->
<rect x="320" y="176" width="212" height="140" rx="12" class="stage"/>
<circle cx="378" cy="240" r="30" fill="url(#core)"/>
<path d="M378 219 L397 253 L359 253 Z" fill="none" stroke="#fff2e6" stroke-width="1.8" opacity=".85"/>
<text x="422" y="206" class="kicker">PENSAR</text>
<text x="422" y="231" class="tech" font-size="16">Ollama</text>
<text x="422" y="251" class="role">el modelo, con</text>
<text x="422" y="267" class="role">tool-calling</text>
<text x="422" y="290" class="role" fill="#8f857d">decide y llama</text>
<text x="422" y="305" class="role" fill="#8f857d">herramientas</text>
<line x1="532" y1="246" x2="570" y2="246" class="flow"/>
<!-- HACER -->
<rect x="572" y="188" width="168" height="116" rx="12" class="stage"/>
<text x="590" y="216" class="kicker">HACER</text>
<text x="590" y="243" class="tech" font-size="15.5">acciones + shell</text>
<text x="590" y="267" class="role">150 órdenes del</text>
<text x="590" y="285" class="role">catálogo, o un comando</text>
<line x1="740" y1="246" x2="778" y2="246" class="flow"/>
<!-- HABLAR -->
<rect x="780" y="188" width="168" height="116" rx="12" class="stage"/>
<text x="798" y="216" class="kicker">HABLAR</text>
<text x="798" y="243" class="tech">Piper</text>
<text x="798" y="267" class="role">sintetiza la voz</text>
<text x="798" y="285" class="role">o tu voz clonada</text>
<line x1="948" y1="246" x2="968" y2="246" class="flow"/>
<!-- altavoz -->
<g transform="translate(990,246)">
<path d="M-13 -8 h8 l11 -9 v34 l-11 -9 h-8 z" class="glyph"/>
<path d="M11 -7 a11 11 0 0 1 0 22 M17 -13 a18 18 0 0 1 0 34" class="glyph"/>
</g>
<!-- SABER: RAG, alimenta a PENSAR desde abajo -->
<rect x="320" y="372" width="212" height="112" rx="12" class="side"/>
<text x="340" y="400" class="kicker" font-size="10.5">SABER · RAG</text>
<text x="340" y="426" class="tech" font-size="16">tus apuntes</text>
<text x="340" y="450" class="role">busca el comando que</text>
<text x="340" y="468" class="role">ya has probado</text>
<path d="M426 372 L426 320" class="flow"/>
<!-- CARA: el panel -->
<rect x="112" y="372" width="168" height="112" rx="12" class="side"/>
<text x="130" y="400" class="kicker" font-size="10.5">CARA · PANEL</text>
<text x="130" y="426" class="tech" font-size="16">HUD web</text>
<text x="130" y="450" class="role">lo que oye y hace,</text>
<text x="130" y="468" class="role">y las métricas</text>
<!-- pie -->
<text x="530" y="556" text-anchor="middle" fill="#9a8f86" font-size="12.5">
software libre (GPL-3.0) · cualquier Linux · GPU opcional (NVIDIA / AMD / CPU)
</text>
</svg>