Ngiler SH3LL 360
Home
Information
Create File
Create Folder
:
/
home
/
tbf
/
tbfguestbe.tbf.ro
/
app
/
Http
/
Controllers
/
Api
/
Information Server
MySQL :
OFF
Perl :
OFF
CURL :
ON
WGET :
OFF
PKEXEC :
OFF
Directive
Local Value
IP Address
89.40.16.97
System
Linux server.atelieruldeit.ro 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
User
tbf
PHP Version
7.3.33
Software
Apache
Doc root
Writable
close
Edit File :
AiGenerateController.php
| Size :
12.52
KB
Copy
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Jobs\GenerateProcedureInstructionsJob; use App\Jobs\GenerateProceduresJob; use App\Jobs\GenerateProcedureStepsJob; use App\Jobs\GenerateResponsibilityJob; use App\Managers\JobManager; use App\Managers\LogManager; use App\Managers\OpenAiManager; use App\Managers\PromptManager; use App\Models\Position; use App\Models\Procedure; use App\Models\Product; use App\Models\Prompt; use App\Models\PromptType; use Exception; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; class AiGenerateController extends Controller { /** * Generate with AI product features for this project * * @param Request $request * * @return JsonResponse */ public function generateEmoji(Request $request): JsonResponse { $validated = $request->validate([ 'text' => 'required|string' ]); $instance = auth()->user()->instance; $prompt = Prompt::where('prompt_type_id', PromptType::EMOJI)->first(); $options = $prompt->toArray(); $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, ['instance' => $instance]); $result = OpenAiManager::chat($validated['text'], $options)->create(); if ($result && isset($result['content']) && isEmoji($result['content'])) { return response()->json([ 'status' => 'success', 'message' => $result, ], 200); } try { LogManager::writeAiWrongResponseLog('warning', ['validated' =>$validated, 'promptId' => $prompt->id, 'result' => $result, 'instance' => $instance]); } catch (\Exception $e) { Log::error($e); } return response()->json([ 'status' => 'error', 'message' => __('general.generate.response_not_ok'), ]); } /** * Generate with AI description * * @param Request $request * * @return JsonResponse */ public function generateDescription(Request $request): JsonResponse { $validated = $request->validate([ 'name' => 'required|string', 'description' => 'required|string' ]); $instance = auth()->user()->instance; $prompt = Prompt::where('prompt_type_id', PromptType::DESCRIPTION)->first(); $options = $prompt->toArray(); $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, ['instance' => $instance]); $promptText = 'Denumire functie: ' . $validated['name'] . "\n Descriere functie: " . $validated['description']; $result = OpenAiManager::chat($promptText, $options)->create(); $finalResult = $validated['description'] ."\n\n=== Generat cu AI (poti sterge acest rand) \n\n" . $result['content']; if ($result && isset($result['content']) && is_string($result['content'])) { return response()->json([ 'status' => 'success', 'message' => $finalResult, ], 200); } try { LogManager::writeAiWrongResponseLog('warning', ['validated' =>$validated, 'promptId' => $prompt->id, 'result' => $result, 'instance' => $instance]); } catch (\Exception $e) { Log::error($e); } return response()->json([ 'status' => 'error', 'message' => __('general.generate.response_not_ok'), ]); } /** * Generate with AI activity suggestion * * @param Request $request * * @return JsonResponse */ public function generateActivitySuggestion(Request $request): JsonResponse { $validated = $request->validate([ 'position_id' => 'required|integer' ]); $instance = auth()->user()->instance; $position = Position::find($validated['position_id']); $prompt = Prompt::where('prompt_type_id', PromptType::ACTIVITY_SUGGESTION)->first(); $options = $prompt->toArray(); $options['resource_id'] = $position->id; $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, ['instance' => $instance]); $promptText = 'Functie: '.$position->name . "\nDescriere functie: " . $position->description; $result = OpenAiManager::chat($promptText, $options)->create(); if ($result) { $position->update([ 'activity_suggestions' => json_decode($result['content']), ]); return response()->json([ "status" => "success", "content" => json_decode($result['content']), "context_id" => $result['context_id'] ], 200); } try { LogManager::writeAiWrongResponseLog('warning', ['validated' =>$validated, 'promptId' => $prompt->id, 'result' => $result, 'instance' => $instance]); } catch (\Exception $e) { Log::error($e); } return response()->json([ 'status' => 'error', 'message' => __('general.generate.response_not_ok'), ]); } /** * Generate with AI responsibilities * * @param Request $request * * @return JsonResponse */ public function generateResponsibilities(Request $request) { $validated = $request->validate([ 'position_id' => 'required|integer' ]); $position = Position::find($validated['position_id']); $position->update(['responsibility_process_status' => Position::PROCESS_STATUS_IN_PROGRESS]); GenerateResponsibilityJob::dispatchSync($position); return response()->json([ 'status' => 'success', ], 200); } /** * Generate with AI procedures * * @param Request $request * * @return JsonResponse */ public function generateProcedures(Request $request) { $validated = $request->validate([ 'position_id' => 'required|integer' ]); $position = Position::find($validated['position_id']); $position->update(['procedure_process_status' => Position::PROCESS_STATUS_IN_PROGRESS]); GenerateProceduresJob::dispatchSync($position); return response()->json([ 'status' => 'success', 'message' => 'Procedura este in curs de generare a pasilor si a manualelor', ], 200); } /** * Generate with AI procedure steps * * @param Request $request * * @return JsonResponse */ public function generateProcedureSteps(Request $request) { $validated = $request->validate([ 'procedure_id' => 'required|integer' ]); $position = Procedure::find($validated['procedure_id']); GenerateProcedureStepsJob::dispatchSync($position); return response()->json([ 'status' => 'success', ], 200); } /** * Generate with AI procedure instructions * * @param Request $request * * @return JsonResponse */ public function generateProcedureInstructions(Request $request) { $validated = $request->validate([ 'procedure_id' => 'required|integer' ]); $procedure = Procedure::find($validated['procedure_id']); GenerateProcedureInstructionsJob::dispatchSync($procedure); return response()->json([ 'status' => 'success', ], 200); } /** * Generate recruitment with AI * * @param Request $request * * @return JsonResponse */ public function generateRecruitment(Request $request) { $validated = $request->validate([ 'position_id' => 'required|integer', 'type' => 'nullable|string|in:details,responsibilities,abilities,email,linkedin,questions', ]); $position = Position::find($validated['position_id']); $batch = JobManager::dispatchRecruitmentJob($position, $validated['type'] ?? null); return response()->json([ 'status' => 'success', ], 200); } /** * Generate with AI - product description * * @param Request $request * * @return JsonResponse */ public function generateProductDescription(Request $request): JsonResponse { $validated = $request->validate([ 'name' => 'required|string', 'description' => 'required|string' ]); $instance = auth()->user()->instance; $prompt = Prompt::where('prompt_type_id', PromptType::PRODUCT_DESCRIPTION)->first(); $options = $prompt->toArray(); $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, ['instance' => $instance]); $promptText = 'Denumire produs: ' . $validated['name'] . "\nDescriere produs: " . $validated['description']; $result = OpenAiManager::chat($promptText, $options)->create(); $finalResult = $validated['description'] ."\n\n=== Generat cu AI (poti sterge acest rand) \n\n" . $result['content']; if ($result && isset($result['content']) && is_string($result['content'])) { return response()->json([ 'status' => 'success', 'message' => $finalResult, ], 200); } try { LogManager::writeAiWrongResponseLog('warning', ['validated' =>$validated, 'promptId' => $prompt->id, 'result' => $result, 'instance' => $instance]); } catch (\Exception $e) { Log::error($e); } return response()->json([ 'status' => 'error', 'message' => __('general.generate.response_not_ok'), ]); } /** * Generate with AI - product attributes * * @param Request $request * @param Product $product * * @return JsonResponse */ public function generateProductAttribute(Request $request, Product $product): JsonResponse { $validated = $request->validate([ 'attribute-type' => 'required|string|in:characteristic,differentiation,warranty,objection', ]); $instance = auth()->user()->instance; $promptType = constant('App\Models\PromptType::PRODUCT_'.strtoupper($validated['attribute-type'])); $prompt = Prompt::where('prompt_type_id', $promptType)->first(); $attribute = ''; switch ($validated['attribute-type']) { case 'characteristic': $attribute = 'characteristics'; break; case 'differentiation': $attribute = 'differentiations'; break; case 'warranty': $attribute = 'warranties'; break; case 'objection': $attribute = 'objections'; break; default: throw new Exception('Unexpected attribute type: ' . $validated['attribute-type']); break; } $additionalData = [ 'instance' => $instance, 'product' => $product, $attribute => $product->$attribute, ]; $options = $prompt->toArray(); $options['resource_id'] = $product->id; $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $promptText = PromptManager::getPromptText($prompt->prompt, $additionalData); $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content']) && is_string($result['content'])) { return response()->json([ 'status' => 'success', 'message' => $result['content'], ], 200); } try { LogManager::writeAiWrongResponseLog('warning', ['validated' =>$validated, 'promptId' => $prompt->id, 'result' => $result, 'instance' => $instance]); } catch (\Exception $e) { Log::error($e); } return response()->json([ 'status' => 'error', 'message' => __('general.generate.response_not_ok'), ]); } }
Back