Principe de fonctionnement
jevchat repose sur l'API Jev, qui renvoie une probabilité pour chaque symbole d'un alphabet donné. Le processus itératif consiste à poser à Jev la question suivante : « Compte tenu de la question de l'utilisateur et de la réponse construite jusqu'ici, quel symbole vient ensuite ? ». La réponse de Jev est une distribution normalisée; un échantillonneur tire alors le symbole suivant. L'opération se répète jusqu'à ce que le symbole spécial STOP soit sélectionné, moment où la génération s'arrête. Cette boucle est visible en temps réel dans l'interface, qui affiche le taux de génération (symboles/s, caractères/s) et le temps moyen d'appel API.
Stratégies d'échantillonnage et alphabets
Le projet propose plusieurs stratégies pour construire la distribution sur l'alphabet. La stratégie choice pose une seule question couvrant l'intégralité de l'alphabet. Elle est la valeur par défaut et peut être combinée avec --no-shuffle-criteria pour désactiver le ré‑ordonnancement qui atténue le biais de position de Jev. La variante --ensemble 4 envoie quatre questions parallèles, puis moyenne les résultats, augmentant le coût API sans changer la logique de base.
La stratégie bisect segmente l'alphabet en groupes et pose des questions « plus tôt / plus tard » jusqu'à ce que le groupe soit suffisamment petit (par défaut 20 symboles). Des paramètres comme --bisect-cutoff 32 et --no-bisect-swap permettent de réduire le nombre de requêtes au prix d'une précision moindre.
La stratégie buckets répartit l'alphabet sur de multiples questions, chacune incluant une option OTHER d'échappement. Elle supporte des alphabets de plus de 255 symboles, par exemple words1k (1 000 mots) ou bpe5k (5 000 sous‑mots). Le paramètre --bucket-size 127 ajuste la taille maximale d'un seau, influençant le nombre de requêtes.
Enfin, refine combine buckets, une question de sélection parmi les gagnants, puis un rescoring de type nucleus. Les options --refine-nucleus 6 et --refine-rounds 2 doublent la probabilité du symbole correct et augmentent d'environ 19 fois le nombre de symboles résolus, au prix d'un facteur de coût supplémentaire.
poetry run jevchat -s refine -a words1k \
--refine-nucleus 6 --refine-rounds 2 \
ask "where do fish live?"Analyse des performances et limites
Les mesures affichées pendant l'exécution indiquent typiquement entre 5 et 15 symboles par seconde, selon la stratégie et la taille de l'alphabet. Les appels API varient de 30 ms à plus de 200 ms, ce qui se traduit par un débit de caractères inférieur à 10 c/s pour les alphabets larges. Le coût financier est proportionnel au nombre de requêtes : chaque question envoyée à Jev génère un score facturable. Ainsi, les modes ensemble ou refine multiplient le coût sans offrir de gain qualitatif proportionnel.
Sur le plan algorithmique, les stratégies bisect et buckets réduisent le nombre de requêtes en augmentant la profondeur de la recherche, mais introduisent un biais de groupe qui peut affecter la cohérence de la réponse. Le mode beam search (ex. -b 3) maintient trois hypothèses parallèles, mais désactive la température, le top‑p et le top‑k, limitant ainsi le contrôle de la diversité.
En pratique, le système reste expérimental : il dépend d'une clé API Jev stockée dans .env, et les performances varient selon la charge du service Claude qui alimente le modèle. L'absence de métriques publiques sur la précision des réponses rend difficile l'évaluation objective, ce qui constitue une limitation majeure pour tout usage au‑delà du divertissement.