{"version":3,"sources":["../../src/util/instruction-assistance-utils.ts"],"names":[],"mappings":"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","file":"instruction-assistance-utils.mjs","sourcesContent":["/**\n * IMPORTANT!!!!!!!!!!!!!!!!!!!!!!\n *\n * The functions in this utility are used both by the front end svelte kit web client in the browser\n * and in the backend lambda converse functions.  So, that means it needs to be able\n * to run in a browser.  Do not add additional imports beyond anodine types.\n *\n * To be super clear: this is just logic to generate instruction assistance content given\n * the right inputs.  It does not collect up those inputs, it is given them.\n *\n */\n\nimport type {\n    AgentInstructionChatAppOverridableFeature,\n    InstructionAssistanceConfig,\n    TagDefinition,\n    TagDefinitionWidget,\n    TagsChatAppOverridableFeature\n} from '../types/chatbot/chatbot-types';\n\n/**\n * IMPORTANT!!!!!!!!!!!!!!!!!!!!!!\n *\n * See header at top of file for important notes.\n *\n * Generate instruction assistance content based on enabled features\n *\n * @param instructionAssistanceConfig - The instruction assistance configuration from SSM\n * @param tags - The tags configuration from the chat app\n * @param agentInstructionFeature - The agent instruction feature configuration from the chat app\n * @returns The instruction assistance content\n */\nexport function generateInstructionAssistanceContent(\n    instructionAssistanceConfig: InstructionAssistanceConfig | undefined,\n    tags: TagsChatAppOverridableFeature | undefined,\n    agentInstructionFeature: AgentInstructionChatAppOverridableFeature | undefined,\n    tagDefinitions: TagDefinition<TagDefinitionWidget>[]\n): InstructionAssistanceConfig {\n    let outputFormattingRequirements = '';\n    let tagInstructions = '';\n    let completeExampleInstructionLine = '';\n    let jsonOnlyImperativeInstructionLine = '';\n    let typescriptBackedOutputFormattingRequirements = '';\n\n    if (!agentInstructionFeature?.enabled) {\n        return {\n            outputFormattingRequirements,\n            tagInstructions,\n            completeExampleInstructionLine,\n            jsonOnlyImperativeInstructionLine,\n            typescriptBackedOutputFormattingRequirements\n        };\n    }\n\n    // Generate output formatting requirements\n    if (agentInstructionFeature.includeOutputFormattingRequirements) {\n        outputFormattingRequirements =\n            instructionAssistanceConfig?.outputFormattingRequirements ||\n            `**Output Formatting Requirements:**\n- **Output Response Enclosure**: All response output MUST be completely enclosed within <answer></answer> tags, including supported custom tags.\n- **Output Content Format:** All responses MUST be in Markdown with supported custom tags.`;\n    }\n\n    // Generate tag instructions\n    if (agentInstructionFeature.includeInstructionsForTags && tags) {\n        if (tagDefinitions.length > 0) {\n            // Build a set of enabled tag identifiers\n            const enabledTagIds = new Set<string>();\n\n            // Add all explicitly enabled chat-app tags\n            if (tags.tagsEnabled) {\n                for (const tag of tags.tagsEnabled) {\n                    const tagId = `${tag.scope}.${tag.tag}`;\n                    enabledTagIds.add(tagId);\n                }\n            }\n\n            // Add all global tags that aren't explicitly disabled\n            const disabledTagIds = new Set<string>();\n            if (tags.tagsDisabled) {\n                for (const tag of tags.tagsDisabled) {\n                    const tagId = `${tag.scope}.${tag.tag}`;\n                    disabledTagIds.add(tagId);\n                }\n            }\n\n            for (const tagDef of tagDefinitions) {\n                if (tagDef.usageMode === 'global') {\n                    const tagId = `${tagDef.scope}.${tagDef.tag}`;\n                    if (!disabledTagIds.has(tagId)) {\n                        enabledTagIds.add(tagId);\n                    }\n                }\n            }\n\n            // Filter to only include enabled tags\n            const enabledTagDefinitions = tagDefinitions.filter((tagDef) => {\n                const tagId = `${tagDef.scope}.${tagDef.tag}`;\n                return enabledTagIds.has(tagId) && tagDef.canBeGeneratedByLlm && tagDef.status === 'enabled';\n            });\n\n            // First create a dictionary listing all supported tags\n            const tagDictionary = enabledTagDefinitions.map((tagDef) => `  - ${tagDef.tagTitle}: \\`${tagDef.shortTagEx}\\``).join('\\n');\n\n            let tagInstructionsContent = '';\n            if (tagDictionary) {\n                tagInstructionsContent += `- **Custom Tags Supported:**\\n${tagDictionary}\\n`;\n            }\n\n            // Then add detailed instructions for each tag\n            for (const tagDef of enabledTagDefinitions) {\n                if (tagDef.llmInstructionsMd) {\n                    const tagType = `${tagDef.scope}.${tagDef.tag}`;\n                    tagInstructionsContent += `- **${tagDef.tagTitle}:**\\n  <tag-instructions type=\"${tagType}\">\\n${tagDef.llmInstructionsMd}\\n  </tag-instructions>\\n`;\n                }\n            }\n\n            if (tagInstructionsContent) {\n                tagInstructions = tagInstructionsContent;\n            }\n        }\n    }\n\n    // Generate complete example instruction line\n    if (agentInstructionFeature.completeExampleInstructionEnabled) {\n        completeExampleInstructionLine =\n            agentInstructionFeature.completeExampleInstructionLine ||\n            instructionAssistanceConfig?.completeExampleInstructionLine ||\n            '- **Complete Example Output:**\\n  `<answer>##Example markdown\\nNormal text and an <image>http://some.url</image> and some **bold text**\\n<chart>(...)</chart></answer>`';\n    }\n\n    // Generate JSON validation instruction line\n    if (agentInstructionFeature.jsonOnlyImperativeInstructionEnabled) {\n        jsonOnlyImperativeInstructionLine =\n            agentInstructionFeature.jsonOnlyImperativeInstructionLine ||\n            instructionAssistanceConfig?.jsonOnlyImperativeInstructionLine ||\n            'BE ABSOLUTELY CERTAIN ANY JSON INCLUDED IS 100% VALID (especially for charts). Invalid JSON will break the user experience.';\n    }\n\n    return {\n        outputFormattingRequirements,\n        tagInstructions,\n        completeExampleInstructionLine,\n        jsonOnlyImperativeInstructionLine,\n        typescriptBackedOutputFormattingRequirements\n    };\n}\n\n/**\n * IMPORTANT!!!!!!!!!!!!!!!!!!!!!!\n *\n * See header at top of file for important notes.\n *\n * Apply instruction assistance to the base prompt using placeholder replacement\n */\nexport function applyInstructionAssistance(basePrompt: string, instructionContent: InstructionAssistanceConfig): string {\n    let enhancedPrompt = basePrompt;\n\n    // Check for primary placeholder first\n    if (enhancedPrompt.includes('{{prompt-assistance}}')) {\n        console.log('Found {{prompt-assistance}} placeholder');\n\n        const allContent = [\n            instructionContent.outputFormattingRequirements,\n            instructionContent.tagInstructions,\n            instructionContent.completeExampleInstructionLine,\n            instructionContent.jsonOnlyImperativeInstructionLine\n        ]\n            .filter((content) => content && content.trim().length > 0)\n            .join('\\n\\n');\n\n        enhancedPrompt = enhancedPrompt.replace('{{prompt-assistance}}', allContent);\n    } else {\n        // Look for fine-grained placeholders\n        const placeholders = [\n            { placeholder: '{{output-formatting-requirements}}', content: instructionContent.outputFormattingRequirements },\n            { placeholder: '{{tag-instructions}}', content: instructionContent.tagInstructions },\n            { placeholder: '{{complete-example-instruction-line}}', content: instructionContent.completeExampleInstructionLine },\n            { placeholder: '{{json-only-imperative-instruction-line}}', content: instructionContent.jsonOnlyImperativeInstructionLine }\n        ];\n\n        let hasAnyPlaceholder = false;\n        for (const { placeholder, content } of placeholders) {\n            if (enhancedPrompt.includes(placeholder) && content) {\n                console.log(`Found ${placeholder} placeholder`);\n                hasAnyPlaceholder = true;\n                enhancedPrompt = enhancedPrompt.replace(placeholder, content);\n            }\n        }\n\n        // If no placeholders found, append to end\n        if (!hasAnyPlaceholder) {\n            console.log('No placeholders found, appending to end of prompt');\n            const allContent = [\n                instructionContent.outputFormattingRequirements,\n                instructionContent.tagInstructions,\n                instructionContent.completeExampleInstructionLine,\n                instructionContent.jsonOnlyImperativeInstructionLine\n            ].filter((content) => content && content.trim().length > 0);\n\n            if (allContent.length > 0) {\n                enhancedPrompt = enhancedPrompt + '\\n\\n' + allContent.join('\\n\\n');\n            }\n        }\n    }\n\n    return enhancedPrompt;\n}\n\n/**\n * IMPORTANT!!!!!!!!!!!!!!!!!!!!!!\n *\n * See header at top of file for important notes.\n *\n * Generate component-specific instruction content for direct component invocations\n *\n * @param tagDefinition - The tag definition with component invocation instructions\n * @param componentAgentInstructionName - The name of the instruction set to use\n * @param instructionAssistanceConfig - Optional instruction assistance config for placeholder replacement\n * @param agentInstructionFeature - Optional agent instruction feature to control which placeholders are replaced\n * @returns The component instruction content or undefined if not found\n */\nexport function generateComponentInstructionContent(\n    tagDefinition: TagDefinition<TagDefinitionWidget>,\n    componentAgentInstructionName: string,\n    instructionAssistanceConfig?: InstructionAssistanceConfig,\n    agentInstructionFeature?: AgentInstructionChatAppOverridableFeature\n): string | undefined {\n    console.log('Generating component instruction content:', {\n        scope: tagDefinition.scope,\n        tag: tagDefinition.tag,\n        componentAgentInstructionName,\n        hasDirectInvocationInstructions: !!tagDefinition.componentAgentInstructionsMd,\n        hasInstructionAssistanceConfig: !!instructionAssistanceConfig\n    });\n\n    if (!tagDefinition.componentAgentInstructionsMd) {\n        // console.log('No componentAgentInstructionsMd found on tag definition');\n        return undefined;\n    }\n\n    const instructions = tagDefinition.componentAgentInstructionsMd[componentAgentInstructionName];\n\n    if (!instructions) {\n        console.log(`No instructions found for componentAgentInstructionName: ${componentAgentInstructionName}`);\n        console.log('Available instruction names:', Object.keys(tagDefinition.componentAgentInstructionsMd));\n        return undefined;\n    }\n\n    console.log('Component instructions found:', {\n        instructionLength: instructions.length\n    });\n\n    // Apply placeholder replacement if instruction assistance config is provided\n    if (instructionAssistanceConfig && agentInstructionFeature) {\n        return applyComponentInstructionAssistance(instructions, instructionAssistanceConfig, agentInstructionFeature);\n    }\n\n    return instructions;\n}\n\n/**\n * IMPORTANT!!!!!!!!!!!!!!!!!!!!!!\n *\n * See header at top of file for important notes.\n *\n * Apply instruction assistance placeholder replacement to component instructions\n *\n * @param componentInstructions - The raw component instructions with placeholders\n * @param instructionConfig - The instruction assistance configuration\n * @param agentInstructionFeature - The agent instruction feature configuration\n * @returns The component instructions with placeholders replaced\n */\nexport function applyComponentInstructionAssistance(\n    componentInstructions: string,\n    instructionConfig: InstructionAssistanceConfig,\n    agentInstructionFeature: AgentInstructionChatAppOverridableFeature\n): string {\n    let enhancedInstructions = componentInstructions;\n\n    console.log('Applying component instruction assistance:', {\n        includeTypescriptBackedOutputFormattingRequirements: agentInstructionFeature.includeTypescriptBackedOutputFormattingRequirements,\n        hasPlaceholder: enhancedInstructions.includes('{{typescript-backed-output-formatting-requirements}}')\n    });\n\n    // Replace typescript-backed-output-formatting-requirements placeholder if enabled\n    if (agentInstructionFeature.includeTypescriptBackedOutputFormattingRequirements && instructionConfig.typescriptBackedOutputFormattingRequirements) {\n        const placeholder = '{{typescript-backed-output-formatting-requirements}}';\n        if (enhancedInstructions.includes(placeholder)) {\n            console.log('Replacing typescript-backed-output-formatting-requirements placeholder');\n            enhancedInstructions = enhancedInstructions.replace(placeholder, instructionConfig.typescriptBackedOutputFormattingRequirements);\n        }\n    }\n\n    return enhancedInstructions;\n}\n\n/**\n * IMPORTANT!!!!!!!!!!!!!!!!!!!!!!\n *\n * See header at top of file for important notes.\n *\n * Get the instruction assistance configuration from raw SSM parameters\n *\n * @param params - The raw SSM parameters\n * @returns The instruction assistance configuration\n */\nexport function getInstructionsAssistanceConfigFromRawSsmParams(params: Record<string, string>): InstructionAssistanceConfig {\n    const expectedKeys = ['output-formatting-requirements', 'default-complete-example-line', 'default-json-validation-line', 'typescript-backed-output-formatting-requirements'];\n    const missingKeys = expectedKeys.filter((key) => !params[key]);\n    if (missingKeys.length > 0) {\n        throw new Error(\n            `Missing required instruction assistance parameters: ${Object.keys(params)\n                .filter((key) => !expectedKeys.includes(key))\n                .join(', ')}`\n        );\n    }\n\n    return {\n        outputFormattingRequirements: params['output-formatting-requirements'],\n        completeExampleInstructionLine: params['default-complete-example-line'],\n        jsonOnlyImperativeInstructionLine: params['default-json-validation-line'],\n        typescriptBackedOutputFormattingRequirements: params['typescript-backed-output-formatting-requirements']\n    };\n}\n"]}