Trying first LLM example in LiveBook fails

I tried to run the first LLM example “Your first LLM agent” in LiveBook. Firstly I got a weird Setup block:

Mix.install([
  {{mix_dep:jido}},
  {{mix_dep:jido_ai}},
  {{mix_dep:req_llm}}
])

which I could easily sort out. I set my OpenAI API key as directed as a secret in LiveBook which the block reported true as expected. However when I tried to run the “Ask the Agent” block I get the following;

10:49:25.330 [warning] Jido.AI.Reasoning.ReAct using ephemeral token secret (no configured :react_token_secret); checkpoint tokens expire on VM restart

10:49:25.335 [error] Provider failed to build streaming request: %ReqLLM.Error.API.Request{reason: "Failed to build Anthropic stream request: %ReqLLM.Error.Invalid.Parameter{parameter: ":api_key option, config :req_llm, anthropic_api_key, or ANTHROPIC_API_KEY env var (.env via dotenvy)", splode: nil, bread_crumbs: 
, vars: 
, path: 
, stacktrace: #Splode.Stacktrace<>, class: :invalid}", status: nil, response_body: nil, request_body: nil, cause: nil, headers: nil, splode: nil, bread_crumbs: 
, vars: 
, path: 
, stacktrace: #Splode.Stacktrace<>, class: :api}

10:49:25.335 [error] Failed to start HTTP streaming: {:provider_build_failed, %ReqLLM.Error.API.Request{reason: "Failed to build Anthropic stream request: %ReqLLM.Error.Invalid.Parameter{parameter: ":api_key option, config :req_llm, anthropic_api_key, or ANTHROPIC_API_KEY env var (.env via dotenvy)", splode: nil, bread_crumbs: 
, vars: 
, path: 
, stacktrace: #Splode.Stacktrace<>, class: :invalid}", status: nil, response_body: nil, request_body: nil, cause: nil, headers: nil, splode: nil, bread_crumbs: 
, vars: 
, path: 
, stacktrace: #Splode.Stacktrace<>, class: :api}}

10:49:25.335 [error] Failed to start streaming: {:http_streaming_failed, {:provider_build_failed, %ReqLLM.Error.API.Request{reason: "Failed to build Anthropic stream request: %ReqLLM.Error.Invalid.Parameter{parameter: ":api_key option, config :req_llm, anthropic_api_key, or ANTHROPIC_API_KEY env var (.env via dotenvy)", splode: nil, bread_crumbs: 
, vars: 
, path: 
, stacktrace: #Splode.Stacktrace<>, class: :invalid}", status: nil, response_body: nil, request_body: nil, cause: nil, headers: nil, splode: nil, bread_crumbs: 
, vars: 
, path: 
, stacktrace: #Splode.Stacktrace<>, class: :api}}}
Greeting: {:error,
{:failed, :error,
{:http_streaming_failed,
{:provider_build_failed,
%ReqLLM.Error.API.Request{
reason: "Failed to build Anthropic stream request: %ReqLLM.Error.Invalid.Parameter{parameter: ":api_key option, config :req_llm, anthropic_api_key, or ANTHROPIC_API_KEY env var (.env via dotenvy)", splode: nil, bread_crumbs: 
, vars: 
, path: 
, stacktrace: #Splode.Stacktrace<>, class: :invalid}",
status: nil,
response_body: nil,
request_body: nil,
cause: nil,
headers: nil,
splode: nil,
bread_crumbs: 
,
vars: 
,
path: 
,
stacktrace: #Splode.Stacktrace<>,
class: :api
}}}}}

No idea why its using Claude/Anthropic? Apart from if I do the following in the LiveBook;

Jido.AI.model_aliases()

it returns

%{
  image: "openai:gpt-image-1",
  thinking: "anthropic:claude-sonnet-4-20250514",
  embedding: "openai:text-embedding-3-small",
  reasoning: "anthropic:claude-sonnet-4-20250514",
  planning: "anthropic:claude-sonnet-4-20250514",
  fast: "anthropic:claude-haiku-4-5",
  capable: "anthropic:claude-sonnet-4-20250514"
}

which shows :fast as configured to be "anthropic:claude-haiku-4-5"

What am I doing wrong?

Thanks in advance

Mike

Anthropic is by default, you need to override your aliases:

config :jido_ai, :model_aliases,  
  fast: "openai:gpt-4o-mini",  
  reasoning: "openai:gpt-4o",  
  planning: "openai:gpt-4o",  
  capable: "openai:gpt-4o"

I merely followed the docs/guide. Thanks.

You can make a PR for docs, add a line that would prevent your problem for someone else. :cowboy_hat_face:

code is never done and docs are its last frontier

Will look to do so when I figure out where best to make the config change as many of the examples seem to use the :fast atom for the model key.

I’m afraid I can’t find where to put the altered config when in LiveBook. Obviously if I was just in my own Elixir project I know where to do it. So many of the LiveBook examples give the same instructions on setting the OPENAI_API_KEY and the model is configured to be :fast so I thought it must be my setup as was sure the jido.run website could not be so wrong.

After transferring to a simple skeleton Elixir project I got it to work after setting the config to be

config :jido_ai, :model_aliases, %{
  fast: "openai:gpt-4o-mini",
  reasoning: "openai:gpt-4o",
  planning: "openai:gpt-4o",
  capable: "openai:gpt-4o"
`}

The fix was it needed to be a map as the keyword list was swallowed as an empty map and therefore always fell back to the defaults.

Sorry for the friction - I’m working on making this experience better. I will patch the docs so this makes it back into the original LiveBook

Hey thanks! I was and still am excited to try out Jido after listening to you on various podcasts and been a long time Elixir fan/dev/architect (since 2015, and Erlang before that).

I was sure it was my stupidity but as I only used LiveBook a while back (and my intention is not LiveBook) I switched to a bare simple Elixir project to debug my mistake.

Great work and I’m glad you carried on with it after you did a retrospective look a while back.

Mike

It’s been a journey for sure! The project grew really fast and it’s been a challenge to keep on top of all the little points of friction.

As stated above, docs and livebooks aren’t always the highest on the list to proactively test and fix - but I’m making progress!!!

I have a lot of automations built to manage the ecosystem, dependencies and integrations across supported packages which has helped tremendously. The core is now in a great place and I’m now starting to look ahead towards what is next.

Thanks for digging in and let me know if there’s anything else you run into so I can patch it.

Appreciate the offer - thanks, I will certainly bear it in mind. I also will see if there is anything I can do to give back too.