Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions nodejs/test/e2e/rpc_session_state.e2e.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,30 @@ describe("Session-scoped RPC", async () => {
const before = await session.rpc.model.getCurrent();
expect(before.modelId).toBeTruthy();

const result = await session.rpc.model.switchTo({
// Subscribe before triggering the switch so a fast model_change event
// can't fire before the listener is registered (the original race).
const eventPromise = waitForEvent(
session,
(event): event is Extract<SessionEvent, { type: "session.model_change" }> =>
event.type === "session.model_change",
"session.model_change event after switchTo"
);

const switchPromise = session.rpc.model.switchTo({
modelId: "gpt-4.1",
reasoningEffort: "high",
});

const [result, event] = await Promise.all([switchPromise, eventPromise]);
const after = await session.rpc.model.getCurrent();

expect(result.modelId).toBe("gpt-4.1");
expect(after.modelId).toBe(before.modelId);
// Don't hard-code the resolved model: environments without auth fall
// back to a default. Assert the switchTo result and the model_change
// event agree (same server operation), and that getCurrent stays
// readable -- switchTo does not synchronously update it.
expect(result.modelId).toBeTruthy();
Comment thread
Morabbin marked this conversation as resolved.
expect(event.data.newModel).toBe(result.modelId);
expect(after.modelId).toBeTruthy();

await session.disconnect();
});
Expand Down
Loading