Qwen3-4B Q4_K_M ou Q8_0 sur 20 factures françaises fictives — The Pingouin
Python 3.8+ ; aucune bibliothèque à installer pour la relecture ou la notation.

1. Noter les réponses réellement obtenues :
   python essai.py sorties-Q4_K_M.json
   python essai.py sorties-Q8_0.json
   python -m unittest -v

   Facultatif, pour renoter le contrôle Q4 effectué sur CPU avec quatre threads :
   python essai.py pilote-cpu/sorties-Q4_K_M.json
   Les deux fichiers de réponse situés à la racine sont ceux du comparatif sur la configuration Vulkan commune.

2. Refaire les inférences avec llama.cpp b6500, le backend Vulkan et les deux GGUF officiels de Qwen/Qwen3-4B-GGUF. Révision bc640142c66e1fdd12af0bd68f40445458f3869b. Les fichiers protocole donnent les tailles et empreintes attendues.
   https://github.com/ggml-org/llama.cpp/releases/tag/b6500
   https://huggingface.co/Qwen/Qwen3-4B-GGUF/tree/bc640142c66e1fdd12af0bd68f40445458f3869b
   Pour un premier essai, ouvrir un terminal et exécuter :
   llama-server -m Qwen3-4B-Q4_K_M.gguf -c 2048 -t 2 -tb 2 -ngl 28 -b 256 -ub 128 --no-mmap -np 1 --host 127.0.0.1 --port 8080
   Dans un second terminal du dossier décompressé :
   python essai.py ma-sortie-Q4.json --serveur http://127.0.0.1:8080 --profil b6500-vulkan-28
   Arrêter le premier serveur, puis remplacer le fichier de poids par Qwen3-4B-Q8_0.gguf et le fichier de sortie par ma-sortie-Q8.json.
   Selon la plateforme, le binaire Windows porte le nom llama-server.exe.

Les textes et leurs deux valeurs attendues sont dans factures.json. Le serveur ne reçoit que le texte et la consigne. Greedy, 96 jetons maximum, graine 42, mode sans réflexion prérempli, sans grammaire imposée. Acquisition sur GeForce GTX 1050 Ti 4 Gio et Intel Core i7-7700HQ, 28 couches déportées sur le GPU pour chaque fichier. Un autre backend peut produire des sorties différentes. Les réponses sont enregistrées une par une. En cas d’interruption, relancez la même commande avec le même modèle, le même profil et le même fichier de sortie, en conservant son fichier .en-cours.

Les réponses sont conservées telles quelles, y compris les erreurs de format. Une réponse doit être un objet JSON avec exactement les deux clés prévues. Un montant en chaîne ou avec un séparateur décimal échoue au critère d’entier. Voir essai.py pour la notation champ par champ. Pas de PDF, OCR ou données personnelles. Aucune pondération par fréquence des cas dans la vie réelle.
