mirror of
https://github.com/hwchase17/langchain.git
synced 2025-06-05 22:53:30 +00:00
when the LLMs output 'yes|no',BooleanOutputParser can parse it to 'True|False', fix the ValueError in parse(). <!-- when use the BooleanOutputParser in the chain_filter.py, the LLMs output 'yes|no',the function 'parse' will throw ValueError。 --> Fixes # (issue) #5396 https://github.com/hwchase17/langchain/issues/5396 --------- Co-authored-by: gaofeng27692 <gaofeng27692@hundsun.com>
30 lines
892 B
Python
30 lines
892 B
Python
from langchain.schema import BaseOutputParser
|
|
|
|
|
|
class BooleanOutputParser(BaseOutputParser[bool]):
|
|
true_val: str = "YES"
|
|
false_val: str = "NO"
|
|
|
|
def parse(self, text: str) -> bool:
|
|
"""Parse the output of an LLM call to a boolean.
|
|
|
|
Args:
|
|
text: output of language model
|
|
|
|
Returns:
|
|
boolean
|
|
|
|
"""
|
|
cleaned_text = text.strip()
|
|
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.upper() == self.true_val.upper()
|
|
|
|
@property
|
|
def _type(self) -> str:
|
|
"""Snake-case string identifier for output parser type."""
|
|
return "boolean_output_parser"
|