feat(experiments): ajoute une entrée de volumétrie par locale (FR/EN)
TEST_SENTENCES gagne 2 entrées dérivées (fr-concat-volumetrie, en-concat-volumetrie) qui concatènent toutes les phrases de base d'une même locale en un seul step géant, calculées depuis les phrases existantes (jamais recopiées à la main) — pour isoler l'effet du seul volume de texte sur la durée de traitement de chaque moteur, indépendamment de la complexité déjà couverte par les 7 phrases existantes. Vérifié via bench:nlp : la latence croît nettement avec le volume (fr-concat ~2200ms vs 300-1100ms pour les phrases individuelles FR). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
c73c62328d
commit
9f274f9461
1 changed files with 62 additions and 8 deletions
|
|
@ -1,10 +1,12 @@
|
|||
/**
|
||||
* Les 7 phrases de test partagées par les trois moteurs de ce PoC — un seul
|
||||
* jeu de phrases, importé par `llm-tech-step-poc.ts`, `nlp-tech-step-poc.ts`
|
||||
* et `hybrid-tech-step-poc.ts`, pour que leurs runs soient directement
|
||||
* comparables phrase par phrase sans risque de désynchronisation (un défaut
|
||||
* de la toute première version de ce PoC, où le pendant `node-nlp` vivait
|
||||
* dans `apps/api` et recopiait ces phrases à la main).
|
||||
* Les 9 phrases de test partagées par les trois moteurs de ce PoC (7 phrases
|
||||
* de complexité variable + 2 concaténations pour tester l'effet du volume,
|
||||
* voir {@link TEST_SENTENCES}) — un seul jeu de phrases, importé par
|
||||
* `llm-tech-step-poc.ts`, `nlp-tech-step-poc.ts` et `hybrid-tech-step-poc.ts`,
|
||||
* pour que leurs runs soient directement comparables phrase par phrase sans
|
||||
* risque de désynchronisation (un défaut de la toute première version de ce
|
||||
* PoC, où le pendant `node-nlp` vivait dans `apps/api` et recopiait ces
|
||||
* phrases à la main).
|
||||
*/
|
||||
|
||||
/** Une phrase de test, avec sa langue et ce qui la rend "complexe" (documentation, non exploité par le code). */
|
||||
|
|
@ -22,7 +24,14 @@ export interface BenchmarkSentence {
|
|||
* quatre suivantes poussent volontairement plus loin (simultanéité,
|
||||
* conditions, négations, ambiguïté sémantique d'un même champ) pour
|
||||
* chercher le point de rupture de chaque moteur, pas juste confirmer qu'il
|
||||
* gère le cas courant :
|
||||
* gère le cas courant. Deux entrées supplémentaires ({@link TEST_SENTENCES},
|
||||
* items 8 et 9) concatènent ensuite toutes les phrases d'une même locale en
|
||||
* un seul "step" géant, pour isoler l'effet du seul VOLUME de texte sur la
|
||||
* durée de traitement — les 7 phrases ci-dessous font varier la
|
||||
* *complexité* à taille à peu près constante, elles ne disent rien sur
|
||||
* comment chaque moteur se comporte face à un step simplement plus long
|
||||
* (plus de tokens à faire générer/parcourir au LLM, plus de clauses à
|
||||
* découper et classifier pour le NLP) :
|
||||
*
|
||||
* 1. FR, plusieurs actions explicites enchaînées avec une durée et un
|
||||
* ingrédient qui change de forme grammaticale ("les" reprend "oignons").
|
||||
|
|
@ -52,8 +61,13 @@ export interface BenchmarkSentence {
|
|||
* cuisson) dans la même phrase, une durée "par face" (6-7 minutes per
|
||||
* side, pas la durée totale), et un champ température qui désigne un
|
||||
* SEUIL DE CUISSON à cœur (165°F) plutôt qu'un réglage de feu.
|
||||
* 8. FR, la concaténation des 4 phrases FR ci-dessus (1, 3, 4, 6) en un
|
||||
* seul step — même contenu, ~4x le volume de texte d'une phrase FR
|
||||
* normale de ce jeu.
|
||||
* 9. EN, la concaténation des 3 phrases EN ci-dessus (2, 5, 7) en un seul
|
||||
* step — même principe côté EN.
|
||||
*/
|
||||
export const TEST_SENTENCES: readonly BenchmarkSentence[] = [
|
||||
const BASE_SENTENCES: readonly BenchmarkSentence[] = [
|
||||
{
|
||||
id: "fr-multi-action",
|
||||
locale: "fr",
|
||||
|
|
@ -97,3 +111,43 @@ export const TEST_SENTENCES: readonly BenchmarkSentence[] = [
|
|||
note: "Deux REST de sens différent (marinade vs. retour à température ambiante) + durée 'par face' + température = seuil de cuisson à cœur, pas un réglage de feu.",
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* Concatène les textes de {@link BASE_SENTENCES} d'une locale donnée,
|
||||
* séparés par un espace, dans leur ordre d'apparition — calculé plutôt que
|
||||
* recopié à la main pour ne jamais désynchroniser le step géant du contenu
|
||||
* réel des 7 phrases de base (si l'une d'elles change de texte, la
|
||||
* concaténation suit automatiquement).
|
||||
*/
|
||||
function concatenateByLocale(locale: BenchmarkSentence["locale"]): string {
|
||||
return BASE_SENTENCES.filter((sentence) => sentence.locale === locale)
|
||||
.map((sentence) => sentence.text)
|
||||
.join(" ");
|
||||
}
|
||||
|
||||
const FR_SENTENCE_COUNT = BASE_SENTENCES.filter((sentence) => sentence.locale === "fr").length;
|
||||
const EN_SENTENCE_COUNT = BASE_SENTENCES.filter((sentence) => sentence.locale === "en").length;
|
||||
|
||||
/**
|
||||
* {@link BASE_SENTENCES} (7 phrases, complexité variable à taille à peu
|
||||
* près constante) plus deux entrées dérivées par locale (items 8 et 9 du
|
||||
* doc-comment ci-dessus) qui concatènent toutes les phrases de cette locale
|
||||
* en un seul step — pour isoler l'effet du VOLUME de texte sur la durée de
|
||||
* traitement de chaque moteur, indépendamment de la complexité sémantique
|
||||
* déjà couverte par les 7 premières.
|
||||
*/
|
||||
export const TEST_SENTENCES: readonly BenchmarkSentence[] = [
|
||||
...BASE_SENTENCES,
|
||||
{
|
||||
id: "fr-concat-volumetrie",
|
||||
locale: "fr",
|
||||
text: concatenateByLocale("fr"),
|
||||
note: `Concaténation des ${FR_SENTENCE_COUNT} étapes FR ci-dessus en un seul step — teste si la durée de traitement croît avec le volume de texte, indépendamment de sa complexité.`,
|
||||
},
|
||||
{
|
||||
id: "en-concat-volumetrie",
|
||||
locale: "en",
|
||||
text: concatenateByLocale("en"),
|
||||
note: `Concaténation des ${EN_SENTENCE_COUNT} étapes EN ci-dessus en un seul step — même test de volumétrie côté EN.`,
|
||||
},
|
||||
];
|
||||
|
|
|
|||
Loading…
Reference in a new issue