Saltar al contenido principal

Errores

Todo error tiene el mismo formato:

{
"code": "sql_rejected",
"message": "La consulta SQL generada fue rechazada.",
"details": { "violations": [{ "code": "unknown_column", "params": {} }] }
}
  • code es estable y en inglés. Programa contra él.
  • message viene traducido al idioma resuelto (locale → Accept-Language → idioma por defecto del tenant → pt-BR) y puede mostrarse al usuario, pero su texto puede cambiar.
  • details trae datos extra, que varían según el código.

Toda respuesta, de éxito o de error, trae el header X-Request-ID (req_…). Regístralo en tus logs e informalo al pedir soporte.

Códigos​

HTTPcodeSignificado y acción
400end_user_requiredEl tenant exige end_user y la pregunta llegó sin él.
401invalid_api_keyHeader ausente, mal formado, clave inexistente o revocada. No repitas sin corregirla.
404request_not_foundrequest_id desconocido, de otro tenant o no evaluable (feedback e historial).
404not_foundLa ruta no existe.
405method_not_allowedMétodo HTTP no aceptado por la ruta (consulta el header Allow).
409schema_not_configuredEl tenant aún no registró el DDL en el panel.
409llm_not_configuredEl tenant no configuró proveedor, modelo y clave de LLM.
409unsupported_llm_providerEl proveedor guardado ya no se acepta; el administrador debe cambiarlo.
409secret_unreadableLa clave de LLM guardada ya no se puede leer; el administrador debe registrarla de nuevo.
413payload_too_largeCuerpo por encima de 96 KiB.
422invalid_requestCuerpo o query inválidos, o campo desconocido. details.fields lista los campos.
422invalid_end_userend_user fuera del formato: parece un correo o un nombre, tiene espacios o es demasiado corto.
422question_too_longPregunta por encima de 2.000 caracteres (details.limit).
422invalid_max_rowsmax_rows inválido.
422prompt_too_largeEl schema, el contexto y los ejemplos no caben en el prompt. Avisa al administrador.
422no_answerEl LLM concluyó que el schema no responde a la pregunta. Pide al usuario que reformule.
422sql_rejectedEl SQL generado no pasó el SQL Guard, incluso tras la corrección automática. details.violations es una lista de {code, params} con códigos genéricos.
422invalid_feedbackValoración inválida en /v1/feedback.
429rate_limitedLímite de solicitudes alcanzado. details.scope = "end_user" cuando el límite es el del usuario final. Respeta Retry-After.
500internal_errorError inesperado. Envía el X-Request-ID a soporte.
502llm_errorFallo del LLM del tenant. Consulta details.reason más abajo.
503service_unavailableBase de datos de la plataforma inaccesible o sobrecargada. Trae Retry-After.
503not_readyServicio sin acceso a la base de datos; intenta de nuevo.

sql_rejected​

Para no revelar lo que tu administrador ocultó, las tablas y columnas ocultas aparecen como unknown_table y unknown_column, y los nombres de columna nunca se devuelven. El motivo real queda en el Historial del panel. Reformular la pregunta suele resolverlo; si una pregunta legítima se rechaza con frecuencia, registra un ejemplo para ella en el panel.

llm_error y details.reason​

reasonAcción
timeout, llm_unavailable, llm_rate_limitedTransitorio: intenta de nuevo con espera creciente.
invalid_llm_key, invalid_modelEl administrador debe corregir la configuración de LLM en el panel.
empty_response, invalid_responseEl LLM respondió algo inutilizable; reintentar o reformular.

Política de reintento sugerida​

SituaciónQué hacer
429Esperar los segundos de Retry-After antes de repetir.
502 con reason transitorio, 503Espera exponencial (1 s, 2 s, 4 s), como máximo 3 intentos.
401, 409, 422No repetir la misma solicitud.
Timeout de tu cliente HTTP en /v1/askNo repetir automáticamente: cada intento gasta tokens. Deja que el usuario lo intente de nuevo.