import type { ParamInfoEntry } from './types'; export const loadingParamInfo: Record = { systemPrompt: { title: 'Prompt Système', description: "Message de contexte envoyé au modèle avant toute conversation. Définit le rôle, le comportement et les contraintes de l'assistant.", impact: "Influence directement la personnalité et la pertinence des réponses. Un bon prompt système améliore considérablement la qualité globale.", usage: 'Ex: "Tu es un expert Python, concis et précis." Sois explicite sur le ton, la langue, et les limites du modèle.', }, n_ctx: { title: 'Fenêtre Contextuelle (n_ctx)', description: "Nombre maximum de tokens que le modèle peut « voir » simultanément — historique + prompt + réponse inclus.", impact: "🧠 RAM : chaque doublement de n_ctx ~×2 la mémoire du KV cache. Trop grand → crash OOM. ⚡ Vitesse : légèrement plus lent à grands contextes.", usage: '512–2 048 pour petits appareils. 4 096–8 192 si la RAM le permet. Ne jamais dépasser le contexte max du modèle (visible dans ses infos).', }, n_batch: { title: 'Batch Size (n_batch)', description: `Nombre de tokens traités en parallèle lors de l'évaluation initiale du prompt (phase "prefill").`, impact: '⚡ Vitesse : plus grand = traitement du prompt plus rapide. 🧠 RAM : légèrement plus élevée. Impact nul sur la vitesse de génération token-by-token.', usage: '128–512 est idéal sur mobile. Dépasse rarement n_ctx. Valeur par défaut : 512.', }, n_ubatch: { title: 'Micro-batch (n_ubatch)', description: 'Sous-division interne de n_batch pour les opérations matricielles. Doit être ≤ n_batch.', impact: '🧠 Équilibre vitesse/mémoire des opérations GPU/CPU bas-niveau. Rarement nécessaire de modifier.', usage: 'Laisser vide (= n_batch par défaut). Utile pour optimiser finement sur du matériel spécifique.', }, n_threads: { title: 'Threads CPU (n_threads)', description: "Nombre de threads CPU alloués à l'inférence.", impact: `⚡ Plus de threads = plus rapide (jusqu'à un plateau). Trop de threads → contention et ralentissement. 🔋 Consommation CPU proportionnelle.`, usage: 'Règle : moitié des cœurs physiques (ex : 8 cœurs → 4 threads). 0 = auto-détection. Tester 2, 4, 6 et mesurer.', }, n_gpu_layers: { title: 'Couches GPU (n_gpu_layers)', description: '(iOS uniquement) Nombre de couches Transformer offloadées sur le GPU / Neural Engine.', impact: '⚡ Chaque couche sur GPU accélère significativement la génération. 🔋 Légèrement plus de consommation batterie. 🧠 Réduit la RAM CPU utilisée.', usage: 'Commencer par 1, monter progressivement. Valeur max = nb total de couches du modèle. 0 = CPU uniquement (Android toujours CPU).', }, flash_attn: { title: 'Flash Attention', description: "Algorithme d'attention optimisé qui calcule l'attention par blocs pour réduire drastiquement la mémoire du KV cache.", impact: '🧠 Réduit la VRAM KV de ~30–50%. ⚡ Gain de vitesse notable sur longs contextes. Recommandé avec n_gpu_layers > 0.', usage: "Activer avec GPU. Sur CPU pur, gain/perte variable selon l'appareil — tester les deux.", }, cache_type_k: { title: 'Type KV Cache K', description: "Type de données des matrices K (Key) du cache d'attention. Contrôle la précision vs mémoire des clés.", impact: '🧠 f16 : qualité max, RAM max. q8_0 : −50% RAM, perte qualité négligeable. q4_0 : −75% RAM, légère dégradation possible.', usage: 'f16 par défaut. Utiliser q8_0 si RAM insuffisante pour un grand contexte. q4_0 seulement pour RAM très contrainte.', }, cache_type_v: { title: 'Type KV Cache V', description: "Type de données des matrices V (Value) du cache d'attention. Le cache V est plus sensible à la quantification que K.", impact: '🧠 Même économies mémoire que cache_type_k mais impact qualité légèrement plus fort. Quantifier K avant V.', usage: 'Garder f16 si possible. Passer à q8_0 uniquement si cache_type_k est déjà q8_0 et que la RAM reste insuffisante.', }, use_mlock: { title: 'Verrouillage RAM (use_mlock)', description: 'Verrouille les pages mémoire du modèle en RAM physique pour empêcher le système de les swapper sur disque.', impact: '⚡ Élimine les pics de latence dus au swap. 🧠 Nécessite que le modèle tienne entièrement en RAM — crash si insuffisant.', usage: "Activer si le modèle tient en RAM. Désactiver sur appareils avec peu de RAM pour éviter les erreurs de chargement.", }, use_mmap: { title: 'Memory-Map (use_mmap)', description: "Mappe le fichier modèle en mémoire virtuelle sans le copier entièrement en RAM. Le système charge les pages à la demande.", impact: `⚡ Démarrage très rapide. 🧠 Le système peut swapper les pages non utilisées — des accès disque peuvent survenir pendant l'inférence.`, usage: 'Activer (défaut). Désactiver uniquement si vous avez assez de RAM et voulez éviter tout accès disque pendant la génération.', }, rope_freq_base: { title: 'RoPE Base Frequency', description: "Fréquence de base des embeddings positionnels RoPE. Contrôle la plage de positions que le modèle peut distinguer.", impact: `📐 Augmenter étend la fenêtre contextuelle effective au-delà de la limite d'entraînement. Trop élevé → dégradation qualité.`, usage: 'Laisser à 0 (auto). Pour étendre le contexte : new_base ≈ original_base × (new_ctx / train_ctx). Ex : 10 000 → 80 000 pour ×8 contexte.', }, rope_freq_scale: { title: 'RoPE Frequency Scale', description: "Facteur de scaling appliqué aux fréquences RoPE. Alternative/complément à rope_freq_base pour l'extension de contexte.", impact: '📐 < 1 compresse les fréquences, permettant un contexte plus long. Ex : 0.5 = contexte ×2. Trop bas → perte de cohérence sur longues distances.', usage: 'Laisser à 0 (auto). Utiliser conjointement à rope_freq_base pour un contrôle précis. Rarement nécessaire si le modèle gère déjà un long contexte.', }, ctx_shift: { title: 'Context Shifting', description: "Lorsque le contexte est plein, décale automatiquement la fenêtre en supprimant les anciens tokens pour continuer à générer.", impact: '⚡ Conversations potentiellement infinies sans erreur. 📉 Les informations très anciennes sont progressivement perdues.', usage: 'Activer pour des conversations longues (défaut recommandé). Désactiver si vous préférez une erreur explicite quand le contexte est saturé.', }, kv_unified: { title: 'KV Cache Unifié', description: `Utilise un buffer KV partagé pour toutes les séquences parallèles lors du calcul de l'attention.`, impact: '⚡ Améliore les performances quand n_parallel=1 et que les séquences partagent un long préfixe. Contre-productif avec n_parallel > 1 et préfixes différents.', usage: 'Activer (défaut) pour un usage standard à séquence unique. Désactiver si n_parallel > 1 et séquences indépendantes.', }, n_cpu_moe: { title: 'Couches MoE sur CPU (n_cpu_moe)', description: 'Nombre de couches MoE (Mixture of Experts) maintenues en RAM CPU plutôt que sur GPU. Pertinent pour Mixtral, Qwen-MoE, etc.', impact: `🧠 Réduit l'usage VRAM pour les modèles MoE. ⚡ Ralentit légèrement ces couches (transfert CPU↔GPU). 0 = tout sur GPU.`, usage: 'Laisser à 0 sauf si vous utilisez un modèle MoE et que vous rencontrez des OOM GPU. Augmenter progressivement.', }, cpu_mask: { title: 'Masque CPU (cpu_mask)', description: "Spécifie quels cœurs CPU utiliser pour l'inférence via un masque d'affinité de cœurs.", impact: '⚡ Permet de dédier les cœurs haute-performance (Big cores) au modèle sur architectures big.LITTLE/DynamIQ (Snapdragon, Apple).', usage: 'Format : "0-3" (cœurs 0 à 3) ou "0,2,4,6" (cœurs spécifiques). Vide = tous les cœurs disponibles (défaut).', }, n_parallel: { title: 'Séquences Parallèles (n_parallel)', description: 'Nombre maximum de séquences traitées en parallèle dans le même contexte (slots parallèles).', impact: '🧠 RAM KV cache × n_parallel. Nécessaire pour le mode parallel.completion(). Inutile pour usage conversationnel standard.', usage: 'Garder à 1 (défaut) pour usage standard. Augmenter uniquement si vous utilisez parallel.completion() pour des requêtes concurrentes.', }, };