LangDB Structured Output
Compare JSON Object and JSON Schema requests through LangDB with local MovieScript validation.
"""
Langdb Structured Output
========================
Cookbook example for `langdb/structured_output.py`.
"""
from typing import List
from agno.agent import Agent, RunOutput # noqa
from agno.models.langdb import LangDB
from pydantic import BaseModel, Field
from rich.pretty import pprint # noqa
# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------
class MovieScript(BaseModel):
setting: str = Field(
..., description="Provide a nice setting for a blockbuster movie."
)
ending: str = Field(
...,
description="Ending of the movie. If not available, provide a happy ending.",
)
genre: str = Field(
...,
description="Genre of the movie. If not available, select action, thriller or romantic comedy.",
)
name: str = Field(..., description="Give a name to this movie")
characters: List[str] = Field(..., description="Name of characters for this movie.")
storyline: str = Field(
..., description="3 sentence storyline for the movie. Make it exciting!"
)
# Agent that uses JSON mode
json_mode_agent = Agent(
model=LangDB(id="llama3-1-70b-instruct-v1.0"),
description="You write movie scripts.",
output_schema=MovieScript,
use_json_mode=True,
)
# Agent that uses structured outputs
structured_output_agent = Agent(
model=LangDB(id="llama3-1-70b-instruct-v1.0"),
description="You write movie scripts.",
output_schema=MovieScript,
)
# Get the response in a variable
# json_mode_response: RunOutput = json_mode_agent.run("New York")
# pprint(json_mode_response.content)
# structured_output_response: RunOutput = structured_output_agent.run("New York")
# pprint(structured_output_response.content)
json_mode_agent.print_response("New York")
structured_output_agent.print_response("New York")
# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
passThe first agent requests JSON Object mode; the second sends a JSON Schema request derived from MovieScript. Choose a LangDB model that supports the requested mode. Agno also validates the returned content locally.
output_schema describes the expected type. If parsing or validation fails, result.content can remain a string. Before accessing schema fields in a run result, use isinstance(result.content, YourSchema), replacing YourSchema with the class you passed as output_schema.
Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno openaiConfigure LangDB access
Create a LangDB project and API key, and enable the provider access required by your selected model. Set the current API host; Agno appends the project ID and /v1.
export LANGDB_API_BASE_URL="https://api.langdb.ai"
export LANGDB_API_KEY="your_langdb_api_key"
export LANGDB_PROJECT_ID="your_langdb_project_id"Check your project's model catalog for the exact ID and required capabilities, such as vision, tool calling or structured output. Gateway aliases and access can vary by project.
Run the example
Save the code above as structured_output.py, then run:
python structured_output.pyFull source: cookbook/90_models/langdb/structured_output.py