mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-24 15:38:12 +02:00
Outils : aperçu dans le flux, « voir plus » à la demande, coupes annoncées
Repris d'AJEAN 0.15.1 → 0.15.7 (tool_results.go adapté : pas de chiffrement chez nous). VOIR PLUS Chaque résultat d'outil partait en entier dans le flux (jusqu'à 12 000 caractères) et dans le journal rejoué à chaque ouverture : un long fil d'agent en transportait des centaines. Le flux ne porte plus qu'un aperçu de 1 600 caractères, la taille réelle (le « ~N tok » de la bulle reste juste) et un id. Le résultat complet est rangé dans le bucket `toolres`, sous « <discussion>.<aléa> » — un id propre, pas le tool_call_id que certains parseurs recyclent. « voir plus » le charge au clic via /api/chat/tool-result et lève le plafond de hauteur du bloc ; il se range avec « copier » dans une barre au coin du résultat. Les résultats partent avec leur discussion (convDelete) ; les orphelins sont nettoyés toutes les 200 écritures. COUPES ANNONCÉES - Terminal : une sortie de plus de 8 000 caractères était coupée en silence ; le modèle croyait tout voir. Elle commence désormais par « [sortie tronquée : N caractères au total, seuls les 8000 derniers sont gardés] ». - MCP : l'amont transmet désormais la réponse en entier. On s'en approche sans renoncer au garde-fou (65k de contexte) : le plafond suit la fenêtre (CTX caractères, ≈ un quart de la fenêtre, jamais sous les 12 000 d'avant), et la coupe dit la taille réelle. Vérifié dans le navigateur avec un faux moteur qui appelle bash : aperçu de 1 600 caractères, « voir plus » charge les 8 099, mention de coupe en tête. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6aafeeea98
commit
ae0e181711
14 files changed
+378
-34
No files matched your search
@@ -48,10 +48,20 @@ const (
|
||||
mcpConnectTimeoutCold = 3 * time.Minute
|
||||
// mcpCallTimeout borne un appel d'outil MCP.
|
||||
mcpCallTimeout = 120 * time.Second
|
||||
// mcpMaxOutput cap la sortie renvoyée au modèle (cohérent avec toolMaxOutput).
|
||||
mcpMaxOutput = 12000
|
||||
)
|
||||
|
||||
// mcpOutputCap borne la sortie d'un outil MCP renvoyée au modèle. L'amont
|
||||
// (AJEAN 0.15.2) la transmet désormais EN ENTIER, comme une page mémoire : une
|
||||
// réponse MCP (un ticket, un document, une requête) coupée à 12 000 caractères
|
||||
// laissait le modèle travailler sur un début. On s'en rapproche sans renoncer
|
||||
// à tout garde-fou — sur 65k de contexte, une seule réponse géante noierait la
|
||||
// fenêtre et déclencherait un compactage en plein raisonnement : le plafond
|
||||
// suit la fenêtre, ~1 caractère par token de contexte, soit environ un quart
|
||||
// de celle-ci (≈4 caractères par token). Jamais sous l'ancien plafond.
|
||||
func mcpOutputCap() int {
|
||||
return max(12000, ctxWindow())
|
||||
}
|
||||
|
||||
// mcpSession est une connexion vivante à un serveur MCP.
|
||||
//
|
||||
// L'entrée est publiée dans le pool AVANT que la connexion aboutisse, pour qu'un
|
||||
@@ -399,8 +409,8 @@ func mcpCallOnce(ref mcpToolRef, args map[string]any) (string, error) {
|
||||
return "", err
|
||||
}
|
||||
out := flattenMCPContent(res)
|
||||
if r := []rune(out); len(r) > mcpMaxOutput {
|
||||
out = string(r[:mcpMaxOutput]) + "\n…[tronqué]"
|
||||
if r, lim := []rune(out), mcpOutputCap(); len(r) > lim {
|
||||
out = string(r[:lim]) + fmt.Sprintf("\n…[tronqué : %d caractères au total, %d gardés]", len(r), lim)
|
||||
}
|
||||
if res.IsError {
|
||||
return "[l'outil a renvoyé une erreur]\n" + out, nil
|
||||
|
||||
Reference in new issue
Block a user