Files
brahman/crates/modules/verbo/verbo-daemon/src/lib.rs
T
sergio 649ca02d4d feat(verbo): verbo-daemon — embeddings compartidos entre procesos
Daemon que carga un Provider una vez y lo sirve sobre socket Unix;
DaemonClient lo consume desde otro proceso implementando el trait
Provider (indistinguible de un backend local). Multi-instancia: un
daemon por modelo, cada uno en su socket. Frames postcard con
prefijo de largo. 8 tests (wire + integración real sobre socket).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 16:25:56 +00:00

35 lines
1.5 KiB
Rust

//! `verbo-daemon` — embeddings compartidos entre procesos.
//!
//! El problema: cada proceso que quiera embeddings cargaría su propia
//! copia del modelo (cientos de MB de RAM, descargas duplicadas). La
//! solución: un [`Daemon`] carga el modelo una vez y lo sirve sobre un
//! socket Unix; cada proceso usa un [`DaemonClient`] que, por
//! implementar `verbo_core::Provider`, es indistinguible de un backend
//! local.
//!
//! ```text
//! ┌── proceso A ──┐ ┌── proceso B ──┐ ┌── proceso C ──┐
//! │ DaemonClient │ │ DaemonClient │ │ DaemonClient │
//! └───────┬───────┘ └───────┬───────┘ └───────┬───────┘
//! └───────── socket Unix ─────────────────┘
//! │
//! ┌─────────┴─────────┐
//! │ Daemon (Arc<P>) │ ← un modelo en RAM
//! └───────────────────┘
//! ```
//!
//! **Multi-instancia**: para servir varios modelos a la vez se levanta
//! un daemon por modelo, cada uno en su socket — el daemon es agnóstico
//! del backend (sirve cualquier `Provider`: `verbo-mock`, un backend
//! Cohere, uno BGE local).
#![forbid(unsafe_code)]
mod client;
mod server;
mod wire;
pub use client::DaemonClient;
pub use server::Daemon;
pub use wire::{Request, Response};