Files
brahman/crates/modules/verbo/SDD.md
T
2026-05-20 16:26:18 +00:00

44 lines
2.0 KiB
Markdown

# modules/verbo/ — Provider de embeddings model-agnostic (era dime)
**Propósito.** Capa de embeddings estructuralmente agnóstica al modelo:
la elección de backend es config por instancia. Los vectores quedan
atados a su `ModelId` — comparar vectores de modelos distintos es un
error explícito, no un sinsentido silencioso. Un daemon permite cargar
un modelo una vez y compartirlo entre procesos.
## Crates
| crate | tipo | rol |
| -------------- | ---- | ------------------------------------------------------------ |
| `verbo-core` | lib | Contrato: `ModelId`, `EmbeddingVector` (cosine), `EmbedError`, trait `Provider` |
| `verbo-mock` | lib | Backend determinista sin modelo (FNV-1a + LCG) — para tests |
| `verbo-daemon` | lib | `Daemon` (sirve un `Provider` por socket Unix) + `DaemonClient` (lo consume como `Provider`) |
## Dependencias
- `mock`, `daemon``verbo-core`.
- `daemon``tokio` + `postcard` (frames con prefijo de largo).
- `verbo-core` es `#![forbid(unsafe_code)]`, sólo `serde` + `async-trait`.
## Compartir entre procesos
`verbo-daemon` resuelve la duplicación de modelos en RAM: un `Daemon`
carga el modelo una vez; N procesos lo consumen vía `DaemonClient`, que
implementa `Provider` y por tanto es indistinguible de un backend local.
Multi-instancia = un daemon por modelo, cada uno en su socket.
## Estado
Contrato + mock + daemon implementados y verdes (~25 tests).
**Pendiente** — backends de modelos reales (requieren infra/API keys):
| backend pendiente | tipo | nota |
| ----------------- | ------ | --------------------------------------------- |
| `verbo-cohere` | remoto | API Cohere — recomendado para uso remoto |
| `verbo-bge` | local | `bge-code-large` vía ONNX — recomendado local |
| `verbo-fastembed` | local | modelos ligeros (MiniLM 384d) |
Cada uno implementa `Provider` y puede servirse vía `verbo-daemon` sin
cambios — el daemon es agnóstico del backend.