PromptPHP\Deck\PromptManager
The core service class responsible for loading, caching, versioning, and tracking prompts. Registered as a singleton in the service container.
public function __construct(
string $basePath,
string $extension,
Cache $cache,
Config $config
)
| Parameter | Type | Description |
|---|---|---|
$basePath |
string |
Base directory where prompt files are stored. |
$extension |
string |
File extension for prompt templates (e.g. md). |
$cache |
Illuminate\Contracts\Cache\Repository |
Cache store instance. |
$config |
Illuminate\Contracts\Config\Repository |
Configuration repository. |
get(string $name, ?int $version = null): PromptTemplateLoad a prompt by name and optional version. If version is null, the active version is resolved automatically. Returns a PromptTemplate instance.
Caches the loaded prompt if caching is enabled.
Throws: PromptNotFoundException if the prompt does not exist. InvalidVersionException if the specified version does not exist.
$prompt = $manager->get('order-summary'); // active version
$prompt = $manager->get('order-summary', 2); // specific version
active(string $name): PromptTemplateLoad the active version of a prompt. Equivalent to calling get($name) without a version.
$prompt = $manager->active('order-summary');
versions(string $name): arrayList all versions for a prompt. Returns an array of version info sorted in ascending order.
Throws: PromptNotFoundException if the prompt directory does not exist.
$versions = $manager->versions('order-summary');
// [
// ['version' => 1, 'path' => '/path/to/v1', 'metadata' => [...]],
// ['version' => 2, 'path' => '/path/to/v2', 'metadata' => [...]],
// ]
activate(string $name, int $version): boolActivate a specific version of a prompt. Returns true on success.
prompt_versions database table.metadata.json in the prompt directory.$manager->activate('order-summary', 2);
track(string $promptName, int $version, array $data): voidRecord a prompt execution for tracking. No-op if tracking is disabled.
$manager->track('order-summary', 2, [
'input' => ['message' => 'Hello'],
'output' => 'Hi there!',
'tokens' => 50,
'latency' => 120.5,
'cost' => 0.001,
'model' => 'gpt-4o',
'provider' => 'openai',
'feedback' => ['rating' => 5],
]);
PromptPHP\Deck\PromptTemplate
Represents a loaded prompt with its roles, metadata, and interpolation capabilities. Implements Illuminate\Contracts\Support\Arrayable.
public function __construct(
protected string $name,
protected int $version,
protected array $roles = [],
protected array $metadata = [],
)
| Parameter | Type | Description |
|---|---|---|
$name |
string |
The prompt name. |
$version |
int |
The resolved version number. |
$roles |
array<string, string> |
Role name → raw content map. |
$metadata |
array |
Prompt metadata from metadata.json. |
role(string $role, array $variables = []): stringRender a role's content with variable interpolation. Returns an empty string if the role does not exist.
$content = $prompt->role('system', ['tone' => 'friendly']);
raw(string $role): stringGet the raw content for a role without interpolation. Returns an empty string if the role does not exist.
$template = $prompt->raw('system');
has(string $role): boolCheck whether a specific role exists in this prompt.
if ($prompt->has('assistant')) {
// ...
}
roles(): arrayGet all available role names.
$prompt->roles(); // ['system', 'user', 'assistant']
toMessages(array $variables = [], ?array $only = null): arrayBuild a messages array for AI API consumption. Returns an array of ['role' => '...', 'content' => '...'] entries.
| Parameter | Type | Description |
|---|---|---|
$variables |
array |
Variables to interpolate into every role. |
$only |
array|null |
Limit to these roles (preserves order). null = all roles. |
$messages = $prompt->toMessages(['tone' => 'concise'], ['system', 'user']);
version(): intGet the resolved version number.
$prompt->version(); // 2
name(): stringGet the prompt name.
$prompt->name(); // 'order-summary'
metadata(): arrayGet the prompt metadata. Returns an empty array if no metadata is defined.
$prompt->metadata(); // ['description' => '...', 'variables' => [...]]
toArray(): arrayConvert the prompt to an array (implements Arrayable).
$prompt->toArray();
// ['name' => '...', 'version' => 2, 'roles' => [...], 'metadata' => [...]]
__call(string $method, array $parameters): stringDynamic role access via method call. Any method name is treated as a role name.
$prompt->system(['tone' => 'friendly']); // renders 'system' role
$prompt->assistant(['context' => '...']); // renders 'assistant' role
$prompt->custom_role(); // renders 'custom_role' role
PromptPHP\Deck\Facades\Deck
Static proxy to the PromptManager singleton.
| Method | Returns | Description |
|---|---|---|
Deck::get(string $name, ?int $version = null) |
PromptTemplate |
Load a prompt by name and optional version. |
Deck::active(string $name) |
PromptTemplate |
Load the active version of a prompt. |
Deck::versions(string $name) |
array |
List all versions for a prompt. |
Deck::activate(string $name, string $version) |
bool |
Activate a specific version. |
Deck::track(string $name, int $version, array $data) |
void |
Record a prompt execution. |
PromptPHP\Deck\Concerns\HasPromptTemplate
Trait for integrating Deck templates with Laravel AI SDK agents.
promptName(): stringGet the prompt name. Defaults to the kebab-cased class name (e.g. SalesCoach → sales-coach). Override to use a custom name.
promptVersion(): ?intGet the prompt version to load. Returns null by default (active version). Override to pin to a specific version.
promptVariables(): arrayGet variables for prompt template interpolation. Returns an empty array by default. Override to provide dynamic context.
promptTemplate(): PromptTemplateGet the loaded PromptTemplate instance. Cached for the lifetime of the object.
instructions(): Stringable|stringGet the system instructions from the prompt template. Loads the system role and interpolates promptVariables(). Satisfies the AI SDK Agent contract.
promptMessages(?array $only = null): arrayGet prompt roles as messages. By default returns all roles except system. Returns Message[] when the AI SDK is installed, or raw ['role' => '...', 'content' => '...'] arrays otherwise.
| Parameter | Type | Description |
|---|---|---|
$only |
array|null |
Limit to specific roles. null = all non-system roles. |
forgetPromptTemplate(): staticClear the cached PromptTemplate, forcing a fresh load on next access. Returns $this for fluent chaining.
PromptPHP\Deck\Ai\TrackPromptMiddleware
Laravel AI SDK agent middleware that automatically tracks prompt executions.
handle(mixed $prompt, Closure $next): mixedHandle the incoming agent prompt. Measures latency and records execution data using PromptManager::track() after the response completes.
Only tracks agents that use the HasPromptTemplate trait (i.e. agents with a promptName() method).
PromptPHP\Deck\Listeners\AfterMakeAgent
Listens for the Laravel AI SDK's make:agent command and automatically scaffolds a corresponding Deck prompt.
handle(CommandFinished $event): voidHandle the CommandFinished event. Only acts on successful make:agent commands. Converts the agent name to kebab-case and runs make:prompt if the prompt doesn't already exist.
PromptPHP\Deck\Models\PromptVersion
| Attribute | Type | Cast | Description |
|---|---|---|---|
name |
string |
— | Prompt name. |
version |
int |
integer |
Version number. |
system_prompt |
string|null |
— | System prompt content. |
user_prompt |
string |
— | User prompt content. |
metadata |
array|null |
array |
Version metadata. |
is_active |
bool |
boolean |
Whether this is the active version. |
PromptPHP\Deck\Models\PromptExecution
| Attribute | Type | Cast | Description |
|---|---|---|---|
prompt_name |
string |
— | Prompt name. |
prompt_version |
int |
integer |
Version number. |
input |
array|null |
array |
Input data (JSON). |
output |
string|null |
— | Response text. |
tokens |
int|null |
integer |
Total tokens. |
latency_ms |
int|null |
integer |
Latency in milliseconds. |
cost |
string|null |
decimal:6 |
Cost (6 decimal places). |
model |
string|null |
— | AI model used. |
provider |
string|null |
— | AI provider. |
feedback |
array|null |
array |
Feedback data (JSON). |
All Deck exceptions extend the base DeckException class.
PromptPHP\Deck\Exceptions\DeckException
Abstract base exception for all Deck errors. Extends PHP's Exception class.
PromptPHP\Deck\Exceptions\PromptNotFoundException
Thrown when a prompt directory does not exist.
| Factory Method | Description |
|---|---|
named(string $name): self |
Creates exception with message: "Prompt [{name}] not found." |
PromptPHP\Deck\Exceptions\InvalidVersionException
Thrown when a requested version does not exist or no versions are found.
| Factory Method | Description |
|---|---|
forPrompt(string $name, int $version): self |
Creates exception with message: "Version {version} for prompt [{name}] does not exist." |
noVersions(string $name): self |
Creates exception with message: "No versions found for prompt [{name}]." |
PromptPHP\Deck\Exceptions\ConfigurationException
Thrown when Deck configuration is invalid.
| Factory Method | Description |
|---|---|
invalidPath(string $path): self |
Creates exception with message: "Prompts path [{path}] is not a directory or is not writable." |
PromptPHP\Deck\Exceptions\PromptRenderingException
Thrown when prompt rendering fails.
| Factory Method | Description |
|---|---|
dueToMissingVariable(string $variable, string $promptName): self |
Creates exception with message: "Cannot render prompt [{promptName}]: missing required variable '{variable}'." |
How can I help you explore Laravel packages today?