⎇ 72758e75ce515f355f27615671c95ecaf8c2a8bc
crates/modules/nouser/nous-real/src/stub.rs
Ñawpa willay
Pi imata llamkarqan
ch'uya
feat(nouser): Phase D-2 — proveedor Nous real (LLM) detrás de feature
1//! Modo stub: arranca el bin pero rechaza las requests con un error
2//! que explica que falta la feature `embeddings`.
3
4use nouser_nous::{EmbedRequest, ErrorResponse};
5use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader};
6use tokio::net::UnixStream;
7use tracing::warn;
8
9pub async fn handle_conn(stream: UnixStream) -> std::io::Result<()> {
10 let mut reader = BufReader::new(stream);
11 let mut line = String::new();
12 let n = reader.read_line(&mut line).await?;
13 if n == 0 {
14 return Ok(());
15 }
16
17 // Parseamos para validar la forma; igual rechazamos.
18 let _: Result<EmbedRequest, _> = serde_json::from_str(&line);
19
20 warn!("rechazando request en modo stub (feature `embeddings` ausente)");
21
22 let resp = ErrorResponse {
23 error: format!(
24 "nouser-nous-real compilado sin la feature `embeddings`. \
25 Rebuild con: cargo build -p nouser-nous-real --features embeddings"
26 ),
27 };
28 let mut stream = reader.into_inner();
29 let payload = serde_json::to_string(&resp).unwrap_or_else(|_| {
30 "{\"error\":\"stub mode and serialization failed\"}".to_string()
31 });
32 stream.write_all(payload.as_bytes()).await?;
33 stream.write_all(b"\n").await?;
34 stream.shutdown().await?;
35 Ok(())
36}