mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-12 09:47:20 +02:00
Trois défauts sans rapport entre eux, tous visibles à l'écran. Jauge de contexte bloquée à « 0 / N (0 %) » : le comptage exact vient de usage.prompt_tokens (include_usage), qu'un llama-server récent a cessé de renvoyer. On note désormais si l'usage est arrivé ; sinon la fin de tour publie l'estimation qui pilote déjà la compaction — approximative, mais jamais absente. Et la souscription envoie la valeur courante juste après le rattrapage : une page rechargée affichait zéro sur une discussion pourtant pleine, faute d'événement ctx_used dans la fenêtre rejouée. Espace disque : « il ne reste que 11,9 Go » sur un partage Unraid qui en a des centaines. /mnt/user est servi par shfs, un FUSE qui agrège plusieurs disques — statfs y renvoie l'espace d'un seul, et ce chiffre REFUSAIT l'installation du modèle. Les systèmes de fichiers qui approximent (FUSE, overlay, NFS, CIFS, Ceph, Gluster) sont reconnus par leur magie : leur chiffre reste affiché, précédé d'un « ~ », mais ne bloque plus rien. Panneau Fichiers : le panneau entier défilait, emportant vers le haut l'en-tête, le fil d'Ariane et le pied (occupation disque, bouton .zip) dès qu'il y avait quelques fichiers. Seule la liste défile maintenant ; le pied reste en bas et l'état vide se centre. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const fill = require('fill-range');
|
|
const utils = require('./utils');
|
|
|
|
const compile = (ast, options = {}) => {
|
|
const walk = (node, parent = {}) => {
|
|
const invalidBlock = utils.isInvalidBrace(parent);
|
|
const invalidNode = node.invalid === true && options.escapeInvalid === true;
|
|
const invalid = invalidBlock === true || invalidNode === true;
|
|
const prefix = options.escapeInvalid === true ? '\\' : '';
|
|
let output = '';
|
|
|
|
if (node.isOpen === true) {
|
|
return prefix + node.value;
|
|
}
|
|
|
|
if (node.isClose === true) {
|
|
console.log('node.isClose', prefix, node.value);
|
|
return prefix + node.value;
|
|
}
|
|
|
|
if (node.type === 'open') {
|
|
return invalid ? prefix + node.value : '(';
|
|
}
|
|
|
|
if (node.type === 'close') {
|
|
return invalid ? prefix + node.value : ')';
|
|
}
|
|
|
|
if (node.type === 'comma') {
|
|
return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';
|
|
}
|
|
|
|
if (node.value) {
|
|
return node.value;
|
|
}
|
|
|
|
if (node.nodes && node.ranges > 0) {
|
|
const args = utils.reduce(node.nodes);
|
|
const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });
|
|
|
|
if (range.length !== 0) {
|
|
return args.length > 1 && range.length > 1 ? `(${range})` : range;
|
|
}
|
|
}
|
|
|
|
if (node.nodes) {
|
|
for (const child of node.nodes) {
|
|
output += walk(child, node);
|
|
}
|
|
}
|
|
|
|
return output;
|
|
};
|
|
|
|
return walk(ast);
|
|
};
|
|
|
|
module.exports = compile;
|