mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 05:28:15 +02:00
Lot 29 : télémétrie des complétions de la façade
Quand la façade tient la conversation (LOKI_CHAT=rust), ses complétions rejoignent l'anneau de télémétrie du Go (perf_log.go) au lieu de passer inaperçues : /api/perf/summary les compte, l'optimiseur en tire ses poids, et l'interface reçoit à nouveau la perte de cache. - chat/perf.rs : perfRecFromStats, perfRecFromWire (lu sans échec possible, mêmes tolérances que perfNum, timings d'un autre type présents mais vides comme le Go) et perfPrefix (FNV-1a cumulé) ; - la boucle du tour range chaque complétion lue, numérotée dans le tour, avec ses empreintes si elle est complète ; une complétion coupée par un stop est rangée incomplète ; la dernière statistique porte la nature, la perte, ce qui s'est intercalé et l'alerte ; - natures : main (tour), verify (vérification du mode Code), compact (résumé de compaction, rangé dès que la réponse se lit) ; - le Go (/internal/v1/perf/record) range le relevé comme les siens et calcule l'alerte au seuil du preset actif, jamais pour un preset externe. Tests : relevés et empreintes (chat/perf.rs), télémétrie de la boucle (complète, coupée), du vrai hôte et des résumés (tests/lot6.rs), TestFacadePerf côté Go. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
15 files changed
+731
-16
No files matched your search
@@ -170,6 +170,9 @@ pub struct EngineSummarizer {
|
||||
pub cfg: HashMap<String, String>,
|
||||
pub patterns: Arc<RetryPatterns>,
|
||||
pub port: u16,
|
||||
/// Télémétrie des résumés (kind=compact), rattachée à cette discussion :
|
||||
/// `None` sans base (tests).
|
||||
pub perf: Option<(Store, String)>,
|
||||
}
|
||||
|
||||
impl EngineSummarizer {
|
||||
@@ -200,7 +203,19 @@ impl EngineSummarizer {
|
||||
body: String::from_utf8_lossy(b).trim().to_string(),
|
||||
});
|
||||
}
|
||||
parse_summary_response(&raw)
|
||||
let out = parse_summary_response(&raw);
|
||||
// Télémétrie de la compaction : réponse non streamée, timings et usage
|
||||
// à la racine, lus sans échec possible — dès que la réponse se lit.
|
||||
let decoded = match &out {
|
||||
Ok(_) => true,
|
||||
Err(SummaryError::Other(e)) => e == super::compact::ERR_EMPTY_SUMMARY,
|
||||
Err(_) => false,
|
||||
};
|
||||
if decoded && let Some((store, conv)) = &self.perf {
|
||||
let rec = super::perf::PerfRec::from_wire(super::perf::KIND_COMPACT, conv, &raw);
|
||||
super::perf::record(store, &rec, &[], self.ep.external).await;
|
||||
}
|
||||
out
|
||||
}
|
||||
}
|
||||
|
||||
@@ -393,6 +408,17 @@ impl TurnHost for GoTurnHost {
|
||||
}
|
||||
}
|
||||
|
||||
async fn perf(
|
||||
&self,
|
||||
rec: &super::perf::PerfRec,
|
||||
prefix: &[u64],
|
||||
external: bool,
|
||||
) -> super::perf::PerfNoted {
|
||||
let mut rec = rec.clone();
|
||||
rec.conv = self.conv_id.clone();
|
||||
super::perf::record(&self.shared.store, &rec, prefix, external).await
|
||||
}
|
||||
|
||||
async fn exec_tool(&self, name: &str, args: &Map<String, Value>, label: &str) -> ToolOutcome {
|
||||
// Outils fichiers et shell : ici (lot 7), l'état partagé restant au Go.
|
||||
if crate::tools::is_local(name) {
|
||||
|
||||
Reference in new issue
Block a user