n8n-nodes-ragdoll-ai
Version:
n8n node to integrate with Ragdoll AI Knowledge Management API
986 lines • 38.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RagdollAi = void 0;
class RagdollAi {
constructor() {
this.description = {
displayName: 'Ragdoll AI',
name: 'ragdollAi',
icon: 'file:ragdoll-ai.svg',
group: ['output'],
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Consume Ragdoll AI API',
defaults: {
name: 'Ragdoll AI',
},
inputs: ['main'],
outputs: ['main'],
credentials: [
{
name: 'ragdollApi',
required: true,
},
],
requestDefaults: {
baseURL: '={{$credentials.url}}',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
},
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Knowledge Base',
value: 'knowledgeBase',
},
{
name: 'Data Source',
value: 'dataSource',
},
{
name: 'Document',
value: 'document',
},
],
default: 'knowledgeBase',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['knowledgeBase'],
},
},
options: [
{
name: 'Chat',
value: 'chat',
action: 'Chat with a knowledge base',
description: 'Chat with a knowledge base',
routing: {
request: {
method: 'POST',
url: '/v1/knowledge-bases/{{$parameter.knowledgeBaseId}}/chat',
},
},
},
{
name: 'Create',
value: 'create',
action: 'Create a knowledge base',
description: 'Creates a new knowledge base',
routing: {
request: {
method: 'POST',
url: '/v1/knowledge-bases/',
},
},
},
{
name: 'Delete',
value: 'delete',
action: 'Delete a knowledge base',
description: 'Delete a knowledge base by ID',
routing: {
request: {
method: 'DELETE',
url: '/v1/knowledge-bases/{{$parameter.knowledgeBaseId}}',
},
},
},
{
name: 'Get',
value: 'get',
action: 'Get a knowledge base',
description: 'Get a knowledge base by ID',
routing: {
request: {
method: 'GET',
url: '/v1/knowledge-bases/{{$parameter.knowledgeBaseId}}',
},
},
},
{
name: 'Get Many',
value: 'getMany',
action: 'Get many knowledge bases',
description: 'Get many knowledge bases',
routing: {
request: {
method: 'GET',
url: '/v1/knowledge-bases/',
},
},
},
{
name: 'Query',
value: 'query',
action: 'Query a knowledge base',
description: 'Query a knowledge base',
routing: {
request: {
method: 'POST',
url: '/v1/knowledge-bases/{{$parameter.knowledgeBaseId}}/query',
},
},
},
{
name: 'Update',
value: 'update',
action: 'Update a knowledge base',
description: 'Update a knowledge base',
routing: {
request: {
method: 'PUT',
url: '/v1/knowledge-bases/{{$parameter.knowledgeBaseId}}',
},
},
},
],
default: 'create',
},
{
displayName: 'Name',
name: 'name',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['create'],
},
},
description: 'Name of the knowledge base',
routing: {
send: {
type: 'body',
property: 'name',
},
},
},
{
displayName: 'Type',
name: 'type',
type: 'options',
options: [
{
name: 'Light RAG',
value: 'lightrag',
},
{
name: 'Vector',
value: 'vector',
},
],
default: 'lightrag',
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['create'],
},
},
description: 'Type of the knowledge base',
routing: {
send: {
type: 'body',
property: 'type',
},
},
},
{
displayName: 'Knowledge Base ID',
name: 'knowledgeBaseId',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['get', 'delete'],
},
},
description: 'ID of the knowledge base',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['dataSource'],
},
},
options: [
{
name: 'Create',
value: 'create',
description: 'Create a data source',
action: 'Create a data source',
routing: {
request: {
method: 'POST',
url: '/v1/data-sources/',
},
},
},
{
name: 'Delete',
value: 'delete',
description: 'Delete a data source',
action: 'Delete a data source',
routing: {
request: {
method: 'DELETE',
url: '/v1/data-sources/{{$parameter.dataSourceId}}',
},
},
},
{
name: 'Get',
value: 'get',
description: 'Get a data source',
action: 'Get a data source',
routing: {
request: {
method: 'GET',
url: '/v1/data-sources/{{$parameter.dataSourceId}}',
},
},
},
{
name: 'Get Many',
value: 'getAll',
description: 'Get many data sources',
action: 'Get many data sources',
routing: {
request: {
method: 'GET',
url: '/v1/data-sources/',
},
},
},
{
name: 'Start Indexing',
value: 'startIndexing',
description: 'Start indexing a data source',
action: 'Start indexing a data source',
routing: {
request: {
method: 'POST',
url: '/v1/data-sources/{{$parameter.dataSourceId}}/indexing',
},
},
},
],
default: 'create',
},
{
displayName: 'Knowledge Base ID',
name: 'knowledgeBaseId',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
},
},
description: 'ID of the knowledge base to add data source to',
routing: {
send: {
type: 'body',
property: 'knowledgeBaseId',
},
},
},
{
displayName: 'Name',
name: 'name',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
},
},
description: 'Name of the data source',
routing: {
send: {
type: 'body',
property: 'name',
},
},
},
{
displayName: 'Type',
name: 'type',
type: 'options',
options: [
{
name: 'Web',
value: 'web',
},
{
name: 'Notion',
value: 'notion',
},
{
name: 'Google Drive',
value: 'googleDrive',
},
],
default: 'web',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
},
},
description: 'Type of the data source',
routing: {
send: {
type: 'body',
property: 'type',
},
},
},
{
displayName: 'URL',
name: 'url',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
type: ['web'],
},
},
description: 'URL of the web page to index',
routing: {
send: {
type: 'body',
property: 'params.url',
},
},
},
{
displayName: 'Max Depth',
name: 'maxDepth',
type: 'number',
typeOptions: {
minValue: 0,
maxValue: 3,
},
default: 1,
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
type: ['web'],
},
},
description: 'Maximum depth to crawl',
routing: {
send: {
type: 'body',
property: 'params.maxDepth',
},
},
},
{
displayName: 'Notion ID',
name: 'notionId',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
type: ['notion'],
},
},
description: 'ID of the Notion page or database',
routing: {
send: {
type: 'body',
property: 'params.id',
},
},
},
{
displayName: 'Notion Token',
name: 'notionToken',
type: 'string',
typeOptions: {
password: true,
},
required: true,
default: '',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
type: ['notion'],
},
},
description: 'Integration token for Notion',
routing: {
send: {
type: 'body',
property: 'params.token',
},
},
},
{
displayName: 'Google Drive ID',
name: 'driveId',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
type: ['googleDrive'],
},
},
description: 'ID of the Google Drive folder or document',
routing: {
send: {
type: 'body',
property: 'params.id',
},
},
},
{
displayName: 'Google Drive Credentials JSON',
name: 'driveCredentialsJson',
type: 'string',
typeOptions: {
password: true,
},
required: true,
default: '',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['create'],
type: ['googleDrive'],
},
},
description: 'JSON credentials for Google Drive',
routing: {
send: {
type: 'body',
property: 'params.credentialsJson',
},
},
},
{
displayName: 'Data Source ID',
name: 'dataSourceId',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['get', 'delete', 'startIndexing'],
},
},
description: 'ID of the data source',
},
{
displayName: 'Chunk Size',
name: 'chunkSize',
type: 'number',
default: 1000,
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['startIndexing'],
},
},
description: 'Size of text chunks to create',
routing: {
send: {
type: 'body',
property: 'config.textChunking.chunkSize',
value: '={{ $value }}',
},
},
},
{
displayName: 'Chunk Overlap',
name: 'chunkOverlap',
type: 'number',
default: 200,
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['startIndexing'],
},
},
description: 'Overlap between text chunks',
routing: {
send: {
type: 'body',
property: 'config.textChunking.chunkOverlap',
value: '={{ $value }}',
},
},
},
{
displayName: 'Chunking Type',
name: 'chunkingType',
type: 'hidden',
default: 'fixedSize',
displayOptions: {
show: {
resource: ['dataSource'],
operation: ['startIndexing'],
},
},
routing: {
send: {
type: 'body',
property: 'config.textChunking.type',
value: 'fixedSize',
},
},
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['document'],
},
},
options: [
{
name: 'Create',
value: 'create',
action: 'Create a document',
description: 'Create a new document',
routing: {
request: {
method: 'POST',
url: '/v1/documents/',
},
},
},
{
name: 'Get',
value: 'get',
action: 'Get a document',
description: 'Get a document by ID',
routing: {
request: {
method: 'GET',
url: '/v1/documents/{{$parameter.documentId}}',
},
},
},
{
name: 'Get Many',
value: 'getMany',
action: 'Get many documents',
description: 'Get many documents',
routing: {
request: {
method: 'GET',
url: '/v1/documents/',
},
},
},
{
name: 'Delete',
value: 'delete',
action: 'Delete a document',
description: 'Delete a document',
routing: {
request: {
method: 'DELETE',
url: '/v1/documents/{{$parameter.documentId}}',
},
},
},
],
default: 'create',
},
{
displayName: 'Knowledge Base ID',
name: 'knowledgeBaseId',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['update', 'query', 'chat'],
},
},
description: 'ID of the knowledge base to update',
},
{
displayName: 'Name',
name: 'name',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['update'],
},
},
description: 'New name for the knowledge base',
routing: {
send: {
type: 'body',
property: 'name',
},
},
},
{
displayName: 'Query',
name: 'query',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['query'],
},
},
description: 'Query to search in the knowledge base',
routing: {
send: {
type: 'body',
property: 'query',
},
},
},
{
displayName: 'Number of Results',
name: 'topK',
type: 'number',
default: 3,
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['query'],
},
},
description: 'Number of results to return',
routing: {
send: {
type: 'body',
property: 'topK',
},
},
},
{
displayName: 'Message',
name: 'message',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['chat'],
},
},
description: 'Message to send to the chat',
routing: {
send: {
type: 'body',
property: 'message',
},
},
},
{
displayName: 'Chat History',
name: 'chatHistory',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
default: {},
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['chat'],
},
},
options: [
{
name: 'historyValues',
displayName: 'History',
values: [
{
displayName: 'Role',
name: 'role',
type: 'options',
options: [
{
name: 'User',
value: 'user',
},
{
name: 'Assistant',
value: 'assistant',
},
{
name: 'System',
value: 'system',
},
],
default: 'user',
},
{
displayName: 'Content',
name: 'content',
type: 'string',
default: '',
},
],
},
],
description: 'Chat history for context',
routing: {
send: {
type: 'body',
property: 'chatHistory',
value: '={{ $parameter.chatHistory.historyValues }}',
},
},
},
{
displayName: 'Top K',
name: 'topK',
type: 'number',
default: 3,
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['chat'],
},
},
description: 'Number of documents to retrieve for context',
routing: {
send: {
type: 'body',
property: 'topK',
},
},
},
{
displayName: 'System Prompt',
name: 'systemPrompt',
type: 'string',
typeOptions: {
rows: 4,
},
default: '',
displayOptions: {
show: {
resource: ['knowledgeBase'],
operation: ['chat'],
},
},
description: 'System prompt for the chat',
routing: {
send: {
type: 'body',
property: 'systemPrompt',
},
},
},
{
displayName: 'Knowledge Base ID',
name: 'knowledgeBaseId',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['document'],
operation: ['create'],
},
},
description: 'ID of the knowledge base to add document to',
routing: {
send: {
type: 'body',
property: 'knowledgeBaseId',
},
},
},
{
displayName: 'Content',
name: 'content',
type: 'string',
typeOptions: {
rows: 4,
},
required: true,
default: '',
displayOptions: {
show: {
resource: ['document'],
operation: ['create'],
},
},
description: 'Content of the document',
routing: {
send: {
type: 'body',
property: 'content',
},
},
},
{
displayName: 'Metadata',
name: 'metadata',
type: 'json',
default: '{}',
displayOptions: {
show: {
resource: ['document'],
operation: ['create'],
},
},
description: 'Metadata for the document',
routing: {
send: {
type: 'body',
property: 'metadata',
},
},
},
{
displayName: 'Chunking Config',
name: 'chunkingConfig',
type: 'collection',
default: {},
displayOptions: {
show: {
resource: ['document'],
operation: ['create'],
},
},
options: [
{
displayName: 'Chunk Size',
name: 'chunkSize',
type: 'number',
default: 1000,
description: 'Size of text chunks to create',
},
{
displayName: 'Chunk Overlap',
name: 'chunkOverlap',
type: 'number',
default: 200,
description: 'Overlap between text chunks',
},
{
displayName: 'Type',
name: 'type',
type: 'options',
options: [
{
name: 'Fixed Size',
value: 'fixedSize',
},
{
name: 'Paragraph',
value: 'paragraph',
},
],
default: 'fixedSize',
description: 'Type of chunking to use',
},
],
description: 'Configuration for chunking the document',
routing: {
send: {
type: 'body',
property: 'chunkingConfig',
value: '={{ $parameter.chunkingConfig.chunkSize ? { type: $parameter.chunkingConfig.type || "fixedSize", chunkSize: $parameter.chunkingConfig.chunkSize, chunkOverlap: $parameter.chunkingConfig.chunkOverlap || 200 } : undefined }}',
},
},
},
{
displayName: 'Document ID',
name: 'documentId',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['document'],
operation: ['get', 'delete'],
},
},
description: 'ID of the document',
},
{
displayName: 'Filters',
name: 'filters',
type: 'collection',
default: {},
displayOptions: {
show: {
resource: ['document'],
operation: ['getMany'],
},
},
options: [
{
displayName: 'Knowledge Base ID',
name: 'knowledgeBaseId',
type: 'string',
default: '',
description: 'Filter documents by knowledge base ID',
routing: {
request: {
qs: {
knowledgeBaseId: '={{ $value }}',
},
},
},
},
],
description: 'Filters for listing documents',
},
],
};
}
}
exports.RagdollAi = RagdollAi;
//# sourceMappingURL=RagdollAi.node.js.map