How to Configure LangExtract's Format Handler for JSON vs YAML
Use the FormatHandler class from langextract/core/format_handler.py and set format_type to data.FormatType.JSON or data.FormatType.YAML, along with optional flags like use_fences and use_wrapper to control how model outputs are wrapped and parsed.
LangExtract centralizes output formatting through a single configuration object. The FormatHandler class determines whether your extractions use JSON or YAML serialization, how prompts are fenced with markdown code blocks, and whether results are wrapped in container dictionaries. This guide explains how to configure LangExtract's format handler for both JSON and YAML outputs using the actual source implementation from google/langextract.
FormatHandler Configuration Parameters
The constructor in langextract/core/format_handler.py (lines 66-74) accepts these key arguments:
format_type— Set todata.FormatType.JSONordata.FormatType.YAMLto define the serialization format.use_wrapper— Boolean flag to wrap extractions in a container dictionary like{"extractions": [...]}.wrapper_key— String defining the dictionary key whenuse_wrapper=True(default:"extractions").use_fences— Boolean to wrap prompts and expected outputs in markdown code fences (e.g., ```json).attribute_suffix— Suffix for attribute fields (default:"_attributes").strict_fencesandallow_top_level_list— Fine-grained validation controls for parsing edge cases.
Configuring JSON Output
To extract structured data in JSON format with fenced code blocks:
from langextract.core import format_handler
from langextract.core.data import FormatType
handler = format_handler.FormatHandler(
format_type=FormatType.JSON,
use_fences=True,
use_wrapper=True,
wrapper_key="extractions"
)
This configuration ensures that prompts include ```json fences and that the model returns wrapped JSON objects under the "extractions" key.
Configuring YAML Output
For YAML serialization, change the format_type while keeping other flags consistent:
from langextract.core import format_handler
from langextract.core.data import FormatType
handler = format_handler.FormatHandler(
format_type=FormatType.YAML,
use_fences=True,
use_wrapper=False # Optional: return raw list instead of wrapped dict
)
When use_fences=True, the handler generates prompts with ```yaml code blocks and expects the model to return fenced YAML content.
Advanced Wrapper and Validation Settings
The FormatHandler supports complex extraction scenarios through additional parameters.
Container Wrappers
Set use_wrapper=True to enforce a consistent top-level structure across all extractions. The wrapper_key parameter customizes the container dictionary key:
handler = format_handler.FormatHandler(
format_type=FormatType.JSON,
use_wrapper=True,
wrapper_key="results" # Changes default from "extractions" to "results"
)
Parsing Validation
The strict_fences parameter enforces that model outputs must contain properly formatted markdown fences. Set allow_top_level_list=True when expecting the model to return a raw JSON array or YAML sequence without a wrapping object.
Internal Implementation Details
The FormatHandler class orchestrates serialization through two primary methods defined in langextract/core/format_handler.py.
Serialization with format_extraction_example
The format_extraction_example() method (lines 16-50) handles example serialization for prompts. It selects between json.dumps and yaml.safe_dump based on self.format_type, optionally adds the wrapper dictionary, and applies markdown fences when self.use_fences is enabled.
Parsing with parse_output
The parse_output() method extracts fenced content from model responses, strips the fences if present, and delegates to the appropriate parser (JSON or YAML) based on the configured format_type. This ensures consistent handling regardless of whether the model included extra whitespace or commentary outside the fences.
Summary
- The
FormatHandlerinlangextract/core/format_handler.pycentralizes JSON and YAML configuration through theformat_typeparameter usingdata.FormatType.JSONordata.FormatType.YAML. - Enable
use_fences=Trueto wrap prompts and expected outputs in markdown code blocks appropriate to the format. - Control output structure with
use_wrapperandwrapper_keyto enforce container dictionaries around extraction results. - The handler automatically selects
json.dumpsoryaml.safe_dumpduring prompt generation and uses corresponding parsers when processing model outputs.
Frequently Asked Questions
How do I switch between JSON and YAML in LangExtract?
Instantiate FormatHandler with format_type=FormatType.JSON for JSON output or format_type=FormatType.YAML for YAML output. Both formats support identical wrapper and fencing options, allowing you to change only the serialization method without modifying other extraction logic.
What is the difference between use_wrapper and use_fences in LangExtract?
use_wrapper controls the data structure, wrapping extractions in a dictionary like {"extractions": [...]}, while use_fences controls the text formatting, adding markdown code blocks (json or yaml) around the serialized content in prompts and expected model responses.
Can LangExtract parse YAML without fences?
Yes. Set use_fences=False when creating the FormatHandler. The parse_output method will then attempt to parse the raw model output directly as YAML, though this requires the model to return clean YAML without markdown formatting or explanatory text.
Where is the FormatHandler class defined in the LangExtract repository?
The FormatHandler class is defined in langextract/core/format_handler.py in the google/langextract repository. The constructor signature and default parameters are located at lines 66-74, with serialization logic in format_extraction_example() at lines 16-50.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →