ModelVerdict

Google · pesos abiertos

Gemma 4 31B

Cómo Gemma 4 31B de Google gestiona documentos empresariales reales: precisión, coste real, velocidad y dónde se equivoca.

Precio de lista: 0,08 € por millón de tokens de entrada, 0,31 € por millón de tokens de salida · google/gemma-4-31b-it

Resultados

Tarea · documentosPosiciónCampos correctosDocumentos sin erroresPor cada 1000 documentosA corregir / 1000Velocidad (mediana)Umbral
Cláusulas contractuales · Inglés (EE. UU.)7/1099,6 %97 %0,17 €272,5 salcanza el umbral
Cláusulas contractuales · Checo7/10100,0 %99 %0,23 €76,0 salcanza el umbral
Cláusulas contractuales · Alemán9/1094,4 %27 %0,20 €7272,6 spor debajo del umbral
Clasificación de correos · Español4/1097,1 %74 %0,13 €2602,1 salcanza el umbral
Clasificación de correos · Inglés (EE. UU.)7/1096,5 %72 %0,11 €2802,2 salcanza el umbral
Clasificación de correos · Checo7/1097,1 %75 %0,15 €2532,5 salcanza el umbral
Clasificación de correos · Alemán7/1095,1 %62 %0,14 €3803,6 salcanza el umbral
Clasificación de correos · Francés6/1096,4 %71 %0,15 €2882,5 salcanza el umbral
Extracción de facturas · Español7/1095,4 %54 %0,19 €4608,7 salcanza el umbral
Extracción de facturas · Inglés (EE. UU.)8/1097,6 %81 %0,15 €1878,9 salcanza el umbral
Extracción de facturas · Checo7/1096,1 %67 %0,19 €33310,4 salcanza el umbral
Extracción de facturas · Alemán8/1094,9 %64 %0,18 €3607,7 spor debajo del umbral
Extracción de facturas · Francés9/1093,6 %51 %0,20 €4947,2 spor debajo del umbral
Detección de datos personales · Inglés (EE. UU.)1/1099,9 %99 %0,08 €72,4 salcanza el umbral
Detección de datos personales · Checo1/1099,8 %99 %0,11 €132,9 salcanza el umbral
Detección de datos personales · Alemán2/1099,9 %99 %0,09 €71,9 salcanza el umbral

Dónde se equivoca

Los campos en los que más falla y los tipos de errores, sobre todos los documentos del benchmark.

Cláusulas contractuales · Inglés (EE. UU.)

Campos más débiles

  • Proveedor98,0 %
  • Cliente98,0 %
  • Fecha de entrada en vigor99,3 %

Tipos de errores (número de campos)

  • valor incorrecto7

Cláusulas contractuales · Checo

Campos más débiles

  • Fecha de entrada en vigor99,3 %

Tipos de errores (número de campos)

  • valor incorrecto1

Cláusulas contractuales · Alemán

Campos más débiles

  • Penalización por demora (% diario)27,3 %

Tipos de errores (número de campos)

  • formato numérico109

Clasificación de correos · Español

Campos más débiles

  • Prioridad82,0 %
  • Sentimiento92,0 %

Tipos de errores (número de campos)

  • valor incorrecto26

Clasificación de correos · Inglés (EE. UU.)

Campos más débiles

  • Sentimiento83,3 %
  • Prioridad85,3 %

Tipos de errores (número de campos)

  • valor incorrecto47

Clasificación de correos · Checo

Campos más débiles

  • Prioridad85,3 %
  • Sentimiento88,7 %

Tipos de errores (número de campos)

  • valor incorrecto39

Clasificación de correos · Alemán

Campos más débiles

  • Prioridad78,0 %
  • Sentimiento78,0 %

Tipos de errores (número de campos)

  • valor incorrecto66

Clasificación de correos · Francés

Campos más débiles

  • Prioridad82,2 %
  • Sentimiento86,3 %
  • Plazo98,6 %

Tipos de errores (número de campos)

  • valor incorrecto24

Extracción de facturas · Español

Campos más débiles

  • Cuenta bancaria79,3 %
  • Base imponible por tipo81,6 %
  • ID del proveedor (EIN, IČO…)93,1 %
  • Proveedor95,4 %

