schema

package
v0.0.0-...-7871f83 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 23, 2025 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package schema provides utilities for creating and working with JSON schemas for structured output in AgentMesh.

Overview

The schema package enables type-safe structured output from language models by:

  • Generating JSON schemas from Go structs with jsonschema tags
  • Creating schemas from maps for flexibility
  • Validating values against schemas
  • Extracting and parsing structured outputs from model responses

Basic Usage

Define a struct with jsonschema tags:

type Person struct {
    Name  string `json:"name" jsonschema:"required,description=Person's full name"`
    Age   int    `json:"age" jsonschema:"required,minimum=0,maximum=150"`
    Email string `json:"email" jsonschema:"format=email"`
}

Create an OutputSchema:

outputSchema, err := schema.NewOutputSchema("person", Person{},
    schema.WithStrict(true),
    schema.WithDescription("Extracts person information"),
)

Use with model requests:

req := &model.Request{
    Messages:     messages,
    OutputSchema: &outputSchema,
}

Extract structured output:

person, err := model.LastStructured[Person](mdl.Generate(ctx, req))

Supported Tags

The package supports standard jsonschema struct tags:

  • required: Mark field as required
  • description: Field description
  • minimum, maximum: Numeric constraints
  • minLength, maxLength: String length constraints
  • enum: Allowed values (comma-separated)
  • format: Format validation (email, date-time, uri, etc.)
  • default: Default value

Extracting Structured Output

Use graph.LastStructured to extract and parse the last message from an agent or graph:

result, err := graph.LastStructured[AnalysisResult](compiled.Run(ctx, input))

For model-level responses, use model.LastStructured:

result, err := model.LastStructured[MovieReview](mdl.Generate(ctx, req))

Validation

Validate JSON output against schemas using the Validator interface:

validator := schema.NewValidator()
result, err := validator.Validate(ctx, outputSchema.Schema, jsonString)
if !result.Valid {
    for _, e := range result.Errors {
        fmt.Printf("Validation error at %s: %s\n", e.Path, e.Message)
    }
}

Package schema provides sentinel errors for the schema package.

Package schema provides utilities for creating and working with JSON schemas for structured output in AgentMesh agents and models.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrMissingType is returned when output schema is missing 'type'.
	ErrMissingType = errors.New("schema: output schema missing 'type'")

	// ErrMissingProperties is returned when output schema is missing 'properties'.
	ErrMissingProperties = errors.New("schema: output schema missing 'properties'")

	// ErrMissingRequired is returned when output schema is missing 'required'.
	ErrMissingRequired = errors.New("schema: output schema missing 'required'")
)

Functions

func WithAllowAdditionalProperties

func WithAllowAdditionalProperties(allow bool) func(*OutputSchemaOptions)

WithAllowAdditionalProperties sets whether to allow additional properties not defined in the schema. Default: false

func WithDescription

func WithDescription(description string) func(*OutputSchemaOptions)

WithDescription sets a description for the schema.

func WithStrict

func WithStrict(strict bool) func(*OutputSchemaOptions)

WithStrict sets whether to enable strict mode for the schema. Strict mode behavior is provider-specific (e.g., OpenAI's strict JSON schema mode). Default: true

func WithValidationPolicy

func WithValidationPolicy(policy ValidationPolicy) func(*OutputSchemaOptions)

WithValidationPolicy sets the post-generation validation policy. When enabled, generated output is validated against the schema with optional retries.

Types

type DefaultValidator

type DefaultValidator struct{}

DefaultValidator validates output against a JSON schema. It implements the Validator interface using the internal jsonschema library.

func NewValidator

func NewValidator() *DefaultValidator

NewValidator creates a new default validator. This is the default Validator implementation using internal/jsonschema.

func (*DefaultValidator) Validate

func (v *DefaultValidator) Validate(_ context.Context, schema map[string]any, output string) (*ValidationResult, error)

Validate checks if output conforms to the schema using the jsonschema library.

type FailureAction

type FailureAction string

FailureAction defines what happens when validation fails after all retries.

const (
	// FailOnError returns an error (default).
	FailOnError FailureAction = "fail"

	// WarnOnError logs a warning but returns the invalid output.
	WarnOnError FailureAction = "warn"

	// IgnoreOnError silently returns the invalid output.
	IgnoreOnError FailureAction = "ignore"
)

type OutputSchema

type OutputSchema struct {
	Name        string            // Schema name/identifier
	Strict      bool              // Enable strict mode (provider-specific)
	Description string            // Schema description
	Schema      map[string]any    // The actual JSON schema
	Validation  *ValidationPolicy // Post-generation validation settings
}

OutputSchema represents a structured output schema with metadata.

func NewOutputSchema

func NewOutputSchema[T any](name string, schema T, optFns ...func(*OutputSchemaOptions)) (OutputSchema, error)

NewOutputSchema creates an OutputSchema from a struct type or map[string]any. The function uses generics to accept either:

  • A struct type (generates schema via reflection and jsonschema tags)
  • A map[string]any (uses the map directly as the schema)

Example with struct:

type Person struct {
    Name string `json:"name" jsonschema:"required,description=Person's name"`
    Age  int    `json:"age" jsonschema:"required,minimum=0,maximum=150"`
}
schema, err := schema.NewOutputSchema("person", Person{})

Example with map:

schemaMap := map[string]any{
    "type": "object",
    "properties": map[string]any{
        "name": map[string]any{"type": "string"},
    },
    "required": []string{"name"},
}
schema, err := schema.NewOutputSchema("person", schemaMap)

The function validates that the schema contains required fields: type, properties, and required.

type OutputSchemaOptions

type OutputSchemaOptions struct {
	Strict                    bool
	Description               string
	AllowAdditionalProperties bool
	Validation                *ValidationPolicy
}

OutputSchemaOptions configures OutputSchema creation.

type ValidationError

type ValidationError struct {
	// Path is the JSON path to the error.
	Path string

	// Message describes the error.
	Message string

	// Expected is what the schema expected.
	Expected string

	// Actual is what was found.
	Actual string
}

ValidationError represents a schema validation error.

type ValidationPolicy

type ValidationPolicy struct {
	// Enabled activates post-generation validation.
	Enabled bool

	// MaxRetries is the number of retry attempts with error feedback (0 = no retries, strict mode).
	MaxRetries int

	// OnFailure determines behavior when validation fails after all retries.
	OnFailure FailureAction

	// Validator is the custom validator to use. If nil, the DefaultValidator is used.
	Validator Validator
}

ValidationPolicy controls post-generation schema validation behavior.

func ValidationDisabled

func ValidationDisabled() ValidationPolicy

ValidationDisabled returns a policy that disables validation.

func ValidationStrict

func ValidationStrict() ValidationPolicy

ValidationStrict returns a policy that fails immediately on validation error.

func ValidationWarnOnly

func ValidationWarnOnly() ValidationPolicy

ValidationWarnOnly returns a policy that logs warnings but doesn't fail.

func ValidationWithRetry

func ValidationWithRetry(maxRetries int) ValidationPolicy

ValidationWithRetry returns a policy that retries with error feedback.

type ValidationResult

type ValidationResult struct {
	// Valid indicates if the output matches the schema.
	Valid bool

	// Errors contains validation errors.
	Errors []ValidationError

	// ParsedData is the parsed JSON data (if valid JSON).
	ParsedData any
}

ValidationResult contains the result of schema validation.

type Validator

type Validator interface {
	// Validate checks if output conforms to the schema.
	Validate(ctx context.Context, schema map[string]any, output string) (*ValidationResult, error)
}

Validator defines the interface for schema validation. Implementations can provide custom validation logic.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL