Dynamic prompt generation
The IPromptGenerationEventHandler interface provides extension points into the prompt generation lifecycle. Implementations of this interface allow developers to intercept and manipulate prompt data before and after it is generated.
This pattern is useful for logging, auditing, applying compliance checks, enriching prompts with metadata, or customizing the generation process dynamically.
public interface IPromptGenerationEventHandler
{
/// <summary>
/// Determines execution order when multiple handlers are registered.
/// Lower numbers execute first.
/// </summary>
int Order { get; }
/// <summary>
/// Called before the prompt text is generated.
/// </summary>
void OnBeforeGeneratingPrompt(GeneratingPromptEventArgs eventArgs);
/// <summary>
/// Called after the prompt text has been generated.
/// Implementations can use this for logging, auditing, or further enrichment.
/// </summary>
void OnAfterGeneratedPrompt(GeneratedPromptEventArgs eventArgs);
}
OnBeforeGeneratingPrompt
- Invoked before the prompt is generated.
- Common uses:
- Perform validation or filtering (e.g., block unsafe content).
- Modify or enrich input data (e.g., append user metadata, apply formatting rules).
- Log intent or input context for auditing.
GeneratingPromptEventArgs
The GeneratingPromptEventArgs class carries contextual data into the OnBeforeGeneratingPrompt handler. It allows developers to inspect, modify, or cancel prompt generation before it happens.
public class GeneratingPromptEventArgs(PromptContext promptContext) : EventArgs
{
public PromptContext PromptContext { get; } = promptContext;
public IAiPrompt? PromptTemplate { get; set; }
/// <summary>
/// If you want to handle generating prompt manually, set this to true.
/// </summary>
public bool Cancel { get; set; }
}
-
PromptContext
The raw context used to build the prompt. This typically includes:- Input text
- Metadata (user ID, session, language, etc.)
- AI service configuration (model type, temperature, etc.)
-
PromptTemplate
A placeholder for the prompt template (e.g., structured format).
Handlers can set or override this property to customize how the prompt will be generated. -
Cancel
If set totrue, the system will skip automatic prompt generation.- Use this when you want to manually construct a prompt inside the handler.
- Useful for dynamic templates, fallback prompts, or special cases where default generation should not occur.
OnAfterGeneratedPrompt
- Invoked after the prompt text has been built.
- Common uses:
- Log or audit the final prompt text.
- Store generated prompts for debugging.
- Add tracking metadata or performance measurements.
- Perform compliance checks before execution.
Order
- Determines execution order when multiple handlers are registered.
- Handlers with lower
Ordervalues are executed earlier. - Example:
Order = 0: Validation handler (ensures safety).Order = 50: Enrichment handler (adds metadata).Order = 100: Logging handler (records final stat
public class PromptGenerationEventHandler(ILogger<PromptGenerationEventHandler> logger)
: IPromptGenerationEventHandler
{
public int Order => 0;
public void OnBeforeGeneratingPrompt(GeneratingPromptEventArgs eventArgs)
{
// Set custom prompt template
eventArgs.PromptTemplate = new CustomAiPrompt();
}
public void OnAfterGeneratedPrompt(GeneratedPromptEventArgs eventArgs)
{
logger.LogInformation("Prompt manually handled.");
}
}
Integration
Typically, handlers are registered via dependency injection:
services
.AddAiAssistant()
.AddPromptGenerationEventHandler<PromptGenerationEventHandler>()