x-laravel/embedding-pulse-plugin

Laravel Pulse cards and recorders for x-laravel/embedding.

Maintainers

Package info

github.com/x-laravel/embedding-pulse-plugin

pkg:composer/x-laravel/embedding-pulse-plugin

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-05-09 12:08 UTC

This package is auto-updated.

Last update: 2026-05-09 12:10:35 UTC


README

Tests PHP Laravel License

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.0
  • x-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.