imrandevbd / laravel-ai-hub
Premium multi-provider Laravel AI SDK — OpenAI, Gemini, Claude, Grok, DeepSeek, Mistral, Groq, Ollama & OpenRouter with failover, cost tracking, JSON recovery, and a visual studio UI.
Requires
- php: ^8.2
- illuminate/database: ^10.0|^11.0|^12.0|^13.0
- illuminate/http: ^10.0|^11.0|^12.0|^13.0
- illuminate/queue: ^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0
- phpunit/phpunit: ^10.0|^11.0
Suggests
- filament/filament: Required only if you use AiHubDashboardWidget
README
One interface. Nine AI providers. Full cost & failure observability.
Swap OpenAI, Gemini, Claude, Grok, DeepSeek, Mistral, Groq, Ollama, or OpenRouter via config or a premium visual UI — every call is logged, costed, retried, and (optionally) JSON-repaired automatically. Set provider priority so #1 runs first and failover continues down the chain.
Built by Imran Dev BD · Laravel 10–13 · PHP 8.2+
composer require imrandevbd/laravel-ai-hub
Packagist: imrandevbd/laravel-ai-hub
GitHub: github.com/imranbru99/laravel-ai-hub
Why this package?
| One API | Same fluent chain for every provider |
| Studio UI | /ai-hub — keys, models, priority, analytics |
| Failover | #1 → #2 → #3… when a provider fails |
| Money & health | USD cost, failure %, JSON recovery %, latency p50/p95/p99 |
| Local + cloud | Ollama locally · OpenRouter for 100s of models |
Features
| Feature | What you get |
|---|---|
| Multi-provider | OpenAI · Gemini · Claude · Grok · DeepSeek · Mistral · Groq · Ollama · OpenRouter |
| Visual studio | /ai-hub — keys, models, priority, analytics |
| Priority failover | #1 → #2 → #3 on failure |
| JSON recovery | Brace-depth parser for malformed LLM JSON |
| Retries | Exponential backoff + jitter |
| Cost tracking | USD from per-model pricing tables |
| Analytics | Failure rate, JSON recovery rate, latency p50/p95/p99, top jobs |
| Fluent API | AIHub::gemini()->prompt()->recoverJson()->send() |
| Async logging | AiRequestLog + queue job (non-blocking) |
Install
composer require imrandevbd/laravel-ai-hub php artisan vendor:publish --tag=ai-hub-config php artisan migrate
.env (optional — you can also set keys in the UI)
AI_HUB_PROVIDER=openai AI_HUB_FAILOVER=true AI_HUB_MIDDLEWARE=auth # protect /ai-hub in production OPENAI_API_KEY=sk-... GEMINI_API_KEY=... ANTHROPIC_API_KEY=... GROK_API_KEY=... DEEPSEEK_API_KEY=... MISTRAL_API_KEY=... GROQ_API_KEY=... OPENROUTER_API_KEY=... # OLLAMA_BASE_URL=http://127.0.0.1:11434/v1
Visual studio (/ai-hub)
Open /ai-hub after install.
Tabs
- Keys & Models — paste API keys, pick models, enable/disable providers, Test connection
- Priority — reorder who runs first (
↑↓/ First). Failover walks the list on errors - Analytics — 30-day cost, failure %, JSON recovery %, latency p95, cost by provider, top jobs, daily chart
Built with Tailwind CSS + Alpine.js (CDN) — modern dark premium UI.
CLI alternative
php artisan ai-hub:configure php artisan ai-hub:configure gemini --key=YOUR_KEY --model=gemini-2.0-flash --default php artisan ai-hub:configure deepseek --key=YOUR_KEY --model=deepseek-chat php artisan ai-hub:configure --show
Usage
use ImranDevBd\AiHub\Facades\AIHub; // Shortcuts $response = AIHub::gemini('gemini-2.0-flash') ->prompt('Summarize Laravel queues in 3 bullets') ->send(); echo $response->content; echo $response->costUsd; echo $response->latencyMs; // JSON + recovery (great for Gemini) $data = AIHub::provider('gemini') ->prompt('Return JSON: {"title":"","tags":[]}') ->recoverJson() ->send() ->json(); // Uses priority chain (#1 first, then failover) AIHub::prompt('Hello')->send(); // Lock to one provider AIHub::provider('openai')->withoutFailover()->prompt('Hello')->send(); // Persist settings for the whole app AIHub::configure('openai', 'sk-...', 'gpt-4o-mini', makeDefault: true); // Job tracing (shows in Analytics → Top jobs) AIHub::gemini()->forJob(MyJob::class)->prompt($prompt)->send();
Streaming & embeddings
foreach (AIHub::openai()->prompt('Write a haiku')->stream() as $chunk) { echo $chunk; } $vector = AIHub::openai() ->model('text-embedding-3-small') ->embed('Laravel AI Hub') ->first();
Analytics API
AIHub::analytics()->summary(now()->subDays(30)); AIHub::analytics()->costByProvider(); AIHub::analytics()->latencyPercentiles('gemini'); AIHub::analytics()->topJobs(10); AIHub::analytics()->dailyCost(30);
Priority / failover
Set order in /ai-hub → Priority or config:
// config/ai-hub.php 'priority' => ['gemini', 'openai', 'claude', 'grok', 'deepseek', 'mistral', 'groq', 'ollama', 'openrouter'], 'failover_enabled' => true,
Runtime:
#1 Gemini fails → #2 OpenAI → #3 Claude → …
Providers
| Key | Env | Capabilities |
|---|---|---|
openai |
OPENAI_API_KEY |
Chat · stream · embeddings |
gemini |
GEMINI_API_KEY |
Chat · stream · embeddings |
claude |
ANTHROPIC_API_KEY |
Chat · stream |
grok |
GROK_API_KEY / XAI_API_KEY |
Chat · stream · embeddings |
deepseek |
DEEPSEEK_API_KEY |
Chat · stream · embeddings |
mistral |
MISTRAL_API_KEY |
Chat · stream · embeddings |
groq |
GROQ_API_KEY |
Chat · stream · embeddings (fast) |
ollama |
OLLAMA_BASE_URL (key optional) |
Local OpenAI-compatible |
openrouter |
OPENROUTER_API_KEY |
Chat · stream · embeddings (router) |
AIHub::deepseek()->prompt('Explain recursion')->send(); AIHub::mistral('mistral-large-latest')->prompt($prompt)->send(); AIHub::groq()->prompt('Fast answer')->send(); AIHub::ollama('llama3.2')->prompt('Hi from local')->send(); AIHub::openrouter('anthropic/claude-3.5-sonnet')->prompt($prompt)->send();
Extend later via custom base_url: Azure OpenAI, Cohere, Perplexity, Bedrock proxies, etc.
Package layout
src/
AIHubManager.php · PendingRequest.php
Facades/AIHub.php
Providers/ OpenAI · Gemini · Claude · OpenAICompatible (Grok, DeepSeek, Mistral, Groq, Ollama, OpenRouter)
Support/ JsonRecovery · RetryHandler · CostCalculator · Analytics · SettingsStore · ProviderCatalog
Http/Controllers/StudioController.php
Models/ AiRequestLog · AiHubSetting
Jobs/ TrackAiUsageJob
Filament/ AiHubDashboardWidget (optional)
Console/ ConfigureAiHubCommand
config/ai-hub.php
resources/views/studio.blade.php
database/migrations/
Security
Protect /ai-hub in production:
AI_HUB_MIDDLEWARE=auth
Prefer the visual UI for keys on shared hosts; keep .env out of git.
Changelog
See CHANGELOG.md.
License
MIT © Imran Dev BD
Developed by Imran Dev BD
| Portfolio | imrandev.bd |
| linkedin.com/in/imranbru99 | |
| GitHub | github.com/imranbru99 |
| X / Twitter | @imrandev_bd |
| YouTube | @ImranDevBD |
| @imranbru99 | |
| ExpertImranDev | |
| TikTok | @imrandev_bd |
| Threads | @imranbru99 |
| @imrandev_bd | |
| +880 1576-918420 | |
| me@imrandev.bd | |
| All Links | linktr.ee/ExpertImranDev |
Any issue? Contact → imrandev.bd/contact