laravilt / ai
AI-powered search and chat for Laravilt. Supports OpenAI, Anthropic, Gemini, and DeepSeek with global search spotlight and chat UI.
Fund package maintenance!
fadymondy
Installs: 138
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 2
pkg:composer/laravilt/ai
Requires
- php: ^8.3|^8.4
- illuminate/database: ^11.0|^12.0
- illuminate/http: ^11.0|^12.0
- illuminate/routing: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
- spatie/laravel-package-tools: ^1.14
Requires (Dev)
- larastan/larastan: ^2.9||^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/extension-installer: ^1.3||^2.0
- phpstan/phpstan-deprecation-rules: ^1.1||^2.0
- phpstan/phpstan-phpunit: ^1.3||^2.0
This package is auto-updated.
Last update: 2025-12-18 07:50:37 UTC
README
Laravilt AI
A powerful AI integration package for Laravilt with support for multiple providers (OpenAI, Anthropic, Gemini, DeepSeek), global search spotlight, and chat UI.
Features
- Multi-Provider Support: OpenAI, Anthropic (Claude), Google Gemini, DeepSeek
- Global Search Spotlight: Cmd/Ctrl+K spotlight search with AI-powered understanding
- Chat UI: Full-featured chat interface with session management
- Resource AI Agents: Configure AI capabilities per resource
- Scout Fallback: Automatic fallback to Laravel Scout or direct queries when no AI is configured
- Streaming Support: Real-time streaming responses
Installation
composer require laravilt/ai
The package will automatically register its service provider.
Configuration
Publish the config file:
php artisan vendor:publish --tag="laravilt-ai-config"
Add your API keys to .env:
# Default provider LARAVILT_AI_PROVIDER=openai # OpenAI Configuration OPENAI_API_KEY=your-openai-api-key OPENAI_MODEL=gpt-4o-mini # Anthropic Configuration ANTHROPIC_API_KEY=your-anthropic-api-key ANTHROPIC_MODEL=claude-sonnet-4-20250514 # Google Gemini Configuration GOOGLE_AI_API_KEY=your-google-api-key GOOGLE_AI_MODEL=gemini-2.0-flash-exp # DeepSeek Configuration DEEPSEEK_API_KEY=your-deepseek-api-key DEEPSEEK_MODEL=deepseek-chat
Quick Start
1. Global Search Component
Add the GlobalSearch component to your layout:
<script setup> import { GlobalSearch } from '@laravilt/ai' </script> <template> <GlobalSearch placeholder="Search..." :use-a-i="true" /> </template>
The spotlight search opens with Cmd/Ctrl+K.
2. AI Chat Component
<script setup> import { AIChat } from '@laravilt/ai' </script> <template> <AIChat :show-sidebar="true" /> </template>
3. Resource AI Configuration
Add AI capabilities to your resources:
use Laravilt\AI\AIAgent; use Laravilt\Panel\Resources\Resource; class ProductResource extends Resource { public static function ai(AIAgent $agent): AIAgent { return $agent ->name('product_assistant') ->description('AI assistant for managing products') ->searchable(['name', 'description', 'sku']) ->canCreate(true) ->canUpdate(true) ->canDelete(false) ->canQuery(true) ->systemPrompt('You are a helpful product management assistant.'); } }
AI Providers
OpenAI
use Laravilt\AI\AIManager; $ai = app(AIManager::class); $response = $ai->provider('openai')->chat([ ['role' => 'user', 'content' => 'Hello!'], ]);
Available models:
gpt-4o- GPT-4ogpt-4o-mini- GPT-4o Minigpt-4-turbo- GPT-4 Turbogpt-4- GPT-4gpt-3.5-turbo- GPT-3.5 Turboo1,o1-mini,o1-preview- O1 Models
Anthropic (Claude)
$response = $ai->provider('anthropic')->chat([ ['role' => 'user', 'content' => 'Hello!'], ]);
Available models:
claude-sonnet-4-20250514- Claude Sonnet 4claude-opus-4-20250514- Claude Opus 4claude-3-5-sonnet-20241022- Claude 3.5 Sonnetclaude-3-5-haiku-20241022- Claude 3.5 Haikuclaude-3-opus-20240229- Claude 3 Opus
Google Gemini
$response = $ai->provider('gemini')->chat([ ['role' => 'user', 'content' => 'Hello!'], ]);
Available models:
gemini-2.0-flash-exp- Gemini 2.0 Flashgemini-1.5-pro- Gemini 1.5 Progemini-1.5-flash- Gemini 1.5 Flashgemini-pro- Gemini Pro
DeepSeek
$response = $ai->provider('deepseek')->chat([ ['role' => 'user', 'content' => 'Hello!'], ]);
Available models:
deepseek-chat- DeepSeek Chatdeepseek-coder- DeepSeek Coderdeepseek-reasoner- DeepSeek R1
Streaming Responses
$ai = app(AIManager::class); $stream = $ai->provider()->streamChat([ ['role' => 'user', 'content' => 'Write a story'], ]); foreach ($stream as $chunk) { echo $chunk; }
Tool Calling
$response = $ai->provider()->chatWithTools( messages: [ ['role' => 'user', 'content' => 'What is the weather in Tokyo?'], ], tools: [ [ 'name' => 'get_weather', 'description' => 'Get weather information for a city', 'parameters' => [ 'type' => 'object', 'properties' => [ 'city' => ['type' => 'string', 'description' => 'City name'], ], 'required' => ['city'], ], ], ] ); if ($response['tool_calls']) { foreach ($response['tool_calls'] as $call) { // Handle tool call $result = handleToolCall($call['name'], $call['arguments']); } }
Global Search
Register resources for global search:
use Laravilt\AI\GlobalSearch; app(GlobalSearch::class) ->registerResource( resource: 'products', model: Product::class, searchable: ['name', 'description', 'sku'], label: 'Products', icon: 'Package', url: '/admin/products/{id}' ) ->limit(5) ->useAI(true);
Vue Composables
useAI
import { useAI } from '@laravilt/ai' const { config, loading, selectedProvider, selectedModel, availableProviders, availableModels, loadConfig, chat, streamChat, } = useAI() // Load configuration await loadConfig() // Send a message const response = await chat([ { role: 'user', content: 'Hello!' } ]) // Stream a response for await (const chunk of streamChat(messages)) { console.log(chunk) }
useGlobalSearch
import { useGlobalSearch } from '@laravilt/ai' const { query, results, loading, useAI, search, debouncedSearch, clear, } = useGlobalSearch() // Perform search await search('product name') // Or with debounce await debouncedSearch('product name', 300)
API Endpoints
The package provides the following API endpoints:
| Method | Endpoint | Description |
|---|---|---|
| GET | /laravilt-ai/config |
Get AI configuration |
| POST | /laravilt-ai/chat |
Send chat message |
| POST | /laravilt-ai/stream |
Stream chat response |
| GET | /laravilt-ai/sessions |
List chat sessions |
| POST | /laravilt-ai/sessions |
Create new session |
| GET | /laravilt-ai/sessions/{id} |
Get session |
| PATCH | /laravilt-ai/sessions/{id} |
Update session |
| DELETE | /laravilt-ai/sessions/{id} |
Delete session |
| GET | /laravilt-ai/search |
Global search |
Testing
composer test
Code Style
composer format
Static Analysis
composer analyse
License
The MIT License (MIT). Please see License File for more information.
