@@ -44,6 +44,7 @@ function findModelSpans(
4444
4545export function defineOpenAIAgentsAutoInstrumentationAssertions ( options : {
4646 name : string ;
47+ hasTurnSpans : boolean ;
4748 runScenario : RunOpenAIAgentsScenario ;
4849 snapshotName : string ;
4950 testFileUrl : string ;
@@ -76,13 +77,19 @@ export function defineOpenAIAgentsAutoInstrumentationAssertions(options: {
7677 "Agent workflow" ,
7778 operation ?. span . id ,
7879 ) ;
79- const agent = findLatestChildSpan (
80+ const task = options . hasTurnSpans
81+ ? findLatestChildSpan ( events , "Agent workflow" , workflow ?. span . id )
82+ : workflow ;
83+ const agent = findLatestChildSpan ( events , AGENT_NAME , task ?. span . id ) ;
84+ const turns = findChildSpans ( events , "Turn" , agent ?. span . id ) ;
85+ const modelSpans = options . hasTurnSpans
86+ ? turns . flatMap ( ( turn ) => findModelSpans ( events , turn . span . id ) )
87+ : findModelSpans ( events , agent ?. span . id ) ;
88+ const toolSpan = findLatestChildSpan (
8089 events ,
81- AGENT_NAME ,
82- workflow ?. span . id ,
90+ TOOL_NAME ,
91+ options . hasTurnSpans ? turns [ 0 ] ?. span . id : agent ?. span . id ,
8392 ) ;
84- const modelSpans = findModelSpans ( events , agent ?. span . id ) ;
85- const toolSpan = findLatestChildSpan ( events , TOOL_NAME , agent ?. span . id ) ;
8693
8794 expect ( root ) . toBeDefined ( ) ;
8895 expect ( root ?. row . metadata ) . toMatchObject ( {
@@ -95,6 +102,38 @@ export function defineOpenAIAgentsAutoInstrumentationAssertions(options: {
95102 expect ( workflow ?. span . type ) . toBe ( "task" ) ;
96103 expect ( workflow ?. span . parentIds ) . toEqual ( [ operation ?. span . id ?? "" ] ) ;
97104
105+ if ( options . hasTurnSpans ) {
106+ expect ( task ?. span . type ) . toBe ( "task" ) ;
107+ expect ( task ?. span . parentIds ) . toEqual ( [ workflow ?. span . id ] ) ;
108+ expect ( turns ) . toHaveLength ( 2 ) ;
109+ for ( const [ index , turn ] of turns . entries ( ) ) {
110+ expect ( turn . span . type ) . toBe ( "task" ) ;
111+ expect ( turn . row . metadata ) . toMatchObject ( {
112+ turn : index + 1 ,
113+ agent_name : AGENT_NAME ,
114+ } ) ;
115+ expect ( findModelSpans ( events , turn . span . id ) ) . toHaveLength ( 1 ) ;
116+ }
117+ for ( const parent of [ task , ...turns ] ) {
118+ const children =
119+ parent === task
120+ ? modelSpans
121+ : findModelSpans ( events , parent ?. span . id ) ;
122+ for ( const metric of [
123+ "prompt_tokens" ,
124+ "completion_tokens" ,
125+ "tokens" ,
126+ ] ) {
127+ expect ( parent ?. metrics ?. [ metric ] ) . toBe (
128+ children . reduce (
129+ ( sum , child ) => sum + ( child . metrics ?. [ metric ] as number ) ,
130+ 0 ,
131+ ) ,
132+ ) ;
133+ }
134+ }
135+ }
136+
98137 expect ( agent ) . toBeDefined ( ) ;
99138 expect ( agent ?. span . type ) . toBe ( "task" ) ;
100139 expect ( agent ?. row . metadata ) . toMatchObject ( {
@@ -105,7 +144,9 @@ export function defineOpenAIAgentsAutoInstrumentationAssertions(options: {
105144 expect ( modelSpans . length ) . toBeGreaterThanOrEqual ( 1 ) ;
106145 for ( const modelSpan of modelSpans ) {
107146 expect ( modelSpan . span . type ) . toBe ( "llm" ) ;
108- expect ( String ( modelSpan . row . metadata ?. model ) ) . toContain ( MODEL_NAME ) ;
147+ expect ( modelSpan . row . metadata ) . toMatchObject ( {
148+ model : expect . stringContaining ( MODEL_NAME ) ,
149+ } ) ;
109150 expect ( modelSpan . metrics ) . toMatchObject ( {
110151 completion_tokens : expect . any ( Number ) ,
111152 prompt_tokens : expect . any ( Number ) ,
0 commit comments