@@ -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-
6560describeLive ( "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