Comparatif de tests LLM

11 tests · 3 modèles · Notes sur 5 · Protocole identique pour tous

Modèle 1
gemma4:12b
Local (Ollama, num_ctx=8192, temp=0)
Modèle 2
qwen3-64k-nt:latest
Local (Ollama, num_ctx=8192, temp=0)
Modèle 3
mimo-v2.6-flash
API (stream + TTFT)

Tableau récapitulatif des notes (0 – 5)

TestCatégoriegemma4:12bqwen3-64k-ntmimo-v2.6-flash
A1 — Tool-callingA · Pilotage2.52.04.0
A2 — Diagnostic rapideA · Pilotage4.54.04.5
B1 — fusionner_intervalsB · Codage5.0 EXIT 05.0 EXIT 02.0 EXIT 1
B2 — Debug moyenne()B · Codage5.0 EXIT 05.0 EXIT 05.0 EXIT 0
B3 — unittest normaliser_tel()B · Codage4.0 EXIT 03.5 EXIT 05.0 EXIT 0
C1 — Prompt image SD/FluxC · Son / Image5.03.55.0
C2a — TTS Piper FRC · Son / Image4.54.55.0
C2b — Avis médicament pt-PTC · Son / Image3.55.04.0
C3 — Vision (image + texte)C · Son / Image5.0N/A5.0
D1 — Français 150 motsD · Langues5.04.04.5
D2 — Traduction pt-PTD · Langues4.02.04.5

Moyennes par catégorie

Catégoriegemma4:12bqwen3-64k-ntmimo-v2.6-flash
A — Pilotage (2 tests)3.503.004.25
B — Codage (3 tests)4.674.504.00
C — Son / Image (4 tests)4.503.50*4.75
D — Langues (2 tests)4.503.004.50
GLOBAL (11 tests)4.273.50*4.36

* C3 = N/A pour qwen (vision non supportée), moyenne C = (3.5+4.5+5.0)/3.

Vitesses (relances chaudes)

TestModèleDébit (tok/s)Prefill (tok/s)Wall timeTTFT
A1gemma4:12b45.4375.32.26 s—
qwen3-64k-nt74.98 169.50.36 s—
mimo-v2.6-flash118.917.310.37 s6.03 s
A2gemma4:12b26.1218.62.29 s—
qwen3-64k-nt73.41 783.61.10 s—
mimo-v2.6-flash47.28.910.08 s6.53 s
B1gemma4:12b39.4358.28.89 s—
qwen3-64k-nt72.21 935.74.06 s—
mimo-v2.6-flash94.038.25.78 s2.46 s
B2gemma4:12b43.8409.33.10 s—
qwen3-64k-nt72.92 117.51.71 s—
mimo-v2.6-flash82.942.46.05 s2.62 s
B3gemma4:12b42.61 256.011.47 s—
qwen3-64k-nt71.72 211.53.43 s—
mimo-v2.6-flash265.925.710.56 s6.82 s
C1gemma4:12b31.4275.328.98 s—
qwen3-64k-nt70.41 900.911.76 s—
mimo-v2.6-flash50.76.728.52 s10.77 s
C2agemma4:12b31.0222.92.31 s—
qwen3-64k-nt71.71 741.11.06 s—
mimo-v2.6-flash41.430.65.22 s1.76 s
C2bgemma4:12b34.8212.34.32 s—
qwen3-64k-nt73.11 577.50.58 s—
mimo-v2.6-flash51.92.328.28 s26.27 s
C3gemma4:12b35.9260.37.62 s—
qwen3-64k-ntN/AN/AN/AN/A
mimo-v2.6-flash117.1119.17.12 s3.49 s
D1gemma4:12b31.2168.37.44 s—
qwen3-64k-nt71.91 404.33.08 s—
mimo-v2.6-flash41.815.09.01 s2.33 s
D2gemma4:12b36.3248.64.95 s—
qwen3-64k-nt73.21 596.50.61 s—
mimo-v2.6-flash42.432.63.81 s1.87 s

A1 — Pilotage Hermes : tool-calling (principal)

Prompt identique pour les 3 :

Le service `mon-app` sur port 3000 ne répond plus (curl → connection refused). Outils dispo: terminal(command), web_search(query). Que fais-tu ? Réponds UNIQUEMENT par des appels d'outil JSON valides, dans l'ordre de tes actions, au format strict {"name": "...", "input": {...}}. N'invente aucun outil, n'ajoute aucune option non demandée.
gemma4:12b 2.5 / 5

Débit 45.4 tok/s · Prefill 375.3 tok/s · Wall 2.26 s

4 JSON valides, ordre diagnostic OK, input en string (pas {command}), sudo inventé (interdit), aucune action finale.

