Skip to main content

XML parsing for LLM outputs

Project description

llmxml - XML parsing for LLM outputs

MIT License PyPI package

Sponsored by Speck Speck

XML outputs are a common format for LLM outputs, but they are not always easy to parse. This package provides a way to parse XML outputs into Pydantic models.

This supports nested models, lists, and unions as well as partial parsing for streamed responses. llmxml also supports generating a prompt template for the XML schema to pass to the LLM.

Parser Demo

Usage

Parsing XML

from llmxml import parse_xml, generate_prompt_template
from pydantic import BaseModel, Field

class Movie(BaseModel):
    title: str = Field(..., description="The title of the movie")
    director: str = Field(..., description="The director of the movie")

class Response(BaseModel):
    movies: list[Movie] = Field(
        ..., description="A list of movies that match the query"
    )

class ResponseObject(BaseModel):
    response: Response = Field(
        ..., description="The response object that contains the movies"
    )

xml: str = """
<response>
    <movies>
        <movie>
            <title>The Matrix</title>
            <director>The Wachowskis</director>
        </movie>
    </movies>
</response>
"""

result: ResponseObject = parse_xml(ResponseObject, xml)
print(result)

Output:

response=Response(movies=[Movie(title='The Matrix', director='The Wachowskis')])

Generating a prompt template

prompt: str = generate_prompt_template(
    model=Response, include_instructions=True  # Default is true
)
print(prompt)

Output:

<response_instructions>
You are to understand the content and provide the parsed objects in xml that match the following xml_schema:

Make sure to return an instance of the XML, not the schema itself

Each field in the field_schema has a description and a type.
Example:
<field_name>
[type]
[description]
</field_name>

Schema:
<movies>
[type: list]
[A list of movies]
</movies>
</response_instructions>

Development

Running tests

$ uv run -m pytest -n auto tests/test_parser.py

License

This project is licensed under the MIT License. See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llmxml-0.4.3.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llmxml-0.4.3-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file llmxml-0.4.3.tar.gz.

File metadata

  • Download URL: llmxml-0.4.3.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.0

File hashes

Hashes for llmxml-0.4.3.tar.gz
Algorithm Hash digest
SHA256 7f29501554775ff9847810196bbd41b979dfaa7e2ff42282fc091b5056ae9020
MD5 3af7b782ca7c8ee94b4419cd4c82d01e
BLAKE2b-256 7e2f9265fa9c2844c1ee01f027bcef9b7722eb76087a20e50605d83137bc4ec1

See more details on using hashes here.

File details

Details for the file llmxml-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: llmxml-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 15.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.0

File hashes

Hashes for llmxml-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2fb95b086565aa13ad3366184f45dc16bfd5003a5599c8f3ca43b9b9814c1f29
MD5 21556ca2b7caaebbb398428af6acd88d
BLAKE2b-256 0246d3c848289a84e4b025a049752e858fc2f591d83120be61f20151617ea1f8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page