PHP code example of eslam-reda-div / filament-copilot
1. Go to this page and download the library: Download eslam-reda-div/filament-copilot library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
eslam-reda-div / filament-copilot example snippets
use EslamRedaDiv\FilamentCopilot\FilamentCopilotPlugin;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(FilamentCopilotPlugin::make());
}
use EslamRedaDiv\FilamentCopilot\FilamentCopilotPlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugin(
FilamentCopilotPlugin::make()
->provider('anthropic')
->model('claude-sonnet-4')
->systemPrompt('You are a helpful admin assistant.')
->globalTools([
\App\CopilotTools\SearchEverythingTool::class,
])
->quickActions([
'Show stats' => 'Show me a summary of today\'s statistics.',
'Recent users' => 'List the 10 most recently created users.',
])
->managementEnabled()
->managementGuard('admin')
->rateLimitEnabled()
->tokenBudgetEnabled()
->dailyTokenBudget(50000)
->monthlyTokenBudget(1000000)
->memoryEnabled()
->maxMemoriesPerUser(200)
->respectAuthorization()
->authorizeUsing(fn ($user) => $user->is_admin)
);
}
use EslamRedaDiv\FilamentCopilot\Contracts\CopilotResource;
class UserResource extends Resource implements CopilotResource
{
// ... your existing resource code ...
public static function copilotResourceDescription(): ?string
{
return 'Manages user accounts including names, emails, roles, and permissions.';
}
public static function copilotTools(): array
{
return [
new \App\Filament\Resources\UserResource\CopilotTools\ListUsersTool(),
new \App\Filament\Resources\UserResource\CopilotTools\SearchUsersTool(),
new \App\Filament\Resources\UserResource\CopilotTools\CreateUserTool(),
new \App\Filament\Resources\UserResource\CopilotTools\ViewUserTool(),
new \App\Filament\Resources\UserResource\CopilotTools\EditUserTool(),
new \App\Filament\Resources\UserResource\CopilotTools\DeleteUserTool(),
];
}
}
use EslamRedaDiv\FilamentCopilot\Contracts\CopilotPage;
class Dashboard extends Page implements CopilotPage
{
// ... your existing page code ...
public static function copilotPageDescription(): ?string
{
return 'The main dashboard showing key metrics and recent activity.';
}
public static function copilotTools(): array
{
return [
new \App\Filament\Pages\CopilotTools\Dashboard\DashboardStatsTool(),
];
}
}
use EslamRedaDiv\FilamentCopilot\Contracts\CopilotWidget;
class RevenueChart extends Widget implements CopilotWidget
{
// ... your existing widget code ...
public static function copilotWidgetDescription(): ?string
{
return 'Displays revenue data over the past 30 days as a line chart.';
}
public static function copilotTools(): array
{
return [
new \App\Filament\Widgets\CopilotTools\RevenueChart\GetRevenueDataTool(),
];
}
}
declare(strict_types=1);
namespace App\Filament\Resources\UserResource\CopilotTools;
use App\Filament\Resources\UserResource;
use EslamRedaDiv\FilamentCopilot\Tools\BaseTool;
use Illuminate\Contracts\JsonSchema\JsonSchema;
use Laravel\Ai\Tools\Request;
use Stringable;
class SearchUsersTool extends BaseTool
{
/**
* A description of what this tool does — shown to the AI agent.
*/
public function description(): Stringable|string
{
return 'Search users by name or email.';
}
/**
* The JSON Schema defining the tool's parameters.
*/
public function schema(JsonSchema $schema): array
{
return [
'query' => $schema->string()
->description('The search keyword (name or email)')
->(fn ($user) =>
"#{$user->id} — {$user->name} ({$user->email})"
)->implode("\n");
}
}
public static function copilotTools(): array
{
return [
new \App\Filament\Resources\UserResource\CopilotTools\ListUsersTool(),
new \App\Filament\Resources\UserResource\CopilotTools\SearchUsersTool(),
];
}
use EslamRedaDiv\FilamentCopilot\Concerns\HasCopilotChat;
class User extends Authenticatable
{
use HasCopilotChat;
// ...
}
// In your EventServiceProvider or event discovery
use EslamRedaDiv\FilamentCopilot\Events\CopilotToolExecuted;
class LogToolExecution
{
public function handle(CopilotToolExecuted $event): void
{
logger()->info('Tool executed', [
'tool' => $event->toolCall->tool_class,
'user_id' => $event->toolCall->conversation->participant_id,
]);
}
}
FilamentCopilotPlugin::make()
->managementEnabled()
->managementGuard('admin') // optional: restrict to specific guard
// config/filament-copilot.php
'system_prompt' => 'You are a helpful assistant for our e-commerce admin panel. Focus on order management and customer support.',
FilamentCopilotPlugin::make()
->systemPrompt('You are a helpful assistant for our e-commerce admin panel.')