Skip to contents

Versión en español: vignette("models-es", package = "ellmercodex").

Which models you can use depends on your ChatGPT plan, account, and workspace. This article shows how to find out what is available, pick a model, and set how much the model reasons before it answers.

List the models for your account

After signing in, codex_models() returns the models listed for your account:

models <- codex_models()
models[c("id", "display_name", "default_reasoning_effort",
         "supported_reasoning_efforts")]

It queries https://api.openai.com/v1/models with your ChatGPT plan token and keeps the models marked visibility: "list".

The catalog does not always include every model the service accepts. You can pass a model ID even when it is missing from codex_models(); the service then validates the model and reasoning effort. For example, gpt-6-luna works although the catalog does not list it.

Pick a model

With no model, chat_codex() picks a usable model from the catalog. That is convenient interactively, but the choice can change over time. Pass a model explicitly when you need stable results:

chat <- chat_codex(model = "gpt-6-luna")

To use the same model everywhere without passing it each time, set ELLMERCODEX_MODEL, for example in your .Renviron:

Sys.setenv(ELLMERCODEX_MODEL = "gpt-6-luna")
chat <- chat_codex()

Set the reasoning effort

Reasoning models can spend more or less effort before answering. More effort usually gives better answers to hard questions, but it is slower and uses more of your plan. Set it with effort:

chat <- chat_codex(model = "gpt-6-luna", effort = "low")

or with ellmer’s parameters, which is handy if your code already uses ellmer::params() with other providers:

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

The levels a model supports are in the supported_reasoning_efforts column of codex_models(). For models that are not in the catalog, the service validates the effort when you send a request.