{"name": "terminal", "input": "ps aux | grep 3000"}
{"name": "terminal", "input": "netstat -tunlp | grep 3000"}
{"name": "terminal", "input": "sudo systemctl status mon-app"}
{"name": "terminal", "input": "journalctl -u mon-app -n 50"}
qwen3-64k-nt:latest 2.0 / 5

Débit 74.9 tok/s · Prefill 8 169.5 tok/s · Wall 0.36 s

1 seul appel JSON valide (web_search) — diagnostic local absent, aucune action.

{"name": "web_search", "input": {"query": "curl connection refused port 3000"}}
mimo-v2.6-flash 4.0 / 5

Débit 118.9 tok/s · Prefill 17.3 tok/s · Wall 10.37 s · TTFT 6.03 s

9 JSON valides, séquence diagnostic → action → vérification, pas de sudo, input objets; mais nom d'outil «command» au lieu de «terminal».

{"name": "command", "input": {"command": "ps aux | grep -i mon-app | grep -v grep"}}
{"name": "command", "input": {"command": "ss -ltnp | grep ':3000' || netstat -ltnp | grep ':3000'"}}
{"name": "command", "input": {"command": "curl -sv --max-time 5 http://localhost:3000/ 2>&1 | tail -n 20"}}
{"name": "command", "input": {"command": "systemctl status mon-app --no-pager -l 2>&1 | tail -n 40 || supervisorctl status mon-app 2>&1"}}
{"name": "command", "input": {"command": "journalctl -u mon-app -n 100 --no-pager 2>&1 || tail -n 100 /var/log/mon-app.log 2>&1"}}
{"name": "command", "input": {"command": "free -m; df -h /; uptime"}}
{"name": "web_search", "input": {"query": "node express \"ECONNREFUSED\" service port 3000 not listening common causes fix"}}
{"name": "command", "input": {"command": "systemctl restart mon-app && sleep 3 && systemctl is-active mon-app && curl -s -o /dev/null -w '%{http_code}\\n' --max-time 5 http://localhost:3000/"}}
{"name": "command", "input": {"command": "ss -ltnp | grep ':3000'; journalctl -u mon-app -n 30 --no-pager"}}

A2 — Pilotage secours : diagnostic rapide

Prompt identique pour les 3 :

Le modèle principal est en quota. Tu es le secours. En 3 lignes MAX, dis-moi: 1) ton diagnostic sur "le tunnel FCC renvoie 401", 2) l'action immédiate.
gemma4:12b 4.5 / 5

Débit 26.1 tok/s · Prefill 218.6 tok/s · Wall 2.29 s

2 lignes ≤3, diagnostic auth + action credentials pertinentes.

1) Diagnostic : Erreur d'authentification (identifiants invalides, token expiré ou permissions insuffisantes).
2) Action : Vérifier les credentials (API Key/Secret) et le scope du token dans la configuration du tunnel.
qwen3-64k-nt:latest 4.0 / 5

Débit 73.4 tok/s · Prefill 1 783.6 tok/s · Wall 1.10 s

3 lignes ≤3, diagnostic + action pertinentes, ton générique.

1) Le tunnel FCC renvoie 401 : accès refusé, authentification manquante ou incorrecte.
2) Vérifie les identifiants et le token d'authentification utilisés pour l'accès.
3) Assure-toi que l'utilisateur a les droits nécessaires et que le token est valide.
mimo-v2.6-flash 4.5 / 5

Débit 47.2 tok/s · Prefill 8.9 tok/s · Wall 10.08 s · TTFT 6.53 s

2 lignes, diagnostic token/certif précis, action régénérer+redémarrer; commande fcc tunnel refresh inventée.

**Diagnostic :** Le 401 indique qu'une authentification échoue côté tunnel FCC — soit le token/certif partagé est invalide ou expiré, soit les credentials FIDO2/UAF ne sont plus acceptés.

**Action immédiate :** Regénérer le token de partage ou re-certifier le client (`fcc tunnel refresh --token <new>`), puis redémarrer le tunnel pour vérifier qu'un `200` revient.

B1 — Codage : fusionner_intervals (écriture)

Prompt identique pour les 3 :

Écris en Python la fonction fusionner_intervals(liste) qui fusionne une liste d'intervalles entiers chevauchants (ex: [(1,3),(2,6),(8,10)] → [(1,6),(8,10)]), triés ou non. Docstring incluse. Exactement 2 assertions de test. Donne UNIQUEMENT le code Python dans un bloc ```python.
gemma4:12b 5.0 / 5 EXEC EXIT 0

Débit 39.4 tok/s · Prefill 358.2 tok/s · Wall 8.89 s

python3 exit 0, docstring + 2 assertions OK.

