Ajout d'un outil de benchmark des modèles d'analyse + support des modèles à raisonnement
- Nouvelle commande `inkflow benchmark` : compare la sortie d'analyse aux fichiers de référence (data/<slug>/reference/), met plusieurs modèles en concurrence, table rich + rapport JSON. Métriques : attribution de locuteur, incises, type/glued. Flags --models, --temperature, --reasoning, --stream, --use-cached + suivi par chapitre. - analysis/benchmark.py : scoring pur (testable) + runner multi-modèles (un MLX à la fois). - gemma.py : support des modèles à raisonnement (retrait de la pensée, désactivation via enable_thinking hors --reasoning, arrêt anticipé sur JSON complet, plafond + température dédiés anti-boucle), récupération du chat_template manquant (fix Mistral), streaming des tokens (set_token_sink). - settings.py : gemma_reasoning, gemma_reasoning_max_tokens, gemma_reasoning_temperature. - Tests : test_benchmark.py (scoring pur), test_gemma_reasoning.py. Conclusion benchmark : Qwen3.6-27B-8bit non-raisonnant = meilleur modèle d'analyse.
This commit is contained in:
@@ -74,7 +74,22 @@ class Settings(BaseModel):
|
||||
|
||||
# --- Generation Gemma ---
|
||||
gemma_temperature: float = Field(0.1, ge=0.0, le=2.0)
|
||||
gemma_max_tokens: int = Field(2048, ge=64, le=8192)
|
||||
gemma_max_tokens: int = Field(2048, ge=64, le=16384)
|
||||
# Modeles a raisonnement (Gemma 4, DeepSeek-R1, Qwen-think...) : ils emettent
|
||||
# une chaine de pensee avant la reponse. Active le retrait de cette pensee
|
||||
# (canaux <|channel>thought.../<channel|>, balises <think>...</think>) AVANT
|
||||
# le parsing JSON, et releve le plafond de tokens (la pensee en consomme).
|
||||
gemma_reasoning: bool = False
|
||||
# Plafond de tokens en mode raisonnement (la pensee en consomme beaucoup).
|
||||
# La generation s'arrete de toute facon des que la reponse JSON post-pensee
|
||||
# est complete ; ce plafond est un garde-fou contre les boucles de pensee
|
||||
# sans fin (certains modeles tournent en rond a temperature 0).
|
||||
gemma_reasoning_max_tokens: int = Field(4096, ge=256, le=16384)
|
||||
# Temperature en mode raisonnement. Le decodage GLOUTON (temp 0) fait boucler
|
||||
# les modeles a raisonnement (repetitions sans fin) ; Qwen & co recommandent
|
||||
# un echantillonnage. Si la temperature effective est 0, on bascule sur
|
||||
# celle-ci. Rend le benchmark non deterministe en mode raisonnement (inevitable).
|
||||
gemma_reasoning_temperature: float = Field(0.6, ge=0.0, le=2.0)
|
||||
|
||||
# --- Prompts systeme (analyse) ---
|
||||
prompt_speakers: str = DEFAULT_PROMPT_SPEAKERS
|
||||
|
||||
Reference in New Issue
Block a user