@n8n/n8n-nodes-langchain
Version:

88 lines • 3.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.baseAnalyze = baseAnalyze;
const n8n_workflow_1 = require("n8n-workflow");
const utils_1 = require("./utils");
const transport_1 = require("../transport");
async function baseAnalyze(i, urlsPropertyName, fallbackMimeType) {
const model = this.getNodeParameter('modelId', i, '', { extractValue: true });
const inputType = this.getNodeParameter('inputType', i, 'url');
const text = this.getNodeParameter('text', i, '');
const simplify = this.getNodeParameter('simplify', i, true);
const options = this.getNodeParameter('options', i, {});
(0, n8n_workflow_1.validateNodeParameters)(options, { maxOutputTokens: { type: 'number', required: false } }, this.getNode());
const generationConfig = {
maxOutputTokens: options.maxOutputTokens,
};
let contents;
if (inputType === 'url') {
const urls = this.getNodeParameter(urlsPropertyName, i, '');
const filesDataPromises = urls
.split(',')
.map((url) => url.trim())
.filter((url) => url)
.map(async (url) => {
if (url.startsWith('https://generativelanguage.googleapis.com')) {
const { mimeType } = (await transport_1.apiRequest.call(this, 'GET', '', {
option: { url },
}));
return { fileUri: url, mimeType };
}
else {
const { fileContent, mimeType } = await utils_1.downloadFile.call(this, url, fallbackMimeType);
return await utils_1.uploadFile.call(this, fileContent, mimeType);
}
});
const filesData = await Promise.all(filesDataPromises);
contents = [
{
role: 'user',
parts: filesData.map((fileData) => ({
fileData,
})),
},
];
}
else {
const binaryPropertyNames = this.getNodeParameter('binaryPropertyName', i, 'data');
const promises = binaryPropertyNames
.split(',')
.map((binaryPropertyName) => binaryPropertyName.trim())
.filter((binaryPropertyName) => binaryPropertyName)
.map(async (binaryPropertyName) => {
const binaryData = this.helpers.assertBinaryData(i, binaryPropertyName);
const buffer = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName);
return await utils_1.uploadFile.call(this, buffer, binaryData.mimeType);
});
const filesData = await Promise.all(promises);
contents = [
{
role: 'user',
parts: filesData.map((fileData) => ({
fileData,
})),
},
];
}
contents[0].parts.push({ text });
const body = {
contents,
generationConfig,
};
const response = (await transport_1.apiRequest.call(this, 'POST', `/v1beta/${model}:generateContent`, {
body,
}));
if (simplify) {
return response.candidates.map((candidate) => ({
json: candidate,
pairedItem: { item: i },
}));
}
return [
{
json: { ...response },
pairedItem: { item: i },
},
];
}
//# sourceMappingURL=baseAnalyze.js.map