Tipos de errores (número de campos)

  • valor incorrecto35
  • campo ausente16
  • valor inventado1

Extracción de facturas · Inglés (EE. UU.)

Campos más débiles

  • Cuenta bancaria86,0 %
  • Base imponible por tipo95,3 %
  • ID del proveedor (EIN, IČO…)98,0 %
  • Fecha de factura98,7 %

Tipos de errores (número de campos)

  • valor incorrecto38
  • tipo incorrecto1

Extracción de facturas · Checo

Campos más débiles

  • Cuenta bancaria86,7 %
  • ID del proveedor (EIN, IČO…)93,3 %
  • Fecha de vencimiento94,0 %
  • Fecha de devengo95,3 %

Tipos de errores (número de campos)

  • valor incorrecto66
  • campo ausente8
  • fechas intercambiadas2

Extracción de facturas · Alemán

Campos más débiles

  • Cuenta bancaria82,7 %
  • Fecha de factura87,3 %
  • Fecha de vencimiento90,7 %
  • Fecha de devengo92,0 %

Tipos de errores (número de campos)

  • valor incorrecto90
  • campo ausente7
  • fechas intercambiadas3

Extracción de facturas · Francés

Campos más débiles

  • Cuenta bancaria73,6 %
  • ID del proveedor (EIN, IČO…)77,0 %
  • Base imponible por tipo93,1 %
  • Fecha de devengo94,3 %

Tipos de errores (número de campos)

  • valor incorrecto64
  • campo ausente7
  • fechas intercambiadas2

Detección de datos personales · Inglés (EE. UU.)

Campos más débiles

  • Direcciones99,3 %

Tipos de errores (número de campos)

  • campo ausente1

Detección de datos personales · Checo

Campos más débiles

  • Direcciones98,7 %

Tipos de errores (número de campos)

  • campo ausente2

Detección de datos personales · Alemán

Campos más débiles

  • Direcciones99,3 %

Tipos de errores (número de campos)

  • campo ausente1

Impuesto lingüístico

Cuántos tokens más necesita este modelo para el mismo texto que en inglés.

Impuesto lingüístico de todos los modelos →

Cumplimiento

Served only by third-party hosts on OpenRouter (no EU endpoint listed); self-hosting in the EU possible.

Cómo verificamos el cumplimiento →

Úselo ya

La solicitud exacta del benchmark (mismo prompt, esquema JSON, temperatura 0), lista para llamar a Gemma 4 31B a través de OpenRouter.

Cláusulas contractuales · Español

Python · httpx · OpenRouter
import json
import os

import httpx

