Glint is an LLM observability package for Laravel applications. It records LLM calls in your application database and provides a local dashboard for traces, generations, cost, latency, errors, users, and alerts.
Glint is designed for teams that want Laravel-native observability without sending prompts, completions, or usage data to a third-party service.
- PHP 8.3+
- Laravel 11, 12, or 13
- A configured queue worker when using the default
queuerecording mode
Glint can record LLM calls through:
- Laravel HTTP client requests to configured LLM hosts
- Prism
- Laravel AI
- Neuron AI
- Manual tracing with the
Glintfacade
SDKs or transports that do not use one of the supported instrumentation paths should be wrapped with manual tracing.
- Local dashboard for traces, generations, costs, users, latency, and alerts
- Automatic instrumentation for supported drivers
- Manual tracing API for custom or unsupported LLM clients
- Token and cost tracking from a published pricing registry
- App-level pricing overrides for private models or provider price changes
- Alert rules for cost, error rate, latency, and token usage
- Privacy redaction before data is stored
- Retention and pruning commands
- Queue and sync recording modes
Glint::fake()testing utilities- Optional Laravel Pulse card
Install the package and run the installer:
composer require cybernerdie/glint
php artisan glint:installThe installer publishes the config, pricing registry, migrations, and application service provider, then runs the migrations.
Enable recording:
GLINT_ENABLED=true
GLINT_DRIVERS=httpVisit /glint to open the dashboard.
By default, Glint records asynchronously through Laravel's queue. If your application already runs queue workers, no separate worker is required. To isolate Glint recording jobs, set a dedicated queue and run a worker for it:
GLINT_QUEUE=glintphp artisan queue:work --queue=glintLLM generations are recorded without middleware. To group generations under the HTTP request that triggered them, register GlintMiddleware globally:
// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
$middleware->append(\Cybernerdie\Glint\Middleware\GlintMiddleware::class);
})Use manual tracing when auto-instrumentation cannot see a call or when you want to add application-specific context:
use Cybernerdie\Glint\Facades\Glint;
$trace = Glint::trace('chat.pipeline', [
'user_id' => (string) auth()->id(),
]);
try {
$generation = Glint::generation('summarise', 'openai', 'gpt-4o');
$generation
->prompt($prompt)
->options(temperature: 0.7, maxTokens: 1024, topP: 0.9);
$response = $client->chat($prompt);
$generation->finish(
completion: $response->text,
promptTokens: $response->promptTokens,
completionTokens: $response->completionTokens,
);
} catch (\Throwable $e) {
isset($generation) && $generation->fail($e);
throw $e;
} finally {
$trace->end();
}The main configuration file is published to config/glint.php.
Common options:
GLINT_ENABLED— enable or disable recordingGLINT_DRIVERS— comma-separated instrumentation driversGLINT_MODE—queueorsyncGLINT_QUEUE— queue name for recording jobsGLINT_STORE_BODIES— store prompts and completions; setfalsefor metadata-only recordingGLINT_STORE_IP— opt in to storing requester IP addressesGLINT_RETENTION_TRACES— raw trace/generation retentionGLINT_RETENTION_AGGREGATES— aggregate retentionGLINT_RETENTION_ALERTS— alert event retention
See Configuration for the full reference.
- Configuration
- Drivers
- Auto-Instrumentation
- Manual Tracing
- Background Jobs
- Dashboard
- Alerts
- Exporting
- Testing
- Privacy & Redaction
- Laravel Pulse Integration
composer test
composer stan
composer pintGlint is open-sourced software licensed under the MIT license.