def fusionner_intervals(liste):
    """
    Fusionne une liste d'intervalles entiers chevauchants.
    Args:
        liste (list of tuples): Une liste de tuples (début, fin).
    Returns:
        list of tuples: Une liste d'intervalles fusionnés.
    """
    if not liste:
        return []
    liste_triee = sorted(liste, key=lambda x: x[0])
    fusionne = []
    for intervalle in liste_triee:
        if not fusionne or intervalle[0] > fusionne[-1][1]:
            fusionne.append(intervalle)
        else:
            fusionne[-1] = (fusionne[-1][0], max(fusionne[-1][1], intervalle[1]))
    return fusionne

assert fusionner_intervals([(1, 3), (2, 6), (8, 10)]) == [(1, 6), (8, 10)]
assert fusionner_intervals([(1, 4), (4, 5), (10, 12)]) == [(1, 5), (10, 12)]
qwen3-64k-nt:latest 5.0 / 5 EXEC EXIT 0

Débit 72.2 tok/s · Prefill 1 935.7 tok/s · Wall 4.06 s

python3 exit 0, docstring + 2 assertions OK.

def fusionner_intervals(liste):
    """
    Fusionne une liste d'intervalles entiers chevauchants, triés ou non.
    """
    if not liste:
        return []
    liste_triee = sorted(liste, key=lambda x: x[0])
    fusionnes = [liste_triee[0]]
    for intervalle in liste_triee[1:]:
        dernier = fusionnes[-1]
        if intervalle[0] <= dernier[1]:
            fusionnes[-1] = (dernier[0], max(dernier[1], intervalle[1]))
        else:
            fusionnes.append(intervalle)
    return fusionnes

assert fusionner_intervals([(1,3),(2,6),(8,10)]) == [(1,6),(8,10)]
assert fusionner_intervals([(1,10),(2,5),(6,8)]) == [(1,10)]
mimo-v2.6-flash 2.0 / 5 EXEC EXIT 1

Débit 94.0 tok/s · Prefill 38.2 tok/s · Wall 5.78 s · TTFT 2.46 s

python3 exit 1 : sa propre 2e assertion fausse (attend [(1,12)], code renvoie [(1,9),(10,12)]); fonction correcte.

def fusionner_intervals(liste):
    """Fusionne une liste d'intervalles entiers chevauchants ou contigus."""
    if not liste:
        return []
    tri = sorted(liste, key=lambda iv: iv[0])
    resultat = [list(tri[0])]
    for debut, fin in tri[1:]:
        dernier = resultat[-1]
        if debut <= dernier[1]:
            dernier[1] = max(dernier[1], fin)
        else:
            resultat.append([debut, fin])
    return [tuple(iv) for iv in resultat]

assert fusionner_intervals([(1,3),(2,6),(8,10)]) == [(1,6),(8,10)]
assert fusionner_intervals([(4,7),(1,3),(10,12),(6,9),(3,4)]) == [(1,12)]

B2 — Codage : debug moyenne()

Prompt identique pour les 3 :

Ce code est cassé. Trouve l'erreur, explique-la en 1 phrase, corrige (patch minimal), puis donne le code corrigé complet dans un bloc ```python avec son assertion qui passe. ```python def moyenne(items): total = 0 for i in range(len(items)): total += items[i] return total / (len(items) - 1) assert moyenne([2, 4, 6]) == 4.0 ```
gemma4:12b 5.0 / 5 EXEC EXIT 0

Débit 43.8 tok/s · Prefill 409.3 tok/s · Wall 3.10 s

Diagnostic len(items)-1 exact, patch minimal, exit 0.

L'erreur est que le diviseur utilise `len(items) - 1` au lieu de `len(items)`.

**Patch minimal :** `return total / len(items)`

```python
def moyenne(items):
    total = 0
    for i in range(len(items)):
        total += items[i]
    return total / len(items)

assert moyenne([2, 4, 6]) == 4.0
```
qwen3-64k-nt:latest 5.0 / 5 EXEC EXIT 0

Débit 72.9 tok/s · Prefill 2 117.5 tok/s · Wall 1.71 s

Diagnostic div0 + résultat faux, patch minimal, exit 0.

**Erreur :** Division par (len(items) - 1) → div0 si liste vide ou moyenne incorrecte.

**Patch :** Remplacer par `total / len(items)`.

```python
def moyenne(items):
    total = 0
    for i in range(len(items)):
        total += items[i]
    return total / len(items)

assert moyenne([2, 4, 6]) == 4.0
```
mimo-v2.6-flash 5.0 / 5 EXEC EXIT 0

Débit 82.9 tok/s · Prefill 42.4 tok/s · Wall 6.05 s · TTFT 2.62 s

