<?php
require 'examples/boot.php';
use Cognesy\Instructor\StructuredOutput;
use Cognesy\Polyglot\Inference\Data\InferenceUsage;
class User {
public int $age;
public string $name;
}
function printUsage(InferenceUsage $usage) : void {
echo "Input tokens: $usage->inputTokens\n";
echo "Output tokens: $usage->outputTokens\n";
echo "Cache creation tokens: $usage->cacheWriteTokens\n";
echo "Cache read tokens: $usage->cacheReadTokens\n";
echo "Reasoning tokens: $usage->reasoningTokens\n";
}
echo "COUNTING TOKENS FOR SYNC RESPONSE\n";
$text = "Jason is 25 years old and works as an engineer.";
$response = StructuredOutput::using('openai')
->with(
messages: $text,
responseModel: User::class,
)->response();
echo "\nTEXT: $text\n";
assert($response->usage()->total() > 0);
printUsage($response->usage());
echo "\n\nCOUNTING TOKENS FOR STREAMED RESPONSE\n";
$text = "Anna is 19 years old.";
$stream = StructuredOutput::using('openai')
->with(
messages: $text,
responseModel: User::class,
options: ['stream' => true],
)
->stream();
$response = $stream->finalValue();
echo "\nTEXT: $text\n";
printUsage($stream->usage());
?>