At about 1 PM PT yesterday we started getting these errors using codex hooked up to the LLM proxy in Foundry:
{"errorCode":"CUSTOM_CLIENT","errorName":"LanguageModelService:LlmHttpClientError","errorInstanceId":"84506645-b289-4125-b303-d950a646da7f","parameters":
{"modelCreator":"Optional[OPEN_AI]","responseBody":"Optional[{\n \"error\": {\n \"message\": \"Invalid 'input[3].id': ''. Expected an ID that contains letters,
numbers, underscores, or dashes, but this value contained additional characters.\",\n \"type\": \"invalid_request_error\",\n \"param\": \"input[3].id\",\n
\"code\": \"invalid_value\"\n }\n}]","modelBackendId":"Optional[DIRECT_OPEN_AI]","errorType":"Optional[invalid_request_error]","errorMessage":"Optional[Invalid
'input[3].id': ''. Expected an ID that contains letters, numbers, underscores, or dashes, but this value contained additional
characters.]","errorCode":"Optional[invalid_value]","statusCode":"400"}}
The team found that the error occurs due to a serial number in the request being set to empty string by the Palantir proxy. We don’t know if it is the Palantir proxy that changed or OpenAI.
TL;DR
After the first tool call, Codex has to send the model’s sealed reasoning back so the next step can continue. That seal is issued with a serial number (rs_…). The seal and the number are a matched pair.
Codex desnt’ send that serial number on the next request. It keeps the seal and drops the ID. Against OpenAI directly that is fine: a missing field is not an empty field adn OpenAI accepts the seal alone. Official Codex works this way without any proxy.
But what likely happened is on palantir side when the ID is absent, Palantir most likely writes “” and forwards that to OpenAI. OpenAI then sees empty ID and empty string is rejected as an ID in their request payload validator.