Skip to content

Commit d961235

Browse files
committed
test(xai): stabilize live wrapper proof
1 parent 0871b9f commit d961235

1 file changed

Lines changed: 25 additions & 45 deletions

File tree

src/agents/xai.live.test.ts

Lines changed: 25 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,6 @@ async function collectDoneMessage(
5757
return doneMessage!;
5858
}
5959

60-
function extractFirstToolCallId(message: AssistantLikeMessage): string | undefined {
61-
const toolCall = message.content.find((block) => block.type === "toolCall");
62-
return toolCall?.id;
63-
}
64-
6560
describeLive("xai live", () => {
6661
it("returns assistant text for Grok 4.3", async () => {
6762
await runXaiLiveCase("complete", async () => {
@@ -83,7 +78,7 @@ describeLive("xai live", () => {
8378
});
8479
}, 30_000);
8580

86-
it("applies xAI tool wrappers on live tool calls", async () => {
81+
it("sends wrapped xAI tool payloads live", async () => {
8782
await runXaiLiveCase("tool-call", async () => {
8883
const model = resolveLiveXaiModel();
8984
expect(model).toBeDefined();
@@ -96,54 +91,39 @@ describeLive("xai live", () => {
9691
parameters: Type.Object({}, { additionalProperties: false }),
9792
};
9893

99-
const prompts = [
100-
"Call the tool `noop` with {}. Do not write any other text.",
101-
"IMPORTANT: Call the tool `noop` with {} and respond only with the tool call.",
102-
"Return only a tool call for `noop` with {}.",
103-
];
104-
105-
let doneMessage: AssistantLikeMessage | undefined;
10694
let capturedPayload: Record<string, unknown> | undefined;
107-
108-
for (const prompt of prompts) {
109-
capturedPayload = undefined;
110-
const stream = agent.streamFn(
111-
model,
112-
{
113-
messages: createSingleUserPromptMessage(prompt),
114-
tools: [noopTool],
115-
},
116-
{
117-
apiKey: XAI_KEY,
118-
maxTokens: 128,
119-
reasoning: "medium",
120-
onPayload: (payload) => {
121-
capturedPayload = payload as Record<string, unknown>;
122-
},
95+
const stream = agent.streamFn(
96+
model,
97+
{
98+
messages: createSingleUserPromptMessage(
99+
"Call the tool `noop` with {} if needed, then finish.",
100+
),
101+
tools: [noopTool],
102+
},
103+
{
104+
apiKey: XAI_KEY,
105+
maxTokens: 128,
106+
reasoning: "medium",
107+
onPayload: (payload) => {
108+
capturedPayload = payload as Record<string, unknown>;
123109
},
124-
);
125-
126-
doneMessage = await collectDoneMessage(
127-
stream as AsyncIterable<{ type: string; message?: AssistantLikeMessage }>,
128-
);
129-
if (extractFirstToolCallId(doneMessage)) {
130-
break;
131-
}
132-
}
110+
},
111+
);
133112

113+
const doneMessage = await collectDoneMessage(
114+
stream as AsyncIterable<{ type: string; message?: AssistantLikeMessage }>,
115+
);
134116
expect(doneMessage).toBeDefined();
135-
expect(extractFirstToolCallId(doneMessage!)).toBeDefined();
136-
if (capturedPayload && Object.hasOwn(capturedPayload, "tool_stream")) {
137-
expect(capturedPayload.tool_stream).toBe(true);
138-
}
117+
expect(capturedPayload).toBeDefined();
118+
expect(capturedPayload?.tool_stream).toBe(true);
139119

140120
const payloadTools = Array.isArray(capturedPayload?.tools)
141121
? (capturedPayload.tools as Array<Record<string, unknown>>)
142122
: [];
123+
expect(payloadTools.length).toBeGreaterThan(0);
143124
const firstFunction = payloadTools[0]?.function;
144-
if (firstFunction && typeof firstFunction === "object") {
145-
expect([undefined, false]).toContain((firstFunction as Record<string, unknown>).strict);
146-
}
125+
expect(firstFunction && typeof firstFunction === "object").toBe(true);
126+
expect([undefined, false]).toContain((firstFunction as Record<string, unknown>).strict);
147127
});
148128
}, 90_000);
149129

0 commit comments

Comments
 (0)