Structured Outputs

Enforce JSON schema validation on model responses for consistent, type-safe outputs.

Supported providers: OpenAI, Google Gemini, OpenRouter. Claude does not support structured outputs.

import asyncio
import json
from llm_async import OpenAIProvider
from llm_async.models.message import Message
from llm_async.models.response_schema import ResponseSchema
from llm_async.providers.google import GoogleProvider

response_schema = ResponseSchema(
    schema={
        "type": "object",
        "properties": {
            "answer": {"type": "string"},
            "confidence": {"type": "number"}
        },
        "required": ["answer", "confidence"],
        "additionalProperties": False,
    }
)

async def main():
    openai_provider = OpenAIProvider(api_key="your-openai-key")
    response = await openai_provider.acomplete(
        model="gpt-4o-mini",
        messages=[Message("user", "What is the capital of France?")],
        response_schema=response_schema
    )
    result = json.loads(response.main_response.content)
    print(f"OpenAI: {result}")

    google_provider = GoogleProvider(api_key="your-google-key")
    response = await google_provider.acomplete(
        model="gemini-2.5-flash",
        messages=[Message("user", "What is the capital of France?")],
        response_schema=response_schema
    )
    result = json.loads(response.main_response.content)
    print(f"Gemini: {result}")

asyncio.run(main())