use Cognesy\Metrics\Collectors\MetricsCollector;
use Cognesy\Metrics\Metrics;
// Create custom collector
class StreamMetricsCollector extends MetricsCollector {
protected function listeners(): array {
return [
StreamFirstChunkReceived::class => $this->onFirstChunk(...),
InferenceCompleted::class => $this->onCompleted(...),
];
}
public function onFirstChunk(StreamFirstChunkReceived $event): void {
$this->timer('llm.stream.ttfc_ms', $event->timeToFirstChunkMs, [
'model' => $event->model,
]);
}
public function onCompleted(InferenceCompleted $event): void {
$this->gauge('llm.output_tokens', (float) $event->usage->output());
}
}
// Register collector and exporter
$metrics = new Metrics($events);
$metrics
->collect(new StreamMetricsCollector())
->exportTo(new CallbackExporter(fn($metrics) => dump($metrics)));
// Metrics auto-collected from events
$metrics->export();