Skip to main content

Instructor for Laravel

Laravel integration for Instructor PHP - the structured output library for LLMs.

Overview

This package provides seamless integration between Instructor PHP and Laravel, giving you:
  • Laravel Facades - Use StructuredOutput::, Inference::, Embeddings::, and AgentCtrl:: facades
  • Dependency Injection - Inject services directly into your classes
  • Testing Fakes - Mock LLM responses with StructuredOutput::fake() and assertions
  • Laravel HTTP Client - Uses Http:: internally, enabling Http::fake() in tests
  • Event Bridge - Instructor events dispatched to Laravel’s event system
  • Artisan Commands - Generate response models and test your configuration
  • Configuration Publishing - Laravel-style config with environment variables

Quick Start

1. Install the Package

composer require cognesy/instructor-laravel
# @doctest id="7e86"

2. Configure API Key

Add to your .env:
OPENAI_API_KEY=your-openai-api-key
// @doctest id="8222"

3. Extract Structured Data

use Cognesy\Instructor\Laravel\Facades\StructuredOutput;

// Define a response model
final class PersonData
{
    public function __construct(
        public readonly string $name,
        public readonly int $age,
    ) {}
}

// Extract structured data from text
$person = StructuredOutput::with(
    messages: 'John Smith is 30 years old',
    responseModel: PersonData::class,
)->get();

echo $person->name; // "John Smith"
echo $person->age;  // 30
// @doctest id="a05f"

Documentation

GuideDescription
InstallationDetailed installation and setup instructions
ConfigurationComplete configuration reference
FacadesUsing StructuredOutput, Inference, and Embeddings facades
Response ModelsCreating and using response models
Code AgentsUsing AgentCtrl for Claude Code, Codex, and OpenCode
TestingTesting with fakes and assertions
EventsEvent handling and Laravel integration
CommandsArtisan command reference
AdvancedStreaming, validation, and advanced patterns
TroubleshootingCommon issues and solutions

Example: Complete Workflow

use Cognesy\Instructor\Laravel\Facades\StructuredOutput;
use App\ResponseModels\InvoiceData;

class InvoiceProcessor
{
    public function extractFromEmail(string $emailBody): InvoiceData
    {
        return StructuredOutput::with(
            messages: $emailBody,
            responseModel: InvoiceData::class,
            system: 'Extract invoice details from the email.',
        )->get();
    }
}

// In your test
public function test_extracts_invoice_data(): void
{
    $fake = StructuredOutput::fake([
        InvoiceData::class => new InvoiceData(
            invoiceNumber: 'INV-001',
            amount: 150.00,
            dueDate: '2024-12-31',
        ),
    ]);

    $processor = new InvoiceProcessor();
    $invoice = $processor->extractFromEmail('Invoice #INV-001...');

    $this->assertEquals('INV-001', $invoice->invoiceNumber);
    $fake->assertExtracted(InvoiceData::class);
}
// @doctest id="6213"

Requirements

  • PHP 8.2+
  • Laravel 10.x, 11.x, or 12.x

Support