From 63f2ef8d1cb26e27371516785cedf2659e777227 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 28 Sep 2023 20:20:47 +0100 Subject: [PATCH] Implement str one --- .../langchain/output_parsers/json.py | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/libs/langchain/langchain/output_parsers/json.py b/libs/langchain/langchain/output_parsers/json.py index 0168f1ae36..f512ed6e47 100644 --- a/libs/langchain/langchain/output_parsers/json.py +++ b/libs/langchain/langchain/output_parsers/json.py @@ -172,33 +172,39 @@ class SimpleJsonOutputParser(BaseOutputParser[Any]): return "simple_json_output_parser" -class PartialJsonOutputParser(BaseCumulativeTransformOutputParser[Any]): - from_function_args: bool = False - +class PartialFunctionsJsonOutputParser(BaseCumulativeTransformOutputParser[Any]): @property def _type(self) -> str: - return "partial_json" + return "partial_functions_json" def parse_result(self, result: List[Generation]) -> Any: - if self.from_function_args: - if len(result) != 1: - raise OutputParserException( - f"Expected exactly one result, but got {len(result)}" - ) - generation = result[0] - if not isinstance(generation, ChatGeneration): - raise OutputParserException( - "This output parser can only be used with a chat generation." - ) - message = generation.message - try: - function_call = message.additional_kwargs["function_call"] - except KeyError: - return None - try: - return parse_partial_json(function_call["arguments"]) - except KeyError: - return None + if len(result) != 1: + raise OutputParserException( + f"Expected exactly one result, but got {len(result)}" + ) + generation = result[0] + if not isinstance(generation, ChatGeneration): + raise OutputParserException( + "This output parser can only be used with a chat generation." + ) + message = generation.message + try: + function_call = message.additional_kwargs["function_call"] + except KeyError: + return None + try: + return parse_partial_json(function_call["arguments"]) + except KeyError: + return None def parse(self, text: str) -> Any: pass + + +class PartialJsonOutputParser(BaseCumulativeTransformOutputParser[Any]): + @property + def _type(self) -> str: + return "partial_functions_json" + + def parse(self, text: str) -> Any: + return parse_json_markdown(text)