@@ -7,6 +7,11 @@ import { describe, expect, test } from "bun:test";
77import { readFileSync } from "node:fs" ;
88import { join } from "node:path" ;
99import { createCodexResponsesAdapter } from "./codex-responses.js" ;
10+ import { createOpenAIResponsesAdapter } from "./openai-responses.js" ;
11+ import { createGrokResponsesAdapter } from "./grok-responses.js" ;
12+ import { createInferenceDependencies } from "./inference-dependencies.js" ;
13+ import { META_PROVIDER } from "@corbits/meta-provider" ;
14+ import type { ProviderAdapter } from "@intx/inference" ;
1015import type { InferenceEvent , LastCycleSource } from "@intx/types/runtime" ;
1116import { defined } from "../../testkit/defined.js" ;
1217import { ProtocolMismatchError } from "@intx/inference" ;
@@ -29,8 +34,10 @@ function loadFixture(name: string): object[] {
2934}
3035
3136/** Parse a full fixture stream with one adapter instance (shared indexer). */
32- function parseFixture ( name : string ) : InferenceEvent [ ] {
33- const adapter = createCodexResponsesAdapter ( SOURCE ) ;
37+ function parseFixture (
38+ name : string ,
39+ adapter : ProviderAdapter = createCodexResponsesAdapter ( SOURCE ) ,
40+ ) : InferenceEvent [ ] {
3441 const out : InferenceEvent [ ] = [ ] ;
3542 for ( const event of loadFixture ( name ) ) {
3643 out . push ( ...adapter . parseResponse ( JSON . stringify ( event ) ) ) ;
@@ -212,24 +219,58 @@ describe("codex-sse fixtures (golden parse)", () => {
212219 expect ( String ( error ) ) . toMatch ( / f i x t u r e s t r e a m e r r o r \( s a n i t i z e d \) / ) ;
213220 } ) ;
214221
215- test ( "parallel calls whose arguments arrive only on done still carry their arguments" , ( ) => {
216- const out = parseFixture ( "parallel-tools-arguments-on-done.json" ) ;
222+ test ( "parallel calls whose arguments arrive only on done still carry their arguments across all Responses adapters" , async ( ) => {
223+ const deps = await createInferenceDependencies ( ) ;
224+ const adapters : [ string , ProviderAdapter ] [ ] = [
225+ [ "codex-responses" , createCodexResponsesAdapter ( SOURCE ) ] ,
226+ [
227+ "openai-responses" ,
228+ createOpenAIResponsesAdapter ( {
229+ sourceId : "go/fixture" ,
230+ provider : "openai-responses" ,
231+ model : "gpt-fixture" ,
232+ } ) ,
233+ ] ,
234+ [
235+ "grok-responses" ,
236+ createGrokResponsesAdapter ( {
237+ sourceId : "xai/fixture" ,
238+ provider : "grok-responses" ,
239+ model : "grok-fixture" ,
240+ } ) ,
241+ ] ,
242+ [
243+ "meta-responses" ,
244+ deps . adapters . resolve ( {
245+ sourceId : "meta/fixture" ,
246+ provider : META_PROVIDER ,
247+ model : "llama-fixture" ,
248+ } ) ,
249+ ] ,
250+ ] ;
217251
218- expect ( eventTypes ( out ) ) . toEqual ( [
219- "inference.tool_call.start" ,
220- "inference.tool_call.delta" ,
221- "inference.tool_call.start" ,
222- "inference.tool_call.delta" ,
223- "inference.usage" ,
224- ] ) ;
225- expect ( out [ 1 ] ) . toMatchObject ( {
226- type : "inference.tool_call.delta" ,
227- data : { callId : "0" , argumentFragment : '{"path":"a.txt"}' , index : 0 } ,
228- } ) ;
229- expect ( out [ 3 ] ) . toMatchObject ( {
230- type : "inference.tool_call.delta" ,
231- data : { callId : "1" , argumentFragment : '{"path":"b.txt"}' , index : 1 } ,
232- } ) ;
252+ for ( const [ label , adapter ] of adapters ) {
253+ const out = parseFixture (
254+ "parallel-tools-arguments-on-done.json" ,
255+ adapter ,
256+ ) ;
257+
258+ expect ( eventTypes ( out ) , label ) . toEqual ( [
259+ "inference.tool_call.start" ,
260+ "inference.tool_call.delta" ,
261+ "inference.tool_call.start" ,
262+ "inference.tool_call.delta" ,
263+ "inference.usage" ,
264+ ] ) ;
265+ expect ( out [ 1 ] , label ) . toMatchObject ( {
266+ type : "inference.tool_call.delta" ,
267+ data : { callId : "0" , argumentFragment : '{"path":"a.txt"}' , index : 0 } ,
268+ } ) ;
269+ expect ( out [ 3 ] , label ) . toMatchObject ( {
270+ type : "inference.tool_call.delta" ,
271+ data : { callId : "1" , argumentFragment : '{"path":"b.txt"}' , index : 1 } ,
272+ } ) ;
273+ }
233274 } ) ;
234275
235276 test ( "lifecycle envelopes alone produce no InferenceEvents" , ( ) => {
0 commit comments