AI prompts
base on Laravel Async # Laravel Async
https://github.com/saeedvaziry/laravel-async/assets/61919774/069b733a-7307-40ce-80c2-d5c29543cff4
Laravel Async is a simple package for Laravel that enables you to run your code asynchronously without using
the workers and Supervisor!
Unlike the Laravel Process, Symfony Process, or other similar packages, You don't need to wait for the sub-processes in the main process to finish!
```php
use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;
AsyncHandler::dispatch(function () {
sleep(10);
info("Hello from Async process after 10 seconds!");
});
info("dispatched the process!");
```
## Demo
https://youtu.be/0q8ki5JiD2o?si=Pi1X5zV5oM6Ktae3
## How it works?
You can call it a hack or a trick! but Laravel Async uses the background process of the OS to run your code.
It provides a simple Laravel Console Command that unserializes your code and runs it in the background of the OS.
## Supported OS
Currently, it only supports Linux and Unix-based operating systems.
## Installation
You can install the package via Composer:
```bash
composer require saeedvaziry/laravel-async
```
## Configuration
To publish the configuration file, you can run the following command:
```bash
php artisan vendor:publish --provider="SaeedVaziry\LaravelAsync\LaravelAsyncServiceProvider"
```
This will create a `laravel-async.php` file in your `config` directory.
**php_path**
The path to the PHP executable.
The default value which is the path to the PHP binary should work for CLI usage.
However, If you want to use it in web, You should set the path to the PHP binary because the default value will
be the path to the web server's PHP binary like php-fpm.
You can also set via the `.env` file.
```dotenv
LARAVEL_ASYNC_PHP_PATH=/path/to/php
```
## Usage
The usage is very simple and straightforward. You can provide the Closure or your Laravel Job class to the `AsyncHandler` facade.
### Closure
```php
use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;
AsyncHandler::dispatch(function () {
info("Hello from Async process!");
});
```
### Job
You can send Jobs or any other classes that have a `handle` method.
```php
use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;
AsyncHandler::dispatch(new MyJob());
```
### Timeouts
The default timeout is 60 seconds.
This will set a timeout of 10 seconds to the process and if it didn't finish in 10 seconds it will kill the process.
```php
use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;
AsyncHandler::timeout(10)->dispatch(function () {
info("Hello from Async process!");
});
```
You can also dispatch without a timeout!
!!! Be careful about this because if your code gets stuck in an infinite loop, it will drain your server resources.
```php
use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;
AsyncHandler::withoutTimeout()->dispatch(function () {
info("Hello from Async process!");
});
```
## Testing
You can fake the `AsyncHandler`'s facade in your tests and check if the code is dispatched or not.
```php
use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;
AsyncHandler::fake();
// Your code that dispatches the AsyncHandler
AsyncHandler::assertDispatchedCounts(1);
```
You can test to see how many times you dispatched an async process.
## Contributing
Please feel free to submit an issue or open a PR.
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
", Assign "at most 3 tags" to the expected json: {"id":"5734","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"