mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-16 19:59:56 +02:00
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
38 lines
1.5 KiB
Go
38 lines
1.5 KiB
Go
package loki
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// facade_perf.go — la télémétrie des complétions de la façade (lot 29 de la
|
|
// migration). Quand la façade tient la conversation (LOKI_CHAT=rust), ses
|
|
// complétions — tours, vérifications, résumés de compaction — rejoignent
|
|
// l'anneau du Go (perf_log.go) : /api/perf/summary les compte, la perte de
|
|
// cache se calcule contre la complétion précédente de la même discussion, et
|
|
// l'alerte suit le seuil du preset actif (perfLostAlertAt), comme pour un
|
|
// tour du Go.
|
|
|
|
// handleInternalPerfRecord : POST {rec, prefix, external} → {seq, lost,
|
|
// lost_after, alert}. rec : une complétion (perfRec, sans at ni seq) ;
|
|
// prefix : les empreintes cumulées des messages envoyés (perfPrefix), vide
|
|
// pour une complétion incomplète ; external : preset externe (jamais
|
|
// d'alerte).
|
|
func handleInternalPerfRecord(w http.ResponseWriter, r *http.Request) {
|
|
var in struct {
|
|
Rec perfRec `json:"rec"`
|
|
Prefix []uint64 `json:"prefix"`
|
|
External bool `json:"external"`
|
|
}
|
|
if !readInternalJSON(w, r, &in) {
|
|
return
|
|
}
|
|
in.Rec.At, in.Rec.Seq, in.Rec.Lost, in.Rec.LostAfter = time.Time{}, 0, nil, ""
|
|
rec := perfRecord(in.Rec, in.Prefix)
|
|
alert := false
|
|
if rec.Complete && !in.External && ((rec.Lost != nil && *rec.Lost > 0) || (rec.Cached != nil && *rec.Cached == 0)) {
|
|
alert = perfAlert(rec, perfLostAlertAt(ReadConfig()))
|
|
}
|
|
sendJSON(w, http.StatusOK, map[string]any{"seq": rec.Seq, "lost": rec.Lost, "lost_after": rec.LostAfter, "alert": alert})
|
|
}
|