PROMPT = "Extraiga las condiciones esenciales del contrato de abajo y devuelva solo JSON con estas claves:\n\nprovider_name         la parte que presta o entrega (Prestador, Vendedor, Arrendador, Licenciante),\n                      exactamente como figura, incluida la forma jurídica\nprovider_id           número de identificación de esa parte (p. ej. NIF/CIF), si se indica\nclient_name           la parte que paga (Cliente, Comprador, Arrendatario, Licenciatario)\nclient_id             número de identificación de esa parte, si se indica\ncontract_type         uno de los valores: services, supply, lease, license, maintenance\nprice                 precio pactado sin IVA (número)\ncurrency              código de moneda según ISO 4217 (EUR, CHF, USD, …)\nprice_period          uno de los valores: one_time, monthly, yearly\neffective_date        fecha de entrada en vigor del contrato (YYYY-MM-DD)\nend_date              fin de una duración determinada (YYYY-MM-DD); null si el contrato se celebra\n                      por tiempo indefinido\nnotice_period_months  plazo de preaviso en meses (número); null si no lo hay\npenalty_pct_per_day   penalización por demora en el pago en porcentaje del importe pendiente por día\n                      (p. ej. 0.05 para 0,05 %); null si no la hay\ngoverning_law         código de país de la ley aplicable según ISO 3166 (p. ej. ES); los estados de EE. UU.\n                      como US-XX\n\nReglas:\n- Las fechas relativas («en la fecha de su firma», «el día primero del mes siguiente») calcúlelas a partir de\n  la fecha de la firma.\n- La fecha de la firma no es la fecha de entrada en vigor, salvo que el contrato lo establezca expresamente.\n- El anticipo, la fianza y las penalizaciones fijas por otros incumplimientos no son ni el precio ni la\n  penalización por demora en el pago.\n- Si un valor no figura en el contrato, devuelva null. No adivine.\n- Importes como números con punto decimal, sin separador de miles y sin símbolo de moneda.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"provider_name\":{\"type\":[\"string\",\"null\"]},\"provider_id\":{\"type\":[\"string\",\"null\"]},\"client_name\":{\"type\":[\"string\",\"null\"]},\"client_id\":{\"type\":[\"string\",\"null\"]},\"contract_type\":{\"type\":[\"string\",\"null\"],\"enum\":[\"services\",\"supply\",\"lease\",\"license\",\"maintenance\",null]},\"price\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"price_period\":{\"type\":[\"string\",\"null\"],\"enum\":[\"one_time\",\"monthly\",\"yearly\",null]},\"effective_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"end_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"notice_period_months\":{\"type\":[\"integer\",\"null\"]},\"penalty_pct_per_day\":{\"type\":[\"number\",\"null\"]},\"governing_law\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"provider_name\",\"provider_id\",\"client_name\",\"client_id\",\"contract_type\",\"price\",\"currency\",\"price_period\",\"effective_date\",\"end_date\",\"notice_period_months\",\"penalty_pct_per_day\",\"governing_law\"],\"additionalProperties\":false}")


def run(document_text: str) -> dict:
    """Text of the document in, the extracted fields as a dict out."""
    response = httpx.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": "google/gemma-4-31b-it",
            "temperature": 0,
            "messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
            # For a scan or photo, send [{"type": "text", "text": PROMPT},
            # {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
            "response_format": {
                "type": "json_schema",
                "json_schema": {"name": "contracts", "strict": False, "schema": SCHEMA},
            },
        },
        timeout=120,
    )
    response.raise_for_status()
    return json.loads(response.json()["choices"][0]["message"]["content"])

Clasificación de correos · Español

Python · httpx · OpenRouter
import json
import os

import httpx

PROMPT = "Usted clasifica correos electrónicos del servicio de atención al cliente. Lea el correo de abajo y devuelva solo JSON con estas claves:\n\ncategory        uno de los valores: billing (facturas, pagos, facturación), delivery (dónde está el pedido,\n                envío, cambio de dirección), complaint (mercancía dañada, equivocada o defectuosa, reclamación),\n                technical (inicio de sesión, errores en la aplicación o el sistema, integraciones), cancellation (anulación\n                de un pedido, rescisión de un contrato o una suscripción), sales (consulta, precios, interés antes de la compra)\npriority        uno de los valores: urgent, high, normal, low (reglas abajo)\nsentiment       uno de los valores: positive, neutral, negative (tono del cliente)\ncustomer_name   nombre completo del cliente que ha escrito la solicitud\norder_number    número de pedido del cliente, si se indica\ninvoice_number  número de factura, si se indica\namount          importe al que se refiere la solicitud (número)\ncurrency        código de la moneda de ese importe según ISO 4217 (EUR, CZK, USD, …)\ndeadline        fecha hasta la que el cliente quiere una solución o una respuesta (YYYY-MM-DD)\n\nReglas de prioridad:\n- urgent: el cliente no puede trabajar en este momento, o el plazo vence como máximo 1 día después de la fecha del correo\n- high: el plazo vence como máximo 7 días después de la fecha del correo, o el cliente amenaza con poner fin\n  a la colaboración o con escalar el asunto (abogado)\n- low: el cliente escribe expresamente que no corre prisa\n- normal: todo lo demás\n\nReglas:\n- Hilo de mensajes: evalúe el mensaje más reciente; los números de pedido y de factura y los importes pueden\n  proceder de mensajes anteriores citados. Correo reenviado: el cliente es el remitente original,\n  no el compañero que lo ha reenviado.\n- Los plazos relativos («para el viernes», «para mañana», «antes de fin de mes») calcúlelos a partir de la fecha\n  del mensaje en el que aparecen.\n- Los números de incidencia del servicio de atención al cliente, los datos del Registro Mercantil, el CIF/NIF y los\n  números de teléfono no son números de pedido ni de factura.\n- Si un valor no figura en el correo, devuelva null. No adivine.\n- Importes como números con punto decimal, sin separador de miles y sin símbolo de moneda.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"category\":{\"type\":[\"string\",\"null\"],\"enum\":[\"billing\",\"delivery\",\"complaint\",\"technical\",\"cancellation\",\"sales\",null]},\"priority\":{\"type\":[\"string\",\"null\"],\"enum\":[\"urgent\",\"high\",\"normal\",\"low\",null]},\"sentiment\":{\"type\":[\"string\",\"null\"],\"enum\":[\"positive\",\"neutral\",\"negative\",null]},\"customer_name\":{\"type\":[\"string\",\"null\"]},\"order_number\":{\"type\":[\"string\",\"null\"]},\"invoice_number\":{\"type\":[\"string\",\"null\"]},\"amount\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"deadline\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"}},\"required\":[\"category\",\"priority\",\"sentiment\",\"customer_name\",\"order_number\",\"invoice_number\",\"amount\",\"currency\",\"deadline\"],\"additionalProperties\":false}")


