@cognigy/rest-api-client
Version:
Cognigy REST-Client
1,120 lines • 80 kB
JavaScript
"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 = exports.AI_AGENT_TOOLS_WHITELIST = void 0;
/* Npm modules */
const crypto = require("crypto");
/* Custom modules */
const createNodeDescriptor_1 = require("../../../createNodeDescriptor");
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 parseMcpHeaders_1 = require("./helpers/parseMcpHeaders");
const transcripts_1 = require("../../../../interfaces/transcripts/transcripts");
exports.AI_AGENT_TOOLS_WHITELIST = ["aiAgentJobDefault", "aiAgentJobTool", "aiAgentJobMCPTool", "knowledgeTool", "handoverToAiAgentTool", "handoverToHumanAgentTool", "sendEmailTool", "executeWorkflowTool"];
const addAiAgentNodeTypeForVG2 = (channel, data = {}) => {
if (channel === "voiceGateway2") {
return Object.assign(Object.assign({}, (data || {})), { nodeType: "ai-agent" });
}
return data;
};
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: exports.AI_AGENT_TOOLS_WHITELIST,
},
},
},
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: "useTextAlternativeForLLM",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__INCLUDE_ALL_OUTPUT_TYPES__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__INCLUDE_ALL_OUTPUT_TYPES__DESCRIPTION",
defaultValue: true,
},
{
key: "advancedLogging",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__ADVANCED_LOGGING__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__ADVANCED_LOGGING__DESCRIPTION",
defaultValue: false,
},
{
key: "loggingWebhookUrl",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOGGING_WEBHOOK_URL__LABEL",
type: "cognigyText",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOGGING_WEBHOOK_URL__DESCRIPTION",
defaultValue: "",
condition: {
key: "advancedLogging",
value: true
}
},
{
key: "loggingCustomData",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CUSTOM_LOGGING_DATA__LABEL",
type: "cognigyText",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CUSTOM_LOGGING_DATA__DESCRIPTION",
defaultValue: "",
condition: {
key: "advancedLogging",
value: true
}
},
{
key: "loggingHeaders",
type: "keyValuePairs",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOGGING_HEADERS__LABEL",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOGGING_HEADERS__DESCRIPTION",
defaultValue: "{}",
condition: {
key: "advancedLogging",
value: true
}
},
{
key: "conditionForLogging",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CONDITION_FOR_LOGGING__LABEL",
type: "cognigyText",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CONDITION_FOR_LOGGING__DESCRIPTION",
defaultValue: "",
condition: {
key: "advancedLogging",
value: true
}
},
{
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: "debugLogLLMLatency",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_LLM_LATENCY__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__LOG_LLM_LATENCY__DESCRIPTION",
defaultValue: false
},
{
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",
labelKey: "config.ttsLabel"
},
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: "ttsLabel",
value: "NICE_PROVIDED" // this is not working, a workaround is introduced in ConditionalFieldWrapper
},
{
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"
},
},
{
key: "customModelOptions",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CUSTOM_MODEL_OPTIONS__LABEL",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CUSTOM_MODEL_OPTIONS__DESCRIPTION",
type: "json",
defaultValue: {}
},
{
key: "customRequestOptions",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CUSTOM_REQUEST_OPTIONS__LABEL",
description: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__FIELDS__CUSTOM_REQUEST_OPTIONS__DESCRIPTION",
type: "json",
defaultValue: {}
}
],
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",
"useTextAlternativeForLLM"
],
},
{
key: "errorHandling",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__ERROR_HANDLING__LABEL",
defaultCollapsed: true,
fields: [
"logErrorToSystem",
"storeErrorInInput",
"errorHandling",
"errorMessage",
"errorHandlingGotoTarget",
],
},
{
key: "customOptions",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__CUSTOM_OPTIONS__LABEL",
defaultCollapsed: true,
fields: [
"customModelOptions",
"customRequestOptions"
]
},
{
key: "debugging",
label: "UI__NODE_EDITOR__SERVICE__AI_AGENT_JOB__SECTIONS__DEBUG_SETTINGS__LABEL",
defaultCollapsed: true,
fields: [
"debugConfig",
"debugResult",
"debugLogTokenCount",
"debugLogSystemPrompt",
"debugLogToolDefinitions",
"debugLogLLMLatency",
"advancedLogging",
"loggingWebhookUrl",
"loggingCustomData",
"conditionForLogging",
"loggingHeaders",
],
}
],
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: "customOptions" },
{ 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, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30;
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, useTextAlternativeForLLM, advancedLogging, loggingWebhookUrl, loggingCustomData, conditionForLogging, logErrorToSystem, storeErrorInInput, errorHandling, errorHandlingGotoTarget, errorMessage, debugConfig, debugLogTokenCount, debugLogSystemPrompt, debugLogToolDefinitions, debugResult, debugLogLLMLatency, storeLocation, contextKey, inputKey, streamStoreCopyInInput, streamStopTokens, processImages, transcriptImageHandling, loggingHeaders, sessionParams, customModelOptions, customRequestOptions } = 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 _31 = profile, { profileId, accepted_gdpr, prevent_data_collection, privacy_policy } = _31, cleanedProfile = __rest(_31, ["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, addAiAgentNodeTypeForVG2(input.channel, {
_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: Object.assign({ name: lastToolCall.function.name, id: lastToolCall.id, input: lastToolCall.function.arguments }, (lastToolCall.thoughtSignature && { thoughtSignature: lastToolCall.thoughtSignature }))
};
// 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 :