UNPKG

@watzon/n8n-nodes-perplexity

Version:

n8n node to interact with the Perplexity AI API

218 lines 8.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Perplexity = void 0; class Perplexity { constructor() { this.description = { displayName: 'Perplexity', name: 'perplexity', icon: 'file:perplexity.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"]}}', description: 'Interact with Perplexity AI API', defaults: { name: 'Perplexity', }, inputs: ["main"], outputs: ["main"], credentials: [ { name: 'perplexityApi', required: true, }, ], properties: [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, options: [ { name: 'Chat Completion', value: 'chatCompletion', description: 'Create a chat completion', action: 'Create a chat completion', }, ], default: 'chatCompletion', }, { displayName: 'Model', name: 'model', type: 'options', options: [ { name: 'Sonar Deep Research', value: 'sonar-deep-research', }, { name: 'Sonar Reasoning Pro', value: 'sonar-reasoning-pro', }, { name: 'Sonar Reasoning', value: 'sonar-reasoning', }, { name: 'Sonar Pro', value: 'sonar-pro', }, { name: 'Sonar', value: 'sonar', }, { name: 'R1 1776', value: 'r1-1776', }, { name: 'Llama 3.1 Sonar Small (Legacy)', value: 'llama-3.1-sonar-small-128k-online', }, { name: 'Llama 3.1 Sonar Large (Legacy)', value: 'llama-3.1-sonar-large-128k-online', }, { name: 'Llama 3.1 Sonar Huge (Legacy)', value: 'llama-3.1-sonar-huge-128k-online', }, ], default: 'sonar', description: 'The model to use for completion', required: true, }, { displayName: 'Messages', name: 'messages', type: 'fixedCollection', typeOptions: { multipleValues: true, }, default: {}, options: [ { name: 'messagesUi', displayName: 'Message', values: [ { displayName: 'Role', name: 'role', type: 'options', options: [ { name: 'System', value: 'system', }, { name: 'User', value: 'user', }, { name: 'Assistant', value: 'assistant', }, ], default: 'user', }, { displayName: 'Content', name: 'content', type: 'string', default: '', }, ], }, ], description: 'The messages to send to the API', }, { displayName: 'Additional Fields', name: 'additionalFields', type: 'collection', placeholder: 'Add Field', default: {}, options: [ { displayName: 'Temperature', name: 'temperature', type: 'number', typeOptions: { minValue: 0, maxValue: 2, }, default: 0.7, description: 'Sampling temperature between 0 and 2', }, { displayName: 'Max Tokens', name: 'max_tokens', type: 'number', default: 1024, description: 'Maximum number of tokens to generate', }, { displayName: 'Top P', name: 'top_p', type: 'number', typeOptions: { minValue: 0, maxValue: 1, }, default: 0.9, description: 'Nucleus sampling parameter', }, ], }, ], }; } async execute() { const items = this.getInputData(); const returnData = []; for (let i = 0; i < items.length; i++) { try { const operation = this.getNodeParameter('operation', i); if (operation === 'chatCompletion') { const model = this.getNodeParameter('model', i); const messagesUi = this.getNodeParameter('messages.messagesUi', i, []); const additionalFields = this.getNodeParameter('additionalFields', i); const messages = messagesUi.map((messageData) => ({ role: messageData.role, content: messageData.content, })); const body = { model, messages, ...additionalFields, }; const response = await this.helpers.requestWithAuthentication.call(this, 'perplexityApi', { method: 'POST', url: 'https://api.perplexity.ai/chat/completions', body, json: true, }); returnData.push({ json: response, }); } } catch (error) { if (this.continueOnFail()) { returnData.push({ json: { error: error.message, }, }); continue; } throw error; } } return [returnData]; } } exports.Perplexity = Perplexity; //# sourceMappingURL=Perplexity.node.js.map