From c89b0e12358350f81238d2e3864140bc792eb15b Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Tue, 30 Sep 2025 10:22:14 -0700 Subject: [PATCH] [SDK] Test that a tread can be continued with extra params (#4508) --- sdk/typescript/tests/responsesProxy.ts | 1 + sdk/typescript/tests/run.test.ts | 46 ++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/sdk/typescript/tests/responsesProxy.ts b/sdk/typescript/tests/responsesProxy.ts index 5c7815b53..7fcdc9c71 100644 --- a/sdk/typescript/tests/responsesProxy.ts +++ b/sdk/typescript/tests/responsesProxy.ts @@ -25,6 +25,7 @@ export type ResponsesProxy = { }; export type ResponsesApiRequest = { + model?: string; input: Array<{ role: string; content?: Array<{ type: string; text: string }>; diff --git a/sdk/typescript/tests/run.test.ts b/sdk/typescript/tests/run.test.ts index 093adee40..67b1f3d2c 100644 --- a/sdk/typescript/tests/run.test.ts +++ b/sdk/typescript/tests/run.test.ts @@ -85,6 +85,52 @@ describe("Codex", () => { } }); + it("continues the thread when run is called twice with options", async () => { + const { url, close, requests } = await startResponsesTestProxy({ + statusCode: 200, + responseBodies: [ + sse( + responseStarted("response_1"), + assistantMessage("First response", "item_1"), + responseCompleted("response_1"), + ), + sse( + responseStarted("response_2"), + assistantMessage("Second response", "item_2"), + responseCompleted("response_2"), + ), + ], + }); + + try { + const client = new Codex({ executablePath: codexExecPath, baseUrl: url, apiKey: "test" }); + + const thread = client.startThread(); + await thread.run("first input"); + await thread.run("second input", { + model: "gpt-test-1", + }); + + // Check second request continues the same thread + expect(requests.length).toBeGreaterThanOrEqual(2); + const secondRequest = requests[1]; + expect(secondRequest).toBeDefined(); + const payload = secondRequest!.json; + + expect(payload.model).toBe("gpt-test-1"); + const assistantEntry = payload.input.find( + (entry: { role: string }) => entry.role === "assistant", + ); + expect(assistantEntry).toBeDefined(); + const assistantText = assistantEntry?.content?.find( + (item: { type: string; text: string }) => item.type === "output_text", + )?.text; + expect(assistantText).toBe("First response"); + } finally { + await close(); + } + }); + it("resumes thread by id", async () => { const { url, close, requests } = await startResponsesTestProxy({ statusCode: 200,