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
Extends
Source
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