UNPKG

@callmedayz/ai-prompt-toolkit

Version:

Professional AI prompt engineering toolkit with advanced template features, real-time dashboards, conditional logic, template inheritance, live monitoring, OpenRouter integration, and 310+ model support

333 lines (319 loc) 10.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TemplateInheritanceManager = void 0; exports.createCommonBaseTemplates = createCommonBaseTemplates; exports.createInheritanceManager = createInheritanceManager; const advanced_prompt_template_1 = require("./advanced-prompt-template"); /** * Template Inheritance System * Enables hierarchical template structures with base templates and child templates */ class TemplateInheritanceManager { constructor() { this.baseTemplates = new Map(); this.templateHierarchy = new Map(); // parent -> children } /** * Register a base template */ registerBaseTemplate(name, template) { this.baseTemplates.set(name, template); if (!this.templateHierarchy.has(name)) { this.templateHierarchy.set(name, []); } } /** * Create a child template that inherits from a base template */ createChildTemplate(baseName, childOptions) { const baseTemplate = this.baseTemplates.get(baseName); if (!baseTemplate) { throw new Error(`Base template '${baseName}' not found`); } // Build the child template with inheritance const childTemplate = this.buildInheritedTemplate(baseTemplate, childOptions); // Track the inheritance relationship const children = this.templateHierarchy.get(baseName) || []; children.push(childOptions.name); this.templateHierarchy.set(baseName, children); return childTemplate; } /** * Build an inherited template by combining base and child specifications */ buildInheritedTemplate(baseTemplate, childOptions) { // Start with base template structure let templateString = baseTemplate.template; // Replace or extend blocks defined in child if (childOptions.blocks) { Object.entries(childOptions.blocks).forEach(([blockName, blockContent]) => { const blockRegex = new RegExp(`\\{\\{#block\\s+${blockName}\\}\\}[\\s\\S]*?\\{\\{\\/block\\}\\}`, 'g'); if (blockRegex.test(templateString)) { // Replace existing block templateString = templateString.replace(blockRegex, `{{#block ${blockName}}}${blockContent.content}{{/block}}`); } else { // Add new block at the end templateString += `\n{{#block ${blockName}}}${blockContent.content}{{/block}}`; } }); } // Handle section extensions if (childOptions.sections) { Object.entries(childOptions.sections).forEach(([sectionName, sectionOptions]) => { const sectionRegex = new RegExp(`\\{\\{#section\\s+${sectionName}\\}\\}([\\s\\S]*?)\\{\\{\\/section\\}\\}`, 'g'); templateString = templateString.replace(sectionRegex, (match, existingContent) => { let newContent = existingContent; switch (sectionOptions.mode) { case 'replace': newContent = sectionOptions.content; break; case 'prepend': newContent = sectionOptions.content + '\n' + existingContent; break; case 'append': newContent = existingContent + '\n' + sectionOptions.content; break; default: newContent = sectionOptions.content; } return `{{#section ${sectionName}}}${newContent}{{/section}}`; }); }); } // Merge variables (child overrides base) const mergedVariables = { ...baseTemplate.defaultVariables, ...childOptions.variables }; // Merge custom functions const mergedFunctions = { ...(baseTemplate.customFunctions || {}), ...(childOptions.customFunctions || {}) }; return new advanced_prompt_template_1.AdvancedPromptTemplate({ template: templateString, variables: mergedVariables, customFunctions: mergedFunctions, enableConditionals: true, enableLoops: true, enableInheritance: true, escapeHtml: childOptions.escapeHtml ?? baseTemplate.escapeHtml, preserveWhitespace: childOptions.preserveWhitespace ?? baseTemplate.preserveWhitespace }); } /** * Get the inheritance hierarchy for a base template */ getHierarchy(baseName) { const children = this.templateHierarchy.get(baseName) || []; const baseTemplate = this.baseTemplates.get(baseName); return { baseName, baseTemplate: baseTemplate || null, children: children.map(childName => ({ name: childName, // In a real implementation, you'd store child template metadata blocks: [], sections: [] })) }; } /** * Validate template inheritance structure */ validateInheritance(baseName) { const errors = []; const warnings = []; const baseTemplate = this.baseTemplates.get(baseName); if (!baseTemplate) { errors.push(`Base template '${baseName}' not found`); return { isValid: false, errors, warnings }; } // Check for required blocks if (baseTemplate.requiredBlocks) { baseTemplate.requiredBlocks.forEach(blockName => { const blockRegex = new RegExp(`\\{\\{#block\\s+${blockName}\\}\\}`); if (!blockRegex.test(baseTemplate.template)) { warnings.push(`Required block '${blockName}' not found in base template`); } }); } // Check for circular dependencies (simplified check) const children = this.templateHierarchy.get(baseName) || []; if (children.includes(baseName)) { errors.push(`Circular dependency detected in template '${baseName}'`); } return { isValid: errors.length === 0, errors, warnings }; } /** * Get all base template names */ getBaseTemplateNames() { return Array.from(this.baseTemplates.keys()); } /** * Export template hierarchy as JSON */ exportHierarchy() { const hierarchy = {}; this.baseTemplates.forEach((template, name) => { hierarchy[name] = { template: template.template, defaultVariables: template.defaultVariables, children: this.templateHierarchy.get(name) || [] }; }); return hierarchy; } } exports.TemplateInheritanceManager = TemplateInheritanceManager; /** * Helper function to create common base templates */ function createCommonBaseTemplates() { return [ { name: 'basic_prompt', template: `{{#section header}} You are a helpful AI assistant. {{/section}} {{#section task}} {{#block task_description}} Please help with the following task: {{/block}} {{/section}} {{#section content}} {{#block main_content}} {content} {{/block}} {{/section}} {{#section instructions}} {{#block instructions}} Please provide a clear and helpful response. {{/block}} {{/section}} {{#section footer}} {{#block footer}} Thank you for using our AI assistant. {{/block}} {{/section}}`, description: 'Basic prompt template with standard sections', defaultVariables: { content: 'Please specify the content to process' }, requiredBlocks: ['main_content'], optionalBlocks: ['task_description', 'instructions', 'footer'] }, { name: 'analysis_prompt', template: `{{#section header}} You are an expert analyst with deep knowledge in {domain}. {{/section}} {{#section context}} {{#block context}} {{#if context}} Context: {context} {{/if}} {{/block}} {{/section}} {{#section task}} {{#block analysis_task}} Please analyze the following {content_type}: {{/block}} {{/section}} {{#section content}} {{#block main_content}} {content} {{/block}} {{/section}} {{#section requirements}} {{#block analysis_requirements}} Focus on: {{#each focus_areas as area}} - {area} {{/each}} {{/block}} {{/section}} {{#section output}} {{#block output_format}} Provide your analysis in the following format: 1. Summary 2. Key findings 3. Recommendations {{/block}} {{/section}}`, description: 'Template for analytical tasks', defaultVariables: { domain: 'general analysis', content_type: 'data', focus_areas: ['key insights', 'patterns', 'recommendations'] }, requiredBlocks: ['main_content', 'analysis_task'], optionalBlocks: ['context', 'analysis_requirements', 'output_format'] }, { name: 'creative_prompt', template: `{{#section header}} You are a creative AI assistant specializing in {creative_domain}. {{/section}} {{#section inspiration}} {{#block inspiration}} {{#if inspiration_sources}} Draw inspiration from: {inspiration_sources} {{/if}} {{/block}} {{/section}} {{#section task}} {{#block creative_task}} Create {creative_output_type} based on the following: {{/block}} {{/section}} {{#section content}} {{#block main_content}} {content} {{/block}} {{/section}} {{#section style}} {{#block style_guide}} Style requirements: - Tone: {tone} - Style: {style} {{#if constraints}} - Constraints: {constraints} {{/if}} {{/block}} {{/section}} {{#section output}} {{#block creative_output}} Please provide your creative response below: {{/block}} {{/section}}`, description: 'Template for creative tasks', defaultVariables: { creative_domain: 'content creation', creative_output_type: 'content', tone: 'engaging', style: 'creative' }, requiredBlocks: ['main_content', 'creative_task'], optionalBlocks: ['inspiration', 'style_guide', 'creative_output'] } ]; } /** * Helper function to create a template inheritance manager with common base templates */ function createInheritanceManager() { const manager = new TemplateInheritanceManager(); // Register common base templates createCommonBaseTemplates().forEach(template => { manager.registerBaseTemplate(template.name, template); }); return manager; } //# sourceMappingURL=template-inheritance.js.map