mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 06:58:14 +02:00
Journal : outils coalescés, curseur de replay borné, export allégé
Trois maux d'une conversation agentique longue : - Chaque appel d'outil s'écrivait en de nombreux événements (annonce, frappe du corps, arguments) jusqu'au done=true qui porte déjà l'état final. Le journal enflait jusqu'à maxLogEvents et tronquait les plus VIEUX événements : les premiers messages disparaissaient à l'affichage. Seul le done=true est conservé au compactage. - Un événement non-outil (stats, raisonnement) glissé entre l'annonce et le résultat faisait émettre l'outil DEUX fois au replay et à l'export Markdown. L'annonce reste en attente jusqu'au done. - Ouvrir une session plus ancienne avec le curseur de la précédente (Seq plus élevés) sautait tout : conversation vide. Curseur au-delà du dernier Seq → on repart du début. - L'export JSON embarquait les images en base64 (fichier énorme) : les pièces jointes sont réduites à leur descriptif. Repris de l'amont AJEAN v0.12.7, avec ses tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7fwdmmVbvLHznF9v1npzN
This commit is contained in:
1 parent
3edd356f34
commit
475d523e4a
4 files changed
+218
-6
No files matched your search
@@ -258,3 +258,35 @@ func TestCmdExportEcritLeFichier(t *testing.T) {
|
||||
t.Fatal("option inconnue acceptée")
|
||||
}
|
||||
}
|
||||
|
||||
// L'export JSON d'un message multimodal (vision) doit ÉLIDER le base64 des images :
|
||||
// sinon le fichier pesait plusieurs Mo par image. Le Markdown, lui, n'a jamais porté
|
||||
// les images (juste les noms de fichiers).
|
||||
func TestExportJSONElideImages(t *testing.T) {
|
||||
t.Cleanup(func() { conv.Reset() })
|
||||
big := strings.Repeat("A", 300000)
|
||||
conv.mu.Lock()
|
||||
conv.Messages = []Message{
|
||||
{Role: "user", Content: []map[string]any{
|
||||
{"type": "text", "text": "regarde"},
|
||||
{"type": "image_url", "image_url": map[string]any{"url": "data:image/png;base64," + big}},
|
||||
}},
|
||||
{Role: "assistant", Content: "vu"},
|
||||
}
|
||||
conv.Log = []LogEvent{{Seq: 1, TS: 1, Delta: map[string]any{"user": "regarde"}}}
|
||||
conv.Seq = 1
|
||||
conv.mu.Unlock()
|
||||
b, err := conv.ExportJSON(defaultExportOpts())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if strings.Contains(string(b), big) {
|
||||
t.Error("le base64 brut d'une image est encore présent dans le JSON")
|
||||
}
|
||||
if len(b) > 10000 {
|
||||
t.Errorf("JSON toujours énorme malgré l'élision : %d octets", len(b))
|
||||
}
|
||||
if !strings.Contains(string(b), "élidé") {
|
||||
t.Error("marqueur d'élision absent du JSON")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user