mirror of
https://github.com/hwchase17/langchain.git
synced 2025-07-08 14:05:16 +00:00
feat: add markdown list parser (#11411)
**Description:** add `MarkdownListOutputParser` as a new `ListOutputParser` **Issue:** #11410
This commit is contained in:
parent
8f50b616c5
commit
872836c541
@ -20,6 +20,7 @@ from langchain.output_parsers.fix import OutputFixingParser
|
||||
from langchain.output_parsers.list import (
|
||||
CommaSeparatedListOutputParser,
|
||||
ListOutputParser,
|
||||
MarkdownListOutputParser,
|
||||
NumberedListOutputParser,
|
||||
)
|
||||
from langchain.output_parsers.pydantic import PydanticOutputParser
|
||||
@ -38,6 +39,7 @@ __all__ = [
|
||||
"EnumOutputParser",
|
||||
"GuardrailsOutputParser",
|
||||
"ListOutputParser",
|
||||
"MarkdownListOutputParser",
|
||||
"NumberedListOutputParser",
|
||||
"OutputFixingParser",
|
||||
"PydanticOutputParser",
|
||||
|
@ -61,3 +61,19 @@ class NumberedListOutputParser(ListOutputParser):
|
||||
@property
|
||||
def _type(self) -> str:
|
||||
return "numbered-list"
|
||||
|
||||
|
||||
class MarkdownListOutputParser(ListOutputParser):
|
||||
"""Parse a markdown list."""
|
||||
|
||||
def get_format_instructions(self) -> str:
|
||||
return "Your response should be a markdown list, " "eg: `- foo\n- bar\n- baz`"
|
||||
|
||||
def parse(self, text: str) -> List[str]:
|
||||
"""Parse the output of an LLM call."""
|
||||
pattern = r"-\s([^\n]+)"
|
||||
return re.findall(pattern, text)
|
||||
|
||||
@property
|
||||
def _type(self) -> str:
|
||||
return "markdown-list"
|
||||
|
@ -1,5 +1,6 @@
|
||||
from langchain.output_parsers.list import (
|
||||
CommaSeparatedListOutputParser,
|
||||
MarkdownListOutputParser,
|
||||
NumberedListOutputParser,
|
||||
)
|
||||
|
||||
@ -30,3 +31,19 @@ def test_numbered_list() -> None:
|
||||
assert parser.parse(text1) == ["foo", "bar", "baz"]
|
||||
assert parser.parse(text2) == ["apple", "banana", "cherry"]
|
||||
assert parser.parse(text3) == []
|
||||
|
||||
|
||||
def test_markdown_list() -> None:
|
||||
parser = MarkdownListOutputParser()
|
||||
text1 = (
|
||||
"Your response should be a numbered list with each item on a new line."
|
||||
"For example: \n- foo\n- bar\n- baz"
|
||||
)
|
||||
|
||||
text2 = "Items:\n- apple\n- banana\n- cherry"
|
||||
|
||||
text3 = "No items in the list."
|
||||
|
||||
assert parser.parse(text1) == ["foo", "bar", "baz"]
|
||||
assert parser.parse(text2) == ["apple", "banana", "cherry"]
|
||||
assert parser.parse(text3) == []
|
||||
|
Loading…
Reference in New Issue
Block a user