Saltar al contenido principal
Este benchmark mide qué tan rápido comienza el streaming en la API pública de Respuestas MKA1. Utiliza POST /api/v1/llm/responses en https://apigw.mka1.com/api/v1/llm/responses con stream: true y el modelo gpt-5. El objetivo es simple: medir el tiempo desde que se envía la solicitud hasta que el primer token de texto transmitido llega al cliente.

Resumen de resultados

Ejecución del benchmark: 2026-03-31
MétricaValor
Modelogpt-5
EndpointPOST /api/v1/llm/responses
Solicitudes de calentamiento5
Solicitudes medidas100
Solicitudes fallidas0
TTFT p50311.13 ms
TTFT p95608.49 ms
TTFT p99681.29 ms
TTFT máx695.86 ms
Primer evento SSE p9570.69 ms
Encabezados de respuesta p9570.42 ms
En esta ejecución, la API pública de Respuestas se mantuvo por debajo de 1 segundo en el percentil 95 para el tiempo hasta el primer token de texto transmitido.

Qué significa TTFT en este benchmark

Para este benchmark, TTFT significa:
  • el cliente inicia un temporizador inmediatamente antes de enviar la solicitud HTTP
  • el cliente abre el stream SSE
  • el temporizador se detiene cuando se recibe el primer delta de texto transmitido no vacío
Este modelo típicamente emite texto de razonamiento antes del texto de respuesta final. Por eso, el benchmark cuenta el primer delta de texto no vacío de cualquiera de:
  • response.reasoning_text.delta
  • response.output_text.delta
Esa definición mide el inicio del texto transmitido de forma continua tal como lo ve el cliente. El benchmark también reporta dos hitos anteriores:
  • encabezados de respuesta: cuando se devuelve la respuesta HTTP inicial
  • primer evento SSE: cuando llega el primer frame SSE, sin importar el contenido

Configuración del benchmark

La ejecución en vivo utilizó el siguiente perfil de solicitud:
  • URL base: https://apigw.mka1.com
  • endpoint: POST /api/v1/llm/responses
  • autenticación: Authorization: Bearer <mka1-api-key>
  • encabezado de usuario final: X-On-Behalf-Of: ttft-benchmark-user
  • modelo: gpt-5
  • prompt: Reply with exactly the text OK and nothing else.
  • stream: true
  • temperature: 0
  • max_output_tokens: 64
  • calentamientos: 5
  • solicitudes medidas: 100
  • concurrencia: 1
  • tiempo de espera de solicitud: 45s
Estos números son mediciones observadas por el cliente contra el endpoint público de la API. Por lo tanto, incluyen el tiempo de ida y vuelta de red entre el cliente del benchmark y apigw.mka1.com, no solo el tiempo de procesamiento del servidor.

Forma de la solicitud

curl https://apigw.mka1.com/api/v1/llm/responses \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Accept: text/event-stream' \
  --header 'Authorization: Bearer <mka1-api-key>' \
  --header 'X-On-Behalf-Of: <end-user-id>' \
  --data '{
    "model": "gpt-5",
    "input": "Reply with exactly the text OK and nothing else.",
    "stream": true,
    "temperature": 0,
    "max_output_tokens": 64
  }'
El benchmark en sí utiliza un parser SSE en lugar del tiempo de salida de curl para poder detectar el momento exacto de llegada del primer token de texto transmitido.

Interpretación

Esta ejecución muestra tres capas útiles de latencia:
  • la conexión y el gateway devolvieron los encabezados rápidamente, con p95 en 70.42 ms
  • el primer frame SSE llegó en p95 70.69 ms
  • el primer token de texto transmitido llegó en p95 608.49 ms
Eso significa que el stream comienza casi inmediatamente a nivel de transporte, y el texto transmitido significativo llega al cliente muy por debajo de 1 segundo en p95 para este modelo y perfil de solicitud.

Salida completa del test

{
  "benchmark": "responses_stream_ttft",
  "generatedAt": "2026-03-31T23:34:32.387Z",
  "config": {
    "baseUrl": "https://apigw.mka1.com/api/v1/llm",
    "model": "gpt-5",
    "apiKey": "OMITTED",
    "onBehalfOf": "ttft-benchmark-user",
    "prompt": "Reply with exactly the text OK and nothing else.",
    "samples": 100,
    "warmupSamples": 5,
    "concurrency": 1,
    "timeoutMs": 45000,
    "thresholdMs": 1000,
    "maxOutputTokens": 64,
    "outputJson": "stream-ttft-report.json"
  },
  "verdict": {
    "passed": true,
    "thresholdMs": 1000,
    "measuredP95Ms": 608.4879000000001
  },
  "samples": {
    "warmup": 5,
    "measured": 100,
    "success": 100,
    "failed": 0
  },
  "stats": {
    "headersMs": {
      "count": 100,
      "min": 63.00436899999477,
      "avg": 67.39161819000238,
      "p50": 67.0498840000073,
      "p95": 70.41907800000627,
      "p99": 72.71200100000715,
      "max": 107.99611500000174
    },
    "firstEventMs": {
      "count": 100,
      "min": 63.306459000014,
      "avg": 67.66752371000103,
      "p50": 67.35425400000531,
      "p95": 70.69219799997518,
      "p99": 73.02295199999935,
      "max": 108.39853500000027
    },
    "firstTokenMs": {
      "count": 100,
      "min": 293.89441600002465,
      "avg": 389.9065817800009,
      "p50": 311.1333589999995,
      "p95": 608.4879000000001,
      "p99": 681.2876299999916,
      "max": 695.8577790000054
    },
    "totalDurationMs": {
      "count": 100,
      "min": 3047.5074070000264,
      "avg": 3146.770197100002,
      "p50": 3097.0465299999996,
      "p95": 3374.5328960000006,
      "p99": 3435.1036190000013,
      "max": 3453.2585250000047
    }
  },
  "measurements": [
    {
      "sampleIndex": 1,
      "ok": true,
      "httpStatus": 200,
      "responseId": "resp_c38d48bebeb74c54b740e627a541cad6",
      "headersMs": 66.99634399999923,
      "firstEventMs": 67.28057400000034,
      "firstTokenMs": 423.95566899999903,
      "totalDurationMs": 3195.7519509999984,
      "eventCount": 137,
      "textDeltaCount": 62,
      "outputTextDeltaCount": 0,
      "reasoningTextDeltaCount": 62,
      "text": "Okay o usuário pediu para responder exatamente com \"OK\" e nada mais. Vou verificar se entendi corretamente. Ele quer que eu ignore qualquer outra coisa e só envie \"OK\". Não há necessidade de usar nenhuma ferramenta aqui, já que a resposta é"
    },
    ...
  ]
}