@@ -81,7 +81,9 @@ describe('integrations', () => {
8181 outputMessages : [
8282 { content : MOCK_STRING , role : '' }
8383 ] ,
84- metrics : { input_tokens : MOCK_NUMBER , output_tokens : MOCK_NUMBER , total_tokens : MOCK_NUMBER } ,
84+ metrics : {
85+ input_tokens : MOCK_NUMBER , output_tokens : MOCK_NUMBER , total_tokens : MOCK_NUMBER , reasoning_output_tokens : 0
86+ } ,
8587 modelName : 'gpt-3.5-turbo-instruct:20230824-v2' ,
8688 modelProvider : 'openai' ,
8789 metadata : {
@@ -128,6 +130,7 @@ describe('integrations', () => {
128130 ] ,
129131 metrics : {
130132 cache_read_input_tokens : 0 ,
133+ reasoning_output_tokens : 0 ,
131134 input_tokens : MOCK_NUMBER ,
132135 output_tokens : MOCK_NUMBER ,
133136 total_tokens : MOCK_NUMBER
@@ -161,7 +164,9 @@ describe('integrations', () => {
161164 { text : 'hello world' }
162165 ] ,
163166 outputValue : '[1 embedding(s) returned]' ,
164- metrics : { input_tokens : MOCK_NUMBER , output_tokens : 0 , total_tokens : MOCK_NUMBER } ,
167+ metrics : {
168+ input_tokens : MOCK_NUMBER , output_tokens : 0 , total_tokens : MOCK_NUMBER , reasoning_output_tokens : 0
169+ } ,
165170 modelName : 'text-embedding-ada-002-v2' ,
166171 modelProvider : 'openai' ,
167172 metadata : { encoding_format : 'base64' } ,
@@ -220,6 +225,7 @@ describe('integrations', () => {
220225 tags : { ml_app : 'test' , integration : 'openai' } ,
221226 metrics : {
222227 cache_read_input_tokens : 0 ,
228+ reasoning_output_tokens : 0 ,
223229 input_tokens : MOCK_NUMBER ,
224230 output_tokens : MOCK_NUMBER ,
225231 total_tokens : MOCK_NUMBER
@@ -268,7 +274,12 @@ describe('integrations', () => {
268274 outputMessages : [
269275 { content : '\n\nHello! How can I assist you?' , role : '' }
270276 ] ,
271- metrics : { input_tokens : MOCK_NUMBER , output_tokens : MOCK_NUMBER , total_tokens : MOCK_NUMBER } ,
277+ metrics : {
278+ input_tokens : MOCK_NUMBER ,
279+ output_tokens : MOCK_NUMBER ,
280+ total_tokens : MOCK_NUMBER ,
281+ reasoning_output_tokens : 0
282+ } ,
272283 modelName : 'gpt-3.5-turbo-instruct:20230824-v2' ,
273284 modelProvider : 'openai' ,
274285 metadata : {
@@ -329,6 +340,7 @@ describe('integrations', () => {
329340 ] ,
330341 metrics : {
331342 cache_read_input_tokens : 0 ,
343+ reasoning_output_tokens : 0 ,
332344 input_tokens : MOCK_NUMBER ,
333345 output_tokens : MOCK_NUMBER ,
334346 total_tokens : MOCK_NUMBER
@@ -413,6 +425,7 @@ describe('integrations', () => {
413425 tags : { ml_app : 'test' , integration : 'openai' } ,
414426 metrics : {
415427 cache_read_input_tokens : 0 ,
428+ reasoning_output_tokens : 0 ,
416429 input_tokens : MOCK_NUMBER ,
417430 output_tokens : MOCK_NUMBER ,
418431 total_tokens : MOCK_NUMBER
@@ -599,6 +612,7 @@ describe('integrations', () => {
599612 ] ,
600613 metrics : {
601614 cache_read_input_tokens : 0 ,
615+ reasoning_output_tokens : 0 ,
602616 input_tokens : 1221 ,
603617 output_tokens : 100 ,
604618 total_tokens : 1321
@@ -647,6 +661,7 @@ describe('integrations', () => {
647661 output_tokens : 100 ,
648662 total_tokens : 1320 ,
649663 cache_read_input_tokens : 1152 ,
664+ reasoning_output_tokens : 0
650665 } ,
651666 modelName : 'gpt-4o-2024-08-06' ,
652667 modelProvider : 'openai' ,
@@ -689,7 +704,8 @@ describe('integrations', () => {
689704 input_tokens : MOCK_NUMBER ,
690705 output_tokens : MOCK_NUMBER ,
691706 total_tokens : MOCK_NUMBER ,
692- cache_read_input_tokens : 0
707+ cache_read_input_tokens : 0 ,
708+ reasoning_output_tokens : 0
693709 } ,
694710 modelName : 'gpt-4o-mini-2024-07-18' ,
695711 modelProvider : 'openai' ,
@@ -700,7 +716,6 @@ describe('integrations', () => {
700716 tool_choice : 'auto' ,
701717 truncation : 'disabled' ,
702718 text : { format : { type : 'text' } , verbosity : 'medium' } ,
703- reasoning_tokens : 0 ,
704719 stream : false
705720 } ,
706721 tags : { ml_app : 'test' , integration : 'openai' }
@@ -739,7 +754,8 @@ describe('integrations', () => {
739754 input_tokens : MOCK_NUMBER ,
740755 output_tokens : MOCK_NUMBER ,
741756 total_tokens : MOCK_NUMBER ,
742- cache_read_input_tokens : 0
757+ cache_read_input_tokens : 0 ,
758+ reasoning_output_tokens : 0
743759 } ,
744760 modelName : 'gpt-4o-mini-2024-07-18' ,
745761 modelProvider : 'openai' ,
@@ -750,7 +766,6 @@ describe('integrations', () => {
750766 tool_choice : 'auto' ,
751767 truncation : 'disabled' ,
752768 text : { format : { type : 'text' } , verbosity : 'medium' } ,
753- reasoning_tokens : 0 ,
754769 stream : true
755770 } ,
756771 tags : { ml_app : 'test' , integration : 'openai' }
@@ -957,6 +972,52 @@ describe('integrations', () => {
957972 ] )
958973 } )
959974 } )
975+
976+ it ( 'submits a response span with reasoning tokens' , async function ( ) {
977+ if ( semifies ( realVersion , '<4.87.0' ) ) {
978+ this . skip ( )
979+ }
980+
981+ await openai . responses . create ( {
982+ model : 'gpt-5-mini' ,
983+ input : 'Solve this step by step: What is 15 * 24?' ,
984+ max_output_tokens : 500 ,
985+ stream : false
986+ } )
987+
988+ const { apmSpans, llmobsSpans } = await getEvents ( )
989+ assertLlmObsSpanEvent ( llmobsSpans [ 0 ] , {
990+ span : apmSpans [ 0 ] ,
991+ spanKind : 'llm' ,
992+ name : 'OpenAI.createResponse' ,
993+ inputMessages : [
994+ { role : 'user' , content : 'Solve this step by step: What is 15 * 24?' }
995+ ] ,
996+ outputMessages : [
997+ { role : 'reasoning' , content : MOCK_STRING } ,
998+ { role : 'assistant' , content : MOCK_STRING }
999+ ] ,
1000+ metrics : {
1001+ input_tokens : MOCK_NUMBER ,
1002+ output_tokens : MOCK_NUMBER ,
1003+ total_tokens : MOCK_NUMBER ,
1004+ cache_read_input_tokens : MOCK_NUMBER ,
1005+ reasoning_output_tokens : 128
1006+ } ,
1007+ modelName : 'gpt-5-mini-2025-08-07' ,
1008+ modelProvider : 'openai' ,
1009+ metadata : {
1010+ max_output_tokens : 500 ,
1011+ top_p : 1 ,
1012+ temperature : 1 ,
1013+ tool_choice : 'auto' ,
1014+ truncation : 'disabled' ,
1015+ text : { format : { type : 'text' } , verbosity : 'medium' } ,
1016+ stream : false
1017+ } ,
1018+ tags : { ml_app : 'test' , integration : 'openai' }
1019+ } )
1020+ } )
9601021 } )
9611022 } )
9621023} )
0 commit comments