Generated tool namespace has an empty description, causing Azure Responses API requests to fail
Codex CLI version
0.147.0
Model
gpt-5.6-sol
Provider path
Codex CLI → OpenAI-compatible LiteLLM endpoint → Azure OpenAI
Problem
Every turn fails because Azure rejects a tool namespace whose description is an empty string.
Sanitized error:
{
"error": {
"message": "Invalid 'input[0].tools[0].description': empty string. Expected a string with minimum length 1, but got an empty string instead.",
"type": "invalid_request_error",
"param": "input[0].tools[0].description",
"code": "empty_string"
}
}
This appears to originate in codex-rs/protocol/src/dynamic_tools.rs. When legacy dynamic tools are grouped into a namespace, Codex explicitly assigns an empty description:
grouped_tools.push(DynamicToolSpec::Namespace(DynamicToolNamespaceSpec {
name: namespace,
description: String::new(),
tools: vec![function],
}));
Source:
Azure requires tool descriptions to contain at least one character, so the generated request is rejected before inference begins.
Steps to reproduce
- Configure Codex to use an OpenAI-compatible LiteLLM endpoint backed by Azure OpenAI.
- Select
gpt-5.6-sol. - Start a session that includes namespaced dynamic tools.
- Send any prompt.
- Observe the HTTP 400 validation error above.
Expected behavior
Codex should never serialize an empty tool or namespace description.
A generated fallback such as the following would satisfy the API contract:
description: format!("Tools in the {namespace} namespace"),
Alternatively, validation could reject or normalize empty descriptions before constructing the Responses API request.
Related issue
Possibly related to #31870, which also concerns GPT-5.6-Sol tool compatibility through Azure, although that issue reports a different validation error.
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Duplicate of #37425
experiencing the same issue here