def run(document_text: str) -> dict:
    """Text of the document in, the extracted fields as a dict out."""
    response = httpx.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": "google/gemma-4-31b-it",
            "temperature": 0,
            "messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
            # For a scan or photo, send [{"type": "text", "text": PROMPT},
            # {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
            "response_format": {
                "type": "json_schema",
                "json_schema": {"name": "emails", "strict": False, "schema": SCHEMA},
            },
        },
        timeout=120,
    )
    response.raise_for_status()
    return json.loads(response.json()["choices"][0]["message"]["content"])

Extracción de facturas · Español

Python · httpx · OpenRouter
import json
import os

import httpx

PROMPT = "Extraiga del documento adjunto los siguientes datos y devuelva exclusivamente un JSON con estas claves:\n\nsupplier_name      Nombre o razón social del emisor de la factura (exactamente como figura en el documento, incluidos acentos y forma jurídica)\nsupplier_id        NIF del emisor (en empresas también llamado CIF, p. ej. B12345674; en autónomos, DNI con letra), sin el prefijo de país «ES»\nvat_id             NIF-IVA (número de IVA intracomunitario, «ES» + NIF) del emisor, solo si figura como tal en el documento\ninvoice_number     Número de factura (o del documento)\npayment_reference  Concepto o referencia que debe indicarse al realizar el pago\nissue_date         Fecha de expedición de la factura (YYYY-MM-DD)\ntax_point_date     Fecha de operación (fecha de devengo del IVA) (YYYY-MM-DD)\ndue_date           Fecha de vencimiento (YYYY-MM-DD)\nnet_by_rate        Base imponible por tipo de IVA, p. ej. {\"21\": 18450.00, \"10\": 1200.00}\nvat_by_rate        Cuota de IVA por tipo, p. ej. {\"21\": 3874.50}\ntotal              Importe total de la factura / importe a pagar (número, negativo en facturas rectificativas que abonan un importe)\ncurrency           Moneda según ISO 4217 (EUR, USD, …)\nbank_account       IBAN del emisor\n\nReglas:\n- No devuelva datos del cliente (destinatario), solo los del emisor.\n- Si un dato no figura en el documento, devuelva null. No invente nada.\n- Si el documento no contiene desglose del IVA (operación exenta, factura proforma), devuelva net_by_rate y vat_by_rate como null.\n- Importes como números con punto decimal, sin separadores de miles y sin moneda.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"supplier_name\":{\"type\":[\"string\",\"null\"]},\"supplier_id\":{\"type\":[\"string\",\"null\"]},\"vat_id\":{\"type\":[\"string\",\"null\"]},\"invoice_number\":{\"type\":[\"string\",\"null\"]},\"payment_reference\":{\"type\":[\"string\",\"null\"]},\"issue_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"tax_point_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"due_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"net_by_rate\":{\"type\":[\"object\",\"null\"],\"additionalProperties\":{\"type\":\"number\"}},\"vat_by_rate\":{\"type\":[\"object\",\"null\"],\"additionalProperties\":{\"type\":\"number\"}},\"total\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"bank_account\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"supplier_name\",\"supplier_id\",\"vat_id\",\"invoice_number\",\"payment_reference\",\"issue_date\",\"tax_point_date\",\"due_date\",\"net_by_rate\",\"vat_by_rate\",\"total\",\"currency\",\"bank_account\"],\"additionalProperties\":false}")


