Home / Class/ StructuredQueryOutputParser Class — langchain Architecture

StructuredQueryOutputParser Class — langchain Architecture

Architecture documentation for the StructuredQueryOutputParser class in base.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  6605de10_a777_2f31_c097_c8959e1f5cd1["StructuredQueryOutputParser"]
  7225abf9_cc63_55f0_0ae9_9fa5685b39ff["base.py"]
  6605de10_a777_2f31_c097_c8959e1f5cd1 -->|defined in| 7225abf9_cc63_55f0_0ae9_9fa5685b39ff
  8c121d4b_613e_c49b_ff2d_343e311f21b1["parse()"]
  6605de10_a777_2f31_c097_c8959e1f5cd1 -->|method| 8c121d4b_613e_c49b_ff2d_343e311f21b1
  a1a96dfd_ae4c_e804_cc3c_fa1f0626d568["from_components()"]
  6605de10_a777_2f31_c097_c8959e1f5cd1 -->|method| a1a96dfd_ae4c_e804_cc3c_fa1f0626d568

Relationship Graph

Source Code

libs/langchain/langchain_classic/chains/query_constructor/base.py lines 44–111

class StructuredQueryOutputParser(BaseOutputParser[StructuredQuery]):
    """Output parser that parses a structured query."""

    ast_parse: Callable
    """Callable that parses dict into internal representation of query language."""

    @override
    def parse(self, text: str) -> StructuredQuery:
        try:
            expected_keys = ["query", "filter"]
            allowed_keys = ["query", "filter", "limit"]
            parsed = parse_and_check_json_markdown(text, expected_keys)
            if parsed["query"] is None or len(parsed["query"]) == 0:
                parsed["query"] = " "
            if parsed["filter"] == "NO_FILTER" or not parsed["filter"]:
                parsed["filter"] = None
            else:
                parsed["filter"] = self.ast_parse(parsed["filter"])
            if not parsed.get("limit"):
                parsed.pop("limit", None)
            return StructuredQuery(
                **{k: v for k, v in parsed.items() if k in allowed_keys},
            )
        except Exception as e:
            msg = f"Parsing text\n{text}\n raised following error:\n{e}"
            raise OutputParserException(msg) from e

    @classmethod
    def from_components(
        cls,
        allowed_comparators: Sequence[Comparator] | None = None,
        allowed_operators: Sequence[Operator] | None = None,
        allowed_attributes: Sequence[str] | None = None,
        fix_invalid: bool = False,  # noqa: FBT001,FBT002
    ) -> StructuredQueryOutputParser:
        """Create a structured query output parser from components.

        Args:
            allowed_comparators: allowed comparators
            allowed_operators: allowed operators
            allowed_attributes: allowed attributes
            fix_invalid: whether to fix invalid filter directives

        Returns:
            a structured query output parser
        """
        ast_parse: Callable
        if fix_invalid:

            def ast_parse(raw_filter: str) -> FilterDirective | None:
                filter_directive = cast(
                    "FilterDirective | None",
                    get_parser().parse(raw_filter),
                )
                return fix_filter_directive(
                    filter_directive,
                    allowed_comparators=allowed_comparators,
                    allowed_operators=allowed_operators,
                    allowed_attributes=allowed_attributes,
                )

        else:
            ast_parse = get_parser(
                allowed_comparators=allowed_comparators,
                allowed_operators=allowed_operators,
                allowed_attributes=allowed_attributes,
            ).parse
        return cls(ast_parse=ast_parse)

Frequently Asked Questions

What is the StructuredQueryOutputParser class?
StructuredQueryOutputParser is a class in the langchain codebase, defined in libs/langchain/langchain_classic/chains/query_constructor/base.py.
Where is StructuredQueryOutputParser defined?
StructuredQueryOutputParser is defined in libs/langchain/langchain_classic/chains/query_constructor/base.py at line 44.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free