mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 13:38:11 +02:00
Lot 10 : réglages partagés tenus par la façade (LOKI_SETTINGS=rust)
La façade sert /api/prefs, /api/sysprompt, /api/reasoning-effort et /api/oai/public quand LOKI_SETTINGS=rust (expérimental ; le Go reste le défaut), sur les mêmes clés de la base : préférences fusionnées et nettoyées (prénom borné, avatars en liste fermée, valeurs vides effacées), prompt système du preset actif avec repli sur le global, intensité du raisonnement en liste blanche, adresse publique normalisée. Côté Go, facade_settings.go remet ces routes à la façade quand elles arrivent par le tunnel du relais. Parité : parity_settings_test.go tire du Go 19 adresses, 11 intensités et 29 appels de route avec le contenu de la base après chacun, rejoués par tests/settings.rs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
17 files changed
+1689
-9
No files matched your search
@@ -69,6 +69,8 @@ pub struct Config {
|
||||
/// Dictée vocale tenue par la façade (`LOKI_DICTATE=rust`) : servie ici ;
|
||||
/// `None` : relayée au Go.
|
||||
pub dictate: Option<Arc<crate::dictate::Dictation>>,
|
||||
/// Réglages partagés tenus par la façade (`LOKI_SETTINGS=rust`).
|
||||
pub settings: bool,
|
||||
}
|
||||
|
||||
struct Proxy {
|
||||
@@ -98,6 +100,7 @@ pub async fn serve(
|
||||
chat: cfg.chat,
|
||||
models: cfg.models,
|
||||
dictate: cfg.dictate,
|
||||
settings: cfg.settings,
|
||||
internal_token: cfg.internal_token.clone(),
|
||||
},
|
||||
});
|
||||
@@ -137,11 +140,9 @@ pub async fn serve(
|
||||
impl Proxy {
|
||||
async fn handle(&self, mut req: Request<Incoming>) -> Response<Body> {
|
||||
// Le Go (et lui seul : jeton tiré à chaque démarrage) remet à la
|
||||
// façade le trafic du chat, des modèles et de la dictée qui lui arrive
|
||||
// sans passer par elle.
|
||||
let from_go =
|
||||
(self.ctx.chat.is_some() || self.ctx.models.is_some() || self.ctx.dictate.is_some())
|
||||
&& self.ctx.from_go(req.headers());
|
||||
// façade le trafic des lots qu'elle tient et qui lui arrive sans passer
|
||||
// par elle.
|
||||
let from_go = self.ctx.holds_any() && self.ctx.from_go(req.headers());
|
||||
// Jamais de confiance accordée sur la foi d'un en-tête du client :
|
||||
// ni « je viens du tunnel », ni « je suis la façade ».
|
||||
req.headers_mut().remove(VIA_TUNNEL);
|
||||
@@ -181,6 +182,9 @@ impl Proxy {
|
||||
{
|
||||
return chatapi::serve(&self.ctx, chat, req, from_go).await;
|
||||
}
|
||||
if self.ctx.settings && crate::settings::handles(path) {
|
||||
return crate::settings::serve(&self.ctx, req, from_go).await;
|
||||
}
|
||||
if let Some(d) = &self.ctx.dictate
|
||||
&& crate::dictate::handles(path)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user