$orderSchema = JsonSchema::object(
name: 'Order',
description: 'Customer order',
properties: [
JsonSchema::string(
name: 'orderId',
description: 'Unique order identifier'
),
JsonSchema::object(
name: 'customer',
description: 'Customer information',
properties: [
JsonSchema::string(name: 'name'),
JsonSchema::string(name: 'email'),
],
requiredProperties: ['name', 'email']
),
JsonSchema::collection(
name: 'items',
description: 'Order line items',
itemSchema: JsonSchema::object(
name: 'LineItem',
properties: [
JsonSchema::string(name: 'product'),
JsonSchema::integer(name: 'quantity'),
JsonSchema::number(name: 'price'),
],
requiredProperties: ['product', 'quantity', 'price']
)
),
JsonSchema::enum(
name: 'status',
enumValues: ['pending', 'shipped', 'delivered'],
description: 'Order status'
),
],
requiredProperties: ['orderId', 'customer', 'items', 'status']
);
$order = StructuredOutput::create()
->with(
messages: 'Extract order details from: ...',
responseModel: $orderSchema,
)
->get();
// @doctest id="7a73"