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"