Skip to content

ccproxy.llms.formatters.common.thinking

ccproxy.llms.formatters.common.thinking

Shared helpers for reasoning/thinking segment handling.

ThinkingSegment dataclass

ThinkingSegment(thinking, signature=None)

Lightweight reasoning segment mirroring Anthropic's ThinkingBlock.

merge_thinking_segments

merge_thinking_segments(segments)

Collapse adjacent segments that share the same signature.

Source code in ccproxy/llms/formatters/common/thinking.py
def merge_thinking_segments(
    segments: Iterable[ThinkingSegment],
) -> list[ThinkingSegment]:
    """Collapse adjacent segments that share the same signature."""

    merged: list[ThinkingSegment] = []
    for segment in segments:
        text = segment.thinking if isinstance(segment.thinking, str) else None
        if not text:
            continue
        signature = segment.signature or None
        if merged and merged[-1].signature == signature:
            merged[-1] = ThinkingSegment(
                thinking=f"{merged[-1].thinking}{text}",
                signature=signature,
            )
        else:
            merged.append(ThinkingSegment(thinking=text, signature=signature))
    return merged