mirror of
https://github.com/hwchase17/langchain.git
synced 2025-07-08 06:00:41 +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 (
|
from langchain.output_parsers.list import (
|
||||||
CommaSeparatedListOutputParser,
|
CommaSeparatedListOutputParser,
|
||||||
ListOutputParser,
|
ListOutputParser,
|
||||||
|
MarkdownListOutputParser,
|
||||||
NumberedListOutputParser,
|
NumberedListOutputParser,
|
||||||
)
|
)
|
||||||
from langchain.output_parsers.pydantic import PydanticOutputParser
|
from langchain.output_parsers.pydantic import PydanticOutputParser
|
||||||
@ -38,6 +39,7 @@ __all__ = [
|
|||||||
"EnumOutputParser",
|
"EnumOutputParser",
|
||||||
"GuardrailsOutputParser",
|
"GuardrailsOutputParser",
|
||||||
"ListOutputParser",
|
"ListOutputParser",
|
||||||
|
"MarkdownListOutputParser",
|
||||||
"NumberedListOutputParser",
|
"NumberedListOutputParser",
|
||||||
"OutputFixingParser",
|
"OutputFixingParser",
|
||||||
"PydanticOutputParser",
|
"PydanticOutputParser",
|
||||||
|
@ -61,3 +61,19 @@ class NumberedListOutputParser(ListOutputParser):
|
|||||||
@property
|
@property
|
||||||
def _type(self) -> str:
|
def _type(self) -> str:
|
||||||
return "numbered-list"
|
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 (
|
from langchain.output_parsers.list import (
|
||||||
CommaSeparatedListOutputParser,
|
CommaSeparatedListOutputParser,
|
||||||
|
MarkdownListOutputParser,
|
||||||
NumberedListOutputParser,
|
NumberedListOutputParser,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -30,3 +31,19 @@ def test_numbered_list() -> None:
|
|||||||
assert parser.parse(text1) == ["foo", "bar", "baz"]
|
assert parser.parse(text1) == ["foo", "bar", "baz"]
|
||||||
assert parser.parse(text2) == ["apple", "banana", "cherry"]
|
assert parser.parse(text2) == ["apple", "banana", "cherry"]
|
||||||
assert parser.parse(text3) == []
|
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