OpenAI
GPT-6 Sol
Cómo GPT-6 Sol de OpenAI gestiona documentos empresariales reales: precisión, coste real, velocidad y dónde se equivoca.
Precio de lista: 1,84 € por millón de tokens de entrada, 9,20 € por millón de tokens de salida · openai/gpt-6-sol
Resultados
| Tarea · documentos | Posición | Campos correctos | Documentos sin errores | Por cada 1000 documentos | A corregir / 1000 | Velocidad (mediana) | Umbral |
|---|---|---|---|---|---|---|---|
| Cláusulas contractuales · Inglés (EE. UU.) | 3/10 | 100,0 % | 100 % | 3,06 € | 0 | 2,5 s | alcanza el umbral |
| Cláusulas contractuales · Checo | 6/10 | 100,0 % | 100 % | 4,25 € | 0 | 2,0 s | alcanza el umbral |
| Cláusulas contractuales · Alemán | 2/10 | 100,0 % | 100 % | 4,01 € | 0 | 2,9 s | alcanza el umbral |
| Clasificación de correos · Inglés (EE. UU.) | 1/10 | 99,0 % | 92 % | 2,24 € | 80 | 2,8 s | alcanza el umbral |
| Clasificación de correos · Checo | 2/10 | 99,0 % | 91 % | 2,94 € | 93 | 2,8 s | alcanza el umbral |
| Clasificación de correos · Alemán | 2/10 | 98,2 % | 84 % | 2,51 € | 160 | 2,9 s | alcanza el umbral |
| Extracción de facturas · Español | 1/10 | 99,2 % | 89 % | 9,90 € | 110 | 5,7 s | alcanza el umbral |
| Extracción de facturas · Inglés (EE. UU.) | 1/10 | 99,9 % | 99 % | 8,88 € | 7 | 4,1 s | alcanza el umbral |
| Extracción de facturas · Checo | 4/10 | 99,9 % | 99 % | 9,31 € | 13 | 3,9 s | alcanza el umbral |
| Extracción de facturas · Alemán | 2/10 | 100,0 % | 99 % | 9,80 € | 7 | 4,9 s | alcanza el umbral |
| Extracción de facturas · Francés | 2/10 | 99,9 % | 99 % | 10,17 € | 10 | 5,9 s | alcanza el umbral |
| Detección de datos personales · Inglés (EE. UU.) | 5/10 | 99,7 % | 98 % | 1,92 € | 20 | 2,6 s | alcanza el umbral |
| Detección de datos personales · Checo | 4/10 | 99,7 % | 98 % | 2,04 € | 20 | 2,5 s | alcanza el umbral |
| Detección de datos personales · Alemán | 6/10 | 99,7 % | 98 % | 1,96 € | 20 | 2,6 s | alcanza 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.)
Sin errores en esta tarea.
Cláusulas contractuales · Checo
Sin errores en esta tarea.
Cláusulas contractuales · Alemán
Sin errores en esta tarea.
Clasificación de correos · Inglés (EE. UU.)
Campos más débiles
- Sentimiento93,3 %
- Prioridad98,0 %
Tipos de errores (número de campos)
Clasificación de correos · Checo
Campos más débiles
- Sentimiento92,7 %
- Prioridad98,0 %
Tipos de errores (número de campos)
Clasificación de correos · Alemán
Campos más débiles
- Sentimiento86,7 %
- Prioridad97,3 %
Tipos de errores (número de campos)
Extracción de facturas · Español
Campos más débiles
- Base imponible por tipo92,0 %
- Proveedor98,0 %
- Cuenta bancaria99,0 %
Tipos de errores (número de campos)
Extracción de facturas · Inglés (EE. UU.)
Campos más débiles
- Cuenta bancaria99,3 %
Tipos de errores (número de campos)
Extracción de facturas · Checo
Campos más débiles
- Proveedor99,3 %
- Referencia de pago99,3 %
Tipos de errores (número de campos)
Extracción de facturas · Alemán
Campos más débiles
- Cuenta bancaria99,3 %
Tipos de errores (número de campos)
Extracción de facturas · Francés
Campos más débiles
- Referencia de pago99,0 %
Tipos de errores (número de campos)
Detección de datos personales · Inglés (EE. UU.)
Campos más débiles
- Direcciones98,0 %
Tipos de errores (número de campos)
Detección de datos personales · Checo
Campos más débiles
- Direcciones98,0 %
Tipos de errores (número de campos)
Detección de datos personales · Alemán
Campos más débiles
- Direcciones98,0 %
Tipos de errores (número de campos)
Impuesto lingüístico
Cuántos tokens más necesita este modelo para el mismo texto que en inglés.
- checo 1,71×
- alemán 1,29×
- francés 1,34×
- español 1,31×
- polaco 1,77×
Impuesto lingüístico de todos los modelos →
Cumplimiento
- En la UE sí
- Sin retención (ZDR) sí
- DPA sí
- Pesos abiertos no
EU and ZDR: Azure. OpenAI direct: EU data residency needs approval.
Cómo verificamos el cumplimiento →
Úselo ya
La solicitud exacta del benchmark (mismo prompt, esquema JSON, temperatura 0), lista para llamar a GPT-6 Sol a través de OpenRouter.
Cláusulas contractuales · Español
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": "openai/gpt-6-sol",
"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
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": "openai/gpt-6-sol",
"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
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": "openai/gpt-6-sol",
"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
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": "openai/gpt-6-sol",
"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/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/contracts-en.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/contracts-cs.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/contracts-de.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/emails-en.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/emails-cs.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/emails-de.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/invoices-es.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/invoices-en.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/invoices-cs.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/invoices-de.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/invoices-fr.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/pii-en.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/pii-cs.svg" alt="GPT-6 Sol on ModelVerdict"></a><a href="https://modelverdict.ai/es/models/gpt-6-sol/"><img src="https://modelverdict.ai/badge/gpt-6-sol/pii-de.svg" alt="GPT-6 Sol on ModelVerdict"></a>