<?php
require 'examples/boot.php';
use Cognesy\Events\Event;
use Cognesy\Http\Events\HttpRequestSent;
use Cognesy\Http\Events\HttpResponseReceived;
use Cognesy\Instructor\StructuredOutput;
use Cognesy\Instructor\StructuredOutputRuntime;
use Cognesy\Polyglot\Inference\LLMProvider;
class User
{
public string $name;
public int $age;
}
// let's mock a logger class - in real life you would use a proper logger, e.g. Monolog
$logger = new class {
public function log(Event $event) {
// we're using a predefined asLog() method to get the event data,
// but you can access the event properties directly and customize the output
echo $event->asLog()."\n";
}
};
$runtime = StructuredOutputRuntime::fromProvider(LLMProvider::using('openai'))
->onEvent(HttpRequestSent::class, fn($event) => $logger->log($event))
->onEvent(HttpResponseReceived::class, fn($event) => $logger->log($event));
$user = (new StructuredOutput($runtime))
->with(
messages: "Jason is 28 years old",
responseModel: User::class,
)
->get();
dump($user);
assert($user->name === 'Jason');
assert($user->age === 28);
?>