def run(document_text: str) -> dict:
    """Text of the document in, the extracted fields as a dict out."""
    response = httpx.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": "google/gemma-4-31b-it",
            "temperature": 0,
            "messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
            # For a scan or photo, send [{"type": "text", "text": PROMPT},
            # {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
            "response_format": {
                "type": "json_schema",
                "json_schema": {"name": "invoices", "strict": False, "schema": SCHEMA},
            },
        },
        timeout=120,
    )
    response.raise_for_status()
    return json.loads(response.json()["choices"][0]["message"]["content"])

Detección de datos personales · Español

Python · httpx · OpenRouter
import json
import os

import httpx

PROMPT = "Localice en el texto de abajo todos los datos personales de personas físicas (para su anonimización) y devuelva solo JSON\ncon estas claves, cada una como lista de cadenas (una lista vacía si no hay ninguno):\n\nperson_names       nombres completos de personas, cada persona una sola vez, tal como aparecen en el texto\nemail_addresses    direcciones de correo electrónico de personas\nphone_numbers      números de teléfono de personas, tal como aparecen en el texto\npostal_addresses   domicilios o direcciones de entrega de personas, tal como aparecen en el texto (calle, localidad, código postal)\nbirth_dates        fechas de nacimiento (YYYY-MM-DD)\nnational_ids       números de identificación nacionales (p. ej. DNI, NIE, número de la Seguridad Social)\nbank_accounts      números de cuenta bancaria (IBAN) de personas, tal como aparecen en el texto\n\nReglas:\n- Solo datos de personas físicas. Los nombres de empresas, los datos del Registro Mercantil, el CIF y otros números de\n  empresas, las direcciones genéricas de empresas como info@ o support@ y los números de pedido y de incidencia no son\n  datos personales: omítalos.\n- Las fechas que no son fechas de nacimiento (reuniones, entregas, incorporación) no son datos personales.\n- No invente ni complete valores; cópielos del texto.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"person_names\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"email_addresses\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"phone_numbers\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"postal_addresses\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"birth_dates\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"national_ids\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"bank_accounts\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}}},\"required\":[\"person_names\",\"email_addresses\",\"phone_numbers\",\"postal_addresses\",\"birth_dates\",\"national_ids\",\"bank_accounts\"],\"additionalProperties\":false}")


def run(document_text: str) -> dict:
    """Text of the document in, the extracted fields as a dict out."""
    response = httpx.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": "google/gemma-4-31b-it",
            "temperature": 0,
            "messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
            # For a scan or photo, send [{"type": "text", "text": PROMPT},
            # {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
            "response_format": {
                "type": "json_schema",
                "json_schema": {"name": "pii", "strict": False, "schema": SCHEMA},
            },
        },
        timeout=120,
    )
    response.raise_for_status()
    return json.loads(response.json()["choices"][0]["message"]["content"])

Insignia

Inserte el resultado actual en su sitio; la insignia se actualiza con cada ejecución.

<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/contracts-en.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/contracts-cs.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/contracts-de.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/emails-es.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/emails-en.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/emails-cs.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/emails-de.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/emails-fr.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/invoices-es.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/invoices-en.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/invoices-cs.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/invoices-de.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/invoices-fr.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/pii-en.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/pii-cs.svg" alt="Gemma 4 31B on ModelVerdict"></a>
<a href="https://modelverdict.ai/es/models/gemma-4-31b/"><img src="https://modelverdict.ai/badge/gemma-4-31b/pii-de.svg" alt="Gemma 4 31B on ModelVerdict"></a>

Comparar con otro modelo