PHP code example of prismaticoder / laravel-prompt-manager

1. Go to this page and download the library: Download prismaticoder/laravel-prompt-manager library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

prismaticoder / laravel-prompt-manager example snippets


namespace App\Prompts;

use Prismaticoder\LaravelPromptManager\BaseLLMPrompt;
use Prismaticoder\LaravelPromptManager\PromptVersionManager;

class ProductDescriptionPrompt extends BaseLLMPrompt
{
    private string $productName;
    private array $features;

    public function __construct(string $productName, array $features)
    {
        $this->productName = $productName;
        $this->features = $features;
    }

    protected function versions(): PromptVersionManager
    {
        return new PromptVersionManager([
            'v1' => fn() => $this->generateBasicPrompt(),
            'v1-creative' => fn() => $this->generateCreativePrompt(),
            'v1-technical' => fn() => $this->generateTechnicalPrompt(),
        ]);
    }

    protected function defaultVersion(): string
    {
        return 'v1';
    }

    private function generateBasicPrompt(): string
    {
        return <<<PROMPT
        Write a product description for {$this->productName}.

        Key features:
        - " . implode("\n- ", $this->features)
        PROMPT;
    }
}

$prompt = ProductDescriptionPrompt::make('Ergonomic Chair', [
    'Adjustable height',
    'Lumbar support',
    'Memory foam'
]);

// Default version
$result = $prompt->generate();
echo $result->prompt; // The generated prompt text
echo "Version used: {$result->version}" // v1
echo "Token count: {$result->token_count}";

// Specific version
$result = $prompt->generate('v1-creative');

class CustomerSupportPrompt extends BaseLLMPrompt
{
    protected function defaultVersion(): string
    {
        return 'v1-gpt3.5'; // Only defaults to this version when no version selector is defined.
    }

    protected function versions(): PromptVersionManager
    {
        return new PromptVersionManager([
            'v1-gpt3.5' => fn() => $this->basePromptWithConstraints(2000),
            'v1-gpt4' => fn() => $this->basePromptWithConstraints(4000),
            'v1-claude' => fn() => $this->generateClaudePrompt(),
        ]);
    }

    protected function versionSelector(): Closure
    {
        return function(array $versions) {
            $model = config('services.llm.default_model');
            return match($model) {
                'gpt-4' => 'v1-gpt4',
                'claude' => 'v1-claude',
                default => 'v1-gpt3.5'
            };
        };
    }
}

class TransactionFraudAnalysisPrompt extends BaseLLMPrompt
{
    private Transaction $transaction;
    private array $riskMetrics;

    public function __construct(Transaction $transaction, array $riskMetrics)
    {
        $this->transaction = $transaction;
        $this->riskMetrics = $riskMetrics;
    }

    protected function versions(): PromptVersionManager
    {
        return new PromptVersionManager([
            'v1' => fn() => $this->getTemplateAndCompile('standard'),
            'v2-high-risk' => fn() => $this->getTemplateAndCompile('high_risk'),
        ]);
    }

    private function getTemplateAndCompile(string $templateKey): string
    {
        // Fetch template from your existing storage
        $template = PromptTemplate::findByKey($templateKey);

        return collect([
            'amount' => $this->transaction->amount,
            'merchant' => $this->transaction->merchant_name,
            'risk_score' => $this->riskMetrics['score'],
        ])->reduce(
            fn(string $prompt, $value, $key) => str_replace("{{$key}}", $value, $prompt),
            $template
        );
    }

    protected function versionSelector(): Closure
    {
        return fn() => $this->riskMetrics['score'] > 0.7 ? 'v2-high-risk' : 'v1';
    }
}

// Usage example:
$prompt = TransactionFraudAnalysisPrompt::make($transaction, $riskMetrics);
$result = $prompt->generate(); // Version selected based on risk score

use Prismaticoder\LaravelPromptManager\Enums\VersionSelector;

class ProductCopyPrompt extends BaseLLMPrompt
{
    protected function versionSelector(): VersionSelector
    {
        return VersionSelector::RANDOM;
    }

    protected function defaultVersion(): string
    {
        return 'v1-formal'; // Only defaults to this version when no version selector is defined.
    }

    protected function versions(): PromptVersionManager
    {
        return new PromptVersionManager([
            'v1-formal' => fn() => $this->formalTone(),
            'v1-casual' => fn() => $this->casualTone(),
            'v1-persuasive' => fn() => $this->persuasiveTone(),
        ]);
    }
}

class TutorialPrompt extends BaseLLMPrompt
{
    private User $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    protected function versionSelector(): Closure
    {
        return fn() => match($this->user->expertise_level) {
            'beginner' => 'v1-basic',
            'intermediate' => 'v1-detailed',
            'expert' => 'v1-advanced',
            default => $this->defaultVersion()
        };
    }
}

class ComplexPrompt extends BaseLLMPrompt
{
    protected function tokenCounter(): Closure
    {
        return fn(string $prompt) => Tiktoken::count($prompt);
    }
}
bash
php artisan make:prompt ProductDescriptionPrompt