forked from Archives/langchain
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
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"
|