Skip to main content

Declarative Agent Schema

Project description

AgentSchema Python SDK

PyPI version Python 3.11+

A Python SDK for working with AgentSchema - a declarative specification for defining AI agents in a code-first YAML format. This SDK provides strongly-typed Python classes for loading, manipulating, and saving agent definitions.

Installation

pip install agentschema

Quick Start

Loading an Agent Definition

import yaml
from agentschema.core import AgentDefinition, LoadContext

# Load from a YAML file
with open("my_agent.yaml", "r") as f:
    data = yaml.safe_load(f)

agent = AgentDefinition.load(data)

print(f"Agent: {agent.name}")
print(f"Description: {agent.description}")
print(f"Kind: {agent.kind}")

Creating an Agent Programmatically

from agentschema.core import (
    PromptAgent,
    Model,
    FunctionTool,
    PropertySchema,
    Property,
    SaveContext,
)

# Create a simple prompt-based agent
agent = PromptAgent(
    name="my-assistant",
    description="A helpful assistant that can answer questions",
    model=Model(
        name="gpt-4o",
    ),
    instructions="You are a helpful assistant. Answer questions clearly and concisely.",
    tools=[
        FunctionTool(
            name="get_weather",
            description="Get the current weather for a location",
        ),
    ],
    inputSchema=PropertySchema(
        properties={
            "question": Property(
                type="string",
                description="The user's question",
            ),
        },
    ),
)

# Save to YAML
yaml_output = agent.to_yaml()
print(yaml_output)

# Save to JSON
json_output = agent.to_json()
print(json_output)

Agent Types

AgentSchema supports multiple agent types:

PromptAgent

A straightforward agent that uses a language model with optional tools:

from agentschema.core import PromptAgent, Model

agent = PromptAgent(
    name="chat-agent",
    kind="prompt",
    model=Model(name="gpt-4o"),
    instructions="You are a helpful assistant.",
)

ContainerAgent (Hosted)

An agent that runs in a container with custom logic:

from agentschema.core import ContainerAgent

agent = ContainerAgent(
    name="custom-agent",
    kind="hosted",
    endpoint="https://my-agent.azurewebsites.net",
)

Tools

Agents can use various tool types:

Function Tools

from agentschema.core import FunctionTool

tool = FunctionTool(
    name="search",
    description="Search for information",
)

OpenAPI Tools

from agentschema.core import OpenApiTool, RemoteConnection

tool = OpenApiTool(
    name="weather_api",
    description="Get weather information",
    specification="./weather.openapi.json",
    connection=RemoteConnection(
        name="weather_connection",
        endpoint="https://api.weather.com",
    ),
)

MCP Tools (Model Context Protocol)

from agentschema.core import McpTool

tool = McpTool(
    name="filesystem",
    description="Access filesystem operations",
    command="npx",
    args=["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"],
)

Code Interpreter

from agentschema.core import CodeInterpreterTool

tool = CodeInterpreterTool(
    name="code_interpreter",
    description="Execute Python code",
)

File Search

from agentschema.core import FileSearchTool

tool = FileSearchTool(
    name="file_search",
    description="Search through documents",
)

Connections

Define how tools connect to external services:

from agentschema.core import (
    ReferenceConnection,
    RemoteConnection,
    ApiKeyConnection,
    AnonymousConnection,
)

# Reference an existing connection by name
ref_conn = ReferenceConnection(name="my-existing-connection")

# Remote endpoint connection
remote_conn = RemoteConnection(
    name="api-connection",
    endpoint="https://api.example.com",
)

# API key authentication
api_key_conn = ApiKeyConnection(
    name="secure-connection",
    endpoint="https://api.example.com",
    key="${API_KEY}",  # Environment variable reference
)

# Anonymous (no auth) connection
anon_conn = AnonymousConnection(
    name="public-connection",
    endpoint="https://public-api.example.com",
)

Context Customization

LoadContext

Customize how data is loaded with pre/post processing hooks:

from agentschema.core import AgentDefinition, LoadContext

def preprocess(data):
    # Transform data before parsing
    data["name"] = data.get("name", "").lower()
    return data

def postprocess(agent):
    # Transform agent after instantiation
    print(f"Loaded agent: {agent.name}")
    return agent

