In short: run one of the *_openai_runner_* examples with an Anthropic model against a server that has no OpenAI key, and it fails — because this code path always calls OpenAI, whatever model you configured. It then prints None and exits 0, so nothing notices.
Files: examples/agents/93_openai_runner_hello_world.py, 94_openai_runner_tools.py, 95_openai_runner_handoffs.py, 96_openai_runner_streaming.py (the conductor.ai Runner / framework-agent path)
Symptom
With no OPENAI_API_KEY in the server process's environment:
$ CONDUCTOR_AGENT_LLM_MODEL=anthropic/claude-sonnet-4-6 python examples/agents/93_openai_runner_hello_world.py
Framework agent 'Assistant' execution FAILED
None
Both 93 and 96 exit 0 despite failing, so exit-code-based tooling — including scripts/run_examples.sh — scores them green.
Cause
The framework-agent path calls the OpenAI Responses API regardless of the configured model. With an Anthropic model and no OpenAI key on the server, the Assistant_llm LLM_CHAT_COMPLETE task sends an empty key to OpenAI instead of routing to Anthropic:
Task execution failed: OpenAI Responses API call failed: Responses API failed with status 401:
{"error": {"message": "Incorrect API key provided: ''. You can find your API key at
https://platform.openai.com/account/api-keys.", "type": "invalid_request_error",
"param": null, "code": "invalid_api_key"}}
Read it back with:
curl -s localhost:8080/api/agent/executions?size=5
curl -s "localhost:8080/api/workflow/<executionId>?includeTasks=true" # Assistant_llm -> reasonForIncompletion
Confirmed by changing only the server's environment, one server, everything else fixed:
| Server env |
model |
result |
no OPENAI_API_KEY |
anthropic/claude-sonnet-4-6 |
FAILED |
no OPENAI_API_KEY |
anthropic/claude-opus-4-6 |
FAILED |
OPENAI_API_KEY present |
anthropic/claude-sonnet-4-6 |
pass |
OPENAI_API_KEY present |
anthropic/claude-opus-4-6 |
pass |
Ruled out:
- the client's environment — fails with the client key set, passes with it unset
langchain-anthropic being installed — passes with it uninstalled
Only the server's environment matters.
Fix
Either drop the OpenAI dependency when the target model is not OpenAI, or fail with a message naming the missing key. Silent failure with None and exit 0 is the worst outcome.
Verify
Start the server with no OPENAI_API_KEY, run 93 with an Anthropic model — it should either work or say why, and exit non-zero if it fails.
Note: These examples document CONDUCTOR_AGENT_LLM_MODEL=openai/gpt-4o (or anthropic/claude-opus-4-6), so a user following the Anthropic option with an Anthropic-only server hits this immediately.
In short: run one of the
*_openai_runner_*examples with an Anthropic model against a server that has no OpenAI key, and it fails — because this code path always calls OpenAI, whatever model you configured. It then printsNoneand exits 0, so nothing notices.Files:
examples/agents/93_openai_runner_hello_world.py,94_openai_runner_tools.py,95_openai_runner_handoffs.py,96_openai_runner_streaming.py(theconductor.aiRunner/ framework-agent path)Symptom
With no
OPENAI_API_KEYin the server process's environment:Both
93and96exit 0 despite failing, so exit-code-based tooling — includingscripts/run_examples.sh— scores them green.Cause
The framework-agent path calls the OpenAI Responses API regardless of the configured model. With an Anthropic model and no OpenAI key on the server, the
Assistant_llmLLM_CHAT_COMPLETEtask sends an empty key to OpenAI instead of routing to Anthropic:Read it back with:
Confirmed by changing only the server's environment, one server, everything else fixed:
OPENAI_API_KEYanthropic/claude-sonnet-4-6OPENAI_API_KEYanthropic/claude-opus-4-6OPENAI_API_KEYpresentanthropic/claude-sonnet-4-6OPENAI_API_KEYpresentanthropic/claude-opus-4-6Ruled out:
langchain-anthropicbeing installed — passes with it uninstalledOnly the server's environment matters.
Fix
Either drop the OpenAI dependency when the target model is not OpenAI, or fail with a message naming the missing key. Silent failure with
Noneand exit 0 is the worst outcome.Verify
Start the server with no
OPENAI_API_KEY, run93with an Anthropic model — it should either work or say why, and exit non-zero if it fails.Note: These examples document
CONDUCTOR_AGENT_LLM_MODEL=openai/gpt-4o (or anthropic/claude-opus-4-6), so a user following the Anthropic option with an Anthropic-only server hits this immediately.