26
26
SystemPromptPart ,
27
27
TextPart ,
28
28
TextPartDelta ,
29
+ ThinkingPart ,
29
30
ToolCallPart ,
30
31
ToolReturnPart ,
31
32
UserPromptPart ,
@@ -150,7 +151,7 @@ async def test_instrumented_model(capfire: CaptureLogfire):
150
151
'context' : {'trace_id' : 1 , 'span_id' : 1 , 'is_remote' : False },
151
152
'parent' : None ,
152
153
'start_time' : 1000000000 ,
153
- 'end_time' : 18000000000 ,
154
+ 'end_time' : 16000000000 ,
154
155
'attributes' : {
155
156
'gen_ai.operation.name' : 'chat' ,
156
157
'gen_ai.system' : 'my_system' ,
@@ -284,7 +285,7 @@ async def test_instrumented_model(capfire: CaptureLogfire):
284
285
'index' : 0 ,
285
286
'message' : {
286
287
'role' : 'assistant' ,
287
- 'content' : ' text1' ,
288
+ 'content' : [{ 'kind' : 'text' , 'text' : ' text1'}, { 'kind' : 'text' , 'text' : 'text2' }] ,
288
289
'tool_calls' : [
289
290
{
290
291
'id' : 'tool_call_1' ,
@@ -308,17 +309,6 @@ async def test_instrumented_model(capfire: CaptureLogfire):
308
309
'span_id' : 1 ,
309
310
'trace_flags' : 1 ,
310
311
},
311
- {
312
- 'body' : {'index' : 0 , 'message' : {'role' : 'assistant' , 'content' : 'text2' }},
313
- 'severity_number' : 9 ,
314
- 'severity_text' : None ,
315
- 'attributes' : {'gen_ai.system' : 'my_system' , 'event.name' : 'gen_ai.choice' },
316
- 'timestamp' : 16000000000 ,
317
- 'observed_timestamp' : 17000000000 ,
318
- 'trace_id' : 1 ,
319
- 'span_id' : 1 ,
320
- 'trace_flags' : 1 ,
321
- },
322
312
]
323
313
)
324
314
@@ -641,11 +631,13 @@ async def test_instrumented_model_attributes_mode(capfire: CaptureLogfire):
641
631
'gen_ai.system' : 'my_system' ,
642
632
},
643
633
{
644
- 'event.name' : 'gen_ai.choice' ,
645
634
'index' : 0 ,
646
635
'message' : {
647
636
'role' : 'assistant' ,
648
- 'content' : 'text1' ,
637
+ 'content' : [
638
+ {'kind' : 'text' , 'text' : 'text1' },
639
+ {'kind' : 'text' , 'text' : 'text2' },
640
+ ],
649
641
'tool_calls' : [
650
642
{
651
643
'id' : 'tool_call_1' ,
@@ -660,12 +652,7 @@ async def test_instrumented_model_attributes_mode(capfire: CaptureLogfire):
660
652
],
661
653
},
662
654
'gen_ai.system' : 'my_system' ,
663
- },
664
- {
665
655
'event.name' : 'gen_ai.choice' ,
666
- 'index' : 0 ,
667
- 'message' : {'role' : 'assistant' , 'content' : 'text2' },
668
- 'gen_ai.system' : 'my_system' ,
669
656
},
670
657
]
671
658
)
@@ -879,6 +866,7 @@ def test_messages_without_content(document_content: BinaryContent):
879
866
},
880
867
{
881
868
'role' : 'assistant' ,
869
+ 'content' : [{'kind' : 'text' }],
882
870
'gen_ai.message.index' : 1 ,
883
871
'event.name' : 'gen_ai.assistant.message' ,
884
872
},
@@ -897,6 +885,7 @@ def test_messages_without_content(document_content: BinaryContent):
897
885
},
898
886
{
899
887
'role' : 'assistant' ,
888
+ 'content' : [{'kind' : 'text' }],
900
889
'tool_calls' : [
901
890
{
902
891
'id' : IsStr (),
@@ -935,3 +924,38 @@ def test_messages_without_content(document_content: BinaryContent):
935
924
},
936
925
]
937
926
)
927
+
928
+
929
+ def test_message_with_thinking_parts ():
930
+ messages : list [ModelMessage ] = [
931
+ ModelResponse (parts = [TextPart ('text1' ), ThinkingPart ('thinking1' ), TextPart ('text2' )]),
932
+ ModelResponse (parts = [ThinkingPart ('thinking2' )]),
933
+ ModelResponse (parts = [ThinkingPart ('thinking3' ), TextPart ('text3' )]),
934
+ ]
935
+ settings = InstrumentationSettings ()
936
+ assert [InstrumentedModel .event_to_dict (e ) for e in settings .messages_to_otel_events (messages )] == snapshot (
937
+ [
938
+ {
939
+ 'role' : 'assistant' ,
940
+ 'content' : [
941
+ {'kind' : 'text' , 'text' : 'text1' },
942
+ {'kind' : 'thinking' , 'text' : 'thinking1' },
943
+ {'kind' : 'text' , 'text' : 'text2' },
944
+ ],
945
+ 'gen_ai.message.index' : 0 ,
946
+ 'event.name' : 'gen_ai.assistant.message' ,
947
+ },
948
+ {
949
+ 'role' : 'assistant' ,
950
+ 'content' : [{'kind' : 'thinking' , 'text' : 'thinking2' }],
951
+ 'gen_ai.message.index' : 1 ,
952
+ 'event.name' : 'gen_ai.assistant.message' ,
953
+ },
954
+ {
955
+ 'role' : 'assistant' ,
956
+ 'content' : [{'kind' : 'thinking' , 'text' : 'thinking3' }, {'kind' : 'text' , 'text' : 'text3' }],
957
+ 'gen_ai.message.index' : 2 ,
958
+ 'event.name' : 'gen_ai.assistant.message' ,
959
+ },
960
+ ]
961
+ )
0 commit comments