- PromptManager
- PromptTemplate
- PromptDeck Facade
- HasPromptTemplate Trait
- TrackPromptMiddleware
- AfterMakeAgent Listener
- Models
- Exceptions
Veeqtoh\PromptDeck\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. |
Load 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 versionLoad the active version of a prompt. Equivalent to calling get($name) without a version.
$prompt = $manager->active('order-summary');List 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 a specific version of a prompt. Returns true on success.
- With tracking enabled: Updates the
prompt_versionsdatabase table. - Without tracking: Writes to
metadata.jsonin the prompt directory.
$manager->activate('order-summary', 2);Record 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],
]);Veeqtoh\PromptDeck\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. |
Render a role's content with variable interpolation. Returns an empty string if the role does not exist.
$content = $prompt->role('system', ['tone' => 'friendly']);Get the raw content for a role without interpolation. Returns an empty string if the role does not exist.
$template = $prompt->raw('system');Check whether a specific role exists in this prompt.
if ($prompt->has('assistant')) {
// ...
}Get all available role names.
$prompt->roles(); // ['system', 'user', 'assistant']Build 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']);Get the resolved version number.
$prompt->version(); // 2Get the prompt name.
$prompt->name(); // 'order-summary'Get the prompt metadata. Returns an empty array if no metadata is defined.
$prompt->metadata(); // ['description' => '...', 'variables' => [...]]Convert the prompt to an array (implements Arrayable).
$prompt->toArray();
// ['name' => '...', 'version' => 2, 'roles' => [...], 'metadata' => [...]]Dynamic 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' roleVeeqtoh\PromptDeck\Facades\PromptDeck
Static proxy to the PromptManager singleton.
| Method | Returns | Description |
|---|---|---|
PromptDeck::get(string $name, ?int $version = null) |
PromptTemplate |
Load a prompt by name and optional version. |
PromptDeck::active(string $name) |
PromptTemplate |
Load the active version of a prompt. |
PromptDeck::versions(string $name) |
array |
List all versions for a prompt. |
PromptDeck::activate(string $name, int $version) |
bool |
Activate a specific version. |
PromptDeck::track(string $name, int $version, array $data) |
void |
Record a prompt execution. |
Veeqtoh\PromptDeck\Concerns\HasPromptTemplate
Trait for integrating Prompt Deck templates with Laravel AI SDK agents.
Get the prompt name. Defaults to the kebab-cased class name (e.g. SalesCoach → sales-coach). Override to use a custom name.
Get the prompt version to load. Returns null by default (active version). Override to pin to a specific version.
Get the prompt version to load. Returns null by default (active version). Override to pin to a specific version.
Get variables for prompt template interpolation. Returns an empty array by default. Override to provide dynamic context.
Get the loaded PromptTemplate instance. Cached for the lifetime of the object.
Get the system instructions from the prompt template. Loads the system role and interpolates promptVariables(). Satisfies the AI SDK Agent contract.
Get 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. |
Clear the cached PromptTemplate, forcing a fresh load on next access. Returns $this for fluent chaining.
Veeqtoh\PromptDeck\Ai\TrackPromptMiddleware
Laravel AI SDK agent middleware that automatically tracks prompt executions.
Handle 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).
Veeqtoh\PromptDeck\Listeners\AfterMakeAgent
Listens for the Laravel AI SDK's make:agent command and automatically scaffolds a corresponding Prompt Deck prompt.
Handle 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.
Veeqtoh\PromptDeck\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. |
Veeqtoh\PromptDeck\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 Prompt Deck exceptions extend the base PromptDeckException class.
Veeqtoh\PromptDeck\Exceptions\PROMPTDECKException
Abstract base exception for all Prompt Deck errors. Extends PHP's Exception class.
Veeqtoh\PromptDeck\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." |
Veeqtoh\PromptDeck\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}]." |
Veeqtoh\PromptDeck\Exceptions\ConfigurationException
Thrown when Prompt 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." |
Veeqtoh\PromptDeck\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}'." |