context = LoadContext(
    pre_process=preprocess,
    post_process=postprocess,
)

agent = AgentDefinition.load(data, context)

SaveContext

Control serialization format and behavior:

from agentschema.core import SaveContext

# Default: collections as objects with name as key
context = SaveContext(
    collection_format="object",  # or "array" for list format
    use_shorthand=True,  # Use compact representations when possible
)

yaml_output = agent.to_yaml(context)

Collection formats:

  • "object" (default): Collections use the item's name as the key

    tools:
      my_tool:
        kind: function
        description: A tool
    
  • "array": Collections are lists of objects

    tools:
      - name: my_tool
        kind: function
        description: A tool
    

Working with YAML Files

Load from File

import yaml
from agentschema.core import AgentDefinition

with open("agent.yaml", "r") as f:
    data = yaml.safe_load(f)

agent = AgentDefinition.load(data)

Save to File

yaml_content = agent.to_yaml()

with open("agent_output.yaml", "w") as f:
    f.write(yaml_content)

Example: Complete Agent Definition

Here's a complete example of a travel assistant agent:

from agentschema.core import (
    PromptAgent,
    Model,
    FunctionTool,
    OpenApiTool,
    RemoteConnection,
    PropertySchema,
    Property,
)

agent = PromptAgent(
    name="travel-assistant",
    description="A travel assistant that helps plan trips",
    metadata={
        "tags": ["travel", "assistant"],
        "authors": ["your-name"],
    },
    model=Model(name="gpt-4o"),
    tools=[
        FunctionTool(
            name="get_travel_info",
            description="Get basic travel information",
        ),
        OpenApiTool(
            name="tripadvisor",
            description="Get travel recommendations from TripAdvisor",
            specification="./tripadvisor.openapi.json",
            connection=RemoteConnection(
                name="tripadvisor_connection",
                endpoint="https://api.tripadvisor.com",
            ),
        ),
    ],
    inputSchema=PropertySchema(
        properties={
            "destination": Property(
                type="string",
                description="The travel destination",
            ),
            "duration": Property(
                type="integer",
                description="Trip duration in days",
            ),
        },
    ),
    instructions="""You are a knowledgeable travel assistant.
Help users plan their trips by providing recommendations for:
- Attractions and activities
- Restaurants and dining
- Hotels and accommodations
- Local tips and customs

Always provide specific, actionable recommendations.""",
)

# Output as YAML
print(agent.to_yaml())

Type Support

This package includes type stubs (py.typed) for full IDE support with type checking. All classes are fully typed using Python's type hints.

Documentation

For more information about the AgentSchema specification, visit:

Contributing

We welcome contributions! Please see the main repository for contribution guidelines.

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

agentschema-1.0.0b7.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

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

agentschema-1.0.0b7-py3-none-any.whl (37.2 kB view details)

Uploaded Python 3

File details

Details for the file agentschema-1.0.0b7.tar.gz.

File metadata

  • Download URL: agentschema-1.0.0b7.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for agentschema-1.0.0b7.tar.gz
Algorithm Hash digest
SHA256 55094712f96236cd46d705ebc3b59f8261c2a23173e7b29b0b550752e54f6f35
MD5 e3a28b0a20c095bc4d21acb54f6fef7f
BLAKE2b-256 a2f2e8808631c2d815689eb19c5cc3b5215d3337b49951d62e572f7a5643f86a

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentschema-1.0.0b7.tar.gz:

Publisher: publish-pypi.yml on microsoft/AgentSchema

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agentschema-1.0.0b7-py3-none-any.whl.

File metadata

  • Download URL: agentschema-1.0.0b7-py3-none-any.whl
  • Upload date:
  • Size: 37.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for agentschema-1.0.0b7-py3-none-any.whl
Algorithm Hash digest
SHA256 d58b3d9bc26dc25118e434617e2ebb2dfef9d7de67cbd4ea9eeced4e3f3d0cee
MD5 8b8a1c800e0aa4bc6755e61fa3bfe7ba
BLAKE2b-256 4b2f1971e138cc3fa37f57bc48a075b8c7502a6c6f79dcad8d01cf099b8601d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentschema-1.0.0b7-py3-none-any.whl:

Publisher: publish-pypi.yml on microsoft/AgentSchema

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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