@cognigy/rest-api-client
Version:
Cognigy REST-Client
1,074 lines • 69.6 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 = 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> ${