ia: el modelo de embeddings entra como DESCARGA OPCIONAL, y el navegador dice cómo conseguirlo

Decisión del usuario. El motor (199 M) y el modelo de chat (1,04 GiB) van en las cuatro imágenes
porque la barra lateral está en las cuatro; el de embeddings (610 MiB) no, porque es para una función
—preguntarle al archivo por significado— que no todo el mundo usa.

Y «opcional» no significa «lo armás vos»: el modelo ya es receta del corpus, así que la maquinaria de
la Etapa F lo vuelve paquete sin trabajo extra. Publicado en `dist/repo` con su `expected_hash`
anclado, junto con las deps que `install` necesita para reproducirlo — `llama-cpp` faltaba en el
catálogo, y sin ella el paquete no se puede instalar aunque exista. De paso entraron nftables, libmnl
y libnftnl, que tampoco estaban.

⚠ Tres de esos paquetes se habían publicado con el ancla de sanidad por default (`/usr/bin/<nombre>`),
que en una librería o en un modelo NO EXISTE: `install` habría fallado al verificar. Re-empaquetadas
con su ancla de verdad (`/usr/bin/llama-server`, `/usr/sbin/nft`, `/usr/lib/libmnl.so.0`…).

Lo que hace que esto sea opcional de verdad es una línea: la receta NO está declarada en ningún
perfil. Está escrito en el SDD para que nadie lo «arregle» agregándola.

Y la mitad que separa «opcional» de «invisible»: con el modelo ausente el host ya no dice sólo «no
está» sino cómo conseguirlo — «es una descarga opcional — instalalo con `takana install
ia-modelo-embeddings`». Medido en el control negativo del guardián.
This commit is contained in:
Sergio
2026-09-12 11:29:31 +00:00
parent d4d120a079
commit ec1d43efbf
3 changed files with 39 additions and 5 deletions
+30
View File
@@ -737,6 +737,36 @@ leyó—. Encadenadas como navegación de verdad (cada página lleva a la siguie
refresh`), las tres entran. De paso: las dos páginas de tránsito van **sin texto visible**, así el
archivo las descarta y la evidencia no lista dos coincidencias sin título.
#### 6.3.quinquies El modelo de embeddings es una DESCARGA OPCIONAL, no parte de la imagen (2026-09-12)
Decisión del usuario, y la que corresponde a los números: el motor (199 M) y el modelo de chat
(1,04 GiB) van en las cuatro imágenes de escritorio porque la barra lateral está en las cuatro; el
modelo de embeddings **no**, porque son 610 MiB más para una función —preguntarle al archivo por
significado— que no todo el mundo usa.
**Y «opcional» no significa «lo armás vos».** El modelo ya es una receta del corpus, así que la
maquinaria de la Etapa F lo convierte en paquete sin trabajo extra: `scripts/build-repo.sh` empaqueta
**todas** las recetas, y el catálogo queda con su `expected_hash` anclado y sus deps declaradas
(`llama-cpp`, `curl`, `busybox` — publicadas también, que si no `install` no puede reproducirlo).
```
takana install ia-modelo-embeddings --repo <dir|url>
```
Lo que hace que esto sea opcional **de verdad** es una sola línea: la receta **no está declarada en
ningún perfil**. Eso es una decisión, no un olvido, y está escrito acá para que nadie la «arregle»
agregándola.
**Y la mitad que separa «opcional» de «invisible»**: cuando el modelo falta, el host ya no dice
sólo «no está» — dice **cómo conseguirlo**. Con el modelo ausente, la ausencia es el caso NORMAL, no
un error de instalación, y un mensaje sin siguiente paso deja al usuario mirando una función que no
sabe que existe:
```
no hay modelo de embeddings en /usr/share/takana/ia/embeddings.gguf: es una descarga opcional
— instalalo con `takana install ia-modelo-embeddings`
```
#### 6.3.quater El modelo que elegimos NO SERVÍA, y el síntoma no se parecía a la causa (2026-09-12)
Esto es la unidad de trabajo más caras de esta tanda y vale escribirla entera, porque la clase de
+8 -4
View File
@@ -272,10 +272,14 @@ no puede distinguir «no hay modelo» de «el modelo dijo eso».
comprueba además que al cerrarse el navegador queden **cero** `llama-server`. Control negativo: sin
modelo, la causa aparece y **no hay respuesta inventada**.
El modelo ya está elegido y pineado: **Qwen2.5-1.5B-Instruct Q4_K_M** (`recipes/ia-modelo-chat.toml`,
Apache-2.0, 1,04 GiB, 20,1 tok/s en CPU, habla español — las tres cosas medidas antes de pinearlo).
Lo que sigue sin decidirse es **en qué imágenes se declara**: con el motor son ~1,25 GiB por perfil.
Mientras no se declare, la imagen no lo trae y el panel lo dice.
El modelo de chat es **Qwen2.5-1.5B-Instruct Q4_K_M** (`recipes/ia-modelo-chat.toml`, Apache-2.0,
1,04 GiB, 20,1 tok/s en CPU, habla español — las tres cosas medidas antes de pinearlo), y va **en las
cuatro imágenes de escritorio** junto con el motor: ~1,25 GiB por perfil.
El de **embeddings** (`ia-modelo-embeddings`, Qwen3-Embedding-0.6B, 610 MiB) es **descarga opcional**:
no está declarado en ningún perfil —decisión, no olvido— y se instala con
`takana install ia-modelo-embeddings`. Hasta que se instale, «A mis páginas» contesta con esa misma
línea en vez de con un «no está» sin salida.
## `foco` — el navegador MUESTRA el foco, y no tiene con qué apagarlo (§6.5)
+1 -1
View File
@@ -43,7 +43,7 @@ license = "MIT OR Apache-2.0"
[source]
repo = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git"
commit = "43f9e09f476f159635c5b9ea209aeb854b92606c"
commit = "e19bb0e50bf303d56da3c4cf028439a92551b120"
# ⚠ SIN ESTO EL BUILD MUERE EN UN SITIO QUE NO NOMBRA LA CAUSA — medido acá el 2026-09-10.
# tawasuyu COMMITEA su propio `vendor/`: adentro tiene un `smithay` parcheado a mano (tearing/flip
# async para el compositor), y lo enchufa con `[patch.crates-io] smithay = { path = "vendor/smithay" }`.