Diagnostic exact + patch minimal + 3 assertions, exit 0.

## L'erreur
Le diviseur est `len(items) - 1` au lieu de `len(items)`.

## Patch minimal
```diff
-    return total / (len(items) - 1)
+    return total / len(items)
```

## Code corrigé complet
```python
def moyenne(items):
    total = 0
    for i in range(len(items)):
        total += items[i]
    return total / len(items)

assert moyenne([2, 4, 6]) == 4.0
assert moyenne([10]) == 10.0
assert moyenne([1, 3]) == 2.0
```

B3 — Codage : unittest normaliser_tel()

Prompt identique pour les 3 :

Pour la fonction ci-dessous, écris 5 tests unittest couvrant exactement ces cas: format FR (06...), international (+33...), déjà normalisé, sans indicatif, caractères invalides. Donne UNIQUEMENT le code complet (import unittest + tests), exécutable tel quel dans un bloc ```python. ```python def normaliser_tel(num): s = "".join(ch for ch in num if ch.isdigit() or ch == "+") if s.startswith("0033"): s = "+" + s[4:] if s.startswith("0"): s = "+33" + s[1:] if s.startswith("33") and len(s) == 11 and not s.startswith("+"): s = "+" + s return s ```
gemma4:12b 4.0 / 5 EXEC EXIT 0

Débit 42.6 tok/s · Prefill 1 256.0 tok/s · Wall 11.47 s

5 unittest exit 0 ; cas « déjà normalisé » doublon de « international », « sans indicatif » mal étiqueté (teste branche 33).

import unittest

def normaliser_tel(num):
    s = "".join(ch for ch in num if ch.isdigit() or ch == "+")
    if s.startswith("0033"): s = "+" + s[4:]
    if s.startswith("0"): s = "+33" + s[1:]
    if s.startswith("33") and len(s) == 11 and not s.startswith("+"): s = "+" + s
    return s

class TestNormaliserTel(unittest.TestCase):
    def test_format_fr(self):
        self.assertEqual(normaliser_tel("0612345678"), "+33612345678")
    def test_format_international(self):
        self.assertEqual(normaliser_tel("+33612345678"), "+33612345678")
    def test_deja_normalise(self):
        self.assertEqual(normaliser_tel("+33612345678"), "+33612345678")
    def test_sans_indicatif(self):
        self.assertEqual(normaliser_tel("33612345678"), "+33612345678")
    def test_caracteres_invalides(self):
        self.assertEqual(normaliser_tel("+33 (0)6 12-34-56-78"), "+330612345678")

if __name__ == "__main__":
    unittest.main()
qwen3-64k-nt:latest 3.5 / 5 EXEC EXIT 0

Débit 71.7 tok/s · Prefill 2 211.5 tok/s · Wall 3.43 s

Tests seulement (fonction officielle préfixée par le harnais, noté); exit 0 ; cas « sans indicatif » mal étiqueté (préfixe 0).

import unittest

class TestNormaliserTel(unittest.TestCase):
    def test_format_fr_06(self):
        self.assertEqual(normaliser_tel("0612345678"), "+33612345678")
    def test_format_international_plus33(self):
        self.assertEqual(normaliser_tel("+33123456789"), "+33123456789")
    def test_deja_normalise(self):
        self.assertEqual(normaliser_tel("+33612345678"), "+33612345678")
    def test_sans_indicatif(self):
        self.assertEqual(normaliser_tel("0123456789"), "+33123456789")
    def test_caracteres_invalides(self):
        self.assertEqual(normaliser_tel("06-12-34-56-78"), "+33612345678")

if __name__ == '__main__':
    unittest.main()
mimo-v2.6-flash 5.0 / 5 EXEC EXIT 0

Débit 265.9 tok/s · Prefill 25.7 tok/s · Wall 10.56 s · TTFT 6.82 s

Code complet (fonction+5 unittest) exit 0 ; 5 cas réellement distincts dont vrais « sans indicatif » et invalides.

import unittest

def normaliser_tel(num):
    s = "".join(ch for ch in num if ch.isdigit() or ch == "+")
    if s.startswith("0033"): s = "+" + s[4:]
    if s.startswith("0"): s = "+33" + s[1:]
    if s.startswith("33") and len(s) == 11 and not s.startswith("+"): s = "+" + s
    return s

class TestNormaliserTel(unittest.TestCase):
    def test_format_fr(self):
        self.assertEqual(normaliser_tel("06 12 34 56 78"), "+33612345678")
    def test_international(self):
        self.assertEqual(normaliser_tel("+33 6 12 34 56 78"), "+33612345678")
    def test_deja_normalise(self):
        self.assertEqual(normaliser_tel("+33612345678"), "+33612345678")
    def test_sans_indicatif(self):
        self.assertEqual(normaliser_tel("612 345 678"), "612345678")
    def test_caracteres_invalides(self):
        self.assertEqual(normaliser_tel("abc-123"), "123")

if __name__ == "__main__":
    unittest.main()

C1 — Images : prompt pour générateur (SD/Flux)

Prompt identique pour les 3 :

Prompt structuré (sujet / style / lumière / cadrage / NEGATIVE prompt) pour générer le visuel hero d'une landing page « app de co-parentalité, design Apple épuré ». Format exploitable par un générateur d'images (SD/Flux), sans flou.
gemma4:12b 5.0 / 5

Débit 31.4 tok/s · Prefill 275.3 tok/s · Wall 28.98 s

3 variantes structurées sujet/style/lumière/cadrage/negative EN, params SD/Flux, ratio ; tronqué en fin (num_predict) mais exploitable.

Option 1 (Lifestyle) — Sujet : A high-end lifestyle photography of a young, modern couple sitting on a minimalist sofa in a bright, sun-drenched living room… Style : Apple aesthetic, editorial photography… Lumière : Natural soft sunlight, high-key lighting… Cadrage : Wide shot, eye-level, negative space left for copy… Negative: blurry, out of focus, distorted faces, extra fingers…

Option 2 (Product Focus) — Sujet : Close-up of two hands holding a sleek smartphone displaying a minimalist co-parenting app dashboard… Style : Tech product photography, Apple style… Negative: blurry screen, distorted hands…

Option 3 (Abstract) — Sujet : Minimalist composition of a wooden toy block and a smartphone on a white marble table… Negative: clutter, dark, blurry…

Conseils : ratio --ar 16:9, negative space pour H1, netteté…
qwen3-64k-nt:latest 3.5 / 5

Débit 70.4 tok/s · Prefill 1 900.9 tok/s · Wall 11.76 s

Sections complètes mais positive/negative prompts en français descriptifs — moins directement exploitables SD/Flux ; fin par une offre d'aide.

Sujet : Une jeune femme et un jeune homme en co-parentalité…
Style : Design Apple épuré, illustration vectorielle…
Lumière : Lumière douce et naturelle, uniforme…
Cadrage : Cadrage symétrique, focus visages et mains…
Negative prompt : Pas de flou, pas de couleurs vives, pas de texte…
Format exploitable : [plaqueau français descriptif — non EN direct SD]
mimo-v2.6-flash 5.0 / 5

Débit 50.7 tok/s · Prefill 6.7 tok/s · Wall 28.52 s · TTFT 10.77 s

Structure complète, hex colors, positive prompt EN, negative EN long, params SDXL/Flux, --ar 16:9.

POSITIVE PROMPT:
hero image for co-parenting app landing page, modern smartphone mockup
floating above neutral surface, clean UI showing shared family calendar
and expense tracker, two interlocking wooden rings beside phone, small
green plant sprout growing between rings, soft pastel abstract shapes
in background, Apple-inspired minimal product photography style, flat
illustration mixed with photorealism, warm off-white background,
color palette soft coral and sage green and charcoal, soft diffused
studio lighting from upper left, gentle shadows, no harsh contrast,
wide horizontal composition 16:9, subject on right third, clean
negative space on left third for text overlay, sharp focus throughout,
premium tech aesthetic, generous white space, no visual clutter,
product shot framing, eye level perspective, resolution 1920x1080
--ar 16:9 --style raw

NEGATIVE PROMPT:
blur, blurry, out of focus, noise, grain, low quality, jpeg artifacts,
oversaturated, neon colors, dark background, cluttered, busy pattern,
text misspelling, garbled text, watermark, logo, signature, border,
frame, crop marks, deformed hands, extra fingers, distorted face…

C2a — Son : texte TTS Piper FR (senior EasyPhone)

Prompt identique pour les 3 :

Texte prêt pour TTS Piper (fr-FR): un briefing en 3 phrases pour un senior sur EasyPhone, ponctuation parlante, ZÉRO emoji, zéro balise. Donne UNIQUEMENT le texte.
gemma4:12b 4.5 / 5

Débit 31.0 tok/s · Prefill 222.9 tok/s · Wall 2.31 s

3 phrases, zéro emoji/balise, ton senior ; « quelques clics » léger hors EasyPhone boutons.

EasyPhone est une solution simplifiée qui permet de gérer vos appels et vos contacts en quelques clics seulement. L'interface est intuitive et conçue pour vous offrir une expérience fluide sans aucune complexité technique. Vous pouvez désormais communiquer avec vos proches en toute sérénité grâce à cette technologie accessible à tous.
qwen3-64k-nt:latest 4.5 / 5

Débit 71.7 tok/s · Prefill 1 741.1 tok/s · Wall 1.06 s

3 phrases, zéro emoji/balise, contenu senior factuel.

EasyPhone est un smartphone conçu pour les seniors, avec un design simple et des fonctionnalités essentielles. Il propose un grand écran, un clavier tactile intuitif et des appels faciles à gérer. Il est compatible avec les principales applications et offre une assistance téléphonique 24h/24.
mimo-v2.6-flash 5.0 / 5

Débit 41.4 tok/s · Prefill 30.6 tok/s · Wall 5.22 s · TTFT 1.76 s

3 phrases concrètes senior (écran, boutons, zéro apprentissage), zéro emoji/balise.

EasyPhone, c'est un téléphone conçu spécialement pour vous, simple à prendre en main et adapté à vos besoins quotidiens. Vous y retrouverez un écran grand format, des boutons bien visibles et une interface claire, sans complexité inutile. Que ce soit pour appeler vos proches, consulter vos messages ou prendre une photo, tout est pensé pour que vous puissiez l'utiliser en toute confiance, sans aucun apprentissage compliqué.

C2b — Son : avis médicament en pt-PT

Prompt identique pour les 3 :

escreve em português de Portugal — não brasileiro — um aviso de 3 frases para um idoso: hora do medicamento, se está tudo bem, e para carregar no botão vermelho se precisar de ajuda
gemma4:12b 3.5 / 5

Débit 34.8 tok/s · Prefill 212.3 tok/s · Wall 4.32 s

pt-PT authentique (carregue, consigo, tutoiement) mais rend 3 options + intro au lieu d'un avis de 3 phrases ; balises **.

Aqui tens três opções, dependendo do grau de proximidade (mais formal ou mais carinhoso):

**Opção 1 (Mais carinhosa/familiar):**
É hora de tomar o seu medicamento. Está tudo bem consigo? Se precisar de alguma coisa, basta carregar no botão vermelho.

**Opção 2 (Mais direta):**
Está na hora de tomar a medicação. Sente-se bem? Por favor, carregue no botão vermelho se precisar de ajuda.

**Opção 3 (Mais formal):**
Chegou o momento de tomar o medicamento. Está tudo bem? Se necessitar de assistência, carregue no botão vermelho.
qwen3-64k-nt:latest 5.0 / 5

Débit 73.1 tok/s · Prefill 1 577.5 tok/s · Wall 0.58 s

Avis exact de 3 phrases, pt-PT propre, sans marqueur BR, sans balises.

A hora do seu medicamento chegou. Por favor, confirme se está tudo bem. Se precisar de ajuda, carregue no botão vermelho.
mimo-v2.6-flash 4.0 / 5

Débit 51.9 tok/s · Prefill 2.3 tok/s · Wall 28.28 s · TTFT 26.27 s

pt-PT authentique (o senhor(a), carregue) mais faute «Aquí» (orth espagnol) + ligne d'intro + placeholder [Nome].

Aquí está o aviso em português de Portugal:

---

Sr.(a) [Nome], está na hora de tomar o seu medicamento. Está tudo bem com o senhor(a)? Se precisar de ajuda, carregue no botão vermelho.

C3 — Vision : image synthétique + lecture du texte

Prompt identique pour les 3 :

Décris cette image et LIS exactement le texte qu'elle contient (recopie-le tel quel).
gemma4:12b 5.0 / 5

Débit 35.9 tok/s · Prefill 260.3 tok/s · Wall 7.62 s

Lit « OUVERT 10:00 » exact ; décrit maison, soleil, arbre, eau — conforme aux pixels.

Cette image est une illustration stylisée et minimaliste représentant un paysage extérieur.

- **La maison :** formes géométriques simples. Toit marron, murs terre cuite/orange, deux fenêtres bleues, porte marron.
- **L'arbre :** à droite de la maison, tronc marron, feuillage circulaire vert.
- **L'eau :** rectangle bleu horizontal en bas à droite.
- **Le soleil :** grand cercle jaune en haut à droite.
- **Le style :** flat design, couleurs unies, fond beige clair.

**Texte contenu dans l'image :**
OUVERT 10:00
qwen3-64k-nt:latest N/A — vision non supportée

Débit — · Prefill — · Wall —

Vision non supportée : capteur image absent de qwen3-64k-nt — aucun appel effectué, non simulé.

None
mimo-v2.6-flash 5.0 / 5

Débit 117.1 tok/s · Prefill 119.1 tok/s · Wall 7.12 s · TTFT 3.49 s

Lit « OUVERT 10:00 » exact + mentionne le petit texte en haut à gauche ; maison/arbre/soleil/eau conformes.

Cette image est une illustration simple et stylisée d'un paysage, composée de formes géométriques de couleurs vives sur un fond beige clair.

**Description des éléments :**
- **À gauche :** Une maison avec toit brun triangulaire, corps orange-rouge, deux fenêtres carrées bleu clair et porte rectangulaire brune.
- **Au centre :** Un arbre avec feuillage circulaire vert et tronc rectangulaire brun.
- **En haut à droite :** Un soleil en forme de cercle jaune.
- **En bas à droite :** Une surface rectangulaire bleu foncé, eau.
- **En haut à gauche :** Un petit texte noire.

**Texte exact contenu dans l'image :**
OUVERT 10:00

D1 — Français : 150 mots

Prompt identique pour les 3 :

Rédige 150 mots sur « les bénéfices d'un assistant vocal pour une famille ». Donne UNIQUEMENT le texte.
gemma4:12b 5.0 / 5

Débit 31.2 tok/s · Prefill 168.3 tok/s · Wall 7.44 s

146 mots, grammaire impeccable, style varié.

L'intégration d'un assistant vocal au sein d'un foyer transforme radicalement la gestion quotidienne en offrant un gain de temps précieux et une fluidité accrue. Pour les parents débordés, cet outil devient un véritable allié organisationnel : il permet de gérer des listes de courses, de programmer des rappels de rendez-vous ou de planifier des alarmes, libérant ainsi de la charge mentale.

Côté confort, il simplifie les tâches domestiques en contrôlant l'éclairage, le chauffage ou la musique d'une simple commande vocale. Pour les enfants, il stimule la curiosité en répondant instantanément à des questions éducatives ou en proposant des histoires interactives. Enfin, il favorise l'accessibilité, permettant aux membres de la famille de rester connectés et informés sans avoir à manipuler d'écrans. En automatisant les routines répétitives, l'assistant vocal crée un environnement plus serein, permettant à la famille de se concentrer sur l'essentiel : partager des moments de qualité ensemble.
qwen3-64k-nt:latest 4.0 / 5

Débit 71.9 tok/s · Prefill 1 404.3 tok/s · Wall 3.08 s

145 mots, grammaire correcte, style plat et répétitif (Il permet / Il facilise…).

Un assistant vocal apporte de nombreux bénéfices à une famille. Il permet de gérer les tâches quotidiennes plus facilement, comme l'organisation des rendez-vous, la lecture de messages ou la commande de courses. Il facilite également la communication avec les membres de la famille, surtout pour les personnes âgées ou en situation de handicap. L'assistant vocal peut également aider à surveiller la sécurité en alertant en cas d'urgence ou en donnant des informations météorologiques. Il favorise la connexion entre les membres de la famille, en permettant de partager des informations en temps réel. De plus, il contribue à la réduction du stress en automatisant des tâches répétitives. Enfin, il offre une aide pédagogique aux enfants en les aidant à apprendre des mots, des chiffres ou des histoires. Ainsi, un assistant vocal devient un outil précieux pour améliorer la qualité de vie et renforcer les liens familiaux.
mimo-v2.6-flash 4.5 / 5

Débit 41.8 tok/s · Prefill 15.0 tok/s · Wall 9.01 s · TTFT 2.33 s

148 mots, bonne qualité ; « courses au domicile » + « plannings » lisses/anglicisme léger.

Les bénéfices d'un assistant vocal pour une famille sont multiples et se remarquent au quotidien. Dans un foyer actif, chaque membre dispose d'une aide instantanée à disposition. L'assistant vocal gère les plannings familiaux en synchronisant agendas et rappels, évitant ainsi les oublis d'anniversaires, de rendez-vous médicaux ou d'événements scolaires. Pour les enfants, il devient un outil éducatif stimulant, répondant à leurs questions avec patience et accessibilité. Dans la cuisine, il partage des recettes et organise les courses au domicile grâce à des listes partagées. La maison devient également plus intelligente grâce à son contrôle des appareils connectés, régulant l'éclairage, la température ou la musique selon les besoins de chacun. Par ailleurs, l'assistant vocal rend la technologie accessible aux personnes âgées ou moins à l'aise avec les écrans. Finalement, il libère du temps précieux, permettant à la famille de se concentrer sur l'essentiel : partager des moments de qualité ensemble.

D2 — Portugais du Portugal : traduction

Prompt identique pour les 3 :

Traduis en portugais du PORTUGAL: "Le téléphone est sur la table. L'autobus arrive à dix heures. Je vais au travail en train. Vous êtes les bienvenus. Appelez-moi si vous avez besoin de moi."
gemma4:12b 4.0 / 5

Débit 36.3 tok/s · Prefill 248.6 tok/s · Wall 4.95 s

autocarro/comboio/Sejam/Liguem OK mais « O telefone » au lieu de « telemóvel » attendu ; notes bonus.

**O telefone está sobre a mesa. O autocarro chega às dez horas. Vou ao trabalho de comboio. Sejam bem-vindos. Liguem-me se precisarem de mim.**

### Notes sur les choix de traduction :
* **Autocarro** : terme utilisé au Portugal (au Brésil : ônibus).
* **Comboio** : terme utilisé au Portugal (au Brésil : trem).
* **Liguem-me** : impératif pluriel formel.
* **Sejam bem-vindos** : forme standard pour « Vous êtes les bienvenus ».
qwen3-64k-nt:latest 2.0 / 5

Débit 73.2 tok/s · Prefill 1 596.5 tok/s · Wall 0.61 s

ERREUR : « en train » traduit « de autocarro » (au lieu de comboio) ; « Chame-me » (marqueur BR) au lieu de Ligue-me.

O telefone está sobre a mesa. O autocarro chega às dez horas. Vou ao trabalho de autocarro. São bem-vindos. Chame-me se precisar de mim.
mimo-v2.6-flash 4.5 / 5

Débit 42.4 tok/s · Prefill 32.6 tok/s · Wall 3.81 s · TTFT 1.87 s

telemóvel/autocarro/comboio/Liguem OK ; « Sintam-se à vontade » pour « vous êtes les bienvenus » (décalage sémantique).

O telemóvel está em cima da mesa. O autocarro chega às dez horas. Vou para o trabalho de comboio. Sintam-se à vontade. Liguem-me se precisarem de mim.

Verdict final : quel modèle pour quel rôle

Pilotage principal (tool-calling) — mimo-v2.6-flash

Seul modèle à produire une séquence cohérente de 9 appels d'outil JSON valides (diagnostic → action → vérification). gemma4 invente du sudo, qwen ne fait qu'un appel web_search. 4.0 vs 2.5 vs 2.0

Pilotage secours (diagnostic rapide) — gemma4:12b ou mimo-v2.6-flash (ex æquo)

Les deux à 4.5/5 avec diagnostic pertinent en 2 lignes. gemma4 en 2,3 s (local, instantané) ; mimo en 10 s (TTFT 6.5 s). 4.5 vs 4.5 vs 4.0

Codage agent (scripts, tests, debug) — gemma4:12b ou qwen3-64k-nt

gemma4 moyenne 4.67/5 sur les 3 tests B (dont B1 EXEC exit 0). qwen 4.50/5 avec le meilleur débit (72-75 tok/s). mimo 4.00/5 mais échoue en B1 (EXEC exit 1). 4.67 vs 4.50 vs 4.00

Français / rédaction — gemma4:12b ou mimo-v2.6-flash

gemma4 : 5.0 + 4.0 = 4.50 moyenne. mimo : 4.5 + 4.5 = 4.50 moyenne. Qwen pénalisé par la traduction pt-PT (2.0). 4.50 vs 3.00 vs 4.50

Portugais du Portugal — qwen3-64k-nt

Seul modèle parfait sur C2b (5/5, avis 3 phrases propre). mimo bon (4.5 sur D2, 4.0 sur C2b) mais faute «Aquí». gemma4 rate le format sur C2b. 3.75 vs 3.50 vs 4.25

Son / TTS FR — mimo-v2.6-flash

Moyenne catégorie C : mimo 4.75, gemma 4.50, qwen 3.50 (pénalisé par C1 et N/A sur C3). 4.50 vs 3.50 vs 4.75

Image (prompt SD/Flux) — gemma4:12b ou mimo-v2.6-flash (ex æquo)

Les deux à 5/5 sur C1 avec prompts EN exploitables directement. qwen à 3.5 (prompts en français descriptifs). 5.0 vs 3.5 vs 5.0

Vision — gemma4:12b ou mimo-v2.6-flash (ex æquo)

Les deux lisent «OUVERT 10:00 » exactement. qwen n'a pas de vision (N/A). 5.0 vs N/A vs 5.0

En résumé

RôleModèle recommandé
Pilotage principal (agent / tool-calling)mimo-v2.6-flash
Pilotage secours (dépannage rapide)gemma4:12b (instantané, local)
Codage agent (scripts, tests, debug)gemma4:12b ou qwen3-64k-nt
Rédaction françaisegemma4:12b ou mimo-v2.6-flash
Portugais du Portugalqwen3-64k-nt
TTS / son (texte FR pour Piper)mimo-v2.6-flash
Prompt image SD/Fluxgemma4:12b ou mimo-v2.6-flash
Vision (lecture d'image)gemma4:12b ou mimo-v2.6-flash