@n8n/n8n-nodes-langchain
Version:

185 lines • 7.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.description = void 0;
exports.execute = execute;
const n8n_workflow_1 = require("n8n-workflow");
const transport_1 = require("../../../transport");
const descriptions_1 = require("../descriptions");
const properties = [
descriptions_1.assistantRLC,
{
displayName: 'Options',
name: 'options',
placeholder: 'Add Option',
type: 'collection',
default: {},
options: [
{
displayName: 'Code Interpreter',
name: 'codeInterpreter',
type: 'boolean',
default: false,
description: 'Whether to enable the code interpreter that allows the assistants to write and run Python code in a sandboxed execution environment, find more <a href="https://platform.openai.com/docs/assistants/tools/code-interpreter" target="_blank">here</a>',
},
{
displayName: 'Description',
name: 'description',
type: 'string',
default: '',
description: 'The description of the assistant. The maximum length is 512 characters.',
placeholder: 'e.g. My personal assistant',
},
{
displayName: 'Files',
name: 'file_ids',
type: 'multiOptions',
description: 'The files to be used by the assistant, there can be a maximum of 20 files attached to the assistant. You can use expression to pass file IDs as an array or comma-separated string.',
typeOptions: {
loadOptionsMethod: 'getFiles',
},
default: [],
hint: "Add more files by using the 'Upload a File' operation, any existing files not selected here will be removed.",
},
{
displayName: 'Instructions',
name: 'instructions',
type: 'string',
description: 'The system instructions that the assistant uses. The maximum length is 32768 characters.',
default: '',
typeOptions: {
rows: 2,
},
},
{
displayName: 'Knowledge Retrieval',
name: 'knowledgeRetrieval',
type: 'boolean',
default: false,
description: 'Whether to augments the assistant with knowledge from outside its model, such as proprietary product information or documents, find more <a href="https://platform.openai.com/docs/assistants/tools/knowledge-retrieval" target="_blank">here</a>',
},
{ ...(0, descriptions_1.modelRLC)('modelSearch'), required: false },
{
displayName: 'Name',
name: 'name',
type: 'string',
default: '',
description: 'The name of the assistant. The maximum length is 256 characters.',
placeholder: 'e.g. My Assistant',
},
{
displayName: 'Remove All Custom Tools (Functions)',
name: 'removeCustomTools',
type: 'boolean',
default: false,
description: 'Whether to remove all custom tools (functions) from the assistant',
},
{
displayName: 'Output Randomness (Temperature)',
name: 'temperature',
default: 1,
typeOptions: { maxValue: 1, minValue: 0, numberPrecision: 1 },
description: 'Controls randomness: Lowering results in less random completions. As the temperature approaches zero, the model will become deterministic and repetitive. We generally recommend altering this or temperature but not both.',
type: 'number',
},
{
displayName: 'Output Randomness (Top P)',
name: 'topP',
default: 1,
typeOptions: { maxValue: 1, minValue: 0, numberPrecision: 1 },
description: 'An alternative to sampling with temperature, controls diversity via nucleus sampling: 0.5 means half of all likelihood-weighted options are considered. We generally recommend altering this or temperature but not both.',
type: 'number',
},
],
},
];
const displayOptions = {
show: {
operation: ['update'],
resource: ['assistant'],
},
};
exports.description = (0, n8n_workflow_1.updateDisplayOptions)(displayOptions, properties);
function getFileIds(file_ids) {
if (Array.isArray(file_ids)) {
return file_ids;
}
if (typeof file_ids === 'string') {
return file_ids.split(',').map((file_id) => file_id.trim());
}
throw new n8n_workflow_1.ApplicationError('Invalid file_ids type');
}
async function execute(i) {
const assistantId = this.getNodeParameter('assistantId', i, '', { extractValue: true });
const options = this.getNodeParameter('options', i, {});
const { modelId, name, instructions, codeInterpreter, knowledgeRetrieval, file_ids, removeCustomTools, temperature, topP, } = options;
const assistantDescription = options.description;
const body = {};
if (file_ids) {
const files = getFileIds(file_ids);
if (files.length > 20) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The maximum number of files that can be attached to the assistant is 20', { itemIndex: i });
}
body.tool_resources = {
...(body.tool_resources ?? {}),
code_interpreter: {
file_ids: files,
},
};
}
if (modelId) {
body.model = this.getNodeParameter('options.modelId', i, '', { extractValue: true });
}
if (name) {
body.name = name;
}
if (assistantDescription) {
body.description = assistantDescription;
}
if (instructions) {
body.instructions = instructions;
}
if (temperature) {
body.temperature = temperature;
}
if (topP) {
body.topP = topP;
}
let tools = (await transport_1.apiRequest.call(this, 'GET', `/assistants/${assistantId}`, {
headers: {
'OpenAI-Beta': 'assistants=v2',
},
})).tools || [];
if (codeInterpreter && !tools.find((tool) => tool.type === 'code_interpreter')) {
tools.push({
type: 'code_interpreter',
});
}
if (codeInterpreter === false && tools.find((tool) => tool.type === 'code_interpreter')) {
tools = tools.filter((tool) => tool.type !== 'code_interpreter');
}
if (knowledgeRetrieval && !tools.find((tool) => tool.type === 'file_search')) {
tools.push({
type: 'file_search',
});
}
if (knowledgeRetrieval === false && tools.find((tool) => tool.type === 'file_search')) {
tools = tools.filter((tool) => tool.type !== 'file_search');
}
if (removeCustomTools) {
tools = tools.filter((tool) => tool.type !== 'function');
}
body.tools = tools;
const response = await transport_1.apiRequest.call(this, 'POST', `/assistants/${assistantId}`, {
body,
headers: {
'OpenAI-Beta': 'assistants=v2',
},
});
return [
{
json: response,
pairedItem: { item: i },
},
];
}
//# sourceMappingURL=update.operation.js.map