class MiniProgramStreaming: streaming_mode = "block" preview_stream_throttle_ms = 160 preview_min_initial_chars = 18 block_streaming_enabled = True block_streaming_break = "text_end" block_streaming_chunk_min_chars = 200 block_streaming_chunk_max_chars = 1200 block_streaming_chunk_break_preference = "paragraph" block_streaming_coalesce_defaults = { "min_chars": 80, "max_chars": 400, "idle_ms": 500, } finish_mark = "[↓]" def create_draft_stream_session(self, target_id: str) -> object: return {"target_id": target_id, "mode": "block"} def create_block_chunker(self) -> object: return { "mode": "length", "min_chars": self.block_streaming_chunk_min_chars, "max_chars": self.block_streaming_chunk_max_chars, } def should_stream(self, estimated_length: int) -> bool: return estimated_length > self.block_streaming_chunk_min_chars def build_chunk(self, text: str, is_final: bool) -> str: if is_final: return text return f"{text}\n{self.finish_mark}"