1717
1818import time
1919
20- import msgspec
2120import pytest
2221from inference_endpoint .core .record import (
2322 TOPIC_FRAME_SIZE ,
2928 decode_event_record ,
3029 encode_event_record ,
3130)
31+ from inference_endpoint .core .types import ErrorData , TextModelOutput
3232
3333
3434class TestEventType :
@@ -64,8 +64,7 @@ def test_construction_with_only_event_type_uses_defaults(self):
6464 after = time .monotonic_ns ()
6565 assert before <= record .timestamp_ns <= after
6666 assert record .sample_uuid == ""
67- assert record .data == {}
68- assert isinstance (record .data , dict )
67+ assert record .data is None
6968
7069
7170class TestEncodeEventRecord :
@@ -76,17 +75,16 @@ def test_returns_tuple_of_topic_bytes_padded_and_payload_bytes_with_valid_msgpac
7675 record = EventRecord (
7776 event_type = SampleEventType .ISSUED ,
7877 sample_uuid = "test-uuid" ,
79- data = { "key" : "value" } ,
78+ data = "test-output" ,
8079 )
8180 topic_bytes , payload = encode_event_record (record )
8281 assert isinstance (topic_bytes , bytes )
8382 assert len (topic_bytes ) == TOPIC_FRAME_SIZE
8483 assert topic_bytes .rstrip (b"\x00 " ) == b"sample.issued"
8584 assert isinstance (payload , bytes )
86- decoded = msgspec .msgpack .decode (payload )
87- assert isinstance (decoded , dict )
88- assert decoded .get ("sample_uuid" ) == "test-uuid"
89- assert decoded .get ("data" ) == {"key" : "value" }
85+ decoded = decode_event_record (payload )
86+ assert decoded .sample_uuid == "test-uuid"
87+ assert decoded .data == "test-output"
9088
9189 def test_topic_bytes_padded_matches_event_type_for_session_sample_error (self ):
9290 """Topic is null-padded to TOPIC_FRAME_SIZE for single-frame ZMQ sends."""
@@ -106,37 +104,55 @@ def test_session_event_round_trips_with_all_fields(self):
106104 record = EventRecord (
107105 event_type = SessionEventType .STARTED ,
108106 sample_uuid = "sess-1" ,
109- data = {"session_id" : "abc" },
110107 )
111108 _ , payload = encode_event_record (record )
112109 decoded = decode_event_record (payload )
113110 assert decoded .event_type .topic == SessionEventType .STARTED .topic
114111 assert decoded .sample_uuid == "sess-1"
115- assert decoded .data == { "session_id" : "abc" }
112+ assert decoded .data is None
116113 assert isinstance (decoded .timestamp_ns , int )
117114 assert decoded .timestamp_ns == record .timestamp_ns
118115
119- def test_sample_event_round_trips (self ):
116+ def test_sample_event_round_trips_with_output (self ):
120117 record = EventRecord (
121118 event_type = SampleEventType .COMPLETE ,
122119 sample_uuid = "sample-42" ,
123- data = { "latency_ns" : 1000 } ,
120+ data = "output text" ,
124121 )
125122 _ , payload = encode_event_record (record )
126123 decoded = decode_event_record (payload )
127124 assert decoded .event_type .topic == SampleEventType .COMPLETE .topic
128125 assert decoded .sample_uuid == "sample-42"
129- assert decoded .data == { "latency_ns" : 1000 }
126+ assert decoded .data == "output text"
130127
131- def test_error_event_round_trips_with_defaults (self ):
128+ def test_sample_event_round_trips_with_text_model_output (self ):
129+ record = EventRecord (
130+ event_type = SampleEventType .COMPLETE ,
131+ sample_uuid = "sample-42" ,
132+ data = TextModelOutput (output = "out" , reasoning = "reason" ),
133+ )
134+ _ , payload = encode_event_record (record )
135+ decoded = decode_event_record (payload )
136+ assert decoded .event_type .topic == SampleEventType .COMPLETE .topic
137+ assert decoded .sample_uuid == "sample-42"
138+ assert isinstance (decoded .data , TextModelOutput )
139+ assert decoded .data .output == "out"
140+ assert decoded .data .reasoning == "reason"
141+
142+ def test_error_event_round_trips_with_error_data (self ):
132143 record = EventRecord (
133144 event_type = ErrorEventType .LOADGEN ,
134- data = {"message" : "error details" },
145+ data = ErrorData (
146+ error_type = "LoadgenError" ,
147+ error_message = "error details" ,
148+ ),
135149 )
136150 _ , payload = encode_event_record (record )
137151 decoded = decode_event_record (payload )
138152 assert decoded .event_type .topic == ErrorEventType .LOADGEN .topic
139- assert decoded .data == {"message" : "error details" }
153+ assert isinstance (decoded .data , ErrorData )
154+ assert decoded .data .error_type == "LoadgenError"
155+ assert decoded .data .error_message == "error details"
140156 assert decoded .sample_uuid == ""
141157
142158 def test_record_with_only_event_type_round_trips_with_defaults (self ):
@@ -145,7 +161,7 @@ def test_record_with_only_event_type_round_trips_with_defaults(self):
145161 decoded = decode_event_record (payload )
146162 assert decoded .event_type .topic == SessionEventType .ENDED .topic
147163 assert decoded .sample_uuid == ""
148- assert decoded .data == {}
164+ assert decoded .data is None
149165 assert decoded .timestamp_ns > 0
150166
151167 def test_explicit_timestamp_ns_preserved_round_trip (self ):
@@ -157,12 +173,3 @@ def test_explicit_timestamp_ns_preserved_round_trip(self):
157173 _ , payload = encode_event_record (record )
158174 decoded = decode_event_record (payload )
159175 assert decoded .timestamp_ns == ts
160-
161- def test_nested_and_list_data_round_trips (self ):
162- record = EventRecord (
163- event_type = SampleEventType .TRANSPORT_RECV ,
164- data = {"nested" : {"a" : 1 }, "list" : [1 , 2 , 3 ]},
165- )
166- _ , payload = encode_event_record (record )
167- decoded = decode_event_record (payload )
168- assert decoded .data == {"nested" : {"a" : 1 }, "list" : [1 , 2 , 3 ]}
0 commit comments