UNPKG

@cognigy/rest-api-client

Version:

Cognigy REST-Client

1,074 lines 69.6 kB
"use strict"; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AI_AGENT_JOB = void 0; /* Custom modules */ const createNodeDescriptor_1 = require("../../../createNodeDescriptor"); const crypto_1 = require("crypto"); const setSessionConfig_mapper_1 = require("../../voice/mappers/setSessionConfig.mapper"); const setSessionConfig_mapper_2 = require("../../voice/mappers/setSessionConfig.mapper"); const logFullConfigToDebugMode_1 = require("../../../../helper/logFullConfigToDebugMode"); const createSystemMessage_1 = require("./helpers/createSystemMessage"); const generateSearchPrompt_1 = require("./helpers/generateSearchPrompt"); const getUserMemory_1 = require("./helpers/getUserMemory"); const createToolDefinitions_1 = require("./helpers/createToolDefinitions"); const transcripts_1 = require("../../../../interfaces/transcripts/transcripts"); exports.AI_AGENT_JOB = (0, createNodeDescriptor_1.createNodeDescriptor)({ type: "aiAgentJob", defaultLabel: "AI Agent", summary: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SUMMARY", constraints: { collapsable: true, placement: { children: { whitelist: ["aiAgentJobDefault", "aiAgentJobTool", "aiAgentJobMCPTool"], }, }, }, behavior: { entrypoint: true }, dependencies: { children: ["aiAgentJobDefault", "aiAgentJobTool"] }, preview: { type: "aiAgent", key: "name" }, tokens: [ { type: "input", label: "AI Agent Output", script: "input.aiAgentOutput" }, { type: "context", label: "Short-Term Memory", script: "context.shortTermMemory", } ], fields: [ { key: "aiAgent", type: "aiAgentSelect", label: "UI__NODE_EDITOR__AI_AGENT__AI_AGENT_SELECTOR__LABEL", description: "UI__NODE_EDITOR__AI_AGENT__AI_AGENT_SELECTOR__DESCRIPTION", params: { required: true }, }, { key: "llmProviderReferenceId", type: "llmSelect", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LLM__LABEL", defaultValue: "default", params: { useCase: "aiAgent", }, }, { key: "name", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__JOB_NAME__LABEL", type: "cognigyLLMText", defaultValue: "Customer Support Specialist", params: { required: true, }, }, { key: "description", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__JOB_DESCRIPTION__LABEL", type: "cognigyLLMText", defaultValue: "You resolve customer issues, ensure a positive experience, troubleshoot problems, and escalate complex cases as needed. You provide product guidance, communicate effectively, and stay calm under pressure.", params: { required: false, rows: 5, multiline: true } }, { key: "instructions", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__INSCTRUCTIONS__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__INSCTRUCTIONS__DESCRIPTION", defaultValue: `- Pretend to be an expert in your area. - Never answer questions that are outside your job.`, type: "cognigyLLMText", params: { required: false, rows: 5, multiline: true } }, { key: "toolChoice", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TOOL_CHOICE__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TOOL_CHOICE__DESCRIPTION", type: "select", defaultValue: "auto", params: { options: [ { label: 'UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TOOL_CHOICE__OPTIONS__AUTO__LABEL', value: 'auto' }, { label: 'UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TOOL_CHOICE__OPTIONS__REQUIRED__LABEL', value: 'required' }, { label: 'UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TOOL_CHOICE__OPTIONS__NONE__LABEL', value: 'none' } ] } }, { key: "useStrict", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__USE_STRICT__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__USE_STRICT__DESCRIPTION", type: "toggle", defaultValue: false }, { key: "memoryType", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MEMORY_INJECTION__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MEMORY_INJECTION__DESCRIPTION", type: "select", defaultValue: "inherit", params: { options: [ { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MEMORY_INJECTION__OPTIONS__INHERIT__LABEL", value: "inherit" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MEMORY_INJECTION__OPTIONS__INJECT_FULL_PROFILE__LABEL", value: "completeProfile" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MEMORY_INJECTION__OPTIONS__INJECT_MEMORIES__LABEL", value: "profileMemoriesOnly" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MEMORY_INJECTION__OPTIONS__INJECT_SELECTED_FIELDS__LABEL", value: "selectedProfileFields" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MEMORY_INJECTION__OPTIONS__NONE__LABEL", value: "none" }, ] }, }, { key: "selectedProfileFields", type: "chipInput", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__SELECTED_PROFILE_FIELDS__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__SELECTED_PROFILE_FIELDS__DESCRIPTION", condition: { key: "memoryType", value: "selectedProfileFields" }, }, { key: "memoryContextInjection", type: "cognigyLLMText", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CONTEXT_INJECTION__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CONTEXT_INJECTION__DESCRIPTION", defaultValue: "[[snippet-eyJ0eXBlIjoiY29udGV4dCIsImxhYmVsIjoiU2hvcnQtVGVybSBNZW1vcnkiLCJzY3JpcHQiOiJjb250ZXh0LnNob3J0VGVybU1lbW9yeSJ9]]", }, { key: "knowledgeSearchBehavior", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_BEHAVIOR__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_BEHAVIOR__DESCRIPTION", type: "select", defaultValue: "onDemand", params: { options: [ { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_BEHAVIOR__OPTIONS__NONE__LABEL", value: "none" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_BEHAVIOR__OPTIONS__ON_DEMAND__LABEL", value: "onDemand" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_BEHAVIOR__OPTIONS__ALWAYS__LABEL", value: "always" }, ] }, }, { key: "knowledgeSearchAlwaysWarning", type: "description", label: " ", params: { text: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_BEHAVIOR__ALWAYS__WARNING" }, condition: { key: "knowledgeSearchBehavior", value: "always" }, }, { key: "knowledgeSearchTags", type: "knowledgeSourceTags", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_TAGS__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_TAGS__DESCRIPTION", condition: { or: [ { key: "knowledgeSearchBehavior", value: "always" }, { key: "knowledgeSearchBehavior", value: "onDemand" } ] }, params: { tagLimit: 5 } }, { key: "knowledgeSearchTagsFilterOp", type: "select", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_TAGS_FILTER_OP__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_TAGS_FILTER_OP__DESCRIPTION", defaultValue: "and", params: { options: [ { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_TAGS_FILTER_OP__OPTIONS__AND__LABEL", value: "and" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_TAGS_FILTER_OP__OPTIONS__OR__LABEL", value: "or" }, ] }, condition: { or: [ { key: "knowledgeSearchBehavior", value: "always" }, { key: "knowledgeSearchBehavior", value: "onDemand" } ] }, }, { key: "knowledgeSearchAiAgentKnowledge", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_AI_AGENT_KNOWLEDGE__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_AI_AGENT_KNOWLEDGE__DESCRIPTION", type: "toggle", defaultValue: true, condition: { or: [ { key: "knowledgeSearchBehavior", value: "always" }, { key: "knowledgeSearchBehavior", value: "onDemand" } ] }, }, { key: "knowledgeSearchJobKnowledge", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_JOB_KNOWLEDGE__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_JOB_KNOWLEDGE__DESCRIPTION", type: "toggle", defaultValue: false, condition: { or: [ { key: "knowledgeSearchBehavior", value: "always" }, { key: "knowledgeSearchBehavior", value: "onDemand" } ] }, }, { key: "knowledgeSearchGenerateSearchPrompt", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_GENERATE_SEARCH_PROMPT__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_GENERATE_SEARCH_PROMPT__DESCRIPTION", type: "toggle", defaultValue: true, condition: { key: "knowledgeSearchBehavior", value: "always" }, }, { key: "knowledgeSearchTopK", type: "slider", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_TOP_K__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_TOP_K__DESCRIPTION", defaultValue: 3, params: { min: 1, max: 5, }, condition: { or: [ { key: "knowledgeSearchBehavior", value: "always" }, { key: "knowledgeSearchBehavior", value: "onDemand" } ] }, }, { key: "knowledgeSearchJobStore", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__KNOWLEDGE_SEARCH_JOB_STORE__LABEL", type: "knowledgeStoreSelect", condition: { and: [ { key: "knowledgeSearchJobKnowledge", value: true }, { or: [ { key: "knowledgeSearchBehavior", value: "always" }, { key: "knowledgeSearchBehavior", value: "onDemand" } ] } ] }, }, { key: "apiVersion", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__API_VERSION__LABEL", type: "select", defaultValue: "1.0", params: { options: [ { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__API_VERSION__OPTIONS__LATEST__LABEL", value: "latest" }, { label: "1.0", value: "1.0" }, ] } }, { key: "timeoutInMs", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TIMEOUT__LABEL", defaultValue: 8000, type: "number", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TIMEOUT__DESCRIPTION", }, { key: "maxTokens", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MAX_TOKENS__LABEL", type: "slider", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__MAX_TOKENS__DESCRIPTION", defaultValue: 4000, params: { min: 100, max: 8000, step: 100 } }, { key: "temperature", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TEMPERATURE__LABEL", type: "slider", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TEMPERATURE__DESCRIPTION", defaultValue: 0.7, params: { min: 0, max: 1, step: 0.1 } }, { key: "logErrorToSystem", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_TO_SYSTEM__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_TO_SYSTEM__DESCRIPTION", type: "toggle", defaultValue: false, }, { key: "storeErrorInInput", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__STORE_ERROR_IN_INPUT__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__STORE_ERROR_IN_INPUT__DESCRIPTION", type: "toggle", defaultValue: true, }, { key: "errorHandling", type: "select", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__HANDLE_SERVICE_ERROR__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__HANDLE_SERVICE_ERROR__DESCRIPTION", defaultValue: "continue", params: { options: [ { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__HANDLE_SERVICE_ERROR__OPTIONS__STOP__LABEL", value: "stop" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__HANDLE_SERVICE_ERROR__OPTIONS__CONTINUE__LABEL", value: "continue" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__HANDLE_SERVICE_ERROR__OPTIONS__GOTO__LABEL", value: "goto" }, ] } }, { key: "errorMessage", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__ERROR_MESSAGE__LABEL", type: "cognigyText", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__ERROR_MESSAGE__DESCRIPTION", defaultValue: "", condition: { key: "errorHandling", value: "continue" } }, { key: "errorHandlingGotoTarget", type: "flowNode", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__ERROR__GOTO_NODE__LABEL", condition: { key: "errorHandling", value: "goto" } }, { key: "debugLogTokenCount", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_TOKEN_COUNT__LABEL", type: "toggle", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_TOKEN_COUNT__DESCRIPTION", defaultValue: false }, { key: "debugLogSystemPrompt", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_SYSTEM_PROMPT__LABEL", type: "toggle", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_SYSTEM_PROMPT__DESCRIPTION", defaultValue: false }, { key: "debugLogToolDefinitions", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_TOOL_DEFINITIONS__LABEL", type: "toggle", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_TOOL_DEFINITIONS__DESCRIPTION", defaultValue: false }, { key: "debugResult", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_KNOWLEDGE_RESULTS__LABEL", type: "toggle", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_KNOWLEDGE_RESULTS__DESCRIPTION", defaultValue: false }, { key: "debugConfig", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_CONFIG__LABEL", type: "toggle", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_CONFIG__DESCRIPTION", defaultValue: true }, { key: "storeLocation", type: "select", label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STORE_LOCATION__LABEL", description: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STORE_LOCATION__DESCRIPTION", defaultValue: "stream", params: { options: [ { label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STORE_LOCATION__OPTIONS__INPUT__LABEL", value: "input" }, { label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STORE_LOCATION__OPTIONS__CONTEXT__LABEL", value: "context" }, { label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STORE_LOCATION__OPTIONS__STREAM__LABEL", value: "stream" } ], required: true }, }, { key: "streamStoreCopyInInput", label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STREAM_STORE_COPY__LABEL", type: "toggle", description: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STREAM_STORE_COPY__DESCRIPTION", defaultValue: true, condition: { key: "storeLocation", value: "stream", } }, { key: "inputKey", type: "cognigyText", label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__INPUT_KEY__LABEL", defaultValue: "aiAgentOutput", condition: { or: [ { key: "storeLocation", value: "input", }, { and: [ { key: "storeLocation", value: "stream", }, { key: "streamStoreCopyInInput", value: true, } ] } ] } }, { key: "contextKey", type: "cognigyText", label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__CONTEXT_KEY__LABEL", defaultValue: "aiAgentOutput", condition: { key: "storeLocation", value: "context", } }, { key: "outputImmediately", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__OUTPUT_IMMEDIATELY__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__OUTPUT_IMMEDIATELY__DESCRIPTION", type: "toggle", defaultValue: true, condition: { or: [ { key: "storeLocation", value: "input", }, { key: "storeLocation", value: "context", } ] } }, { key: "streamStopTokens", type: "textArray", label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STREAM_STOP_TOKENS__LABEL", description: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__FIELDS__STREAM_STOP_TOKENS__DESCRIPTION", defaultValue: [".", "!", "?", "\\n"], condition: { key: "storeLocation", value: "stream", } }, { key: "processImages", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__PROCESS_IMAGES__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__PROCESS_IMAGES__DESCRIPTION", type: "toggle", defaultValue: false }, { key: "transcriptImageHandling", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TRANSCRIPT_IMAGES__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TRANSCRIPT_IMAGES__DESCRIPTION", type: "select", defaultValue: "minify", params: { options: [ { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TRANSCRIPT_IMAGES__OPTIONS__MINIFY__LABEL", value: "minify" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TRANSCRIPT_IMAGES__OPTIONS__DROP__LABEL", value: "drop" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__TRANSCRIPT_IMAGES__OPTIONS__KEEP__LABEL", value: "keep" } ], }, }, { key: "voiceSetting", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__VOICE_SETTING__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__VOICE_SETTING__DESCRIPTION", type: "select", defaultValue: "inheritFromAiAgent", params: { options: [ { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__VOICE_SETTING__OPTIONS__INHERIT__LABEL", value: "inheritFromAiAgent" }, { label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__VOICE_SETTING__OPTIONS__USE_JOB_VOICE__LABEL", value: "jobVoice" } ] } }, { key: "ttsVendor", defaultValue: "", type: "ttsSelect", label: "_unused_", params: { languageKey: "config.ttsLanguage", modelKey: "config.ttsModel", voiceKey: "config.ttsVoice", }, condition: { key: "voiceSetting", value: "jobVoice" } }, { key: "ttsLanguage", type: "ttsSelect", defaultValue: "", label: "_unused_", }, { key: "ttsModel", type: "ttsSelect", label: "_unused_", description: "_unused_", defaultValue: "", }, { key: "ttsVoice", type: "ttsSelect", defaultValue: "", label: "_unused_", }, { key: "ttsLabel", type: "cognigyText", defaultValue: "", label: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__TTS_LABEL__LABEL", description: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__TTS_LABEL__DESCRIPTION", condition: { and: [ { negate: true, key: "ttsVendor", value: "", // We show the field for all vendors as soon as it is defined }, { key: "voiceSetting", value: "jobVoice" } ] }, }, { key: "ttsDisableCache", type: "toggle", defaultValue: false, label: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__TTS_DISABLE_CACHE__LABEL", description: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__TTS_DISABLE_CACHE__DESCRIPTION", condition: { key: "voiceSetting", value: "jobVoice" }, } ], sections: [ { key: "memory", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__MEMORY__LABEL", defaultCollapsed: true, fields: [ "memoryType", "selectedProfileFields", "memoryContextInjection" ] }, { key: "knowledgeSearch", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__KNOWLEDGE_SEARCH__LABEL", description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__KNOWLEDGE_SEARCH__DESCRIPTION", defaultCollapsed: true, fields: [ "knowledgeSearchBehavior", "knowledgeSearchAlwaysWarning", "knowledgeSearchAiAgentKnowledge", "knowledgeSearchJobKnowledge", "knowledgeSearchJobStore", "knowledgeSearchGenerateSearchPrompt", "knowledgeSearchTopK", "knowledgeSearchTags", "knowledgeSearchTagsFilterOp", ] }, { key: "storage", label: "UI__NODE_EDITOR__SERVICE__GPT_PROMPT__SECTIONS__STORAGE__LABEL", defaultCollapsed: true, fields: [ "storeLocation", "streamStoreCopyInInput", "inputKey", "contextKey", "outputImmediately", "streamStopTokens" ] }, { key: "voice", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__VOICE__LABEL", defaultCollapsed: true, fields: [ "voiceSetting", "ttsVendor", "ttsLabel", "ttsDisableCache", ], }, { key: "toolSettings", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__TOOL_SETTINGS__LABEL", defaultCollapsed: true, fields: [ "toolChoice", "useStrict", ], }, { key: "imageHandling", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__IMAGE_HANDLING__LABEL", defaultCollapsed: true, fields: [ "processImages", "transcriptImageHandling" ] }, { key: "advanced", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__ADVANCED__LABEL", defaultCollapsed: true, fields: [ "llmProviderReferenceId", "apiVersion", "timeoutInMs", "maxTokens", "temperature", ], }, { key: "errorHandling", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__ERROR_HANDLING__LABEL", defaultCollapsed: true, fields: [ "logErrorToSystem", "storeErrorInInput", "errorHandling", "errorMessage", "errorHandlingGotoTarget", ], }, { key: "debugging", label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__DEBUG_SETTINGS__LABEL", defaultCollapsed: true, fields: [ "debugConfig", "debugResult", "debugLogTokenCount", "debugLogSystemPrompt", "debugLogToolDefinitions" ], } ], form: [ { type: "field", key: "aiAgent" }, { type: "field", key: "name" }, { type: "field", key: "description" }, { type: "field", key: "instructions" }, { type: "section", key: "memory" }, { type: "section", key: "knowledgeSearch" }, { type: "section", key: "storage" }, { type: "section", key: "voice" }, { type: "section", key: "toolSettings" }, { type: "section", key: "imageHandling" }, { type: "section", key: "advanced" }, { type: "section", key: "errorHandling" }, { type: "section", key: "debugging" }, ], tags: ["ai", "aiAgent"], function: async ({ cognigy, config, childConfigs, nodeId }) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20; const { api, context, input, profile, flowReferenceId } = cognigy; const { aiAgent, llmProviderReferenceId, name: jobName, description: jobDescription, instructions: jobInstructions, outputImmediately, toolChoice, useStrict, memoryType, selectedProfileFields, memoryContextInjection, knowledgeSearchBehavior, knowledgeSearchTags, knowledgeSearchTagsFilterOp, knowledgeSearchAiAgentKnowledge, knowledgeSearchJobKnowledge, knowledgeSearchJobStore, knowledgeSearchGenerateSearchPrompt, knowledgeSearchTopK, timeoutInMs, maxTokens, temperature, logErrorToSystem, storeErrorInInput, errorHandling, errorHandlingGotoTarget, errorMessage, debugConfig, debugLogTokenCount, debugLogSystemPrompt, debugLogToolDefinitions, debugResult, storeLocation, contextKey, inputKey, streamStoreCopyInInput, streamStopTokens, processImages, transcriptImageHandling, sessionParams } = config; try { if (!aiAgent) { throw new Error("Could not resolve AI Agent reference in AI Agent Node"); } // Determine if the job should inherit voice settings from the AI Agent if (config.voiceSetting === "inheritFromAiAgent") { if (aiAgent.enableVoiceConfigs && ((_a = aiAgent.voiceConfigs) === null || _a === void 0 ? void 0 : _a.ttsVendor) && aiAgent.voiceConfigs.ttsVendor !== "none") { // Inherit voice configurations from the AI Agent if valid Object.assign(config, { ttsVendor: aiAgent.voiceConfigs.ttsVendor, ttsLanguage: aiAgent.voiceConfigs.ttsLanguage, ttsModel: aiAgent.voiceConfigs.ttsModel, ttsVoice: aiAgent.voiceConfigs.ttsVoice, ttsLabel: aiAgent.voiceConfigs.ttsLabel, ttsDisableCache: aiAgent.voiceConfigs.ttsDisableCache, }); } else { // Reset voice settings if AI Agent lacks configurations Object.assign(config, { ttsVendor: "none", ttsLanguage: "", ttsModel: "", ttsVoice: "", ttsLabel: "", ttsDisableCache: false, }); } } // After inheriting or directly setting voice configurations from the AI Agent wizard, // we need to apply these settings to the voice gateway // Only proceed if we have a valid TTS vendor configured if (config.ttsVendor && config.ttsVendor !== "none") { try { const voiceSettings = (0, setSessionConfig_mapper_2.voiceConfigParamsToVoiceSettings)(config, api); const payload = setSessionConfig_mapper_1.setSessionConfig.handleVGInput(voiceSettings, sessionParams || {}, api); if (payload && Object.keys(payload).length > 0) { (_b = api.say) === null || _b === void 0 ? void 0 : _b.call(api, null, { _cognigy: payload, }); } (0, logFullConfigToDebugMode_1.logFullConfigToDebugMode)(cognigy, voiceSettings); } catch (error) { throw new Error(`[VG2] Error on AI Agent Job node. Error message: ${error.message}`); } } const _21 = profile, { profileId, accepted_gdpr, prevent_data_collection, privacy_policy } = _21, cleanedProfile = __rest(_21, ["profileId", "accepted_gdpr", "prevent_data_collection", "privacy_policy"]); const userMemory = (0, getUserMemory_1.getUserMemory)(memoryType, selectedProfileFields, aiAgent, cleanedProfile); /** * ----- Knowledge Search Section ----- */ let knowledgeSearchResponseData; const sessionState = await api.loadSessionState(); const lastToolCall = (_c = sessionState.lastToolCall) === null || _c === void 0 ? void 0 : _c.toolCall; if (knowledgeSearchBehavior === "always" || (knowledgeSearchBehavior === "onDemand" && ((_d = lastToolCall === null || lastToolCall === void 0 ? void 0 : lastToolCall.function) === null || _d === void 0 ? void 0 : _d.name) === "retrieve_knowledge")) { const knowledgeStoreIds = []; if (knowledgeSearchAiAgentKnowledge && aiAgent.knowledgeReferenceId) { knowledgeStoreIds.push(aiAgent.knowledgeReferenceId); } if (knowledgeSearchJobKnowledge && knowledgeSearchJobStore) { knowledgeStoreIds.push(knowledgeSearchJobStore); } if (knowledgeStoreIds.length > 0 && (input.text || ((_f = (_e = lastToolCall === null || lastToolCall === void 0 ? void 0 : lastToolCall.function) === null || _e === void 0 ? void 0 : _e.arguments) === null || _f === void 0 ? void 0 : _f.generated_prompt))) { let query = ((_h = (_g = lastToolCall === null || lastToolCall === void 0 ? void 0 : lastToolCall.function) === null || _g === void 0 ? void 0 : _g.arguments) === null || _h === void 0 ? void 0 : _h.generated_prompt) || input.text; if (knowledgeSearchBehavior === "always" && knowledgeSearchGenerateSearchPrompt) { const generatedSearchPrompt = await (0, generateSearchPrompt_1.generateSearchPrompt)({ api, userMemory, llmProviderReferenceId, debugLogTokenCount, memoryContextInjection }); if (generatedSearchPrompt === null || generatedSearchPrompt === void 0 ? void 0 : generatedSearchPrompt.generated_prompt) { query = generatedSearchPrompt.generated_prompt; } } const data = { language: input.language, query, topK: knowledgeSearchTopK !== null && knowledgeSearchTopK !== void 0 ? knowledgeSearchTopK : 3, traceId: input.traceId, disableSensitiveLogging: false, knowledgeStoreIds, }; if (knowledgeSearchBehavior === "onDemand") { const generated_buffer_phrase = (_k = (_j = lastToolCall === null || lastToolCall === void 0 ? void 0 : lastToolCall.function) === null || _j === void 0 ? void 0 : _j.arguments) === null || _k === void 0 ? void 0 : _k.generated_buffer_phrase; if (generated_buffer_phrase) { // output the generated buffer phrase. Don't add it to the transcript, else the LLM will repeat it next time. await ((_l = api.output) === null || _l === void 0 ? void 0 : _l.call(api, generated_buffer_phrase, { _cognigy: { _preventTranscript: true } })); } } if (knowledgeSearchTags && knowledgeSearchTags.length > 0) { // convert each knowledgeSourceTag to a string knowledgeSearchTags.forEach((tag, index) => { knowledgeSearchTags[index] = tag.toString(); }); data.tagsData = { tags: knowledgeSearchTags, op: knowledgeSearchTagsFilterOp }; } const knowledgeSearchResponse = await api.knowledgeSearch(data); // Handle possible response errors if ((knowledgeSearchResponse === null || knowledgeSearchResponse === void 0 ? void 0 : knowledgeSearchResponse.status) !== "success") { const errorMessage = (knowledgeSearchResponse === null || knowledgeSearchResponse === void 0 ? void 0 : knowledgeSearchResponse.error) || "empty"; throw new Error(`Error while performing knowledge search. Remote returned error: ${errorMessage}`); } knowledgeSearchResponseData = knowledgeSearchResponse.data; // Optional Debug Message of Knowledge Search Results if (debugResult) { const messageLines = []; if (query) { messageLines.push(`\n<b>UI__DEBUG_MODE__AI_AGENT_JOB__KNOWLEDGE_SEARCH__SEARCH_PROMPT</b> ${query}`); } if ((_m = knowledgeSearchResponseData === null || knowledgeSearchResponseData === void 0 ? void 0 : knowledgeSearchResponseData.topK) === null || _m === void 0 ? void 0 : _m.length) { knowledgeSearchResponseData === null || knowledgeSearchResponseData === void 0 ? void 0 : knowledgeSearchResponseData.topK.forEach((result, index) => { var _a; messageLines.push(`\nTop ${index + 1}:`); messageLines.push(`Distance: ${result.distance}`); messageLines.push(`Source Name: ${(_a = result.sourceMetaData) === null || _a === void 0 ? void 0 : _a.sourceName}`); messageLines.push(`Text: ${result.text}`); }); } else { messageLines.push("UI__DEBUG_MODE__AI_AGENT_JOB__KNOWLEDGE_SEARCH__NO_RESULTS"); } (_o = api.logDebugMessage) === null || _o === void 0 ? void 0 : _o.call(api, messageLines.join("\n"), "UI__DEBUG_MODE__AI_AGENT_JOB__KNOWLEDGE_SEARCH__HEADER"); } // Knowledge Search "onDemand" responds to a tool call if (knowledgeSearchBehavior === "onDemand") { const toolCallTranscriptStep = { role: transcripts_1.TranscriptRole.ASSISTANT, type: transcripts_1.TranscriptEntryType.TOOL_CALL, source: "system", payload: { name: lastToolCall.function.name, id: lastToolCall.id, input: lastToolCall.function.arguments, } }; // Add Tool Call Message to Transcript await api.addTranscriptStep(toolCallTranscriptStep); const toolAnswer = { role: transcripts_1.TranscriptRole.TOOL, type: transcripts_1.TranscriptEntryType.TOOL_ANSWER, source: "system", payload: { toolCallId: lastToolCall.id, content: `We have this context as answer from the knowledge source:\n${JSON.stringify(knowledgeSearchResponseData)}`, } }; // Add Tool Answer Message to Transcript await api.addTranscriptStep(toolAnswer); } } if (((_p = lastToolCall === null || lastToolCall === void 0 ? void 0 : lastToolCall.function) === null || _p === void 0 ? void 0 : _p.name) === "retrieve_knowledge") { // remove the retrieve_knowledge toolCall from session state to avoid infinite loops api.updateSessionStateValues({ lastToolCall: undefined }); } } // ----- End of Knowledge Search Section ----- // const isOnDemandKnowledgeStoreConfigured = knowledgeSearchBehavior === "onDemand" && ((knowledgeSearchAiAgentKnowledge && aiAgent.knowledgeReferenceId) || (knowledgeSearchJobKnowledge && knowledgeSearchJobStore)); // create the system Message from the AI Agent resource and this Node's config storage const systemMessage = (0, createSystemMessage_1.createSystemMessage)(aiAgent, input, jobName, jobDescription, jobInstructions, userMemory, memoryContextInjection, isOnDemandKnowledgeStoreConfigured ? "onDemand" : "none"); // Optional Debug Message for system prompt if enabled if (debugLogSystemPrompt && systemMessage.length > 0) { // Replace the Cognigy brand message in the logged prompt const debugSystemMessage = (_r = (_q = systemMessage[0]) === null || _q === void 0 ? void 0 : _q.content) === null || _r === void 0 ? void 0 : _r.replace(`${(0, createSystemMessage_1.getCognigyBrandMessage)()}\n`, ""); (_s = api.logDebugMessage) === null || _s === void 0 ? void 0 : _s.call(api, debugSystemMessage, "UI__DEBUG_MODE__AI_AGENT_JOB__SYSTEM_PROMPT__HEADER"); } const { toolIds, toolNames, toolMap, tools } = await (0, createToolDefinitions_1.createToolDefinitions)(childConfigs, api, useStrict); // we only add this tool if at least one knowledge source is enabled if (isOnDemandKnowledgeStoreConfigured) { const knowledgeTool = { type: "function", function: { name: "retrieve_knowledge", description: "Find the answer to general prompts or questions searching the attached data sources. It focuses exclusively on a knowledge search and does not execute tasks like small talk, calculations, or script running.", parameters: { type: "object", properties: { generated_prompt: { type: "string", description: "Generated question including the context of the conversation (I want to know...)." }, generated_buffer_phrase: { type: "string", description: "A generated delay or stalling phrase. Consider the context. Adapt to your speech style and language." }, }, required: ["generated_prompt", "generated_buffer_phrase"], additionalProperties: false } } }; if (useStrict) { knowledgeTool.function.strict = true; } toolNames.push(knowledgeTool.function.name + " (internal)"); tools.push(knowledgeTool); } if (debugLogToolDefinitions) { (_t = api.logDebugMessage) === null || _t === void 0 ? void 0 : _t.call(api, tools, "UI__DEBUG_MODE__AI_AGENT_JOB__TOOL_DEFINITIONS"); } // Optional Debug Message with the config if (debugConfig) { const messageLines = []; // Job Name messageLines.push(`<b>UI__DEBUG_MODE__AI_AGENT_JOB__CONFIGURATION__AI_AGENT_NAME__LABEL</b> ${aiAgent.name}`); messageLines.push(`<b>UI__DEBUG_MODE__AI_AGENT_JOB__CONFIGURATION__JOB_NAME__LABEL</b> ${jobName}`); // Safety settings messageLines.push(`<b>UI__DEBUG_MODE__AI_AGENT_JOB__CONFIGURATION__SAFETY_SETTINGS_AVOID_HARMFUL_CONTENT</b> ${(_u = aiAgent === null || aiAgent === void 0 ? void 0 : aiAgent.safetySettings) === null || _u === void 0 ? void 0 : _u.avoidHarmfulContent}`); messageLines.push(`<b>UI__DEBUG_MODE__AI_AGENT_JOB__CONFIGURATION__SAFETY_SETTINGS_AVOID_UNGROUNDED_CONTENT</b> ${(_v = aiAgent === null || aiAgent === void 0 ? void 0 : aiAgent.safetySettings) === null || _v === void 0 ? void 0 : _v.avoidUngroundedContent}`); messageLines.push(`<b>UI__DEBUG_MODE__AI_AGENT_JOB__CONFIGURATION__SAFETY_SETTINGS_AVOID_COPYRIGHT_INFRINGEMENTS</b> ${(_w = aiAgent === null || aiAgent === void 0 ? void 0 : aiAgent.safetySettings) === null || _w === void 0 ? void 0 : _w.avoidCopyrightInfringements}`); messageLines.push(`<b>UI__DEBUG_MODE__AI_AGENT_JOB__CONFIGURATION__SAFETY_SETTINGS_PREVENT_JAILBREAK_AND_MANIPULATION</b> ${