Home / Class/ BaseCumulativeTransformOutputParser Class — langchain Architecture

BaseCumulativeTransformOutputParser Class — langchain Architecture

Architecture documentation for the BaseCumulativeTransformOutputParser class in transform.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  cd116ff8_eeee_c962_fbf2_a4040e45e224["BaseCumulativeTransformOutputParser"]
  d352e00a_ad20_d713_0d6d_0341e774180d["BaseMessageChunk"]
  cd116ff8_eeee_c962_fbf2_a4040e45e224 -->|extends| d352e00a_ad20_d713_0d6d_0341e774180d
  abb7c122_ee7b_4c8f_ffaa_3d3d63c4fab7["BaseMessage"]
  cd116ff8_eeee_c962_fbf2_a4040e45e224 -->|extends| abb7c122_ee7b_4c8f_ffaa_3d3d63c4fab7
  0950e8df_541d_4e44_47cf_a4e7e458893f["transform.py"]
  cd116ff8_eeee_c962_fbf2_a4040e45e224 -->|defined in| 0950e8df_541d_4e44_47cf_a4e7e458893f
  384cee5b_46cc_97df_297f_6b4f798bb585["_diff()"]
  cd116ff8_eeee_c962_fbf2_a4040e45e224 -->|method| 384cee5b_46cc_97df_297f_6b4f798bb585
  2008ec55_bc9f_147f_6d4b_6628aad4262f["_transform()"]
  cd116ff8_eeee_c962_fbf2_a4040e45e224 -->|method| 2008ec55_bc9f_147f_6d4b_6628aad4262f
  94601f14_0265_2450_4c62_273abeb4c9cf["_atransform()"]
  cd116ff8_eeee_c962_fbf2_a4040e45e224 -->|method| 94601f14_0265_2450_4c62_273abeb4c9cf

Relationship Graph

Source Code

libs/core/langchain_core/output_parsers/transform.py lines 99–175

class BaseCumulativeTransformOutputParser(BaseTransformOutputParser[T]):
    """Base class for an output parser that can handle streaming input."""

    diff: bool = False
    """In streaming mode, whether to yield diffs between the previous and current parsed
    output, or just the current parsed output.
    """

    def _diff(
        self,
        prev: T | None,
        next: T,  # noqa: A002
    ) -> T:
        """Convert parsed outputs into a diff format.

        The semantics of this are up to the output parser.

        Args:
            prev: The previous parsed output.
            next: The current parsed output.

        Returns:
            The diff between the previous and current parsed output.
        """
        raise NotImplementedError

    @override
    def _transform(self, input: Iterator[str | BaseMessage]) -> Iterator[Any]:
        prev_parsed = None
        acc_gen: GenerationChunk | ChatGenerationChunk | None = None
        for chunk in input:
            chunk_gen: GenerationChunk | ChatGenerationChunk
            if isinstance(chunk, BaseMessageChunk):
                chunk_gen = ChatGenerationChunk(message=chunk)
            elif isinstance(chunk, BaseMessage):
                chunk_gen = ChatGenerationChunk(
                    message=BaseMessageChunk(**chunk.model_dump())
                )
            else:
                chunk_gen = GenerationChunk(text=chunk)

            acc_gen = chunk_gen if acc_gen is None else acc_gen + chunk_gen  # type: ignore[operator]

            parsed = self.parse_result([acc_gen], partial=True)
            if parsed is not None and parsed != prev_parsed:
                if self.diff:
                    yield self._diff(prev_parsed, parsed)
                else:
                    yield parsed
                prev_parsed = parsed

    @override
    async def _atransform(
        self, input: AsyncIterator[str | BaseMessage]
    ) -> AsyncIterator[T]:
        prev_parsed = None
        acc_gen: GenerationChunk | ChatGenerationChunk | None = None
        async for chunk in input:
            chunk_gen: GenerationChunk | ChatGenerationChunk
            if isinstance(chunk, BaseMessageChunk):
                chunk_gen = ChatGenerationChunk(message=chunk)
            elif isinstance(chunk, BaseMessage):
                chunk_gen = ChatGenerationChunk(
                    message=BaseMessageChunk(**chunk.model_dump())
                )
            else:
                chunk_gen = GenerationChunk(text=chunk)

            acc_gen = chunk_gen if acc_gen is None else acc_gen + chunk_gen  # type: ignore[operator]

            parsed = await self.aparse_result([acc_gen], partial=True)
            if parsed is not None and parsed != prev_parsed:
                if self.diff:
                    yield await run_in_executor(None, self._diff, prev_parsed, parsed)
                else:
                    yield parsed
                prev_parsed = parsed

Frequently Asked Questions

What is the BaseCumulativeTransformOutputParser class?
BaseCumulativeTransformOutputParser is a class in the langchain codebase, defined in libs/core/langchain_core/output_parsers/transform.py.
Where is BaseCumulativeTransformOutputParser defined?
BaseCumulativeTransformOutputParser is defined in libs/core/langchain_core/output_parsers/transform.py at line 99.
What does BaseCumulativeTransformOutputParser extend?
BaseCumulativeTransformOutputParser extends BaseMessageChunk, BaseMessage.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free