icetalker/filament-chatgpt-bot
Integrate a ChatGPT-powered chatbot into your Filament admin panel. This plugin adds a ready-to-use conversational assistant so you can query OpenAI models directly from your dashboard with minimal setup and configuration.
Since there's no prior assessment on file, treat v1.3.1 as the baseline for this package.
Install and publish config
composer require <vendor>/<package>
php artisan vendor:publish --tag=<package>-config
The published config file is the first place to look — v1.3.1 puts the default model there rather than hardcoding it in the client.
Set the model explicitly in .env
<PACKAGE>_API_KEY=sk-...
<PACKAGE>_MODEL=gpt-5.6-sol
v1.3.1 changes the shipped default to gpt-5.6-sol and makes the model configurable. Pinning it in .env means future default changes in the package won't silently alter your app's behaviour.
First use case: a single call that resolves the default model from config — e.g. a summarisation or classification action invoked from a controller or job. Confirm the resolved model name in a log line before you build anything on top of it.
Verify the override surface. "Make model changeable" is typically exposed two ways — a config key and a per-call setter. Check the changelog/source for the exact method (->withModel(), ->using(), setModel(), etc.) before wiring it into your code; the release note doesn't specify the API shape.
Config default + per-call override. Keep one default in config and override only where the task justifies it:
// config/<package>.php
'model' => env('<PACKAGE>_MODEL', 'gpt-5.6-sol'),
// per call
$response = <Facade>::withModel('gpt-5.6-sol') // verify method name
->prompt($prompt);
Named presets instead of raw model strings. Put model names in config under semantic keys and reference them by intent, so a model swap is a one-line config change and never a find-and-replace across the codebase:
'models' => [
'fast' => env('<PACKAGE>_MODEL_FAST', 'gpt-5.6-sol'),
'deep' => env('<PACKAGE>_MODEL_DEEP', 'gpt-5.6-sol'),
],
Environment-scoped models. Use the cheapest viable model in local and testing, the strong default in production. Drive this from the config file's environment branches rather than from if (app()->isProduction()) scattered through your services.
Wrap calls in an action/service class. Controllers and jobs should call SummariseDocument::run($doc), not the package facade directly. That gives you one place to inject the model, add retries, and swap the package later.
Queue anything non-trivial. Long completions inside a request will hit PHP/nginx timeouts. Dispatch a job with an explicit $timeout and $tries, and implement failed() so a model error doesn't strand the record in a half-processed state.
Testing. Fake the underlying HTTP client (or the package's fake, if provided) and assert on the model name in the outgoing payload — that's how you catch an accidental default-model regression after a package upgrade.
Observability. Log model name, prompt tokens, completion tokens, and latency per call. Once the model is configurable, "which model produced this output" becomes a question you'll actually need to answer during incident review.
gpt-5.6-sol on upgrade with no deprecation warning. Pin <PACKAGE>_MODEL in .env and in phpunit.xml before upgrading, and diff outputs on a representative sample..env or the config file, run php artisan config:clear (or config:cache in deploy). A stale cached config is the most common reason "the model won't change."queue:work processes hold config in memory; model changes won't apply until php artisan queue:restart.fast preset) for those.How can I help you explore Laravel packages today?