Openrouter Openai/codex-mini not support

Resolved 💬 1 comment Opened May 17, 2025 by vicenteHy Closed Aug 7, 2025

What version of Codex is running?

_No response_

Which model were you using?

_No response_

What platform is your computer?

_No response_

What steps can reproduce the bug?

codex --provider openrouter --model openai/codex-mini
Paste your OpenAI API key and press <Enter>:
*************************************************************************
╭──────────────────────────────────────────────────────────────╮
│ ● OpenAI Codex (research preview) v0.1.2505161800 │
╰──────────────────────────────────────────────────────────────╯
╭──────────────────────────────────────────────────────────────╮
│ localhost session: df66b0ff44744088860c8586ffe6ef6d │
│ ↳ workdir: ~ │
│ ↳ model: openai/codex-mini │
│ ↳ provider: openrouter │
│ ↳ approval: suggest │
╰──────────────────────────────────────────────────────────────╯
user
hello
╭────────────────────────────────────────────────────────────────────────────────────────────╮
│( ●) 0s Thinking press Esc twice to interrupt │
╰────────────────────────────────────────────────────────────────────────────────────────────╯
ctrl+c to exit | "/" to see commands | enter to send — 100% context left

file:///opt/homebrew/lib/node_modules/@openai/codex/dist/cli.js:582
,"\r"]);Ph.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function pVe(e,t){for(let a=t??0;a<e.length;a++){if(e[a]===10)return{preceding:a,index:a+1,carriage:!1};if(e[a]===13)return{preceding:a,index:a+1,carriage:!0}}return null}function Ode(e){for(let n=0;n<e.length-1;n++){if(e[n]===10&&e[n+1]===10||e[n]===13&&e[n+1]===13)return n+2;if(e[n]===13&&e[n+1]===10&&n+3<e.length&&e[n+2]===13&&e[n+3]===10)return n+4}return-1}f();function OL(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let r=await t.read();return r?.done&&t.releaseLock(),r}catch(r){throw t.releaseLock(),r}},async return(){let r=t.cancel();return t.releaseLock(),await r,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}var ed=class e{constructor(t,r){this.iterator=t,this.controller=r}static fromSSEResponse(t,r){let n=!1;async function*a(){if(n)throw new Error("Cannot iterate over a consumed stream, use .tee() to split the stream.");n=!0;let i=!1;try{for await(let o of dVe(t,r))if(!i){if(o.data.startsWith("[DONE]")){i=!0;continue}if(o.event===null||o.event.startsWith("response.")||o.event.startsWith("transcript.")){let s;try{s=JSON.parse(o.data)}catch(u){throw console.error("Could not parse message into JSON:",o.data),console.error("From chunk:",o.raw),u}if(s&&s.error)throw new xi(void 0,s.error,void 0,BL(t.headers));yield s}else{let s;try{s=JSON.parse(o.data)}catch(u){throw console.error("Could not parse message into JSON:",o.data),console.error("From chunk:",o.raw),u}if(o.event=="error")throw new xi(void 0,s.error,s.message,void 0);yield{event:o.event,data:s}}}i=!0}catch(o){if(o instanceof Error&&o.name==="AbortError")return;throw o}finally{i||r.abort()}}return new e(a,r)}static fromReadableStream(t,r){let n=!1;async function*a(){let o=new Ph,s=OL(t);for await(let u of s)for(let p of o.decode(u))yield p;for(let u of o.flush())yield u}async function*i(){if(n)throw new Error("Cannot iterate over a consumed stream, use .tee() to split the stream.");n=!0;let o=!1;try{for await(let s of a())o||s&&(yield JSON.parse(s));o=!0}catch(s){if(s instanceof Error&&s.name==="AbortError")return;throw s}finally{o||r.abort()}}return new e(i,r)}[Symbol.asyncIterator](){return this.iterator()}tee(){let t=[],r=[],n=this.iterator(),a=i=>({next:()=>{if(i.length===0){let o=n.next();t.push(o),r.push(o)}return i.shift()}});return[new e(()=>a(t),this.controller),new e(()=>a(r),this.controller)]}toReadableStream(){let t=this,r,n=new TextEncoder;return new yB({async start(){r=t[Symbol.asyncIterator]()},async pull(a){try{let{value:i,done:o}=await r.next();if(o)return a.close();let s=n.encode(JSON.stringify(i)+

e [Error]: Provider returned error
at e.a [as iterator] (file:///opt/homebrew/lib/node_modules/@openai/codex/dist/cli.js:582:1289)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async Hze (file:///opt/homebrew/lib/node_modules/@openai/codex/dist/cli.js:425:7597)
at async Sy.run (file:///opt/homebrew/lib/node_modules/@openai/codex/dist/cli.js:599:2785) {
status: undefined,
headers: {
'access-control-allow-origin': '*',
'cache-control': 'no-cache',
'cf-ray': '941043939f5ed5cc-NRT',
connection: 'keep-alive',
'content-type': 'text/event-stream',
date: 'Sat, 17 May 2025 04:10:15 GMT',
server: 'cloudflare',
'transfer-encoding': 'chunked',
vary: 'Accept-Encoding',
'x-clerk-auth-message': 'Invalid JWT form. A JWT consists of three parts separated by dots. (reason=token-invalid, token-carrier=header)',
'x-clerk-auth-reason': 'token-invalid',
'x-clerk-auth-status': 'signed-out'
},
request_id: undefined,
error: {
message: 'Provider returned error',
code: 400,
metadata: {
raw: '{\n' +
' "error": {\n' +
"message": "Missing required parameter: 'tools[0].name'.",\n +
' "type": "invalid_request_error",\n' +
' "param": "tools[0].name",\n' +
' "code": "missing_required_parameter"\n' +
' }\n' +
'}',
provider_name: 'OpenAI'
}
},
code: 400,
param: undefined,
type: undefined
}

Node.js v23.11.0

What is the expected behavior?

_No response_

What do you see instead?

_No response_

Additional information

_No response_

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