Elimina temperature y top_p —y también logprobs y top_logprobs— de las solicitudes a modelos de razonamiento. La guía de modelos de OpenAI permite el muestreo en GPT-5.1, 5.2 y 5.4, y en GPT-6 Sol y Luna, únicamente con un esfuerzo de razonamiento none; gpt-5, gpt-5-mini y gpt-5-nano los rechazan con cualquier configuración, y GPT-6 Astra no tiene una configuración none que utilizar. En su lugar, controla la salida con el esfuerzo de razonamiento, la verbosidad y el prompt.
El error
{
"error": {
"message": "Unsupported value: 'temperature' does not support 0.2 with this model. Only the default (1) value is supported.",
"type": "invalid_request_error",
"param": "temperature",
"code": "unsupported_value"
}
}
# 0.2 is whatever your code sent; reports show 0 and 0.7 too.
# Some models reject the field at any value instead:
# "Unsupported parameter: 'temperature' is not supported with this model."
# "Unsupported parameter: 'top_p' is not supported with this model."
# (code "unsupported_parameter")Causas y soluciones de un vistazo
| Causa | Solución |
|---|---|
| Un modelo de razonamiento ejecutándose con un esfuerzo de razonamiento superior a none | Elimina temperature, top_p, logprobs y top_logprobs de la solicitud. |
| Un modelo sin configuración none: gpt-5, gpt-5-mini, gpt-5-nano, GPT-6 Astra | Nunca le envíes parámetros de muestreo; contrólalo con el esfuerzo y la verbosidad. |
| Un valor predeterminado de tu pila que nunca estableciste (0.7 de LangChain, 0 en Cline) | Anula o elimina el valor predeterminado por modelo antes de que salga la solicitud. |
| Enviar el valor predeterminado 1 para estar seguro | Omite el campo; algunos modelos rechazan el parámetro con cualquier valor. |
Elimina los parámetros de muestreo
Es una eliminación, no un valor nuevo. Deja fuera temperature y top_p por completo en las llamadas a modelos de razonamiento, junto con logprobs y top_logprobs, que están cubiertos por la misma regla. Si quieres cambiar cuánto trabaja el modelo, el control disponible es el esfuerzo de razonamiento.
from openai import OpenAI
client = OpenAI(base_url="https://api.kunavo.com/v1", api_key="sk-kn-...")
msgs = [{"role": "user", "content": "Summarize this diff as three changelog bullets."}]
# Before — sampling parameters on a reasoning model
resp = client.chat.completions.create(
model="gpt-6-astra", temperature=0.2, top_p=0.9, messages=msgs)
# After — removed; reasoning effort is the control that remains
resp = client.chat.completions.create(
model="gpt-6-astra", reasoning_effort="low", messages=msgs)Comprueba qué modelos aceptan muestreo
OpenAI establece la regla por familia de modelos y la activa mediante el esfuerzo de razonamiento. Esta es su guía de modelos tal como se consultó el 23 de septiembre de 2026. Las páginas de GPT-5.5 y GPT-5.6 no repiten la regla, así que interpreta el silencio como un motivo para probar, no como permiso; las filas de la serie o proceden de informes de errores y no de la documentación.
gpt-5, gpt-5-mini, gpt-5-nano error, whatever the reasoning setting
GPT-5.1, GPT-5.2, GPT-5.4 accepted only with reasoning effort "none"
GPT-6 Sol, GPT-6 Luna remove them unless reasoning effort is "none"
GPT-6 Astra remove them: Astra has no "none" effort
GPT-5.5, GPT-5.6 not stated on their guidance pages
o1-preview, o3-mini rejected (reported errors, not docs)Controla la salida con los controles que lo sustituyeron
La guía de OpenAI nombra tres sustitutos cuando el razonamiento está activado: profundidad del razonamiento (reasoning.effort, cuyos valores dependen del modelo y van desde none y minimal hasta xhigh y max), verbosidad de salida (text.verbosity: low, medium o high, con medium como valor predeterminado) y longitud de salida (max_output_tokens, que cuenta tanto los tokens de razonamiento como los visibles). Chat Completions denomina a los dos primeros reasoning_effort y verbosity. La guía no ofrece un sustituto de nivel de muestreo para temperature 0; si lo usabas para mantener la salida repetible, fija su estructura con Structured Outputs para el esquema y el prompt para el resto.
# client as in fix.py above
resp = client.responses.create(
model="gpt-5-6-sol",
input="Summarize this diff as three changelog bullets.",
reasoning={"effort": "low"}, # how much it thinks
text={"verbosity": "low"}, # how much it says
max_output_tokens=2000, # hard cap, reasoning tokens included
)
print(resp.output_text)Pon la regla en una sola función auxiliar
Ramificar en cada punto de llamada es lo que convierte a la próxima familia de modelos en otra ronda de cambios. Filtra los parámetros de muestreo una vez, según el modelo y el esfuerzo que estés a punto de enviar; en un modelo compatible con el esfuerzo none, pasan cuando solicitas none.
SAMPLING = ("temperature", "top_p", "logprobs", "top_logprobs")
REASONING = ("gpt-5", "gpt-6", "o1", "o3", "o4") # extend as you adopt models
def sampling_params(model: str, effort: str | None, **params) -> dict:
"""Keep sampling parameters only where they are accepted: effort "none"."""
if model.startswith(REASONING) and effort != "none":
return {k: v for k, v in params.items() if k not in SAMPLING}
return params
effort = "low" # client and msgs as in fix.py above
resp = client.chat.completions.create(
model="gpt-5-6-terra",
messages=msgs,
reasoning_effort=effort,
**sampling_params("gpt-5-6-terra", effort, temperature=0.2, top_p=0.9),
)Si llamas a través de Kunavo
Kunavo no elimina ni reescribe temperature o top_p para los modelos GPT, en ninguno de los dos endpoints. En /v1/chat/completions reconstruye la solicitud para el upstream de Responses: temperature y top_p se copian sin cambios, reasoning_effort se convierte en reasoning.effort y cualquiera de las dos formas de especificar el límite de tokens se convierte en max_output_tokens, mientras que los campos fuera de esa asignación —entre ellos verbosity, logprobs, top_logprobs, seed y stop— no se reenvían en absoluto, así que establece verbosity mediante /v1/responses. Allí, los campos de muestreo y texto pasan exactamente como se envían, incluido text.verbosity. Si el modelo rechaza un valor, el 400 incluye su mensaje palabra por palabra dentro del sobre de Kunavo (type upstream_error, code upstream_400), así que coincide con el estado o el mensaje, no con el código "unsupported_value"; la llamada fallida no se factura. Una llamada que tiene éxito con temperature configurado no demuestra que el valor se haya aplicado. Kunavo elimina temperature, top_p y top_k por su cuenta únicamente en los seis modelos Claude de los que Anthropic los retiró —claude-fable-5-1, claude-fable-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7 y claude-sonnet-5— y lo hace en todos los endpoints. La otra mitad de esta misma migración, max_tokens frente a max_completion_tokens, se trata en la guía de max_tokens.
Preguntas frecuentes
¿Puedo configurar temperature en GPT-5?
No en gpt-5, gpt-5-mini ni gpt-5-nano: OpenAI indica que las solicitudes que lo incluyen generan un error. GPT-5.1, 5.2 y 5.4 aceptan temperature, top_p y logprobs únicamente con el esfuerzo de razonamiento configurado en none, y la guía de GPT-6 de OpenAI indica que deben eliminarse siempre que el esfuerzo de razonamiento no sea none.
¿Qué sustituye a temperature en los modelos de razonamiento?
El esfuerzo de razonamiento para determinar cuánto piensa el modelo, text.verbosity (verbosity en Chat Completions) para determinar cuánto dice y max_output_tokens como límite estricto. A través de Kunavo, establece verbosity en /v1/responses: el endpoint de chat no lo reenvía a los modelos GPT. Para una estructura repetible, utiliza Structured Outputs y reglas de formato explícitas en el prompt.
¿Debo enviar simplemente temperature=1?
Omítelo. El mensaje de valor no compatible indica que el modelo que lo produjo acepta el valor predeterminado 1, pero otros modelos rechazan el parámetro con cualquier valor ("Unsupported parameter: 'temperature' is not supported with this model"), y la guía de OpenAI recomienda eliminar los campos.
¿Por qué recibo este error si mi código nunca establece temperature?
Algo en tu pila lo estableció. Las llamadas de un usuario de jupyter-ai a o1-preview incluían 0.7, el valor predeterminado de la clase ChatOpenAI de LangChain subyacente a jupyter-ai, y un colaborador de Cline atribuyó el 0 que encontró un usuario de GPT-5 a un valor predeterminado codificado. Comprueba qué coloca realmente tu SDK o framework en el cable y después anúlalo o elimínalo por modelo.
¿Kunavo elimina temperature por mí?
No para los modelos GPT: Kunavo reenvía temperature y top_p exactamente como los envías, tanto en /v1/chat/completions como en /v1/responses. Sí elimina temperature, top_p y top_k en los seis modelos Claude de los que Anthropic los retiró.
Guías relacionadas
- «Unsupported parameter: 'max_tokens' is not supported with this model»: usa max_completion_tokens
- «`temperature` y `top_p` no pueden especificarse simultáneamente para este modelo»; envía uno y, en los modelos Claude más recientes, ninguno
- Guía de API compatible con OpenAI: del endpoint local de Ollama a modelos de frontera alojados
- Límites de velocidad de la API de OpenAI: cuál alcanzas, cómo leerlo y el reintento que lo soluciona
Encontrarás más detalles sobre el significado de los errores en referencia de errores; obtener una clave lleva un minuto mediante registro y la guía de autenticación.