mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 13:38:11 +02:00
Lot 5 : /v1 relayé par la façade directement au moteur
La surface compatible OpenAI ne fait plus le détour par le Go : la façade authentifie avec la clé des complétions (préflight CORS exempté), réécrit le corps vers le second slot quand il est en service (id_slot à 1, valeurs gardées telles quelles), retire les X-Forwarded-* et relaie au moteur sans tampon — Host d'origine, sauf pour Strata. Les décisions restent au Go, qui tient l'état de la conversation : la façade lui demande où router, ouvre un ticket « en vol » avant de relayer (refus pendant un benchmark ou une optimisation, avec Retry-After) et le rend quand le flux se termine, que le client parte ou que le moteur soit injoignable. Sans ticket obtenu, la requête est refusée : le Go pourrait sinon effacer le slot en plein calcul. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
451770bfcf
commit
c9c9ac1ddd
7 files changed
+646
-1
No files matched your search
@@ -30,6 +30,7 @@ use tokio::net::TcpListener;
|
||||
use crate::api;
|
||||
use crate::auth::{HostEnv, INTERNAL_HEADER, InternalClient};
|
||||
use crate::engine;
|
||||
use crate::oai;
|
||||
use crate::store::Store;
|
||||
use crate::ui;
|
||||
|
||||
@@ -62,6 +63,8 @@ pub struct Config {
|
||||
|
||||
struct Proxy {
|
||||
client: Client<HttpConnector, Incoming>,
|
||||
/// Vers le moteur (llama-server / Strata), pour `/v1`.
|
||||
engine: oai::EngineClient,
|
||||
backend: SocketAddr,
|
||||
ctx: api::Ctx,
|
||||
}
|
||||
@@ -75,6 +78,7 @@ pub async fn serve(
|
||||
let client = Client::builder(TokioExecutor::new()).build_http();
|
||||
let proxy = Arc::new(Proxy {
|
||||
client,
|
||||
engine: Client::builder(TokioExecutor::new()).build_http(),
|
||||
backend: cfg.backend,
|
||||
ctx: api::Ctx {
|
||||
store: Store::new(cfg.backend, cfg.internal_token.clone()),
|
||||
@@ -131,6 +135,10 @@ impl Proxy {
|
||||
if let Some(resp) = ui::serve(req.method(), path, req.headers()) {
|
||||
return resp;
|
||||
}
|
||||
// Surface OpenAI : relayée au moteur, décisions demandées au Go.
|
||||
if path.starts_with("/v1/") {
|
||||
return oai::serve(&self.ctx, &self.engine, req).await;
|
||||
}
|
||||
if api::handles(req.method(), path) {
|
||||
return api::serve(&self.ctx, req).await;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user