x-laravel / embedding-pulse-plugin
Laravel Pulse cards and recorders for x-laravel/embedding.
Package info
github.com/x-laravel/embedding-pulse-plugin
pkg:composer/x-laravel/embedding-pulse-plugin
Requires
- php: ^8.3
- illuminate/support: ^12.0|^13.0
- laravel/pulse: ^1.0
- x-laravel/embedding: ^1.0
Requires (Dev)
- orchestra/testbench: ^10.0|^11.0
- phpunit/phpunit: ^11.0|^12.0
This package is auto-updated.
Last update: 2026-05-09 12:10:35 UTC
README
Laravel Pulse cards and recorders for x-laravel/embedding.
What You Get
| Card | What it shows |
|---|---|
| Embedding Throughput | Embeddings generated per minute, broken down by slot. |
| Embedding Latency | p50 / p95 / p99 of generation duration, with a slow-call counter. |
| Embedding Failures | Recent failed GenerateModelEmbedding jobs — model, slot, exception class. |
| Embeddings By Slot | Total embeddings per slot across all models. |
Each card is a standalone Livewire component — drop them into your Pulse dashboard wherever you like.
Requirements
- PHP
^8.3 - Laravel
^12.0 | ^13.0 laravel/pulse ^1.0x-laravel/embedding ^1.0
Installation
composer require x-laravel/embedding-pulse-plugin
The PulseEmbeddingServiceProvider is auto-discovered and registers the recorders + Livewire cards automatically. No further wiring is needed for the recorders to start collecting data.
Setup
1. Make sure Pulse itself is installed
composer require laravel/pulse php artisan vendor:publish --tag=pulse-config php artisan migrate
See the Pulse documentation for full setup.
2. (Optional) Publish this package's config
php artisan vendor:publish --tag=embedding-pulse-config
This drops config/embedding-pulse-plugin.php where you can disable individual recorders or tune the slow-call threshold.
3. Add the cards to your Pulse dashboard
Publish the Pulse dashboard if you haven't already:
php artisan vendor:publish --tag=pulse-dashboard
Then edit resources/views/vendor/pulse/dashboard.blade.php:
<x-pulse> {{-- Existing cards... --}} <livewire:embedding.throughput cols="6" /> <livewire:embedding.latency cols="6" /> <livewire:embedding.failures cols="full" /> <livewire:embedding.slots cols="4" /> </x-pulse>
All four cards accept the standard Pulse card props: cols, rows, class, expand.
Configuration
| Env var | Default | Purpose |
|---|---|---|
PULSE_EMBEDDING_THROUGHPUT_ENABLED |
true |
Toggle throughput recorder |
PULSE_EMBEDDING_LATENCY_ENABLED |
true |
Toggle latency recorder |
PULSE_EMBEDDING_FAILURES_ENABLED |
true |
Toggle failures recorder |
PULSE_EMBEDDING_SLOW_THRESHOLD |
1000 |
Generations slower than this (ms) are flagged on the latency card |
How It Works
┌──────────────────────┐ ┌────────────────────────┐
│ ModelEmbedded event │────────►│ EmbeddingThroughput │──► Pulse::record('embedding_throughput', $slot)
└──────────────────────┘ └────────────────────────┘
┌──────────────────────┐ ┌────────────────────────┐
│ JobProcessing / │────────►│ EmbeddingLatency │──► Pulse::record('embedding_latency', $slot, $ms)
│ JobProcessed │ └────────────────────────┘
└──────────────────────┘
┌──────────────────────┐ ┌────────────────────────┐
│ JobFailed │────────►│ EmbeddingFailures │──► Pulse::record('embedding_failure', $key, …)
└──────────────────────┘ └────────────────────────┘
The recorders only act on XLaravel\Embedding\Jobs\GenerateModelEmbedding — other jobs in your app are ignored.
Testing
# Build first (once per PHP version) DOCKER_BUILDKIT=0 docker compose --profile php83 build # Run tests docker compose --profile php83 up docker compose --profile php84 up docker compose --profile php85 up
CI runs PHP 8.3–8.5 via .github/workflows/tests.yml.
License
This package is open-sourced software licensed under the MIT license.