Ngiler SH3LL 360
Home
Information
Create File
Create Folder
:
/
home
/
tbf
/
tbfguestbe.tbf.ro
/
app
/
Managers
/
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 :
PromptManager.php
| Size :
74.34
KB
Copy
<?php namespace App\Managers; use App\Models\Activity; use App\Models\Instance; use App\Models\Position; use App\Models\Procedure; use App\Models\Prompt; use App\Models\PromptReplacement; use App\Models\PromptType; use App\Models\Recruitment; use App\Models\Responsibility; use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; class PromptManager { /** * Generate emoji from AI * * @param string $text * @param Instance $instance * * @return string|null */ public static function generateEmoji(string $text, Instance $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($text, $options)->create(); if ($result && isset($result['content']) && isEmoji($result['content'])) { return $result['content']; } self::handleError($prompt, $result); return ''; } /** * Generate activity title from AI * * @param string $text * @param Instance $instance * * @return string|null */ public static function generateActivityTitle(string $text, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::TITLE)->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($text, $options)->create(); if ($result && isset($result['content']) && is_string($result['content'])) { return $result['content']; } self::handleError($prompt, $result); return null; } /** * Generate activity suggestion from AI * * @param string $position_text * @param Instance $instance * * @return string|array */ public static function generateActivitySuggestion(string $positionText, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::ACTIVITY_SUGGESTION)->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($positionText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process position activities with AI * * @param collect $positionActivities * @param Position $position * @param Instance $instance * * @return string|array */ public static function processPositionActivities($positionActivities, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::ACTIVITY_PROCESS)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, ]; $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, $additionalData); $activitiesTextList = []; foreach ($positionActivities as $key => $activity) { $activityText = '- id: #' . $activity->id . ', activitate: ' . $activity->description . ';'; $activitiesTextList[] = $activityText; } $activitiesText = implode("\n", $activitiesTextList); $result = OpenAiManager::chat($activitiesText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process responsibility description with AI * * @param Collection $activities * @param Position $position * @param Instance $instance * * @return string|array */ public static function generateResponsibilities(Collection $activities, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RESPONSIBILITY)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $activities, ]; $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, $additionalData); $promptText = PromptManager::getPromptText($prompt->prompt, $additionalData); $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process responsibility details with AI * * @param Responsibility $responsibility * @param Position $position * @param Instance $instance * * @return string|array */ public static function generateResponsibilityDetails(Responsibility $responsibility, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RESPONSIBILITY_DETAILS)->first(); $activities = Activity::whereIn('id', $responsibility->activity_ids)->whereNull('user_id')->get(); $additionalData = [ 'instance' => $instance, 'position' => $position, ]; $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, $additionalData); $promptText = "Responsabilitate: {$responsibility->name}\n"; $promptText .= "Activitati zilnice care stau la baza responsabilitatii:\n"; $promptActivities = $activities->map(fn($item) => "Activitate: {$item['description']}. Probleme intampinate: {$item['problems']}. Importanta: {$item?->importance?->name}\n"); $promptActivities = self::formatEnumData($promptActivities->toArray()); $promptText .= $promptActivities; $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate one responsibility with AI * * @param string $text * @param Position $position * @param Instance $instance * * @return string|array */ public static function generateResponsibility(string $text, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_ONE_RESPONSIBILITY)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, ]; $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, $additionalData); $result = OpenAiManager::chat($text, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Modify responsibility with AI * * @param string $text * @param Position $position * @param Responsibility $responsibility * @param Instance $instance * * @return string|array */ public static function generateResponsibilityModification(string $text, Position $position, Responsibility $responsibility, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RESPONSIBILITY_MODIFICATION)->first(); $positionAiActivities = null; if ($responsibility->activity_ids) { $positionAiActivities = Activity::whereIn('id', $responsibility->activity_ids)->whereNull('user_id')->get(); } $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $positionAiActivities ]; $options = $prompt->toArray(); $options['resource_id'] = $responsibility->id; $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $promptText = "Responsabilitate: \n- descriere: " . $responsibility->description .' , frecventa: '. $responsibility->frequency .' , kpi: '. $responsibility->kpi .' , verificare: '. $responsibility->verification .' , numar maxim de greseli: '. $responsibility->description . "\n"; $promptText .= "Informatii noi furnizate: " . $text .'.'; $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Split responsibility with AI * * @param string $text * @param Position $position * @param Responsibility $responsibility * @param Instance $instance * * @return string|array */ public static function generateResponsibilitySplit(Position $position, Responsibility $responsibility, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RESPONSIBILITY_SPLIT)->first(); $positionAiActivities = null; if ($responsibility->activity_ids) { $positionAiActivities = Activity::whereIn('id', $responsibility->activity_ids)->whereNull('user_id')->get(); } $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $positionAiActivities ]; $options = $prompt->toArray(); $options['resource_id'] = $responsibility->id; $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $promptText = "Responsabilitate: \nDescriere: " . $responsibility->description . "\nFrecventa: " . $responsibility->frequency . "\nKpi: " . $responsibility->kpi . "\nVerificare: ". $responsibility->verification ."\nNumar maxim de greseli: ". $responsibility->mistakes_limit . ".\n"; if ($responsibility->activity_ids) { $promptText .= "Activitatiile pe care se bazeaza responsabilitatea:\n"; $activities = $positionAiActivities->map(fn($item) => "- id #{$item['id']}. Activitate: {$item['description']}. Probleme intampinate: {$item['problems']}. Importanta: {$item?->importance?->name}\n"); $promptText .= self::formatEnumData($activities->toArray()); } $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process recruitment with AI * * @param Collection $activities * @param Position $position * @param Instance $instance * * @return string|array */ public static function generateRecruitment(Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RECRUITMENT)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $position->activities()->where('generated_by_ai', true)->get(), ]; $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, $additionalData); $promptText = PromptManager::getPromptText($prompt->prompt, $additionalData); $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process recruitment details with AI * * @param Collection $activities * @param Recruitment $recruitment * @param Instance $instance * * @return string|array */ public static function generateRecruitmentDetails(Recruitment $recruitment, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RECRUITMENT_DETAILS)->first(); $additionalData = [ 'instance' => $instance, ]; $options = $prompt->toArray(); $options['resource_id'] = $recruitment->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process recruitment responsibility with AI * * @param Collection $activities * @param Recruitment $recruitment * @param Instance $instance * * @return string|array */ public static function generateRecruitmentResponsibilities(Recruitment $recruitment, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RECRUITMENT_RESPONSIBILITIES)->first(); $additionalData = [ 'instance' => $instance, 'activities' => $recruitment->position->activities()->where('generated_by_ai', true)->get(), ]; $options = $prompt->toArray(); $options['resource_id'] = $recruitment->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process recruitment abilities with AI * * @param Collection $activities * @param Recruitment $recruitment * @param Instance $instance * * @return string|array */ public static function generateRecruitmentAbilities(Recruitment $recruitment, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RECRUITMENT_ABILITIES)->first(); $additionalData = [ 'instance' => $instance, 'activities' => $recruitment->position->activities()->where('generated_by_ai', true)->get(), ]; $options = $prompt->toArray(); $options['resource_id'] = $recruitment->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process recruitment email with AI * * @param Collection $activities * @param Recruitment $recruitment * @param Instance $instance * * @return string|array */ public static function generateRecruitmentEmail(Recruitment $recruitment, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RECRUITMENT_EMAIL)->first(); $additionalData = [ 'instance' => $instance, 'recruitment' => $recruitment ]; $options = $prompt->toArray(); $options['resource_id'] = $recruitment->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process recruitment message (linkedin) with AI * * @param Collection $activities * @param Recruitment $recruitment * @param Instance $instance * * @return string|array */ public static function generateRecruitmentMessage(Recruitment $recruitment, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RECRUITMENT_MESSAGE)->first(); $additionalData = [ 'instance' => $instance, 'recruitment' => $recruitment ]; $options = $prompt->toArray(); $options['resource_id'] = $recruitment->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process recruitment responsibility with AI * * @param Collection $activities * @param Recruitment $recruitment * @param Instance $instance * * @return string|array */ public static function generateRecruitmentQuestions(Recruitment $recruitment, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_RECRUITMENT_QUESTIONS)->first(); $additionalData = [ 'instance' => $instance, ]; $options = $prompt->toArray(); $options['resource_id'] = $recruitment->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Process procedures with AI * * @param Collection $activities * @param Position $position * @param Instance $instance * * @return string|array */ public static function generateProcedures(Collection $activities, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_PROCEDURE)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $activities, ]; $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, $additionalData); $promptText = PromptManager::getPromptText($prompt->prompt, $additionalData); $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate one procedure with AI * * @param string $text * @param Position $position * @param Instance $instance * * @return string|array */ public static function generateProcedure(string $text, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_ONE_PROCEDURE)->first(); $positionAiActivities = Activity::where('position_id', $position->id)->whereNull('user_id')->get(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $positionAiActivities, ]; $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, $additionalData); $options['system_input'] .= "Informatii de care sa ti cont:\n" . $text; $promptText = PromptManager::getPromptText($prompt->prompt, $additionalData); $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Modify responsibility with AI * * @param string $text * @param Position $position * @param Procedure $procedure * @param Instance $instance * * @return string|array */ public static function generateProcedureModification(string $text, Position $position, Procedure $procedure, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_PROCEDURE_MODIFICATION)->first(); $positionAiActivities = null; if ($procedure->activity_ids) { $positionAiActivities = Activity::whereIn('id', $procedure->activity_ids)->whereNull('user_id')->get(); } $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $positionAiActivities ]; $options = $prompt->toArray(); $options['resource_id'] = $procedure->id; $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $options['system_input'] .= "Informatii noi furnizate: " . $text .'.'; $promptText = "Procedura: \n- titlu: " . $procedure->title .' , procedure_trigger: '. $procedure->procedure_trigger ."\n"; $steps = $procedure->steps->map(fn($item) => "- step id #{$item['id']}, step: {$item['description']}, instructiuni: {$item['instruction']}; \n"); $promptText .= "Pasii procedurii: \n"; $promptText .= self::formatEnumData($steps->toArray()); $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate process steps for procedure with AI * * @param Procedure $procedure * @param Collection|null $activities * @param Position $position * @param Instance $instance * * @return string|array */ public static function generateProcedureSteps(Procedure $procedure, Collection|null $activities, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_PROCEDURE_STEP)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $activities, 'procedure' => $procedure, ]; $options = $prompt->toArray(); $options['resource_id'] = $procedure->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate process instructions for procedure with AI * * @param Procedure $procedure * @param Collection $activities * @param Instance $instance * * @return string|array */ public static function generateProcedureInstructions(Procedure $procedure, Collection $activities, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_PROCEDURE_INSTRUCTION)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $activities, 'procedure' => $procedure, 'steps' => $procedure->steps, ]; $options = $prompt->toArray(); $options['resource_id'] = $procedure->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate manual for procedure with AI * * @param Procedure $procedure * @param Collection|null $activities * @param Instance $instance * * @return string|array */ public static function generateProcedureManual(Procedure $procedure, Collection|null $activities, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_PROCEDURE_MANUAL_THEORY)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $activities, 'procedure' => $procedure, 'steps' => $procedure->steps, ]; $options = $prompt->toArray(); $options['resource_id'] = $procedure->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate manual role-play for procedure with AI * * @param Procedure $procedure * @param Collection|null $activities * @param Instance $instance * * @return string|array */ public static function generateProcedureManualRolePlay(Procedure $procedure, Collection|null $activities, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_PROCEDURE_MANUAL_ROLE_PLAY)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $activities, 'procedure' => $procedure, 'steps' => $procedure->steps, 'manual' => $procedure->manual, ]; $options = $prompt->toArray(); $options['resource_id'] = $procedure->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate manual practically for procedure with AI * * @param Procedure $procedure * @param Collection|null $activities * @param Instance $instance * * @return string|array */ public static function generateProcedureManualPractically(Procedure $procedure, Collection|null $activities, Position $position, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_PROCEDURE_MANUAL_PRACTICALLY)->first(); $additionalData = [ 'instance' => $instance, 'position' => $position, 'activities' => $activities, 'procedure' => $procedure, 'steps' => $procedure->steps, 'manual' => $procedure->manual, ]; $options = $prompt->toArray(); $options['resource_id'] = $procedure->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process phone with AI * * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessPhone(Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance); $options = $prompt->toArray(); $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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process email with AI * * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessEmail(Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance); $options = $prompt->toArray(); $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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process email modification with AI * * @param string $text * @param string $table * @param mixed $saleProcess // can be SaleProcessEmail, SaleProcessPhone SaleProcessText ... * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessModification(string $text, string $table, mixed $saleProcess, Instance $instance) { $constantName = str($saleProcess->code)->upper() . '_MODIFICATION'; $constantValue = constant('App\Models\PromptType::' . $constantName); $prompt = Prompt::where('prompt_type_id', $constantValue)->first(); $product = $instance->product; $characteristics = $product->characteristics; $differentiations = $product->differentiations; $warranties = $product->warranties; $objections = $product->objections; $upsell = $product->upsell; $template = $table . '_template'; $additionalData = [ 'instance' => $instance, 'product' => $product, 'characteristics' => $characteristics, 'differentiations' => $differentiations, 'objections' => $objections, 'warranties' => $warranties, 'upsell' => $upsell, $template => $saleProcess, 'instructions' => $text, ]; $options = $prompt->toArray(); $options['resource_id'] = $saleProcess->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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process sms/text with AI * * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessSms(Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance); $options = $prompt->toArray(); $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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process ad with AI * * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessAd(Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance); $options = $prompt->toArray(); $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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process landing page with AI* * * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessPage(Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance); $additionalData['landing_page'] = $instance->saleProcessPages->first(); $options = $prompt->toArray(); $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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process landing page elements with AI * * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessPageElement(Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance); $additionalData['landing_page'] = $instance->saleProcessPages->first(); $options = $prompt->toArray(); $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'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process resourcem starting with tools with AI * * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessResource(Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance, $type); $options = $prompt->toArray(); $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(); Log::info('Sale process Resource - a generat tools - instance #' . $instance->id ); if ($result && isset($result['content'])) { $resultTitles = PromptManager::generateSaleProcessResourceTitles($result['content'], $instance, PromptType::GENERATE_SALE_RESOURCE_TITLES); Log::info('Sale process Resource - a generat titluri - instance #' . $instance->id ); if ($resultTitles) { $resultTitle = PromptManager::generateSaleProcessResourceTitle($resultTitles, $instance, PromptType::GENERATE_SALE_RESOURCE_TITLE); Log::info('Sale process Resource - a generat titlul - instance #' . $instance->id ); if ($resultTitle) { $promptText = "Titlu: " . $resultTitle ."\n"; $promptText .= "Lista de unelte:\n"; $promptText .= $result['content']; $resultToolsDescriptions = PromptManager::generateSaleProcessToolsDescriptions($promptText, $instance, PromptType::GENERATE_SALE_RESOURCE_TOOLS_DESCRIPTIONS); Log::info('Sale process Resource - a generat descrierile - instance #' . $instance->id ); if ($resultToolsDescriptions) { return $resultToolsDescriptions; } else { self::handleError($prompt, $result); return []; } self::handleError($prompt, $result); return []; } self::handleError($prompt, $result); return []; } self::handleError($prompt, $result); return []; } self::handleError($prompt, $result); return []; } /** * Generate sales process resource titles with AI * * @param string $text * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessResourceTitles(string $text, Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance, $type); $options = $prompt->toArray(); $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $promptText = $text; $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process resource final title with AI * * @param string $text * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessResourceTitle(string $text, Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance, $type); $options = $prompt->toArray(); $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $promptText = $text; $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Generate sales process resource tools description with AI * * @param string $text * @param Instance $instance * @param int $type * * @return string|array */ public static function generateSaleProcessToolsDescriptions(string $text, Instance $instance, int $type) { $prompt = Prompt::where('prompt_type_id', $type)->first(); $additionalData = self::prepareSaleProcessAdditionalData($instance, $type); $options = $prompt->toArray(); $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $promptText = $text; $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Prepares additional data required for the sales process * * @param Instance $instance * @param int|null $type * * @return array */ private static function prepareSaleProcessAdditionalData(Instance $instance, int $type = 0) { $product = $instance->product; $audience = $product->audience; $options = $product->audience->options; $characteristics = $product->characteristics; $differentiations = $product->differentiations; $warranties = $product->warranties; $objections = $product->objections; $upsell = $product->upsell; $landingPageElements = !in_array($type, [PromptType::GENERATE_SALE_RESOURCE, PromptType::GENERATE_SALE_RESOURCE_TITLES, PromptType::GENERATE_SALE_RESOURCE_TITLE, PromptType::GENERATE_SALE_RESOURCE_TOOLS_DESCRIPTIONS]) ? $instance->saleProcessPages()->latest()->first()?->elements() : null; return [ 'instance' => $instance, 'product' => $product, 'audience' => $audience, 'options' => $options, 'characteristics' => $characteristics, 'differentiations' => $differentiations, 'objections' => $objections, 'warranties' => $warranties, 'upsell' => $upsell, 'landing_page_elements' => $landingPageElements ]; } /** * Correct wrong json returned by AI * * @param string $text * @param int $promptId * @param Instance $instance * * @return string|array */ public static function generateCorrectJson(string $text, int $promptId, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_CORRECT_JSON)->first(); $incorrectPrompt = Prompt::find($promptId); $additionalData = [ 'instance' => $instance, ]; $options = $prompt->toArray(); $options['prompt_id'] = $prompt->id; $options['instance_id'] = $instance->id; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $options['system_input'] .= $incorrectPrompt->return_json_schema; $promptText = $text; $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Transform text returned by AI to Json through AI * * @param string $text * @param int $promptId * @param Instance $instance * * @return string|array */ public static function generateJsonFromText(string $text, int $promptId, Instance $instance) { $prompt = Prompt::where('prompt_type_id', PromptType::GENERATE_JSON_FROM_TEXT)->first(); $promptToConvert = Prompt::find($promptId); $additionalData = [ 'instance' => $instance, ]; $options = $prompt->toArray(); $options['prompt_id'] = $promptId; $options['resource_id'] = $promptId; $options['instance_id'] = $instance->id; $options['return_json_schema'] = $promptToConvert->return_json_schema; $options['system_input'] = PromptManager::getPromptText($prompt->context, $additionalData); $promptText = $text; $result = OpenAiManager::chat($promptText, $options)->create(); if ($result && isset($result['content'])){ return $result['content']; } self::handleError($prompt, $result); return []; } /** * Handles errors that may occur during the execution of the primary function. * * @param Prompt $prompt * @param mixed $result * * @return void */ private static function handleError($prompt, $result) { try { LogManager::writeAiWrongResponseLog('warning', ['promptId' => $prompt->id, 'result' => $result]); } catch (\Exception $e) { Log::error($e); } } /** * Make final form for context|prompt replacing variables and php code * * @param string $prompt * @param array $additionalData * * @return string */ public static function getPromptText(string $prompt, array $additionalData = []): string { $instance = $additionalData['instance'] ?? auth()->user()->instance; $replacements = []; $promptReplacements = PromptReplacement::orderByDesc(DB::raw('LENGTH(`key`)'))->get(); foreach ($promptReplacements as $replacement) { $result = self::promptReplacement($replacement['key'], $instance, $additionalData); $replacements[$replacement['key']] = $result; } $promptText = interpret($prompt, $replacements); $finalPrompt = self::processPhpText($promptText); return $finalPrompt; } /** * Replace variables from prompts->prompt with database value */ public static function promptReplacement(string $key, Instance $instance, array $data) { switch ($key) { case 'company_name': return $instance ? $instance->name : ''; case 'company_website': return $instance ? $instance->website : ''; case 'company_phone': return $instance ? $instance->phone : ''; case 'company_email': return $instance ? $instance->email : ''; case 'company_description': return $instance ? $instance->description : ''; case 'company_experience': return $instance ? $instance->experience : ''; case 'company_employee_number': return $instance ? $instance->employee_number : ''; case 'company_director_number': return $instance ? $instance->director_number : ''; case 'company_turnover': return $instance ? $instance->turnover : ''; case 'company_important_partners': return $instance ? $instance->important_partners : ''; case 'company_important_collaborators': return $instance ? $instance->important_collaborators : ''; case 'company_mission': return $instance ? $instance->mission : ''; case 'company_vision': return $instance ? $instance->vision : ''; case 'company_values': return $instance ? $instance->values : ''; case 'company_total_customers': return $instance ? $instance->total_customers : ''; case 'company_products_and_services': return $instance ? $instance->products_and_services : ''; case 'company_customer_feedback': return $instance ? $instance->customer_feedback : ''; case 'company_customer_feedback_positive': return $instance ? $instance->customer_feedback_positive : ''; case 'company_customer_feedback_negative': return $instance ? $instance->customer_feedback_negative : ''; case 'company_customer_feedback_mixt': return $instance ? $instance->customer_feedback_mixt : ''; case 'company_industry_innovations': return $instance ? $instance->industry_innovations : ''; case 'company_certifications': return $instance ? $instance->certifications : ''; case 'company_awards': return $instance ? $instance->awards : ''; case 'company_knowhow': return $instance ? $instance->knowhow : ''; case 'position_name': return isset($data['position']) ? $data['position']->name : ''; case 'position_description': return isset($data['position']) ? $data['position']->description : ''; case 'product_name': return isset($data['product']) ? $data['product']->name : ''; case 'product_description': return isset($data['product']) ? $data['product']->description : ''; case 'product_brand': return isset($data['product']) ? $data['product']->brand : ''; case 'product_market_segment': return isset($data['product']) ? $data['product']->market_segment : ''; case 'audience_name': return isset($data['audience']) ? $data['audience']->name : ''; case 'audience_description': return isset($data['audience']) ? $data['audience']->description : ''; case 'audience_location': return isset($data['audience']) ? $data['audience']->location : ''; case 'audience_professional_level': return isset($data['audience']) ? $data['audience']->professional_level : ''; case 'audience_hobby': return isset($data['audience']) ? $data['audience']->hobby : ''; case 'product_upsell_name': if (isset($data['product'])) { return isset($data['upsell']) ? $data['upsell']->name : ''; } return ''; case 'product_upsell_characteristics': if (isset($data['product'])) { return isset($data['upsell']) ? $data['upsell']->characteristics : ''; } return ''; case 'product_upsell_list_price': if (isset($data['product'])) { return isset($data['upsell']) ? $data['upsell']->list_price : ''; } return ''; case 'product_upsell_offer': if (isset($data['product'])) { return isset($data['upsell']) ? $data['upsell']->upsell_offer : ''; } case 'product_upsell_after_rejection_offer': if (isset($data['product'])) { return isset($data['upsell']) ? $data['upsell']->upsell_after_rejection_offer : ''; } return ''; case 'product_characteristics.enum': if (isset($data['product']) && isset($data['characteristics'])) { $characteristics = $data['characteristics']->map(fn($item) => "- {$item['description']};\n"); return self::formatEnumData($characteristics->toArray()); } return ''; case 'product_differentiations.enum': if (isset($data['product']) && isset($data['differentiations'])) { $differentiations = $data['differentiations']->map(fn($item) => "- {$item['description']};\n"); return self::formatEnumData($differentiations->toArray()); } return ''; case 'product_warranties.enum': if (isset($data['product']) && isset($data['warranties'])) { $warranties = $data['warranties']->map(fn($item) => "- {$item['description']};\n"); return self::formatEnumData($warranties->toArray()); } case 'product_objections.enum': if (isset($data['product']) && isset($data['objections'])) { $objections = $data['objections']->map(fn($item) => "- {$item['description']};\n"); return self::formatEnumData($objections->toArray()); } return ''; case 'activities.count': if (isset($data['activities'])) { $activitiesCount = $data['activities']->count(); return $activitiesCount; } return ''; case 'activities.half_count': if (isset($data['activities'])) { $activitiesCount = round($data['activities']->count()/2); return $activitiesCount; } return ''; case 'activities.enum': if (isset($data['activities'])) { $activities = $data['activities']->map(fn($item) => "- id #{$item['id']}. Activitate: {$item['description']}. Probleme intampinate: {$item['problems']}. Importanta: {$item?->importance?->name}\n"); return self::formatEnumData($activities->toArray()); } return ''; case 'procedure_with_activities': if (isset($data['procedure'])) { $procedureText = "Procedura de lucru: {$data['procedure']['title']} "; if (isset($data['activities'])) { $activities = $data['activities']->map(fn($item) => "Activitate zilnica: {$item['description']}\nProbleme intampinate: {$item['problems']}, \n"); $procedureText .= " bazata pe urmatoarele activitati:\n" . self::formatEnumData($activities->toArray()); return $procedureText; } } return ''; case 'procedure_with_steps_manual_and_activities': if (isset($data['procedure'])) { $procedureText = "Procedura de lucru id #{$data['procedure']['id']}, Titlu: {$data['procedure']['title']}, "; if (isset($data['activities'])) { $activities = $data['activities']->map(fn($item) => "Activitate id #{$item['id']} Position_id: {$item['position_id']} - Titlu: {$item['title']}; Descriere: {$item['description']}; Probleme: {$item['problems']}, \n"); $procedureText .= " bazata pe urmatoarele activitati:\n " . self::formatEnumData($activities->toArray()) . ".\n"; return $procedureText; } if (isset($data['steps'])) { $steps = $data['steps']->map(fn($item) => "- step id #{$item['id']}, step: {$item['description']}, instructiuni: {$item['instruction']}; \n"); $procedureText .= "Pasii procedurii: \n"; $procedureText .= self::formatEnumData($steps->toArray()); } if (isset($data['activities'])) { $procedureText = "Activitatiile procedurii: \n"; $activities = $data['activities']->map(fn($item) => "Activitate id #{$item['id']} Position_id: {$item['position_id']} - Titlu: {$item['title']}; Descriere: {$item['description']}; Probleme: {$item['problems']}, \n"); $procedureText .= " bazata pe urmatoarele activitati:\n " . self::formatEnumData($activities->toArray()); return $procedureText; } if (isset($data['manual'])) { $procedureText .= "Manual de lucru teoretic:\n{$data['manual']->theoretic}\n\n"; $procedureText .= "Manual de lucru role play:\n{$data['manual']->role_play}\n\n"; $procedureText .= "Manual de lucru practic:\n{$data['manual']->practically}\n\n"; return $procedureText; } } return ''; case 'procedure_steps': if (isset($data['procedure'])) { if (isset($data['steps'])) { $steps = $data['steps']->map(fn($item) => "- step id #{$item['id']}, step: {$item['description']}, instructiuni: {$item['instruction']}; \n");; $procedureText = self::formatEnumData($steps->toArray()); return $procedureText; } } return ''; case 'procedure_steps_with_instructions': if (isset($data['procedure'])) { if (isset($data['steps'])) { $key = 0; $steps = $data['steps']->map(function($item) use(&$key) { $key++; return "Pasul {$key}: {$item['description']}\nInstructiuni: {$item['instruction']}\n"; }); $procedureText = self::formatEnumData($steps->toArray()); return $procedureText; } } return ''; case 'procedure_theoretic_manual': if (isset($data['procedure'])) { if (isset($data['manual'])) { return $data['manual']->theoretic; } } case 'procedure_role_play_manual': if (isset($data['procedure'])) { if (isset($data['manual'])) { return $data['manual']->role_play; } } return ''; case 'procedure_practically_manual': if (isset($data['procedure'])) { if (isset($data['manual'])) { return $data['manual']->practically; } } return ''; case 'email_template': if (isset($data['email_template'])) { $text = "Sablon email: \nsubiect: " . $data['email_template']->subject .' , message: '. $data['email_template']->message .' , expeditor: '. $data['email_template']->sender .' , send_time: '. $data['email_template']->send_time . "\n"; return $text; } return ''; case 'phone_template': if (isset($data['phone_template'])) { $text = "Sablon telefon: \script: " . $data['phone_template']->script .' , responsible: '. $data['phone_template']->responsible .' , recipient: '. $data['phone_template']->recipient . "\n"; return $text; } return ''; case 'text_template': if (isset($data['text_template'])) { $text = "Sablon sms: \nmessage: ". $data['text_template']->message .' , sender: '. $data['text_template']->sender .' , send_time: '. $data['text_template']->send_time . "\n"; return $text; } return ''; case 'ad_template': if (isset($data['ad_template'])) { $text = "Sablon reclama: \nHeadline: " . $data['ad_template']->headline ."\nDescription: ". $data['ad_template']->description . "\nImage description: ". $data['ad_template']->image_description . "\n"; return $text; } return ''; case 'instructions': if (isset($data['instructions'])) { return $data['instructions']; } return ''; case 'landing_page_headline': if (isset($data['landing_page'])) { return $data['landing_page']->headline; } return ''; case 'landing_page_subheadline': if (isset($data['landing_page'])) { return $data['landing_page']->subheadline; } return ''; case 'landing_page_main_cta': if (isset($data['landing_page'])) { return $data['landing_page']->main_cta; } return ''; case 'landing_page_headline_secondary_cta': if (isset($data['landing_page'])) { return $data['landing_page']->secondary_cta; } return ''; case 'landing_page_benefit_headline': if (isset($data['landing_page_elements'])) { return $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_benefits')->first()?->headline; } return ''; case 'landing_page_benefit_subheadline': if (isset($data['landing_page_elements'])) { return $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_benefits')->first()?->subheadline; } return ''; case 'landing_page_benefit_items': if (isset($data['landing_page_elements'])) { $list = $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_benefits')->first()?->items; if ($list) { $descriptionList = array_map(function ($item) { return "- {$item['description']}\n"; }, $list); return self::formatEnumData($descriptionList); } return ''; } return ''; case 'landing_page_differentiation_headline': if (isset($data['landing_page_elements'])) { return $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_differentiations')->first()?->headline; } return ''; case 'landing_page_differentiation_subheadline': if (isset($data['landing_page_elements'])) { return $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_differentiations')->first()?->subheadline; } return ''; case 'landing_page_differentiation_items': if (isset($data['landing_page_elements'])) { $list = $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_differentiations')->first()?->items; if ($list) { $descriptionList = array_map(function ($item) { return "- {$item['description']}\n"; }, $list); return self::formatEnumData($descriptionList); } return ''; } return ''; case 'landing_page_testimonial_items': if (isset($data['landing_page_elements'])) { $listArray = []; $testimonial1 = $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_testimonial_1')->first()?->items; if ($testimonial1) { array_push($listArray, $testimonial1); } $testimonial2 = $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_testimonial_2')->first()?->items; if ($testimonial2) { array_push($listArray, $testimonial2); } $testimonials = $data['landing_page_elements']->clone()->where('code', 'generate_sale_page_testimonials')->first()?->items; if ($testimonials) { foreach ($testimonials as $item) { array_push($listArray, $item); } } if (!empty($listArray)) { $descriptionList = array_map(function ($item) { return "```\nClient: {$item['name']}\nFunctie/Despre: {$item['position']}\nTestimonial: {$item['description']}\n"; }, $listArray); return self::formatEnumData($descriptionList); } return ''; } return ''; case 'audience_gender': $audience_gender = $instance?->product?->audience?->options()->where('category', 'audience_gender')->first(); return $audience_gender ? $audience_gender->name : 'Oricare'; case 'audience_marital_status': $audience_marital_status = $instance?->product?->audience?->options()->where('category', 'audience_marital_status')->first(); return $audience_marital_status ? $audience_marital_status->name : 'Oricare'; case 'audience_child': $audience_child = $instance?->product?->audience?->options()->where('category', 'audience_child')->first(); return $audience_child ? $audience_child->name : 'Oricare'; case 'audience_age': $audience_age = $instance?->product?->audience?->options()->where('category', 'audience_age')->first(); return $audience_age ? $audience_age->name : 'Oricare'; case 'audience_tone': $audience_tone = $instance?->product?->audience?->options()->where('category', 'audience_tone')->first(); return $audience_tone ? $audience_tone->name : 'Oricare'; case 'sale_process_pages_headline': $sale_process_pages = $instance->saleProcessPages()->first(); return $sale_process_pages ? $sale_process_pages->headline : ''; case 'sale_process_pages_subheadline': $sale_process_pages = $instance->saleProcessPages()->first(); return $sale_process_pages ? $sale_process_pages->subheadline : ''; case 'list_offer': $list_offer = $instance?->product?->offers()->where('type', 'list_offer')->first(); return $list_offer ? 'Ofertă de listă: '.$list_offer->list_price.'\n Valabilitate: '.$list_offer->validity.'\n Limită: '.$list_offer->limit : ''; case 'promotional_offer': $promotional_offer = $instance?->product?->offers()->where('type', 'promotional_offer')->first(); return $promotional_offer ? 'Ofertă de listă: '.$promotional_offer->list_price.'\n Valabilitate: '.$promotional_offer->validity.'\n Limită: '.$promotional_offer->limit : ''; case 'special_offer': $special_offer = $instance?->product?->offers()->where('type', 'special_offer')->first(); return $special_offer ? 'Ofertă de listă: '.$special_offer->list_price.'\n Valabilitate: '.$special_offer->validity.'\n Limită: '.$special_offer->limit : ''; case 'last_chance_offer': $last_chance_offer = $instance?->product?->offers()->where('type', 'last_chance_offer')->first(); return $last_chance_offer ? 'Ofertă de listă: '.$last_chance_offer->list_price.'\n Valabilitate: '.$last_chance_offer->validity.'\n Limită: '.$last_chance_offer->limit : ''; case 'sale_process_resource_headline': $resourceHeadline = $instance?->saleProcessResources?->first()?->headline; return $resourceHeadline; case 'recruitment_notice': if (isset($data['recruitment'])) { $recruitmentText = self::getRecruitmentNotice($data['recruitment']); return $recruitmentText; } default: return ''; break; } } /** * Build Recruitment notice text for AI prompt(context) * * @param Recruitment $recruitment * * @return string */ public static function getRecruitmentNotice(Recruitment $recruitment): string { $recruitmentPositionDetails = $recruitment->details()->where('category', 'position')->get(); $recruitmentMainDetails = $recruitment->details()->where('category', 'main')->get(); $recruitmentCultureDetails = $recruitment->details()->where('category', 'culture')->get(); $recruitmentNotForYouDetails = $recruitment->details()->where('category', 'not_for_you')->first(); $recruitmentResponsibilities = $recruitment->responsibilities; $recruitmentActivities = $recruitment->activities; $recruitmentAbilities = $recruitment->abilities; $text = "Titlu: " . $recruitment->title . "\n"; $text .= "Descriere: " . $recruitment->description . "\n"; foreach ($recruitmentPositionDetails as $key => $details) { $text .= "{$details?->title}: {$details->description}\n"; } foreach ($recruitmentMainDetails as $key => $details) { $text .= "{$details?->title}: {$details?->description}\n"; } $text .= count($recruitmentResponsibilities) > 0 ? "\nResponsabilitati:\n" : ''; foreach ($recruitmentResponsibilities as $key => $responsibility) { $text .= "{$responsibility?->title}; KPI: {$responsibility?->kpi}\n"; } $text .= count($recruitmentActivities) > 0 ? "\nActivitati:\n" : ''; foreach ($recruitmentActivities as $key => $activity) { $text .= "- {$activity?->description}\n"; } $text .= count($recruitmentAbilities) > 0 ? "\nAbilitati:\n" : ''; foreach ($recruitmentAbilities as $key => $abilities) { $text .= "- {$abilities?->description}\n"; } foreach ($recruitmentCultureDetails as $key => $details) { $text .= "{$details?->title}: {$details?->description}\n"; } $text .= "\nPasi pentru aplicare:\n"; $text .= "Pasul 1 - Aplică: Click pe butonul de mai jos pentru a aplica la job. Răspunde la întrebări și în maximum 5 minute ai terminat.\n"; $text .= "Pasul 2 - Primești răspuns în 7 zile: În maximum o săptămână primești răspuns dacă te califici pentru interviul scurt.\n"; $text .= "Pasul 3 - Ne vedem la interviu: Avem un interviu scurt (online) de 10 minute pentru a ne asigura că merită să ne vedem la un interviu complet. În acest fel nu îți irosim timpul.\n\n"; $text .= "Nu te potrivești?\n"; $text .= "{$recruitmentNotForYouDetails?->title}: {$recruitmentNotForYouDetails?->description}\n"; return $text; } /** * Processing Php code from given text * * @param string $text * * @return string */ public static function processPhpText(string $text): string { $text = preg_replace_callback('/\{\{(.*?)\}\}/', function ($matches) { ob_start(); eval($matches[1]); return ob_get_clean();; }, $text); return $text; } /** * @param array $data * * @return string */ private static function formatEnumData(array $data): string { return implode('', $data); } /** * @param array $data * * @return string */ private static function formatOrderedData(array $data): string { $formattedData = array_map(function ($description, $index) { $prefixNumber = $index + 1; return $prefixNumber . '. ' . $description; }, $data); return implode(';', $formattedData); } }
Back