{"version":3,"file":"ConversationSchemaProcessor.mjs","sources":["../../../src/ai/ConversationSchemaProcessor.ts"],"sourcesContent":["import { accessData } from '../Authorization';\nimport { capitalize } from '../runtime/utils';\nexport const createConversationField = (typeDef, typeName) => {\n    const { aiModel, systemPrompt, inferenceConfiguration, handler, tools } = typeDef;\n    const { strategy, provider } = extractAuthorization(typeDef, typeName);\n    const args = {\n        aiModel: aiModel.resourcePath,\n        // This is done to escape newlines in potentially multi-line system prompts\n        // e.g.\n        // realtorChat: a.conversation({\n        //   aiModel: a.ai.model('Claude 3 Haiku'),\n        //   systemPrompt: `You are a helpful real estate assistant\n        //   Respond in the poetic form of haiku.`,\n        // }),\n        //\n        // It doesn't affect non multi-line string inputs for system prompts\n        systemPrompt: systemPrompt.replace(/\\r?\\n/g, '\\\\n'),\n    };\n    // Add each arg with quotes (aiModel and systemPrompt)\n    const argsParts = [];\n    for (const [key, value] of Object.entries(args)) {\n        argsParts.push(`${key}: \"${value}\"`);\n    }\n    // Add inferenceConfiguration (do nothing if it doesn't exist or is empty)\n    const formattedInferenceConfig = formatInferenceConfig(inferenceConfiguration);\n    if (formattedInferenceConfig) {\n        argsParts.push(`inferenceConfiguration: ${formattedInferenceConfig}`);\n    }\n    const argsString = argsParts.join(', ');\n    const authString = `, auth: { strategy: ${strategy}, provider: ${provider} }`;\n    const functionHandler = {};\n    let handlerString = '';\n    if (handler) {\n        const functionName = `Fn${capitalize(typeName)}`;\n        const eventVersion = handler.eventVersion;\n        handlerString = `, handler: { functionName: \"${functionName}\", eventVersion: \"${eventVersion}\" }`;\n        functionHandler[functionName] = handler;\n    }\n    const toolsString = tools?.length\n        ? `, tools: [${getConversationToolsString(tools)}]`\n        : '';\n    const conversationDirective = `@conversation(${argsString}${authString}${handlerString}${toolsString})`;\n    const field = `${typeName}(conversationId: ID!, content: [AmplifyAIContentBlockInput], aiContext: AWSJSON, toolConfiguration: AmplifyAIToolConfigurationInput): AmplifyAIConversationMessage ${conversationDirective} @aws_cognito_user_pools`;\n    return { field, functionHandler };\n};\n/**\n * Format inferenceConfiguration as GraphQL input syntax.\n * Returns null if config is undefined or has no valid properties.\n */\nconst formatInferenceConfig = (config) => {\n    if (!config)\n        return null;\n    const parts = [];\n    if (config.temperature !== undefined)\n        parts.push(`temperature: ${config.temperature}`);\n    if (config.maxTokens !== undefined)\n        parts.push(`maxTokens: ${config.maxTokens}`);\n    if (config.topP !== undefined)\n        parts.push(`topP: ${config.topP}`);\n    return parts.length > 0 ? `{ ${parts.join(', ')} }` : null;\n};\nconst isRef = (query) => query?.data?.type === 'ref';\nconst extractAuthorization = (typeDef, typeName) => {\n    const { authorization } = typeDef.data;\n    if (authorization.length === 0) {\n        throw new Error(`Conversation ${typeName} is missing authorization rules. Use .authorization((allow) => allow.owner()) to configure authorization for your conversation route.`);\n    }\n    const { strategy, provider } = accessData(authorization[0]);\n    if (strategy !== 'owner' || provider !== 'userPools') {\n        throw new Error(`Conversation ${typeName} must use owner authorization with a user pool provider. Use .authorization((allow) => allow.owner()) to configure authorization for your conversation route.`);\n    }\n    return { strategy, provider };\n};\nconst getConversationToolsString = (tools) => tools\n    .map((tool) => {\n    const { name, description } = tool;\n    // https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolSpecification.html\n    // Pattern: ^[a-zA-Z][a-zA-Z0-9_]*$\n    // Length Constraints: Minimum length of 1. Maximum length of 64.\n    const isValidToolName = /^[a-zA-Z][a-zA-Z0-9_]*$/.test(name) &&\n        name.length >= 1 &&\n        name.length <= 64;\n    if (!isValidToolName) {\n        throw new Error(`Tool name must be between 1 and 64 characters, start with a letter, and contain only letters, numbers, and underscores. Found: ${name}`);\n    }\n    const toolDefinition = extractToolDefinition(tool);\n    return `{ name: \"${name}\", description: \"${description}\", ${toolDefinition} }`;\n})\n    .join(', ');\nconst extractToolDefinition = (tool) => {\n    if ('model' in tool) {\n        if (!isRef(tool.model))\n            throw new Error(`Unexpected model was found in tool ${tool}.`);\n        const { model, modelOperation } = tool;\n        return `modelName: \"${model.data.link}\", modelOperation: ${modelOperation}`;\n    }\n    if (!isRef(tool.query))\n        throw new Error(`Unexpected query was found in tool ${tool}.`);\n    return `queryName: \"${tool.query.data.link}\"`;\n};\n"],"names":[],"mappings":"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"}