---
title: "Modelos y esfuerzo de razonamiento"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Modelos y esfuerzo de razonamiento}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>", eval = FALSE)
```

> *English version:* `vignette("models", package = "ellmercodex")`.

```{r}
library(ellmercodex)
```

Los modelos que puedes usar dependen de tu plan de ChatGPT, tu cuenta y tu
espacio de trabajo. Este artículo muestra cómo ver qué hay disponible, elegir
un modelo y fijar cuánto razona el modelo antes de responder.

## Lista los modelos de tu cuenta

Después de iniciar sesión, `codex_models()` devuelve los modelos listados
para tu cuenta:

```{r}
modelos <- codex_models()
modelos[c("id", "display_name", "default_reasoning_effort",
          "supported_reasoning_efforts")]
```

Consulta `https://api.openai.com/v1/models` con el token de tu plan de
ChatGPT y conserva los modelos marcados con `visibility: "list"`.

El catálogo no siempre incluye todos los modelos que acepta el servicio.
Puedes pasar un ID de modelo aunque no aparezca en `codex_models()`; el
servicio valida entonces el modelo y el esfuerzo de razonamiento. Por
ejemplo, `gpt-6-luna` funciona aunque el catálogo no lo liste.

## Elige un modelo

Sin `model`, `chat_codex()` elige un modelo utilizable del catálogo. Es
cómodo en uso interactivo, pero la elección puede cambiar con el tiempo. Pasa
el modelo explícitamente cuando necesites resultados estables:

```{r}
chat <- chat_codex(model = "gpt-6-luna")
```

Para usar el mismo modelo en todas partes sin pasarlo cada vez, define
`ELLMERCODEX_MODEL`, por ejemplo en tu `.Renviron`:

```{r}
Sys.setenv(ELLMERCODEX_MODEL = "gpt-6-luna")
chat <- chat_codex()
```

## Fija el esfuerzo de razonamiento

Los modelos de razonamiento pueden dedicar más o menos esfuerzo antes de
responder. Más esfuerzo suele dar mejores respuestas a preguntas difíciles,
pero es más lento y consume más de tu plan. Fíjalo con `effort`:

```{r}
chat <- chat_codex(model = "gpt-6-luna", effort = "low")
```

o con los parámetros de `ellmer`, algo útil si tu código ya usa
`ellmer::params()` con otros proveedores:

```{r}
chat <- chat_codex(
  model = "gpt-6-luna",
  params = ellmer::params(reasoning_effort = "max")
)
```

Los niveles que admite cada modelo están en la columna
`supported_reasoning_efforts` de `codex_models()`. Para los modelos que no
están en el catálogo, el servicio valida el esfuerzo cuando envías una
solicitud.
