649ca02d4d
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>
35 lines
1.5 KiB
Rust
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};
|