mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 06:58:14 +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
@@ -62,6 +62,30 @@ impl Store {
|
||||
.map_err(|_| "store : délai dépassé".to_string())?
|
||||
}
|
||||
|
||||
/// Appel JSON à une autre route de l'API interne du Go (`/internal/v1/…`).
|
||||
/// Code HTTP autre que 2xx → `Err`.
|
||||
pub async fn internal_json(
|
||||
&self,
|
||||
method: Method,
|
||||
path_and_query: &str,
|
||||
body: Option<&serde_json::Value>,
|
||||
) -> Result<serde_json::Value, String> {
|
||||
let body = body
|
||||
.map(|b| serde_json::to_vec(b).unwrap_or_default())
|
||||
.unwrap_or_default();
|
||||
let (status, bytes) = self.call(method, path_and_query, body).await?;
|
||||
if !status.is_success() {
|
||||
return Err(format!(
|
||||
"{path_and_query} : {status} {}",
|
||||
String::from_utf8_lossy(&bytes)
|
||||
));
|
||||
}
|
||||
if bytes.is_empty() {
|
||||
return Ok(serde_json::Value::Null);
|
||||
}
|
||||
serde_json::from_slice(&bytes).map_err(|e| e.to_string())
|
||||
}
|
||||
|
||||
/// Valeur brute ; `Ok(None)` = absente, `Err` = pas pu lire (à distinguer
|
||||
/// pour les secrets : comme `getBytesErr`).
|
||||
pub async fn get(&self, bucket: &str, key: &str) -> Result<Option<Vec<u8>>, String> {
|
||||
|
||||
Reference in new issue
Block a user