floriandomgjoni / laravel-ai-factory
Laravel package for generating realistic factory data using AI (OpenAI, Gemini, DeepSeek) with support for manual and hardcoded fields, model events, and bulk inserts.
Fund package maintenance!
fdomgjoni99
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0||^12.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9||^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0.0||^9.0.0||^8.22.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 not auto-updated.
Last update: 2025-06-12 12:35:07 UTC
README
Laravel AI Factory is a developer-friendly package for generating realistic test data using AI models. It integrates seamlessly with Laravel factories and supports both AI-generated and manually defined fields, with the option to use bulk or individual inserts.
๐ Features
- โ Generate factory data using AI prompts
- โ Supports OpenAI - Gemini and DeepSeek support coming soon...
- โ Mix AI-generated fields with hardcoded or Faker-generated fields
- โ Optional bulk insert for performance (without triggering model events)
- โ Easy to extend and override
๐ฆ Installation
composer require floriandomgjoni/laravel-ai-factory
โ๏ธ Configuration
Publish the config:
php artisan vendor:publish --tag=ai-factory-config
Update your .env
with the appropriate API keys:
AI_FACTORY_DRIVER=openai AI_FACTORY_OPENAI_API_KEY=your-api-key AI_FACTORY_OPENAI_MODEL=gpt-4o-mini
or, for a local LLM:
AI_FACTORY_DRIVER=local AI_FACTORY_LOCAL_URL=http://localhost:8080/v1/chat/completions AI_FACTORY_LOCAL_API_KEY="" AI_FACTORY_LOCAL_MODEL=Default
๐ง Defining AI Fields
In your factory, use the HasAIFactory
trait and define the aiFields()
method:
<?php use FlorianDomgjoni\AIFactory\Concerns\HasAIFactory; class UserFactory extends Factory { use HasAIFactory; protected $model = \App\Models\User::class; public function aiFields(): array { return [ 'name' => 'Generate a realistic full name', 'email' => fn () => fake()->unique()->safeEmail(), 'password' => fn () => bcrypt('password'), 'api_token' => fn () => Str::random(60), ]; } }
- Use a string for AI-generated fields (prompt).
- Use a callable for manual or faker-based fields.
You also need to fill the $model property with the model class inside the factory. It is required in order to function properly.
๐ Usage
Basic Usage
User::factory()->count(5)->createWithAI();
Override Fields
User::factory()->count(3)->createWithAI([ 'email' => fn () => fake()->unique()->safeEmail(), 'role' => fn () => 'admin' ]);
Bulk Insert (faster, skips model events)
User::factory()->count(100)->createWithAI([], true);
๐งช Example Prompt
[ 'title' => 'Generate a blog post title related to technology', 'content' => 'Generate a paragraph of blog content about AI', 'published_at' => fn () => now()->subDays(rand(1, 30)), ]
๐ Config File
return [ 'driver' => env('AI_FACTORY_DRIVER', 'openai'), 'openai' => [ 'api_key' => env('AI_FACTORY_OPENAI_API_KEY'), 'model' => env('AI_FACTORY_OPENAI_MODEL', 'gpt-4o-mini'), ], 'local' => [ 'url' => env('AI_FACTORY_LOCAL_URL', 'http://localhost:8080'), 'api_key' => env('AI_FACTORY_LOCAL_API_KEY', null), 'model' => env('AI_FACTORY_LOCAL_MODEL', null), ], ];
๐ก Error Handling
- AI data generation is wrapped in try/catch.
- Model creation errors are logged individually.
- Invalid JSON or failed API calls will throw descriptive exceptions.
๐ License
This package is open-sourced software licensed under the MIT license.