import { BasePromptTemplate } from './base-prompt-template.js'; /** * Simple string template with {variable} placeholders * * Example: * const prompt = new PromptTemplate({ * template: "Translate to {language}: {text}", * inputVariables: ["language", "text"] * }); * * await prompt.format({ language: "Spanish", text: "Hello" }); * // "Translate to Spanish: Hello" */ export class PromptTemplate extends BasePromptTemplate { constructor(options = {}) { super(options); this.template = options.template; // Auto-detect input variables if not provided if (!options.inputVariables) { this.inputVariables = this._extractInputVariables(this.template); } } /** * Format the template with provided values */ async format(values) { this._validateInput(values); const allValues = this._mergePartialAndUserVariables(values); let result = this.template; for (const [key, value] of Object.entries(allValues)) { const regex = new RegExp(`\\{${key}\\}`, 'g'); result = result.replace(regex, String(value)); } return result; } /** * Extract variable names from template string * Finds all {variable} patterns */ _extractInputVariables(template) { const matches = template.match(/\{(\w+)\}/g) || []; return matches.map(match => match.slice(1, -1)); } /** * Static helper to create from template string */ static fromTemplate(template, options = {}) { return new PromptTemplate({ template, ...options }); } }