From f74151b4e4f3a44c8e51ef251652c5c64b1ea7cd Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 28 Dec 2023 14:48:53 -0800 Subject: [PATCH] Make all json parsing less strict by default (#15287) - Enables strict=False by default - Uses partial json recovery logic by default --- libs/core/langchain_core/output_parsers/json.py | 4 ++-- libs/langchain/langchain/evaluation/parsing/base.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libs/core/langchain_core/output_parsers/json.py b/libs/core/langchain_core/output_parsers/json.py index 14d70a5c7b42be..caed447068f451 100644 --- a/libs/core/langchain_core/output_parsers/json.py +++ b/libs/core/langchain_core/output_parsers/json.py @@ -114,7 +114,7 @@ def parse_partial_json(s: str, *, strict: bool = False) -> Any: def parse_json_markdown( - json_string: str, *, parser: Callable[[str], Any] = json.loads + json_string: str, *, parser: Callable[[str], Any] = parse_partial_json ) -> dict: """ Parse a JSON string from a Markdown string. @@ -190,7 +190,7 @@ def _diff(self, prev: Optional[Any], next: Any) -> Any: def parse(self, text: str) -> Any: text = text.strip() try: - return parse_json_markdown(text.strip(), parser=parse_partial_json) + return parse_json_markdown(text.strip()) except JSONDecodeError as e: raise OutputParserException(f"Invalid json output: {text}") from e diff --git a/libs/langchain/langchain/evaluation/parsing/base.py b/libs/langchain/langchain/evaluation/parsing/base.py index c3a28f7ce586f2..6a5a49ef45dbad 100644 --- a/libs/langchain/langchain/evaluation/parsing/base.py +++ b/libs/langchain/langchain/evaluation/parsing/base.py @@ -1,4 +1,5 @@ """Evaluators for parsing strings.""" +import json from operator import eq from typing import Any, Callable, Optional, Union, cast @@ -68,7 +69,7 @@ def _evaluate_strings( """ try: - parse_json_markdown(prediction) + parse_json_markdown(prediction, parser=json.loads) return {"score": 1} except Exception as e: return {"score": 0, "reasoning": str(e)}