from __future__ import annotations from diffulex.sampling_params import SamplingParams from diffulex.server.protocol import ( ChatInput, PromptInput, ServingDelta, ServingGenerate, ServingReply, serving_command_from_dict, serving_command_to_dict, serving_event_from_dict, serving_event_to_dict, ) def test_serving_generate_protocol_round_trips_chat_input(): command = ServingGenerate( rid="rid-1", input=ChatInput([{"role": "user", "content": "hi"}]), sampling_params=SamplingParams(max_tokens=7, temperature=0.0, max_nfe=16), stream=True, stream_mode="block_append", user="debug-user", created_time=123.0, ) decoded = serving_command_from_dict(serving_command_to_dict(command)) assert isinstance(decoded, ServingGenerate) assert decoded.rid == "rid-1" assert isinstance(decoded.input, ChatInput) assert decoded.input.messages == [{"role": "user", "content": "hi"}] assert decoded.sampling_params.max_tokens == 7 assert decoded.sampling_params.max_nfe == 16 assert decoded.stream is True assert decoded.user == "debug-user" def test_serving_generate_protocol_round_trips_prompt_ids(): command = ServingGenerate( rid="rid-2", input=PromptInput([1, 2, 3]), sampling_params=SamplingParams(max_tokens=3), ) decoded = serving_command_from_dict(serving_command_to_dict(command)) assert isinstance(decoded, ServingGenerate) assert isinstance(decoded.input, PromptInput) assert decoded.input.prompt == [1, 2, 3] assert decoded.stream_mode == "denoise" assert decoded.sampling_params.max_nfe == 512 def test_serving_event_protocol_round_trips_reply_and_delta(): reply = ServingReply(rid="rid-1", text="ok", token_ids=[1, 2], nfe=3, finish_reason="stop") delta = ServingDelta(rid="rid-1", token_offset=0, text="o", token_ids=[1], nfe=1) decoded_reply = serving_event_from_dict(serving_event_to_dict(reply)) decoded_delta = serving_event_from_dict(serving_event_to_dict(delta)) assert decoded_reply == reply assert decoded_delta == delta