From e31705b5ab9a1ae4ae921531dd1cc25bbea28acd Mon Sep 17 00:00:00 2001 From: Blithe Date: Wed, 31 May 2023 07:26:17 +0800 Subject: [PATCH] convert the parameter 'text' to uppercase in the function 'parse' of the class BooleanOutputParser (#5397) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit when the LLMs output 'yes|no',BooleanOutputParser can parse it to 'True|False', fix the ValueError in parse(). Fixes # (issue) #5396 https://github.com/hwchase17/langchain/issues/5396 --------- Co-authored-by: gaofeng27692 --- langchain/output_parsers/boolean.py | 4 ++-- tests/unit_tests/output_parsers/test_boolean_parser.py | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/langchain/output_parsers/boolean.py b/langchain/output_parsers/boolean.py index 40890a9d..96f61252 100644 --- a/langchain/output_parsers/boolean.py +++ b/langchain/output_parsers/boolean.py @@ -16,12 +16,12 @@ class BooleanOutputParser(BaseOutputParser[bool]): """ cleaned_text = text.strip() - if cleaned_text not in (self.true_val, self.false_val): + if cleaned_text.upper() not in (self.true_val.upper(), self.false_val.upper()): raise ValueError( f"BooleanOutputParser expected output value to either be " f"{self.true_val} or {self.false_val}. Received {cleaned_text}." ) - return cleaned_text == self.true_val + return cleaned_text.upper() == self.true_val.upper() @property def _type(self) -> str: diff --git a/tests/unit_tests/output_parsers/test_boolean_parser.py b/tests/unit_tests/output_parsers/test_boolean_parser.py index 3daaf610..8804c363 100644 --- a/tests/unit_tests/output_parsers/test_boolean_parser.py +++ b/tests/unit_tests/output_parsers/test_boolean_parser.py @@ -12,6 +12,14 @@ def test_boolean_output_parser_parse() -> None: result = parser.parse("NO") assert result is False + # Test valid input + result = parser.parse("yes") + assert result is True + + # Test valid input + result = parser.parse("no") + assert result is False + # Test invalid input try: parser.parse("INVALID")