from __future__ import annotations import logging from yuxi.channel.extensions.mattermost.format import ( safe_split_markdown, truncate_markdown, ) logger = logging.getLogger(__name__) class MattermostDeliveryAdapter: def __init__(self, chunk_limit: int = 4000, chunk_mode: str = "length"): self.chunk_limit = chunk_limit self.chunk_mode = chunk_mode def split_for_delivery(self, content: str) -> list[str]: if len(content) <= self.chunk_limit: return [content] if self.chunk_mode == "newline": return self._split_by_newline(content) return safe_split_markdown(content, self.chunk_limit) def _split_by_newline(self, content: str) -> list[str]: chunks: list[str] = [] lines = content.split("\n") current = "" for line in lines: if len(current) + len(line) + 1 > self.chunk_limit: if current: chunks.append(current.rstrip()) current = line else: if current: current += "\n" current += line if current: chunks.append(current) return chunks def format_response(self, content: str, prefix: str | None = None) -> str: if prefix: content = f"{prefix}\n\n{content}" return truncate_markdown(content, self.chunk_limit)