Merge pull request #547 from FlowiseAI/feature/Credential

Feature/Credential
This commit is contained in:
Henry Heng
2023-07-28 16:22:57 +01:00
committed by GitHub
224 changed files with 12777 additions and 7270 deletions
+22 -20
View File
@@ -118,26 +118,28 @@ Flowise has 3 different modules in a single mono repository.
Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://docs.flowiseai.com/environment-variables) Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://docs.flowiseai.com/environment-variables)
| Variable | Description | Type | Default | | Variable | Description | Type | Default |
| -------------------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | | -------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- |
| PORT | The HTTP port Flowise runs on | Number | 3000 | | PORT | The HTTP port Flowise runs on | Number | 3000 |
| FLOWISE_USERNAME | Username to login | String | | | FLOWISE_USERNAME | Username to login | String | |
| FLOWISE_PASSWORD | Password to login | String | | | FLOWISE_PASSWORD | Password to login | String | |
| DEBUG | Print logs from components | Boolean | | | DEBUG | Print logs from components | Boolean | |
| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | | LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` |
| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | | LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` |
| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | | APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` |
| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | | EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` |
| TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | | | TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | |
| TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | | | TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | |
| OVERRIDE_DATABASE | Override current database with default | Enum String: `true`, `false` | `true` | | OVERRIDE_DATABASE | Override current database with default | Enum String: `true`, `false` | `true` |
| DATABASE_TYPE | Type of database to store the flowise data | Enum String: `sqlite`, `mysql`, `postgres` | `sqlite` | | DATABASE_TYPE | Type of database to store the flowise data | Enum String: `sqlite`, `mysql`, `postgres` | `sqlite` |
| DATABASE_PATH | Location where database is saved (When DATABASE_TYPE is sqlite) | String | `your-home-dir/.flowise` | | DATABASE_PATH | Location where database is saved (When DATABASE_TYPE is sqlite) | String | `your-home-dir/.flowise` |
| DATABASE_HOST | Host URL or IP address (When DATABASE_TYPE is not sqlite) | String | | | DATABASE_HOST | Host URL or IP address (When DATABASE_TYPE is not sqlite) | String | |
| DATABASE_PORT | Database port (When DATABASE_TYPE is not sqlite) | String | | | DATABASE_PORT | Database port (When DATABASE_TYPE is not sqlite) | String | |
| DATABASE_USERNAME | Database username (When DATABASE_TYPE is not sqlite) | String | | | DATABASE_USERNAME | Database username (When DATABASE_TYPE is not sqlite) | String | |
| DATABASE_PASSWORD | Database password (When DATABASE_TYPE is not sqlite) | String | | | DATABASE_PASSWORD | Database password (When DATABASE_TYPE is not sqlite) | String | |
| DATABASE_NAME | Database name (When DATABASE_TYPE is not sqlite) | String | | | DATABASE_NAME | Database name (When DATABASE_TYPE is not sqlite) | String | |
| PASSPHRASE | Passphrase used to create encryption key | String | `MYPASSPHRASE` |
| SECRETKEY_PATH | Location where encryption key (used to encrypt/decrypt credentials) is saved | String | `your-path/Flowise/packages/server` |
You can also specify the env variables when using `npx`. For example: You can also specify the env variables when using `npx`. For example:
+8 -6
View File
@@ -1,20 +1,22 @@
PORT=3000 PORT=3000
OVERRIDE_DATABASE=true PASSPHRASE=MYPASSPHRASE # Passphrase used to create encryption key
DATABASE_TYPE=sqlite
DATABASE_PATH=/root/.flowise DATABASE_PATH=/root/.flowise
# When database is not sqlite APIKEY_PATH=/root/.flowise
SECRETKEY_PATH=/root/.flowise
LOG_PATH=/root/.flowise/logs
# DATABASE_TYPE=postgres
# DATABASE_PORT="" # DATABASE_PORT=""
# DATABASE_HOST="" # DATABASE_HOST=""
# DATABASE_NAME="flowise" # DATABASE_NAME="flowise"
# DATABASE_USER="" # DATABASE_USER=""
# DATABASE_PASSWORD="" # DATABASE_PASSWORD=""
# OVERRIDE_DATABASE=true
APIKEY_PATH=/root/.flowise
LOG_PATH=/root/.flowise/logs
# FLOWISE_USERNAME=user # FLOWISE_USERNAME=user
# FLOWISE_PASSWORD=1234 # FLOWISE_PASSWORD=1234
# DEBUG=true # DEBUG=true
# LOG_LEVEL=debug (error | warn | info | verbose | debug) # LOG_LEVEL=debug (error | warn | info | verbose | debug)
# EXECUTION_MODE=child or main # EXECUTION_MODE=main (child | main)
# TOOL_FUNCTION_BUILTIN_DEP=crypto,fs # TOOL_FUNCTION_BUILTIN_DEP=crypto,fs
# TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash # TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash
+2 -1
View File
@@ -25,10 +25,11 @@ Starts Flowise from [DockerHub Image](https://hub.docker.com/repository/docker/f
## 🌱 Env Variables ## 🌱 Env Variables
If you like to persist your data (flows, logs, apikeys), set these variables in the `.env` file inside `docker` folder: If you like to persist your data (flows, logs, apikeys, credentials), set these variables in the `.env` file inside `docker` folder:
- DATABASE_PATH=/root/.flowise - DATABASE_PATH=/root/.flowise
- APIKEY_PATH=/root/.flowise - APIKEY_PATH=/root/.flowise
- LOG_PATH=/root/.flowise/logs - LOG_PATH=/root/.flowise/logs
- SECRETKEY_PATH=/root/.flowise
Flowise also support different environment variables to configure your instance. Read [more](https://docs.flowiseai.com/environment-variables) Flowise also support different environment variables to configure your instance. Read [more](https://docs.flowiseai.com/environment-variables)
+3 -1
View File
@@ -6,13 +6,15 @@ services:
restart: always restart: always
environment: environment:
- PORT=${PORT} - PORT=${PORT}
- PASSPHRASE=${PASSPHRASE}
- FLOWISE_USERNAME=${FLOWISE_USERNAME} - FLOWISE_USERNAME=${FLOWISE_USERNAME}
- FLOWISE_PASSWORD=${FLOWISE_PASSWORD} - FLOWISE_PASSWORD=${FLOWISE_PASSWORD}
- DEBUG=${DEBUG} - DEBUG=${DEBUG}
- DATABASE_PATH=${DATABASE_PATH} - DATABASE_PATH=${DATABASE_PATH}
- APIKEY_PATH=${APIKEY_PATH} - APIKEY_PATH=${APIKEY_PATH}
- LOG_PATH=${LOG_PATH} - SECRETKEY_PATH=${SECRETKEY_PATH}
- LOG_LEVEL=${LOG_LEVEL} - LOG_LEVEL=${LOG_LEVEL}
- LOG_PATH=${LOG_PATH}
- EXECUTION_MODE=${EXECUTION_MODE} - EXECUTION_MODE=${EXECUTION_MODE}
ports: ports:
- '${PORT}:${PORT}' - '${PORT}:${PORT}'
@@ -0,0 +1,27 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class AirtableApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Airtable API'
this.name = 'airtableApi'
this.version = 1.0
this.description =
'Refer to <a target="_blank" href="https://support.airtable.com/docs/creating-and-using-api-keys-and-access-tokens">official guide</a> on how to get accessToken on Airtable'
this.inputs = [
{
label: 'Access Token',
name: 'accessToken',
type: 'password',
placeholder: '<AIRTABLE_ACCESS_TOKEN>'
}
]
}
}
module.exports = { credClass: AirtableApi }
@@ -0,0 +1,23 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class AnthropicApi implements INodeCredential {
label: string
name: string
version: number
inputs: INodeParams[]
constructor() {
this.label = 'Anthropic API'
this.name = 'anthropicApi'
this.version = 1.0
this.inputs = [
{
label: 'Anthropic Api Key',
name: 'anthropicApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: AnthropicApi }
@@ -0,0 +1,47 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class AzureOpenAIApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Azure OpenAI API'
this.name = 'azureOpenAIApi'
this.version = 1.0
this.description =
'Refer to <a target="_blank" href="https://azure.microsoft.com/en-us/products/cognitive-services/openai-service">official guide</a> of how to use Azure OpenAI service'
this.inputs = [
{
label: 'Azure OpenAI Api Key',
name: 'azureOpenAIApiKey',
type: 'password',
description: `Refer to <a target="_blank" href="https://learn.microsoft.com/en-us/azure/cognitive-services/openai/quickstart?tabs=command-line&pivots=rest-api#set-up">official guide</a> on how to create API key on Azure OpenAI`
},
{
label: 'Azure OpenAI Api Instance Name',
name: 'azureOpenAIApiInstanceName',
type: 'string',
placeholder: 'YOUR-INSTANCE-NAME'
},
{
label: 'Azure OpenAI Api Deployment Name',
name: 'azureOpenAIApiDeploymentName',
type: 'string',
placeholder: 'YOUR-DEPLOYMENT-NAME'
},
{
label: 'Azure OpenAI Api Version',
name: 'azureOpenAIApiVersion',
type: 'string',
placeholder: '2023-06-01-preview',
description:
'Description of Supported API Versions. Please refer <a target="_blank" href="https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference#chat-completions">examples</a>'
}
]
}
}
module.exports = { credClass: AzureOpenAIApi }
@@ -0,0 +1,24 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class BraveSearchApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Brave Search API'
this.name = 'braveSearchApi'
this.version = 1.0
this.inputs = [
{
label: 'BraveSearch Api Key',
name: 'braveApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: BraveSearchApi }
@@ -0,0 +1,23 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class CohereApi implements INodeCredential {
label: string
name: string
version: number
inputs: INodeParams[]
constructor() {
this.label = 'Cohere API'
this.name = 'cohereApi'
this.version = 1.0
this.inputs = [
{
label: 'Cohere Api Key',
name: 'cohereApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: CohereApi }
@@ -0,0 +1,33 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class ConfluenceApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Confluence API'
this.name = 'confluenceApi'
this.version = 1.0
this.description =
'Refer to <a target="_blank" href="https://support.atlassian.com/confluence-cloud/docs/manage-oauth-access-tokens/">official guide</a> on how to get accessToken on Confluence'
this.inputs = [
{
label: 'Access Token',
name: 'accessToken',
type: 'password',
placeholder: '<CONFLUENCE_ACCESS_TOKEN>'
},
{
label: 'Username',
name: 'username',
type: 'string',
placeholder: '<CONFLUENCE_USERNAME>'
}
]
}
}
module.exports = { credClass: ConfluenceApi }
@@ -0,0 +1,29 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class DynamodbMemoryApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'DynamodbMemory API'
this.name = 'dynamodbMemoryApi'
this.version = 1.0
this.inputs = [
{
label: 'Access Key',
name: 'accessKey',
type: 'password'
},
{
label: 'Secret Access Key',
name: 'secretAccessKey',
type: 'password'
}
]
}
}
module.exports = { credClass: DynamodbMemoryApi }
@@ -0,0 +1,27 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class FigmaApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Figma API'
this.name = 'figmaApi'
this.version = 1.0
this.description =
'Refer to <a target="_blank" href="https://www.figma.com/developers/api#access-tokens">official guide</a> on how to get accessToken on Figma'
this.inputs = [
{
label: 'Access Token',
name: 'accessToken',
type: 'password',
placeholder: '<FIGMA_ACCESS_TOKEN>'
}
]
}
}
module.exports = { credClass: FigmaApi }
@@ -0,0 +1,27 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class GithubApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Github API'
this.name = 'githubApi'
this.version = 1.0
this.description =
'Refer to <a target="_blank" href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens">official guide</a> on how to get accessToken on Github'
this.inputs = [
{
label: 'Access Token',
name: 'accessToken',
type: 'password',
placeholder: '<GITHUB_ACCESS_TOKEN>'
}
]
}
}
module.exports = { credClass: GithubApi }
@@ -0,0 +1,23 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class HuggingFaceApi implements INodeCredential {
label: string
name: string
version: number
inputs: INodeParams[]
constructor() {
this.label = 'HuggingFace API'
this.name = 'huggingFaceApi'
this.version = 1.0
this.inputs = [
{
label: 'HuggingFace Api Key',
name: 'huggingFaceApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: HuggingFaceApi }
@@ -0,0 +1,31 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class MotorheadMemoryApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Motorhead Memory API'
this.name = 'motorheadMemoryApi'
this.version = 1.0
this.description =
'Refer to <a target="_blank" href="https://docs.getmetal.io/misc-get-keys">official guide</a> on how to create API key and Client ID on Motorhead Memory'
this.inputs = [
{
label: 'Client ID',
name: 'clientId',
type: 'string'
},
{
label: 'API Key',
name: 'apiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: MotorheadMemoryApi }
@@ -0,0 +1,26 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class NotionApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Notion API'
this.name = 'notionApi'
this.version = 1.0
this.description =
'You can find integration token <a target="_blank" href="https://developers.notion.com/docs/create-a-notion-integration#step-1-create-an-integration">here</a>'
this.inputs = [
{
label: 'Notion Integration Token',
name: 'notionIntegrationToken',
type: 'password'
}
]
}
}
module.exports = { credClass: NotionApi }
@@ -0,0 +1,23 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class OpenAIApi implements INodeCredential {
label: string
name: string
version: number
inputs: INodeParams[]
constructor() {
this.label = 'OpenAI API'
this.name = 'openAIApi'
this.version = 1.0
this.inputs = [
{
label: 'OpenAI Api Key',
name: 'openAIApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: OpenAIApi }
@@ -0,0 +1,25 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class OpenAPIAuth implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'OpenAPI Auth Token'
this.name = 'openAPIAuth'
this.version = 1.0
this.inputs = [
{
label: 'OpenAPI Token',
name: 'openAPIToken',
type: 'password',
description: 'Auth Token. For example: Bearer <TOKEN>'
}
]
}
}
module.exports = { credClass: OpenAPIAuth }
@@ -0,0 +1,29 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class PineconeApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Pinecone API'
this.name = 'pineconeApi'
this.version = 1.0
this.inputs = [
{
label: 'Pinecone Api Key',
name: 'pineconeApiKey',
type: 'password'
},
{
label: 'Pinecone Environment',
name: 'pineconeEnv',
type: 'string'
}
]
}
}
module.exports = { credClass: PineconeApi }
@@ -0,0 +1,24 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class QdrantApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Qdrant API'
this.name = 'qdrantApi'
this.version = 1.0
this.inputs = [
{
label: 'Qdrant API Key',
name: 'qdrantApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: QdrantApi }
@@ -0,0 +1,23 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class ReplicateApi implements INodeCredential {
label: string
name: string
version: number
inputs: INodeParams[]
constructor() {
this.label = 'Replicate API'
this.name = 'replicateApi'
this.version = 1.0
this.inputs = [
{
label: 'Replicate Api Key',
name: 'replicateApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: ReplicateApi }
@@ -0,0 +1,24 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class SerpApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Serp API'
this.name = 'serpApi'
this.version = 1.0
this.inputs = [
{
label: 'Serp Api Key',
name: 'serpApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: SerpApi }
@@ -0,0 +1,24 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class SerperApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Serper API'
this.name = 'serperApi'
this.version = 1.0
this.inputs = [
{
label: 'Serper Api Key',
name: 'serperApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: SerperApi }
@@ -0,0 +1,31 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class SingleStoreApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'SingleStore API'
this.name = 'singleStoreApi'
this.version = 1.0
this.inputs = [
{
label: 'User',
name: 'user',
type: 'string',
placeholder: '<SINGLESTORE_USERNAME>'
},
{
label: 'Password',
name: 'password',
type: 'password',
placeholder: '<SINGLESTORE_PASSWORD>'
}
]
}
}
module.exports = { credClass: SingleStoreApi }
@@ -0,0 +1,24 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class SupabaseApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Supabase API'
this.name = 'supabaseApi'
this.version = 1.0
this.inputs = [
{
label: 'Supabase API Key',
name: 'supabaseApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: SupabaseApi }
@@ -0,0 +1,24 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class WeaviateApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Weaviate API'
this.name = 'weaviateApi'
this.version = 1.0
this.inputs = [
{
label: 'Weaviate API Key',
name: 'weaviateApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: WeaviateApi }
@@ -0,0 +1,24 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class ZapierNLAApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Zapier NLA API'
this.name = 'zapierNLAApi'
this.version = 1.0
this.inputs = [
{
label: 'Zapier NLA Api Key',
name: 'zapierNLAApiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: ZapierNLAApi }
@@ -0,0 +1,26 @@
import { INodeParams, INodeCredential } from '../src/Interface'
class ZepMemoryApi implements INodeCredential {
label: string
name: string
version: number
description: string
inputs: INodeParams[]
constructor() {
this.label = 'Zep Memory API'
this.name = 'zepMemoryApi'
this.version = 1.0
this.description =
'Refer to <a target="_blank" href="https://docs.getzep.com/deployment/auth/">official guide</a> on how to create API key on Zep'
this.inputs = [
{
label: 'API Key',
name: 'apiKey',
type: 'password'
}
]
}
}
module.exports = { credClass: ZepMemoryApi }
@@ -1,6 +1,6 @@
import { ICommonObject, INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface'
import { AgentExecutor } from 'langchain/agents' import { AgentExecutor } from 'langchain/agents'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { LoadPyodide, finalSystemPrompt, systemPrompt } from './core' import { LoadPyodide, finalSystemPrompt, systemPrompt } from './core'
import { LLMChain } from 'langchain/chains' import { LLMChain } from 'langchain/chains'
import { BaseLanguageModel } from 'langchain/base_language' import { BaseLanguageModel } from 'langchain/base_language'
@@ -10,34 +10,36 @@ import axios from 'axios'
class Airtable_Agents implements INode { class Airtable_Agents implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Airtable Agent' this.label = 'Airtable Agent'
this.name = 'airtableAgent' this.name = 'airtableAgent'
this.version = 1.0
this.type = 'AgentExecutor' this.type = 'AgentExecutor'
this.category = 'Agents' this.category = 'Agents'
this.icon = 'airtable.svg' this.icon = 'airtable.svg'
this.description = 'Agent used to to answer queries on Airtable table' this.description = 'Agent used to to answer queries on Airtable table'
this.baseClasses = [this.type, ...getBaseClasses(AgentExecutor)] this.baseClasses = [this.type, ...getBaseClasses(AgentExecutor)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['airtableApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Language Model', label: 'Language Model',
name: 'model', name: 'model',
type: 'BaseLanguageModel' type: 'BaseLanguageModel'
}, },
{
label: 'Personal Access Token',
name: 'accessToken',
type: 'password',
description:
'Get personal access token from <a target="_blank" href="https://airtable.com/developers/web/guides/personal-access-tokens">official guide</a>'
},
{ {
label: 'Base Id', label: 'Base Id',
name: 'baseId', name: 'baseId',
@@ -67,7 +69,6 @@ class Airtable_Agents implements INode {
name: 'limit', name: 'limit',
type: 'number', type: 'number',
default: 100, default: 100,
step: 1,
additionalParams: true, additionalParams: true,
description: 'Number of results to return' description: 'Number of results to return'
} }
@@ -81,12 +82,14 @@ class Airtable_Agents implements INode {
async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string> { async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string> {
const model = nodeData.inputs?.model as BaseLanguageModel const model = nodeData.inputs?.model as BaseLanguageModel
const accessToken = nodeData.inputs?.accessToken as string
const baseId = nodeData.inputs?.baseId as string const baseId = nodeData.inputs?.baseId as string
const tableId = nodeData.inputs?.tableId as string const tableId = nodeData.inputs?.tableId as string
const returnAll = nodeData.inputs?.returnAll as boolean const returnAll = nodeData.inputs?.returnAll as boolean
const limit = nodeData.inputs?.limit as string const limit = nodeData.inputs?.limit as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const accessToken = getCredentialParam('accessToken', credentialData, nodeData)
let airtableData: ICommonObject[] = [] let airtableData: ICommonObject[] = []
if (returnAll) { if (returnAll) {
@@ -124,7 +127,6 @@ json.dumps(my_dict)`
} catch (error) { } catch (error) {
throw new Error(error) throw new Error(error)
} }
options.logger.debug('[components/AirtableAgent] [1] DataframeColDict =>', dataframeColDict)
// Then tell GPT to come out with ONLY python code // Then tell GPT to come out with ONLY python code
// For example: len(df), df[df['SibSp'] > 3]['PassengerId'].count() // For example: len(df), df[df['SibSp'] > 3]['PassengerId'].count()
@@ -142,7 +144,6 @@ json.dumps(my_dict)`
const res = await chain.call(inputs, [loggerHandler]) const res = await chain.call(inputs, [loggerHandler])
pythonCode = res?.text pythonCode = res?.text
} }
options.logger.debug('[components/AirtableAgent] [2] Generated Python Code =>', pythonCode)
// Then run the code using Pyodide // Then run the code using Pyodide
let finalResult = '' let finalResult = ''
@@ -154,7 +155,6 @@ json.dumps(my_dict)`
throw new Error(`Sorry, I'm unable to find answer for question: "${input}" using follwoing code: "${pythonCode}"`) throw new Error(`Sorry, I'm unable to find answer for question: "${input}" using follwoing code: "${pythonCode}"`)
} }
} }
options.logger.debug('[components/AirtableAgent] [3] Pyodide Result =>', finalResult)
// Finally, return a complete answer // Finally, return a complete answer
if (finalResult) { if (finalResult) {
@@ -170,11 +170,9 @@ json.dumps(my_dict)`
if (options.socketIO && options.socketIOClientId) { if (options.socketIO && options.socketIOClientId) {
const result = await chain.call(inputs, [loggerHandler, handler]) const result = await chain.call(inputs, [loggerHandler, handler])
options.logger.debug('[components/AirtableAgent] [4] Final Result =>', result?.text)
return result?.text return result?.text
} else { } else {
const result = await chain.call(inputs, [loggerHandler]) const result = await chain.call(inputs, [loggerHandler])
options.logger.debug('[components/AirtableAgent] [4] Final Result =>', result?.text)
return result?.text return result?.text
} }
} }
@@ -8,6 +8,7 @@ import { flatten } from 'lodash'
class AutoGPT_Agents implements INode { class AutoGPT_Agents implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -18,6 +19,7 @@ class AutoGPT_Agents implements INode {
constructor() { constructor() {
this.label = 'AutoGPT' this.label = 'AutoGPT'
this.name = 'autoGPT' this.name = 'autoGPT'
this.version = 1.0
this.type = 'AutoGPT' this.type = 'AutoGPT'
this.category = 'Agents' this.category = 'Agents'
this.icon = 'autogpt.png' this.icon = 'autogpt.png'
@@ -6,6 +6,7 @@ import { VectorStore } from 'langchain/vectorstores'
class BabyAGI_Agents implements INode { class BabyAGI_Agents implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -16,6 +17,7 @@ class BabyAGI_Agents implements INode {
constructor() { constructor() {
this.label = 'BabyAGI' this.label = 'BabyAGI'
this.name = 'babyAGI' this.name = 'babyAGI'
this.version = 1.0
this.type = 'BabyAGI' this.type = 'BabyAGI'
this.category = 'Agents' this.category = 'Agents'
this.icon = 'babyagi.jpg' this.icon = 'babyagi.jpg'
@@ -9,6 +9,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class CSV_Agents implements INode { class CSV_Agents implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -19,6 +20,7 @@ class CSV_Agents implements INode {
constructor() { constructor() {
this.label = 'CSV Agent' this.label = 'CSV Agent'
this.name = 'csvAgent' this.name = 'csvAgent'
this.version = 1.0
this.type = 'AgentExecutor' this.type = 'AgentExecutor'
this.category = 'Agents' this.category = 'Agents'
this.icon = 'csvagent.png' this.icon = 'csvagent.png'
@@ -92,7 +94,6 @@ json.dumps(my_dict)`
} catch (error) { } catch (error) {
throw new Error(error) throw new Error(error)
} }
options.logger.debug('[components/CSVAgent] [1] DataframeColDict =>', dataframeColDict)
// Then tell GPT to come out with ONLY python code // Then tell GPT to come out with ONLY python code
// For example: len(df), df[df['SibSp'] > 3]['PassengerId'].count() // For example: len(df), df[df['SibSp'] > 3]['PassengerId'].count()
@@ -110,7 +111,6 @@ json.dumps(my_dict)`
const res = await chain.call(inputs, [loggerHandler]) const res = await chain.call(inputs, [loggerHandler])
pythonCode = res?.text pythonCode = res?.text
} }
options.logger.debug('[components/CSVAgent] [2] Generated Python Code =>', pythonCode)
// Then run the code using Pyodide // Then run the code using Pyodide
let finalResult = '' let finalResult = ''
@@ -122,7 +122,6 @@ json.dumps(my_dict)`
throw new Error(`Sorry, I'm unable to find answer for question: "${input}" using follwoing code: "${pythonCode}"`) throw new Error(`Sorry, I'm unable to find answer for question: "${input}" using follwoing code: "${pythonCode}"`)
} }
} }
options.logger.debug('[components/CSVAgent] [3] Pyodide Result =>', finalResult)
// Finally, return a complete answer // Finally, return a complete answer
if (finalResult) { if (finalResult) {
@@ -138,11 +137,9 @@ json.dumps(my_dict)`
if (options.socketIO && options.socketIOClientId) { if (options.socketIO && options.socketIOClientId) {
const result = await chain.call(inputs, [loggerHandler, handler]) const result = await chain.call(inputs, [loggerHandler, handler])
options.logger.debug('[components/CSVAgent] [4] Final Result =>', result?.text)
return result?.text return result?.text
} else { } else {
const result = await chain.call(inputs, [loggerHandler]) const result = await chain.call(inputs, [loggerHandler])
options.logger.debug('[components/CSVAgent] [4] Final Result =>', result?.text)
return result?.text return result?.text
} }
} }
@@ -7,9 +7,18 @@ import { AIMessage, HumanMessage } from 'langchain/schema'
import { BaseLanguageModel } from 'langchain/base_language' import { BaseLanguageModel } from 'langchain/base_language'
import { flatten } from 'lodash' import { flatten } from 'lodash'
const DEFAULT_PREFIX = `Assistant is a large language model trained by OpenAI.
Assistant is designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, Assistant is able to generate human-like text based on the input it receives, allowing it to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.
Assistant is constantly learning and improving, and its capabilities are constantly evolving. It is able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. Additionally, Assistant is able to generate its own text based on the input it receives, allowing it to engage in discussions and provide explanations and descriptions on a wide range of topics.
Overall, Assistant is a powerful system that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether you need help with a specific question or just want to have a conversation about a particular topic, Assistant is here to assist.`
class ConversationalAgent_Agents implements INode { class ConversationalAgent_Agents implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -20,6 +29,7 @@ class ConversationalAgent_Agents implements INode {
constructor() { constructor() {
this.label = 'Conversational Agent' this.label = 'Conversational Agent'
this.name = 'conversationalAgent' this.name = 'conversationalAgent'
this.version = 1.0
this.type = 'AgentExecutor' this.type = 'AgentExecutor'
this.category = 'Agents' this.category = 'Agents'
this.icon = 'agent.svg' this.icon = 'agent.svg'
@@ -47,14 +57,7 @@ class ConversationalAgent_Agents implements INode {
name: 'systemMessage', name: 'systemMessage',
type: 'string', type: 'string',
rows: 4, rows: 4,
optional: true, default: DEFAULT_PREFIX,
additionalParams: true
},
{
label: 'Human Message',
name: 'humanMessage',
type: 'string',
rows: 4,
optional: true, optional: true,
additionalParams: true additionalParams: true
} }
@@ -66,7 +69,6 @@ class ConversationalAgent_Agents implements INode {
let tools = nodeData.inputs?.tools as Tool[] let tools = nodeData.inputs?.tools as Tool[]
tools = flatten(tools) tools = flatten(tools)
const memory = nodeData.inputs?.memory as BaseChatMemory const memory = nodeData.inputs?.memory as BaseChatMemory
const humanMessage = nodeData.inputs?.humanMessage as string
const systemMessage = nodeData.inputs?.systemMessage as string const systemMessage = nodeData.inputs?.systemMessage as string
const obj: InitializeAgentExecutorOptions = { const obj: InitializeAgentExecutorOptions = {
@@ -75,9 +77,6 @@ class ConversationalAgent_Agents implements INode {
} }
const agentArgs: any = {} const agentArgs: any = {}
if (humanMessage) {
agentArgs.humanMessage = humanMessage
}
if (systemMessage) { if (systemMessage) {
agentArgs.systemMessage = systemMessage agentArgs.systemMessage = systemMessage
} }
@@ -8,6 +8,7 @@ import { flatten } from 'lodash'
class MRKLAgentChat_Agents implements INode { class MRKLAgentChat_Agents implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -18,6 +19,7 @@ class MRKLAgentChat_Agents implements INode {
constructor() { constructor() {
this.label = 'MRKL Agent for Chat Models' this.label = 'MRKL Agent for Chat Models'
this.name = 'mrklAgentChat' this.name = 'mrklAgentChat'
this.version = 1.0
this.type = 'AgentExecutor' this.type = 'AgentExecutor'
this.category = 'Agents' this.category = 'Agents'
this.icon = 'agent.svg' this.icon = 'agent.svg'
@@ -8,6 +8,7 @@ import { flatten } from 'lodash'
class MRKLAgentLLM_Agents implements INode { class MRKLAgentLLM_Agents implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -18,6 +19,7 @@ class MRKLAgentLLM_Agents implements INode {
constructor() { constructor() {
this.label = 'MRKL Agent for LLMs' this.label = 'MRKL Agent for LLMs'
this.name = 'mrklAgentLLM' this.name = 'mrklAgentLLM'
this.version = 1.0
this.type = 'AgentExecutor' this.type = 'AgentExecutor'
this.category = 'Agents' this.category = 'Agents'
this.icon = 'agent.svg' this.icon = 'agent.svg'
@@ -10,6 +10,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class OpenAIFunctionAgent_Agents implements INode { class OpenAIFunctionAgent_Agents implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -20,6 +21,7 @@ class OpenAIFunctionAgent_Agents implements INode {
constructor() { constructor() {
this.label = 'OpenAI Function Agent' this.label = 'OpenAI Function Agent'
this.name = 'openAIFunctionAgent' this.name = 'openAIFunctionAgent'
this.version = 1.0
this.type = 'AgentExecutor' this.type = 'AgentExecutor'
this.category = 'Agents' this.category = 'Agents'
this.icon = 'openai.png' this.icon = 'openai.png'
@@ -19,6 +19,7 @@ export const API_RESPONSE_RAW_PROMPT_TEMPLATE =
class GETApiChain_Chains implements INode { class GETApiChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -29,6 +30,7 @@ class GETApiChain_Chains implements INode {
constructor() { constructor() {
this.label = 'GET API Chain' this.label = 'GET API Chain'
this.name = 'getApiChain' this.name = 'getApiChain'
this.version = 1.0
this.type = 'GETApiChain' this.type = 'GETApiChain'
this.icon = 'apichain.svg' this.icon = 'apichain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -7,6 +7,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class OpenApiChain_Chains implements INode { class OpenApiChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -17,10 +18,11 @@ class OpenApiChain_Chains implements INode {
constructor() { constructor() {
this.label = 'OpenAPI Chain' this.label = 'OpenAPI Chain'
this.name = 'openApiChain' this.name = 'openApiChain'
this.type = 'openApiChain' this.version = 1.0
this.type = 'OpenAPIChain'
this.icon = 'openapi.png' this.icon = 'openapi.png'
this.category = 'Chains' this.category = 'Chains'
this.description = 'Chain to run queries against OpenAPI' this.description = 'Chain that automatically select and call APIs based only on an OpenAPI spec'
this.baseClasses = [this.type, ...getBaseClasses(APIChain)] this.baseClasses = [this.type, ...getBaseClasses(APIChain)]
this.inputs = [ this.inputs = [
{ {
@@ -8,6 +8,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class POSTApiChain_Chains implements INode { class POSTApiChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -18,6 +19,7 @@ class POSTApiChain_Chains implements INode {
constructor() { constructor() {
this.label = 'POST API Chain' this.label = 'POST API Chain'
this.name = 'postApiChain' this.name = 'postApiChain'
this.version = 1.0
this.type = 'POSTApiChain' this.type = 'POSTApiChain'
this.icon = 'apichain.svg' this.icon = 'apichain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -14,6 +14,7 @@ let systemMessage = `The following is a friendly conversation between a human an
class ConversationChain_Chains implements INode { class ConversationChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -24,6 +25,7 @@ class ConversationChain_Chains implements INode {
constructor() { constructor() {
this.label = 'Conversation Chain' this.label = 'Conversation Chain'
this.name = 'conversationChain' this.name = 'conversationChain'
this.version = 1.0
this.type = 'ConversationChain' this.type = 'ConversationChain'
this.icon = 'chain.svg' this.icon = 'chain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -2,7 +2,8 @@ import { BaseLanguageModel } from 'langchain/base_language'
import { ICommonObject, IMessage, INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, IMessage, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses } from '../../../src/utils'
import { ConversationalRetrievalQAChain, QAChainParams } from 'langchain/chains' import { ConversationalRetrievalQAChain, QAChainParams } from 'langchain/chains'
import { AIMessage, BaseRetriever, HumanMessage } from 'langchain/schema' import { AIMessage, HumanMessage } from 'langchain/schema'
import { BaseRetriever } from 'langchain/schema/retriever'
import { BaseChatMemory, BufferMemory, ChatMessageHistory, BufferMemoryInput } from 'langchain/memory' import { BaseChatMemory, BufferMemory, ChatMessageHistory, BufferMemoryInput } from 'langchain/memory'
import { PromptTemplate } from 'langchain/prompts' import { PromptTemplate } from 'langchain/prompts'
import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler' import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler'
@@ -19,6 +20,7 @@ import {
class ConversationalRetrievalQAChain_Chains implements INode { class ConversationalRetrievalQAChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -29,6 +31,7 @@ class ConversationalRetrievalQAChain_Chains implements INode {
constructor() { constructor() {
this.label = 'Conversational Retrieval QA Chain' this.label = 'Conversational Retrieval QA Chain'
this.name = 'conversationalRetrievalQAChain' this.name = 'conversationalRetrievalQAChain'
this.version = 1.0
this.type = 'ConversationalRetrievalQAChain' this.type = 'ConversationalRetrievalQAChain'
this.icon = 'chain.svg' this.icon = 'chain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -7,6 +7,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class LLMChain_Chains implements INode { class LLMChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -18,6 +19,7 @@ class LLMChain_Chains implements INode {
constructor() { constructor() {
this.label = 'LLM Chain' this.label = 'LLM Chain'
this.name = 'llmChain' this.name = 'llmChain'
this.version = 1.0
this.type = 'LLMChain' this.type = 'LLMChain'
this.icon = 'chain.svg' this.icon = 'chain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -7,6 +7,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class MultiPromptChain_Chains implements INode { class MultiPromptChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -17,6 +18,7 @@ class MultiPromptChain_Chains implements INode {
constructor() { constructor() {
this.label = 'Multi Prompt Chain' this.label = 'Multi Prompt Chain'
this.name = 'multiPromptChain' this.name = 'multiPromptChain'
this.version = 1.0
this.type = 'MultiPromptChain' this.type = 'MultiPromptChain'
this.icon = 'chain.svg' this.icon = 'chain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -7,6 +7,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class MultiRetrievalQAChain_Chains implements INode { class MultiRetrievalQAChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -17,6 +18,7 @@ class MultiRetrievalQAChain_Chains implements INode {
constructor() { constructor() {
this.label = 'Multi Retrieval QA Chain' this.label = 'Multi Retrieval QA Chain'
this.name = 'multiRetrievalQAChain' this.name = 'multiRetrievalQAChain'
this.version = 1.0
this.type = 'MultiRetrievalQAChain' this.type = 'MultiRetrievalQAChain'
this.icon = 'chain.svg' this.icon = 'chain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -1,6 +1,6 @@
import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { RetrievalQAChain } from 'langchain/chains' import { RetrievalQAChain } from 'langchain/chains'
import { BaseRetriever } from 'langchain/schema' import { BaseRetriever } from 'langchain/schema/retriever'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses } from '../../../src/utils'
import { BaseLanguageModel } from 'langchain/base_language' import { BaseLanguageModel } from 'langchain/base_language'
import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler' import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler'
@@ -8,6 +8,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class RetrievalQAChain_Chains implements INode { class RetrievalQAChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -18,6 +19,7 @@ class RetrievalQAChain_Chains implements INode {
constructor() { constructor() {
this.label = 'Retrieval QA Chain' this.label = 'Retrieval QA Chain'
this.name = 'retrievalQAChain' this.name = 'retrievalQAChain'
this.version = 1.0
this.type = 'RetrievalQAChain' this.type = 'RetrievalQAChain'
this.icon = 'chain.svg' this.icon = 'chain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -9,6 +9,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class SqlDatabaseChain_Chains implements INode { class SqlDatabaseChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -19,6 +20,7 @@ class SqlDatabaseChain_Chains implements INode {
constructor() { constructor() {
this.label = 'Sql Database Chain' this.label = 'Sql Database Chain'
this.name = 'sqlDatabaseChain' this.name = 'sqlDatabaseChain'
this.version = 1.0
this.type = 'SqlDatabaseChain' this.type = 'SqlDatabaseChain'
this.icon = 'sqlchain.svg' this.icon = 'sqlchain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -8,6 +8,7 @@ import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler
class VectorDBQAChain_Chains implements INode { class VectorDBQAChain_Chains implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -18,6 +19,7 @@ class VectorDBQAChain_Chains implements INode {
constructor() { constructor() {
this.label = 'VectorDB QA Chain' this.label = 'VectorDB QA Chain'
this.name = 'vectorDBQAChain' this.name = 'vectorDBQAChain'
this.version = 1.0
this.type = 'VectorDBQAChain' this.type = 'VectorDBQAChain'
this.icon = 'chain.svg' this.icon = 'chain.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -1,5 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-azure" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#035bda" d="M46 40L29.317 10.852 22.808 23.96 34.267 37.24 13 39.655zM13.092 18.182L2 36.896 11.442 35.947 28.033 5.678z"/></svg>
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M6 7.5l-4 9.5h4l6 -15z"></path>
<path d="M22 20l-7 -15l-3 7l4 5l-8 3z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 229 B

@@ -1,32 +1,36 @@
import { OpenAIBaseInput } from 'langchain/dist/types/openai-types' import { OpenAIBaseInput } from 'langchain/dist/types/openai-types'
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { AzureOpenAIInput, ChatOpenAI } from 'langchain/chat_models/openai' import { AzureOpenAIInput, ChatOpenAI } from 'langchain/chat_models/openai'
class AzureChatOpenAI_ChatModels implements INode { class AzureChatOpenAI_ChatModels implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Azure ChatOpenAI' this.label = 'Azure ChatOpenAI'
this.name = 'azureChatOpenAI' this.name = 'azureChatOpenAI'
this.version = 1.0
this.type = 'AzureChatOpenAI' this.type = 'AzureChatOpenAI'
this.icon = 'Azure.svg' this.icon = 'Azure.svg'
this.category = 'Chat Models' this.category = 'Chat Models'
this.description = 'Wrapper around Azure OpenAI large language models that use the Chat endpoint' this.description = 'Wrapper around Azure OpenAI large language models that use the Chat endpoint'
this.baseClasses = [this.type, ...getBaseClasses(ChatOpenAI)] this.baseClasses = [this.type, ...getBaseClasses(ChatOpenAI)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['azureOpenAIApi']
}
this.inputs = [ this.inputs = [
{
label: 'Azure OpenAI Api Key',
name: 'azureOpenAIApiKey',
type: 'password'
},
{ {
label: 'Model Name', label: 'Model Name',
name: 'modelName', name: 'modelName',
@@ -56,33 +60,15 @@ class AzureChatOpenAI_ChatModels implements INode {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
default: 0.9, default: 0.9,
optional: true optional: true
}, },
{
label: 'Azure OpenAI Api Instance Name',
name: 'azureOpenAIApiInstanceName',
type: 'string',
placeholder: 'YOUR-INSTANCE-NAME'
},
{
label: 'Azure OpenAI Api Deployment Name',
name: 'azureOpenAIApiDeploymentName',
type: 'string',
placeholder: 'YOUR-DEPLOYMENT-NAME'
},
{
label: 'Azure OpenAI Api Version',
name: 'azureOpenAIApiVersion',
type: 'string',
placeholder: '2023-06-01-preview',
description:
'Description of Supported API Versions. Please refer <a target="_blank" href="https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference#chat-completions">examples</a>'
},
{ {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -90,6 +76,7 @@ class AzureChatOpenAI_ChatModels implements INode {
label: 'Frequency Penalty', label: 'Frequency Penalty',
name: 'frequencyPenalty', name: 'frequencyPenalty',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -97,6 +84,7 @@ class AzureChatOpenAI_ChatModels implements INode {
label: 'Presence Penalty', label: 'Presence Penalty',
name: 'presencePenalty', name: 'presencePenalty',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -104,25 +92,28 @@ class AzureChatOpenAI_ChatModels implements INode {
label: 'Timeout', label: 'Timeout',
name: 'timeout', name: 'timeout',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
} }
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const azureOpenAIApiKey = nodeData.inputs?.azureOpenAIApiKey as string
const modelName = nodeData.inputs?.modelName as string const modelName = nodeData.inputs?.modelName as string
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const azureOpenAIApiInstanceName = nodeData.inputs?.azureOpenAIApiInstanceName as string
const azureOpenAIApiDeploymentName = nodeData.inputs?.azureOpenAIApiDeploymentName as string
const azureOpenAIApiVersion = nodeData.inputs?.azureOpenAIApiVersion as string
const maxTokens = nodeData.inputs?.maxTokens as string const maxTokens = nodeData.inputs?.maxTokens as string
const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string
const presencePenalty = nodeData.inputs?.presencePenalty as string const presencePenalty = nodeData.inputs?.presencePenalty as string
const timeout = nodeData.inputs?.timeout as string const timeout = nodeData.inputs?.timeout as string
const streaming = nodeData.inputs?.streaming as boolean const streaming = nodeData.inputs?.streaming as boolean
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const azureOpenAIApiKey = getCredentialParam('azureOpenAIApiKey', credentialData, nodeData)
const azureOpenAIApiInstanceName = getCredentialParam('azureOpenAIApiInstanceName', credentialData, nodeData)
const azureOpenAIApiDeploymentName = getCredentialParam('azureOpenAIApiDeploymentName', credentialData, nodeData)
const azureOpenAIApiVersion = getCredentialParam('azureOpenAIApiVersion', credentialData, nodeData)
const obj: Partial<AzureOpenAIInput> & Partial<OpenAIBaseInput> = { const obj: Partial<AzureOpenAIInput> & Partial<OpenAIBaseInput> = {
temperature: parseFloat(temperature), temperature: parseFloat(temperature),
modelName, modelName,
@@ -134,8 +125,8 @@ class AzureChatOpenAI_ChatModels implements INode {
} }
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
if (frequencyPenalty) obj.frequencyPenalty = parseInt(frequencyPenalty, 10) if (frequencyPenalty) obj.frequencyPenalty = parseFloat(frequencyPenalty)
if (presencePenalty) obj.presencePenalty = parseInt(presencePenalty, 10) if (presencePenalty) obj.presencePenalty = parseFloat(presencePenalty)
if (timeout) obj.timeout = parseInt(timeout, 10) if (timeout) obj.timeout = parseInt(timeout, 10)
const model = new ChatOpenAI(obj) const model = new ChatOpenAI(obj)
@@ -1,31 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { AnthropicInput, ChatAnthropic } from 'langchain/chat_models/anthropic' import { AnthropicInput, ChatAnthropic } from 'langchain/chat_models/anthropic'
class ChatAnthropic_ChatModels implements INode { class ChatAnthropic_ChatModels implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'ChatAnthropic' this.label = 'ChatAnthropic'
this.name = 'chatAnthropic' this.name = 'chatAnthropic'
this.version = 1.0
this.type = 'ChatAnthropic' this.type = 'ChatAnthropic'
this.icon = 'chatAnthropic.png' this.icon = 'chatAnthropic.png'
this.category = 'Chat Models' this.category = 'Chat Models'
this.description = 'Wrapper around ChatAnthropic large language models that use the Chat endpoint' this.description = 'Wrapper around ChatAnthropic large language models that use the Chat endpoint'
this.baseClasses = [this.type, ...getBaseClasses(ChatAnthropic)] this.baseClasses = [this.type, ...getBaseClasses(ChatAnthropic)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['anthropicApi']
}
this.inputs = [ this.inputs = [
{
label: 'ChatAnthropic Api Key',
name: 'anthropicApiKey',
type: 'password'
},
{ {
label: 'Model Name', label: 'Model Name',
name: 'modelName', name: 'modelName',
@@ -86,13 +90,14 @@ class ChatAnthropic_ChatModels implements INode {
name: 'claude-instant-v1.1-100k' name: 'claude-instant-v1.1-100k'
} }
], ],
default: 'claude-v1', default: 'claude-2',
optional: true optional: true
}, },
{ {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
default: 0.9, default: 0.9,
optional: true optional: true
}, },
@@ -100,6 +105,7 @@ class ChatAnthropic_ChatModels implements INode {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokensToSample', name: 'maxTokensToSample',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -107,6 +113,7 @@ class ChatAnthropic_ChatModels implements INode {
label: 'Top P', label: 'Top P',
name: 'topP', name: 'topP',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -114,21 +121,24 @@ class ChatAnthropic_ChatModels implements INode {
label: 'Top K', label: 'Top K',
name: 'topK', name: 'topK',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
} }
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const modelName = nodeData.inputs?.modelName as string const modelName = nodeData.inputs?.modelName as string
const anthropicApiKey = nodeData.inputs?.anthropicApiKey as string
const maxTokensToSample = nodeData.inputs?.maxTokensToSample as string const maxTokensToSample = nodeData.inputs?.maxTokensToSample as string
const topP = nodeData.inputs?.topP as string const topP = nodeData.inputs?.topP as string
const topK = nodeData.inputs?.topK as string const topK = nodeData.inputs?.topK as string
const streaming = nodeData.inputs?.streaming as boolean const streaming = nodeData.inputs?.streaming as boolean
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const anthropicApiKey = getCredentialParam('anthropicApiKey', credentialData, nodeData)
const obj: Partial<AnthropicInput> & { anthropicApiKey?: string } = { const obj: Partial<AnthropicInput> & { anthropicApiKey?: string } = {
temperature: parseFloat(temperature), temperature: parseFloat(temperature),
modelName, modelName,
@@ -1,41 +1,56 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { HFInput, HuggingFaceInference } from './core' import { HFInput, HuggingFaceInference } from './core'
class ChatHuggingFace_ChatModels implements INode { class ChatHuggingFace_ChatModels implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'ChatHuggingFace' this.label = 'ChatHuggingFace'
this.name = 'chatHuggingFace' this.name = 'chatHuggingFace'
this.version = 1.0
this.type = 'ChatHuggingFace' this.type = 'ChatHuggingFace'
this.icon = 'huggingface.png' this.icon = 'huggingface.png'
this.category = 'Chat Models' this.category = 'Chat Models'
this.description = 'Wrapper around HuggingFace large language models' this.description = 'Wrapper around HuggingFace large language models'
this.baseClasses = [this.type, 'BaseChatModel', ...getBaseClasses(HuggingFaceInference)] this.baseClasses = [this.type, 'BaseChatModel', ...getBaseClasses(HuggingFaceInference)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['huggingFaceApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Model', label: 'Model',
name: 'model', name: 'model',
type: 'string', type: 'string',
placeholder: 'gpt2' description: 'If using own inference endpoint, leave this blank',
placeholder: 'gpt2',
optional: true
}, },
{ {
label: 'HuggingFace Api Key', label: 'Endpoint',
name: 'apiKey', name: 'endpoint',
type: 'password' type: 'string',
placeholder: 'https://xyz.eu-west-1.aws.endpoints.huggingface.cloud/gpt2',
description: 'Using your own inference endpoint',
optional: true
}, },
{ {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
description: 'Temperature parameter may not apply to certain model. Please check available model parameters', description: 'Temperature parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -44,6 +59,7 @@ class ChatHuggingFace_ChatModels implements INode {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
description: 'Max Tokens parameter may not apply to certain model. Please check available model parameters', description: 'Max Tokens parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -52,6 +68,7 @@ class ChatHuggingFace_ChatModels implements INode {
label: 'Top Probability', label: 'Top Probability',
name: 'topP', name: 'topP',
type: 'number', type: 'number',
step: 0.1,
description: 'Top Probability parameter may not apply to certain model. Please check available model parameters', description: 'Top Probability parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -60,6 +77,7 @@ class ChatHuggingFace_ChatModels implements INode {
label: 'Top K', label: 'Top K',
name: 'hfTopK', name: 'hfTopK',
type: 'number', type: 'number',
step: 0.1,
description: 'Top K parameter may not apply to certain model. Please check available model parameters', description: 'Top K parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -68,25 +86,16 @@ class ChatHuggingFace_ChatModels implements INode {
label: 'Frequency Penalty', label: 'Frequency Penalty',
name: 'frequencyPenalty', name: 'frequencyPenalty',
type: 'number', type: 'number',
step: 0.1,
description: 'Frequency Penalty parameter may not apply to certain model. Please check available model parameters', description: 'Frequency Penalty parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
},
{
label: 'Endpoint',
name: 'endpoint',
type: 'string',
placeholder: 'https://xyz.eu-west-1.aws.endpoints.huggingface.cloud/gpt2',
description: 'Using your own inference endpoint',
optional: true,
additionalParams: true
} }
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const model = nodeData.inputs?.model as string const model = nodeData.inputs?.model as string
const apiKey = nodeData.inputs?.apiKey as string
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const maxTokens = nodeData.inputs?.maxTokens as string const maxTokens = nodeData.inputs?.maxTokens as string
const topP = nodeData.inputs?.topP as string const topP = nodeData.inputs?.topP as string
@@ -94,16 +103,19 @@ class ChatHuggingFace_ChatModels implements INode {
const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string
const endpoint = nodeData.inputs?.endpoint as string const endpoint = nodeData.inputs?.endpoint as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const huggingFaceApiKey = getCredentialParam('huggingFaceApiKey', credentialData, nodeData)
const obj: Partial<HFInput> = { const obj: Partial<HFInput> = {
model, model,
apiKey apiKey: huggingFaceApiKey
} }
if (temperature) obj.temperature = parseFloat(temperature) if (temperature) obj.temperature = parseFloat(temperature)
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
if (topP) obj.topP = parseFloat(topP) if (topP) obj.topP = parseFloat(topP)
if (hfTopK) obj.topK = parseFloat(hfTopK) if (hfTopK) obj.topK = parseFloat(hfTopK)
if (frequencyPenalty) obj.frequencyPenalty = parseInt(frequencyPenalty, 10) if (frequencyPenalty) obj.frequencyPenalty = parseFloat(frequencyPenalty)
if (endpoint) obj.endpoint = endpoint if (endpoint) obj.endpoint = endpoint
const huggingFace = new HuggingFaceInference(obj) const huggingFace = new HuggingFaceInference(obj)
@@ -6,6 +6,7 @@ import { OpenAIChatInput } from 'langchain/chat_models/openai'
class ChatLocalAI_ChatModels implements INode { class ChatLocalAI_ChatModels implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -16,6 +17,7 @@ class ChatLocalAI_ChatModels implements INode {
constructor() { constructor() {
this.label = 'ChatLocalAI' this.label = 'ChatLocalAI'
this.name = 'chatLocalAI' this.name = 'chatLocalAI'
this.version = 1.0
this.type = 'ChatLocalAI' this.type = 'ChatLocalAI'
this.icon = 'localai.png' this.icon = 'localai.png'
this.category = 'Chat Models' this.category = 'Chat Models'
@@ -38,6 +40,7 @@ class ChatLocalAI_ChatModels implements INode {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
default: 0.9, default: 0.9,
optional: true optional: true
}, },
@@ -45,6 +48,7 @@ class ChatLocalAI_ChatModels implements INode {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -52,6 +56,7 @@ class ChatLocalAI_ChatModels implements INode {
label: 'Top Probability', label: 'Top Probability',
name: 'topP', name: 'topP',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -59,6 +64,7 @@ class ChatLocalAI_ChatModels implements INode {
label: 'Timeout', label: 'Timeout',
name: 'timeout', name: 'timeout',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
} }
@@ -1,31 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { ChatOpenAI, OpenAIChatInput } from 'langchain/chat_models/openai' import { ChatOpenAI, OpenAIChatInput } from 'langchain/chat_models/openai'
class ChatOpenAI_ChatModels implements INode { class ChatOpenAI_ChatModels implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'ChatOpenAI' this.label = 'ChatOpenAI'
this.name = 'chatOpenAI' this.name = 'chatOpenAI'
this.version = 1.0
this.type = 'ChatOpenAI' this.type = 'ChatOpenAI'
this.icon = 'openai.png' this.icon = 'openai.png'
this.category = 'Chat Models' this.category = 'Chat Models'
this.description = 'Wrapper around OpenAI large language models that use the Chat endpoint' this.description = 'Wrapper around OpenAI large language models that use the Chat endpoint'
this.baseClasses = [this.type, ...getBaseClasses(ChatOpenAI)] this.baseClasses = [this.type, ...getBaseClasses(ChatOpenAI)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['openAIApi']
}
this.inputs = [ this.inputs = [
{
label: 'OpenAI Api Key',
name: 'openAIApiKey',
type: 'password'
},
{ {
label: 'Model Name', label: 'Model Name',
name: 'modelName', name: 'modelName',
@@ -71,6 +75,7 @@ class ChatOpenAI_ChatModels implements INode {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
default: 0.9, default: 0.9,
optional: true optional: true
}, },
@@ -78,6 +83,7 @@ class ChatOpenAI_ChatModels implements INode {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -85,6 +91,7 @@ class ChatOpenAI_ChatModels implements INode {
label: 'Top Probability', label: 'Top Probability',
name: 'topP', name: 'topP',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -92,6 +99,7 @@ class ChatOpenAI_ChatModels implements INode {
label: 'Frequency Penalty', label: 'Frequency Penalty',
name: 'frequencyPenalty', name: 'frequencyPenalty',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -99,6 +107,7 @@ class ChatOpenAI_ChatModels implements INode {
label: 'Presence Penalty', label: 'Presence Penalty',
name: 'presencePenalty', name: 'presencePenalty',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -106,6 +115,7 @@ class ChatOpenAI_ChatModels implements INode {
label: 'Timeout', label: 'Timeout',
name: 'timeout', name: 'timeout',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -119,10 +129,9 @@ class ChatOpenAI_ChatModels implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const modelName = nodeData.inputs?.modelName as string const modelName = nodeData.inputs?.modelName as string
const openAIApiKey = nodeData.inputs?.openAIApiKey as string
const maxTokens = nodeData.inputs?.maxTokens as string const maxTokens = nodeData.inputs?.maxTokens as string
const topP = nodeData.inputs?.topP as string const topP = nodeData.inputs?.topP as string
const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string
@@ -131,6 +140,9 @@ class ChatOpenAI_ChatModels implements INode {
const streaming = nodeData.inputs?.streaming as boolean const streaming = nodeData.inputs?.streaming as boolean
const basePath = nodeData.inputs?.basepath as string const basePath = nodeData.inputs?.basepath as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const openAIApiKey = getCredentialParam('openAIApiKey', credentialData, nodeData)
const obj: Partial<OpenAIChatInput> & { openAIApiKey?: string } = { const obj: Partial<OpenAIChatInput> & { openAIApiKey?: string } = {
temperature: parseFloat(temperature), temperature: parseFloat(temperature),
modelName, modelName,
@@ -140,8 +152,8 @@ class ChatOpenAI_ChatModels implements INode {
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
if (topP) obj.topP = parseFloat(topP) if (topP) obj.topP = parseFloat(topP)
if (frequencyPenalty) obj.frequencyPenalty = parseInt(frequencyPenalty, 10) if (frequencyPenalty) obj.frequencyPenalty = parseFloat(frequencyPenalty)
if (presencePenalty) obj.presencePenalty = parseInt(presencePenalty, 10) if (presencePenalty) obj.presencePenalty = parseFloat(presencePenalty)
if (timeout) obj.timeout = parseInt(timeout, 10) if (timeout) obj.timeout = parseInt(timeout, 10)
const model = new ChatOpenAI(obj, { const model = new ChatOpenAI(obj, {
@@ -7,6 +7,7 @@ import axios, { AxiosRequestConfig } from 'axios'
class API_DocumentLoaders implements INode { class API_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -17,6 +18,7 @@ class API_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'API Loader' this.label = 'API Loader'
this.name = 'apiLoader' this.name = 'apiLoader'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'api-loader.png' this.icon = 'api-loader.png'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -3,25 +3,35 @@ import { TextSplitter } from 'langchain/text_splitter'
import { BaseDocumentLoader } from 'langchain/document_loaders/base' import { BaseDocumentLoader } from 'langchain/document_loaders/base'
import { Document } from 'langchain/document' import { Document } from 'langchain/document'
import axios from 'axios' import axios from 'axios'
import { getCredentialData, getCredentialParam } from '../../../src/utils'
class Airtable_DocumentLoaders implements INode { class Airtable_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs?: INodeParams[] inputs?: INodeParams[]
constructor() { constructor() {
this.label = 'Airtable' this.label = 'Airtable'
this.name = 'airtable' this.name = 'airtable'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'airtable.svg' this.icon = 'airtable.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
this.description = `Load data from Airtable table` this.description = `Load data from Airtable table`
this.baseClasses = [this.type] this.baseClasses = [this.type]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['airtableApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Text Splitter', label: 'Text Splitter',
@@ -29,13 +39,6 @@ class Airtable_DocumentLoaders implements INode {
type: 'TextSplitter', type: 'TextSplitter',
optional: true optional: true
}, },
{
label: 'Personal Access Token',
name: 'accessToken',
type: 'password',
description:
'Get personal access token from <a target="_blank" href="https://airtable.com/developers/web/guides/personal-access-tokens">official guide</a>'
},
{ {
label: 'Base Id', label: 'Base Id',
name: 'baseId', name: 'baseId',
@@ -65,7 +68,6 @@ class Airtable_DocumentLoaders implements INode {
name: 'limit', name: 'limit',
type: 'number', type: 'number',
default: 100, default: 100,
step: 1,
additionalParams: true, additionalParams: true,
description: 'Number of results to return' description: 'Number of results to return'
}, },
@@ -78,8 +80,7 @@ class Airtable_DocumentLoaders implements INode {
} }
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const accessToken = nodeData.inputs?.accessToken as string
const baseId = nodeData.inputs?.baseId as string const baseId = nodeData.inputs?.baseId as string
const tableId = nodeData.inputs?.tableId as string const tableId = nodeData.inputs?.tableId as string
const returnAll = nodeData.inputs?.returnAll as boolean const returnAll = nodeData.inputs?.returnAll as boolean
@@ -87,7 +88,10 @@ class Airtable_DocumentLoaders implements INode {
const textSplitter = nodeData.inputs?.textSplitter as TextSplitter const textSplitter = nodeData.inputs?.textSplitter as TextSplitter
const metadata = nodeData.inputs?.metadata const metadata = nodeData.inputs?.metadata
const options: AirtableLoaderParams = { const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const accessToken = getCredentialParam('accessToken', credentialData, nodeData)
const airtableOptions: AirtableLoaderParams = {
baseId, baseId,
tableId, tableId,
returnAll, returnAll,
@@ -95,7 +99,7 @@ class Airtable_DocumentLoaders implements INode {
limit: limit ? parseInt(limit, 10) : 100 limit: limit ? parseInt(limit, 10) : 100
} }
const loader = new AirtableLoader(options) const loader = new AirtableLoader(airtableOptions)
let docs = [] let docs = []
@@ -7,6 +7,7 @@ import { webCrawl, xmlScrape } from '../../../src'
class Cheerio_DocumentLoaders implements INode { class Cheerio_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -17,6 +18,7 @@ class Cheerio_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Cheerio Web Scraper' this.label = 'Cheerio Web Scraper'
this.name = 'cheerioWebScraper' this.name = 'cheerioWebScraper'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'cheerio.svg' this.icon = 'cheerio.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -1,25 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { TextSplitter } from 'langchain/text_splitter' import { TextSplitter } from 'langchain/text_splitter'
import { ConfluencePagesLoader, ConfluencePagesLoaderParams } from 'langchain/document_loaders/web/confluence' import { ConfluencePagesLoader, ConfluencePagesLoaderParams } from 'langchain/document_loaders/web/confluence'
import { getCredentialData, getCredentialParam } from '../../../src'
class Confluence_DocumentLoaders implements INode { class Confluence_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Confluence' this.label = 'Confluence'
this.name = 'confluence' this.name = 'confluence'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'confluence.png' this.icon = 'confluence.png'
this.category = 'Document Loaders' this.category = 'Document Loaders'
this.description = `Load data from a Confluence Document` this.description = `Load data from a Confluence Document`
this.baseClasses = [this.type] this.baseClasses = [this.type]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['confluenceApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Text Splitter', label: 'Text Splitter',
@@ -27,18 +37,6 @@ class Confluence_DocumentLoaders implements INode {
type: 'TextSplitter', type: 'TextSplitter',
optional: true optional: true
}, },
{
label: 'Username',
name: 'username',
type: 'string',
placeholder: '<CONFLUENCE_USERNAME>'
},
{
label: 'Access Token',
name: 'accessToken',
type: 'password',
placeholder: '<CONFLUENCE_ACCESS_TOKEN>'
},
{ {
label: 'Base URL', label: 'Base URL',
name: 'baseUrl', name: 'baseUrl',
@@ -49,7 +47,9 @@ class Confluence_DocumentLoaders implements INode {
label: 'Space Key', label: 'Space Key',
name: 'spaceKey', name: 'spaceKey',
type: 'string', type: 'string',
placeholder: '~EXAMPLE362906de5d343d49dcdbae5dEXAMPLE' placeholder: '~EXAMPLE362906de5d343d49dcdbae5dEXAMPLE',
description:
'Refer to <a target="_blank" href="https://community.atlassian.com/t5/Confluence-questions/How-to-find-the-key-for-a-space/qaq-p/864760">official guide</a> on how to get Confluence Space Key'
}, },
{ {
label: 'Limit', label: 'Limit',
@@ -68,16 +68,18 @@ class Confluence_DocumentLoaders implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const username = nodeData.inputs?.username as string
const accessToken = nodeData.inputs?.accessToken as string
const spaceKey = nodeData.inputs?.spaceKey as string const spaceKey = nodeData.inputs?.spaceKey as string
const baseUrl = nodeData.inputs?.baseUrl as string const baseUrl = nodeData.inputs?.baseUrl as string
const limit = nodeData.inputs?.limit as number const limit = nodeData.inputs?.limit as number
const textSplitter = nodeData.inputs?.textSplitter as TextSplitter const textSplitter = nodeData.inputs?.textSplitter as TextSplitter
const metadata = nodeData.inputs?.metadata const metadata = nodeData.inputs?.metadata
const options: ConfluencePagesLoaderParams = { const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const accessToken = getCredentialParam('accessToken', credentialData, nodeData)
const username = getCredentialParam('username', credentialData, nodeData)
const confluenceOptions: ConfluencePagesLoaderParams = {
username, username,
accessToken, accessToken,
baseUrl, baseUrl,
@@ -85,7 +87,7 @@ class Confluence_DocumentLoaders implements INode {
limit limit
} }
const loader = new ConfluencePagesLoader(options) const loader = new ConfluencePagesLoader(confluenceOptions)
let docs = [] let docs = []
@@ -5,6 +5,7 @@ import { CSVLoader } from 'langchain/document_loaders/fs/csv'
class Csv_DocumentLoaders implements INode { class Csv_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class Csv_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Csv File' this.label = 'Csv File'
this.name = 'csvFile' this.name = 'csvFile'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'Csv.png' this.icon = 'Csv.png'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -5,6 +5,7 @@ import { DocxLoader } from 'langchain/document_loaders/fs/docx'
class Docx_DocumentLoaders implements INode { class Docx_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class Docx_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Docx File' this.label = 'Docx File'
this.name = 'docxFile' this.name = 'docxFile'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'Docx.png' this.icon = 'Docx.png'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -1,42 +1,50 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { getCredentialData, getCredentialParam } from '../../../src'
import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { FigmaFileLoader, FigmaLoaderParams } from 'langchain/document_loaders/web/figma' import { FigmaFileLoader, FigmaLoaderParams } from 'langchain/document_loaders/web/figma'
class Figma_DocumentLoaders implements INode { class Figma_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Figma' this.label = 'Figma'
this.name = 'figma' this.name = 'figma'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'figma.png' this.icon = 'figma.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
this.description = 'Load data from a Figma file' this.description = 'Load data from a Figma file'
this.baseClasses = [this.type] this.baseClasses = [this.type]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['figmaApi']
}
this.inputs = [ this.inputs = [
{
label: 'Access Token',
name: 'accessToken',
type: 'password',
placeholder: '<FIGMA_ACCESS_TOKEN>'
},
{ {
label: 'File Key', label: 'File Key',
name: 'fileKey', name: 'fileKey',
type: 'string', type: 'string',
placeholder: 'key' placeholder: 'key',
description:
'The file key can be read from any Figma file URL: https://www.figma.com/file/:key/:title. For example, in https://www.figma.com/file/12345/Website, the file key is 12345'
}, },
{ {
label: 'Node IDs', label: 'Node IDs',
name: 'nodeIds', name: 'nodeIds',
type: 'string', type: 'string',
placeholder: '0, 1, 2' placeholder: '0, 1, 2',
description:
'A list of Node IDs, seperated by comma. Refer to <a target="_blank" href="https://www.figma.com/community/plugin/758276196886757462/Node-Inspector">official guide</a> on how to get Node IDs'
}, },
{ {
label: 'Recursive', label: 'Recursive',
@@ -60,18 +68,20 @@ class Figma_DocumentLoaders implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const accessToken = nodeData.inputs?.accessToken as string const nodeIds = (nodeData.inputs?.nodeIds as string)?.trim().split(',') || []
const nodeIds = (nodeData.inputs?.nodeIds as string)?.split(',') || []
const fileKey = nodeData.inputs?.fileKey as string const fileKey = nodeData.inputs?.fileKey as string
const options: FigmaLoaderParams = { const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const accessToken = getCredentialParam('accessToken', credentialData, nodeData)
const figmaOptions: FigmaLoaderParams = {
accessToken, accessToken,
nodeIds, nodeIds,
fileKey fileKey
} }
const loader = new FigmaFileLoader(options) const loader = new FigmaFileLoader(figmaOptions)
const docs = await loader.load() const docs = await loader.load()
return docs return docs
Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#e64a19" d="M26,17h-8c-3.866,0-7-3.134-7-7v0c0-3.866,3.134-7,7-7h8V17z"/><path fill="#7c4dff" d="M25,31h-7c-3.866,0-7-3.134-7-7v0c0-3.866,3.134-7,7-7h7V31z"/><path fill="#66bb6a" d="M18,45L18,45c-3.866,0-7-3.134-7-7v0c0-3.866,3.134-7,7-7h7v7C25,41.866,21.866,45,18,45z"/><path fill="#ff7043" d="M32,17h-7V3h7c3.866,0,7,3.134,7,7v0C39,13.866,35.866,17,32,17z"/><circle cx="32" cy="24" r="7" fill="#29b6f6"/></svg>

After

Width:  |  Height:  |  Size: 512 B

@@ -10,6 +10,7 @@ import { DocxLoader } from 'langchain/document_loaders/fs/docx'
class Folder_DocumentLoaders implements INode { class Folder_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -20,6 +21,7 @@ class Folder_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Folder with Files' this.label = 'Folder with Files'
this.name = 'folderFiles' this.name = 'folderFiles'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'folder.svg' this.icon = 'folder.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -5,6 +5,7 @@ import { GitbookLoader } from 'langchain/document_loaders/web/gitbook'
class Gitbook_DocumentLoaders implements INode { class Gitbook_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class Gitbook_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'GitBook' this.label = 'GitBook'
this.name = 'gitbook' this.name = 'gitbook'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'gitbook.svg' this.icon = 'gitbook.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -1,25 +1,37 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { TextSplitter } from 'langchain/text_splitter' import { TextSplitter } from 'langchain/text_splitter'
import { GithubRepoLoader, GithubRepoLoaderParams } from 'langchain/document_loaders/web/github' import { GithubRepoLoader, GithubRepoLoaderParams } from 'langchain/document_loaders/web/github'
import { getCredentialData, getCredentialParam } from '../../../src'
class Github_DocumentLoaders implements INode { class Github_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Github' this.label = 'Github'
this.name = 'github' this.name = 'github'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'github.png' this.icon = 'github.png'
this.category = 'Document Loaders' this.category = 'Document Loaders'
this.description = `Load data from a GitHub repository` this.description = `Load data from a GitHub repository`
this.baseClasses = [this.type] this.baseClasses = [this.type]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
description: 'Only needed when accessing private repo',
optional: true,
credentialNames: ['githubApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Repo Link', label: 'Repo Link',
@@ -33,13 +45,6 @@ class Github_DocumentLoaders implements INode {
type: 'string', type: 'string',
default: 'main' default: 'main'
}, },
{
label: 'Access Token',
name: 'accessToken',
type: 'password',
placeholder: '<GITHUB_ACCESS_TOKEN>',
optional: true
},
{ {
label: 'Recursive', label: 'Recursive',
name: 'recursive', name: 'recursive',
@@ -62,23 +67,25 @@ class Github_DocumentLoaders implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const repoLink = nodeData.inputs?.repoLink as string const repoLink = nodeData.inputs?.repoLink as string
const branch = nodeData.inputs?.branch as string const branch = nodeData.inputs?.branch as string
const recursive = nodeData.inputs?.recursive as boolean const recursive = nodeData.inputs?.recursive as boolean
const accessToken = nodeData.inputs?.accessToken as string
const textSplitter = nodeData.inputs?.textSplitter as TextSplitter const textSplitter = nodeData.inputs?.textSplitter as TextSplitter
const metadata = nodeData.inputs?.metadata const metadata = nodeData.inputs?.metadata
const options: GithubRepoLoaderParams = { const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const accessToken = getCredentialParam('accessToken', credentialData, nodeData)
const githubOptions: GithubRepoLoaderParams = {
branch, branch,
recursive, recursive,
unknown: 'warn' unknown: 'warn'
} }
if (accessToken) options.accessToken = accessToken if (accessToken) githubOptions.accessToken = accessToken
const loader = new GithubRepoLoader(repoLink, options) const loader = new GithubRepoLoader(repoLink, githubOptions)
const docs = textSplitter ? await loader.loadAndSplit(textSplitter) : await loader.load() const docs = textSplitter ? await loader.loadAndSplit(textSplitter) : await loader.load()
if (metadata) { if (metadata) {
@@ -5,6 +5,7 @@ import { JSONLoader } from 'langchain/document_loaders/fs/json'
class Json_DocumentLoaders implements INode { class Json_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class Json_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Json File' this.label = 'Json File'
this.name = 'jsonFile' this.name = 'jsonFile'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'json.svg' this.icon = 'json.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -5,6 +5,7 @@ import { JSONLinesLoader } from 'langchain/document_loaders/fs/json'
class Jsonlines_DocumentLoaders implements INode { class Jsonlines_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class Jsonlines_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Json Lines File' this.label = 'Json Lines File'
this.name = 'jsonlinesFile' this.name = 'jsonlinesFile'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'jsonlines.svg' this.icon = 'jsonlines.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -1,25 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { TextSplitter } from 'langchain/text_splitter' import { TextSplitter } from 'langchain/text_splitter'
import { NotionAPILoader, NotionAPILoaderOptions } from 'langchain/document_loaders/web/notionapi' import { NotionAPILoader, NotionAPILoaderOptions } from 'langchain/document_loaders/web/notionapi'
import { getCredentialData, getCredentialParam } from '../../../src'
class NotionDB_DocumentLoaders implements INode { class NotionDB_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Notion Database' this.label = 'Notion Database'
this.name = 'notionDB' this.name = 'notionDB'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'notion.png' this.icon = 'notion.png'
this.category = 'Document Loaders' this.category = 'Document Loaders'
this.description = 'Load data from Notion Database (each row is a separate document with all properties as metadata)' this.description = 'Load data from Notion Database (each row is a separate document with all properties as metadata)'
this.baseClasses = [this.type] this.baseClasses = [this.type]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['notionApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Text Splitter', label: 'Text Splitter',
@@ -27,13 +37,6 @@ class NotionDB_DocumentLoaders implements INode {
type: 'TextSplitter', type: 'TextSplitter',
optional: true optional: true
}, },
{
label: 'Notion Integration Token',
name: 'notionIntegrationToken',
type: 'password',
description:
'You can find integration token <a target="_blank" href="https://developers.notion.com/docs/create-a-notion-integration#step-1-create-an-integration">here</a>'
},
{ {
label: 'Notion Database Id', label: 'Notion Database Id',
name: 'databaseId', name: 'databaseId',
@@ -50,11 +53,13 @@ class NotionDB_DocumentLoaders implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const textSplitter = nodeData.inputs?.textSplitter as TextSplitter const textSplitter = nodeData.inputs?.textSplitter as TextSplitter
const databaseId = nodeData.inputs?.databaseId as string const databaseId = nodeData.inputs?.databaseId as string
const metadata = nodeData.inputs?.metadata const metadata = nodeData.inputs?.metadata
const notionIntegrationToken = nodeData.inputs?.notionIntegrationToken as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const notionIntegrationToken = getCredentialParam('notionIntegrationToken', credentialData, nodeData)
const obj: NotionAPILoaderOptions = { const obj: NotionAPILoaderOptions = {
clientOptions: { clientOptions: {
@@ -5,6 +5,7 @@ import { NotionLoader } from 'langchain/document_loaders/fs/notion'
class NotionFolder_DocumentLoaders implements INode { class NotionFolder_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class NotionFolder_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Notion Folder' this.label = 'Notion Folder'
this.name = 'notionFolder' this.name = 'notionFolder'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'notion.png' this.icon = 'notion.png'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -1,25 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { TextSplitter } from 'langchain/text_splitter' import { TextSplitter } from 'langchain/text_splitter'
import { NotionAPILoader, NotionAPILoaderOptions } from 'langchain/document_loaders/web/notionapi' import { NotionAPILoader, NotionAPILoaderOptions } from 'langchain/document_loaders/web/notionapi'
import { getCredentialData, getCredentialParam } from '../../../src'
class NotionPage_DocumentLoaders implements INode { class NotionPage_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Notion Page' this.label = 'Notion Page'
this.name = 'notionPage' this.name = 'notionPage'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'notion.png' this.icon = 'notion.png'
this.category = 'Document Loaders' this.category = 'Document Loaders'
this.description = 'Load data from Notion Page (including child pages all as separate documents)' this.description = 'Load data from Notion Page (including child pages all as separate documents)'
this.baseClasses = [this.type] this.baseClasses = [this.type]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['notionApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Text Splitter', label: 'Text Splitter',
@@ -27,13 +37,6 @@ class NotionPage_DocumentLoaders implements INode {
type: 'TextSplitter', type: 'TextSplitter',
optional: true optional: true
}, },
{
label: 'Notion Integration Token',
name: 'notionIntegrationToken',
type: 'password',
description:
'You can find integration token <a target="_blank" href="https://developers.notion.com/docs/create-a-notion-integration#step-1-create-an-integration">here</a>'
},
{ {
label: 'Notion Page Id', label: 'Notion Page Id',
name: 'pageId', name: 'pageId',
@@ -51,11 +54,13 @@ class NotionPage_DocumentLoaders implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const textSplitter = nodeData.inputs?.textSplitter as TextSplitter const textSplitter = nodeData.inputs?.textSplitter as TextSplitter
const pageId = nodeData.inputs?.pageId as string const pageId = nodeData.inputs?.pageId as string
const metadata = nodeData.inputs?.metadata const metadata = nodeData.inputs?.metadata
const notionIntegrationToken = nodeData.inputs?.notionIntegrationToken as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const notionIntegrationToken = getCredentialParam('notionIntegrationToken', credentialData, nodeData)
const obj: NotionAPILoaderOptions = { const obj: NotionAPILoaderOptions = {
clientOptions: { clientOptions: {
@@ -5,6 +5,7 @@ import { PDFLoader } from 'langchain/document_loaders/fs/pdf'
class Pdf_DocumentLoaders implements INode { class Pdf_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class Pdf_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Pdf File' this.label = 'Pdf File'
this.name = 'pdfFile' this.name = 'pdfFile'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'pdf.svg' this.icon = 'pdf.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -7,6 +7,7 @@ import { webCrawl, xmlScrape } from '../../../src'
class Playwright_DocumentLoaders implements INode { class Playwright_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -17,6 +18,7 @@ class Playwright_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Playwright Web Scraper' this.label = 'Playwright Web Scraper'
this.name = 'playwrightWebScraper' this.name = 'playwrightWebScraper'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'playwright.svg' this.icon = 'playwright.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -7,6 +7,7 @@ import { webCrawl, xmlScrape } from '../../../src'
class Puppeteer_DocumentLoaders implements INode { class Puppeteer_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -17,6 +18,7 @@ class Puppeteer_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Puppeteer Web Scraper' this.label = 'Puppeteer Web Scraper'
this.name = 'puppeteerWebScraper' this.name = 'puppeteerWebScraper'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'puppeteer.svg' this.icon = 'puppeteer.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -5,6 +5,7 @@ import { SRTLoader } from 'langchain/document_loaders/fs/srt'
class Subtitles_DocumentLoaders implements INode { class Subtitles_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class Subtitles_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Subtitles File' this.label = 'Subtitles File'
this.name = 'subtitlesFile' this.name = 'subtitlesFile'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'subtitlesFile.svg' this.icon = 'subtitlesFile.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -5,6 +5,7 @@ import { TextLoader } from 'langchain/document_loaders/fs/text'
class Text_DocumentLoaders implements INode { class Text_DocumentLoaders implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class Text_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Text File' this.label = 'Text File'
this.name = 'textFile' this.name = 'textFile'
this.version = 1.0
this.type = 'Document' this.type = 'Document'
this.icon = 'textFile.svg' this.icon = 'textFile.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -1,5 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-azure" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#035bda" d="M46 40L29.317 10.852 22.808 23.96 34.267 37.24 13 39.655zM13.092 18.182L2 36.896 11.442 35.947 28.033 5.678z"/></svg>
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M6 7.5l-4 9.5h4l6 -15z"></path>
<path d="M22 20l-7 -15l-3 7l4 5l-8 3z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 229 B

@@ -1,52 +1,36 @@
import { AzureOpenAIInput } from 'langchain/chat_models/openai' import { AzureOpenAIInput } from 'langchain/chat_models/openai'
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { OpenAIEmbeddings, OpenAIEmbeddingsParams } from 'langchain/embeddings/openai' import { OpenAIEmbeddings, OpenAIEmbeddingsParams } from 'langchain/embeddings/openai'
class AzureOpenAIEmbedding_Embeddings implements INode { class AzureOpenAIEmbedding_Embeddings implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Azure OpenAI Embeddings' this.label = 'Azure OpenAI Embeddings'
this.name = 'azureOpenAIEmbeddings' this.name = 'azureOpenAIEmbeddings'
this.version = 1.0
this.type = 'AzureOpenAIEmbeddings' this.type = 'AzureOpenAIEmbeddings'
this.icon = 'Azure.svg' this.icon = 'Azure.svg'
this.category = 'Embeddings' this.category = 'Embeddings'
this.description = 'Azure OpenAI API to generate embeddings for a given text' this.description = 'Azure OpenAI API to generate embeddings for a given text'
this.baseClasses = [this.type, ...getBaseClasses(OpenAIEmbeddings)] this.baseClasses = [this.type, ...getBaseClasses(OpenAIEmbeddings)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['azureOpenAIApi']
}
this.inputs = [ this.inputs = [
{
label: 'Azure OpenAI Api Key',
name: 'azureOpenAIApiKey',
type: 'password'
},
{
label: 'Azure OpenAI Api Instance Name',
name: 'azureOpenAIApiInstanceName',
type: 'string',
placeholder: 'YOUR-INSTANCE-NAME'
},
{
label: 'Azure OpenAI Api Deployment Name',
name: 'azureOpenAIApiDeploymentName',
type: 'string',
placeholder: 'YOUR-DEPLOYMENT-NAME'
},
{
label: 'Azure OpenAI Api Version',
name: 'azureOpenAIApiVersion',
type: 'string',
placeholder: '2023-03-15-preview',
description:
'Description of Supported API Versions. Please refer <a target="_blank" href="https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference#embeddings">examples</a>'
},
{ {
label: 'Batch Size', label: 'Batch Size',
name: 'batchSize', name: 'batchSize',
@@ -65,14 +49,16 @@ class AzureOpenAIEmbedding_Embeddings implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const azureOpenAIApiKey = nodeData.inputs?.azureOpenAIApiKey as string
const azureOpenAIApiInstanceName = nodeData.inputs?.azureOpenAIApiInstanceName as string
const azureOpenAIApiDeploymentName = nodeData.inputs?.azureOpenAIApiDeploymentName as string
const azureOpenAIApiVersion = nodeData.inputs?.azureOpenAIApiVersion as string
const batchSize = nodeData.inputs?.batchSize as string const batchSize = nodeData.inputs?.batchSize as string
const timeout = nodeData.inputs?.timeout as string const timeout = nodeData.inputs?.timeout as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const azureOpenAIApiKey = getCredentialParam('azureOpenAIApiKey', credentialData, nodeData)
const azureOpenAIApiInstanceName = getCredentialParam('azureOpenAIApiInstanceName', credentialData, nodeData)
const azureOpenAIApiDeploymentName = getCredentialParam('azureOpenAIApiDeploymentName', credentialData, nodeData)
const azureOpenAIApiVersion = getCredentialParam('azureOpenAIApiVersion', credentialData, nodeData)
const obj: Partial<OpenAIEmbeddingsParams> & Partial<AzureOpenAIInput> = { const obj: Partial<OpenAIEmbeddingsParams> & Partial<AzureOpenAIInput> = {
azureOpenAIApiKey, azureOpenAIApiKey,
azureOpenAIApiInstanceName, azureOpenAIApiInstanceName,
@@ -1,31 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { CohereEmbeddings, CohereEmbeddingsParams } from 'langchain/embeddings/cohere' import { CohereEmbeddings, CohereEmbeddingsParams } from 'langchain/embeddings/cohere'
class CohereEmbedding_Embeddings implements INode { class CohereEmbedding_Embeddings implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Cohere Embeddings' this.label = 'Cohere Embeddings'
this.name = 'cohereEmbeddings' this.name = 'cohereEmbeddings'
this.version = 1.0
this.type = 'CohereEmbeddings' this.type = 'CohereEmbeddings'
this.icon = 'cohere.png' this.icon = 'cohere.png'
this.category = 'Embeddings' this.category = 'Embeddings'
this.description = 'Cohere API to generate embeddings for a given text' this.description = 'Cohere API to generate embeddings for a given text'
this.baseClasses = [this.type, ...getBaseClasses(CohereEmbeddings)] this.baseClasses = [this.type, ...getBaseClasses(CohereEmbeddings)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['cohereApi']
}
this.inputs = [ this.inputs = [
{
label: 'Cohere API Key',
name: 'cohereApiKey',
type: 'password'
},
{ {
label: 'Model Name', label: 'Model Name',
name: 'modelName', name: 'modelName',
@@ -50,12 +54,14 @@ class CohereEmbedding_Embeddings implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const apiKey = nodeData.inputs?.cohereApiKey as string
const modelName = nodeData.inputs?.modelName as string const modelName = nodeData.inputs?.modelName as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const cohereApiKey = getCredentialParam('cohereApiKey', credentialData, nodeData)
const obj: Partial<CohereEmbeddingsParams> & { apiKey?: string } = { const obj: Partial<CohereEmbeddingsParams> & { apiKey?: string } = {
apiKey apiKey: cohereApiKey
} }
if (modelName) obj.modelName = modelName if (modelName) obj.modelName = modelName
@@ -1,35 +1,41 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { HuggingFaceInferenceEmbeddings, HuggingFaceInferenceEmbeddingsParams } from './core' import { HuggingFaceInferenceEmbeddings, HuggingFaceInferenceEmbeddingsParams } from './core'
class HuggingFaceInferenceEmbedding_Embeddings implements INode { class HuggingFaceInferenceEmbedding_Embeddings implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'HuggingFace Inference Embeddings' this.label = 'HuggingFace Inference Embeddings'
this.name = 'huggingFaceInferenceEmbeddings' this.name = 'huggingFaceInferenceEmbeddings'
this.version = 1.0
this.type = 'HuggingFaceInferenceEmbeddings' this.type = 'HuggingFaceInferenceEmbeddings'
this.icon = 'huggingface.png' this.icon = 'huggingface.png'
this.category = 'Embeddings' this.category = 'Embeddings'
this.description = 'HuggingFace Inference API to generate embeddings for a given text' this.description = 'HuggingFace Inference API to generate embeddings for a given text'
this.baseClasses = [this.type, ...getBaseClasses(HuggingFaceInferenceEmbeddings)] this.baseClasses = [this.type, ...getBaseClasses(HuggingFaceInferenceEmbeddings)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['huggingFaceApi']
}
this.inputs = [ this.inputs = [
{
label: 'HuggingFace Api Key',
name: 'apiKey',
type: 'password'
},
{ {
label: 'Model', label: 'Model',
name: 'modelName', name: 'modelName',
type: 'string', type: 'string',
description: 'If using own inference endpoint, leave this blank',
placeholder: 'sentence-transformers/distilbert-base-nli-mean-tokens',
optional: true optional: true
}, },
{ {
@@ -43,13 +49,15 @@ class HuggingFaceInferenceEmbedding_Embeddings implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const apiKey = nodeData.inputs?.apiKey as string
const modelName = nodeData.inputs?.modelName as string const modelName = nodeData.inputs?.modelName as string
const endpoint = nodeData.inputs?.endpoint as string const endpoint = nodeData.inputs?.endpoint as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const huggingFaceApiKey = getCredentialParam('huggingFaceApiKey', credentialData, nodeData)
const obj: Partial<HuggingFaceInferenceEmbeddingsParams> = { const obj: Partial<HuggingFaceInferenceEmbeddingsParams> = {
apiKey apiKey: huggingFaceApiKey
} }
if (modelName) obj.model = modelName if (modelName) obj.model = modelName
@@ -4,6 +4,7 @@ import { OpenAIEmbeddings, OpenAIEmbeddingsParams } from 'langchain/embeddings/o
class LocalAIEmbedding_Embeddings implements INode { class LocalAIEmbedding_Embeddings implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
@@ -14,6 +15,7 @@ class LocalAIEmbedding_Embeddings implements INode {
constructor() { constructor() {
this.label = 'LocalAI Embeddings' this.label = 'LocalAI Embeddings'
this.name = 'localAIEmbeddings' this.name = 'localAIEmbeddings'
this.version = 1.0
this.type = 'LocalAI Embeddings' this.type = 'LocalAI Embeddings'
this.icon = 'localai.png' this.icon = 'localai.png'
this.category = 'Embeddings' this.category = 'Embeddings'
@@ -1,31 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { OpenAIEmbeddings, OpenAIEmbeddingsParams } from 'langchain/embeddings/openai' import { OpenAIEmbeddings, OpenAIEmbeddingsParams } from 'langchain/embeddings/openai'
class OpenAIEmbedding_Embeddings implements INode { class OpenAIEmbedding_Embeddings implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'OpenAI Embeddings' this.label = 'OpenAI Embeddings'
this.name = 'openAIEmbeddings' this.name = 'openAIEmbeddings'
this.version = 1.0
this.type = 'OpenAIEmbeddings' this.type = 'OpenAIEmbeddings'
this.icon = 'openai.png' this.icon = 'openai.png'
this.category = 'Embeddings' this.category = 'Embeddings'
this.description = 'OpenAI API to generate embeddings for a given text' this.description = 'OpenAI API to generate embeddings for a given text'
this.baseClasses = [this.type, ...getBaseClasses(OpenAIEmbeddings)] this.baseClasses = [this.type, ...getBaseClasses(OpenAIEmbeddings)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['openAIApi']
}
this.inputs = [ this.inputs = [
{
label: 'OpenAI Api Key',
name: 'openAIApiKey',
type: 'password'
},
{ {
label: 'Strip New Lines', label: 'Strip New Lines',
name: 'stripNewLines', name: 'stripNewLines',
@@ -57,13 +61,15 @@ class OpenAIEmbedding_Embeddings implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const openAIApiKey = nodeData.inputs?.openAIApiKey as string
const stripNewLines = nodeData.inputs?.stripNewLines as boolean const stripNewLines = nodeData.inputs?.stripNewLines as boolean
const batchSize = nodeData.inputs?.batchSize as string const batchSize = nodeData.inputs?.batchSize as string
const timeout = nodeData.inputs?.timeout as string const timeout = nodeData.inputs?.timeout as string
const basePath = nodeData.inputs?.basepath as string const basePath = nodeData.inputs?.basepath as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const openAIApiKey = getCredentialParam('openAIApiKey', credentialData, nodeData)
const obj: Partial<OpenAIEmbeddingsParams> & { openAIApiKey?: string } = { const obj: Partial<OpenAIEmbeddingsParams> & { openAIApiKey?: string } = {
openAIApiKey openAIApiKey
} }
@@ -1,5 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-azure" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#035bda" d="M46 40L29.317 10.852 22.808 23.96 34.267 37.24 13 39.655zM13.092 18.182L2 36.896 11.442 35.947 28.033 5.678z"/></svg>
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M6 7.5l-4 9.5h4l6 -15z"></path>
<path d="M22 20l-7 -15l-3 7l4 5l-8 3z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 229 B

@@ -1,31 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { AzureOpenAIInput, OpenAI, OpenAIInput } from 'langchain/llms/openai' import { AzureOpenAIInput, OpenAI, OpenAIInput } from 'langchain/llms/openai'
class AzureOpenAI_LLMs implements INode { class AzureOpenAI_LLMs implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Azure OpenAI' this.label = 'Azure OpenAI'
this.name = 'azureOpenAI' this.name = 'azureOpenAI'
this.version = 1.0
this.type = 'AzureOpenAI' this.type = 'AzureOpenAI'
this.icon = 'Azure.svg' this.icon = 'Azure.svg'
this.category = 'LLMs' this.category = 'LLMs'
this.description = 'Wrapper around Azure OpenAI large language models' this.description = 'Wrapper around Azure OpenAI large language models'
this.baseClasses = [this.type, ...getBaseClasses(OpenAI)] this.baseClasses = [this.type, ...getBaseClasses(OpenAI)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['azureOpenAIApi']
}
this.inputs = [ this.inputs = [
{
label: 'Azure OpenAI Api Key',
name: 'azureOpenAIApiKey',
type: 'password'
},
{ {
label: 'Model Name', label: 'Model Name',
name: 'modelName', name: 'modelName',
@@ -87,33 +91,15 @@ class AzureOpenAI_LLMs implements INode {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
default: 0.9, default: 0.9,
optional: true optional: true
}, },
{
label: 'Azure OpenAI Api Instance Name',
name: 'azureOpenAIApiInstanceName',
type: 'string',
placeholder: 'YOUR-INSTANCE-NAME'
},
{
label: 'Azure OpenAI Api Deployment Name',
name: 'azureOpenAIApiDeploymentName',
type: 'string',
placeholder: 'YOUR-DEPLOYMENT-NAME'
},
{
label: 'Azure OpenAI Api Version',
name: 'azureOpenAIApiVersion',
type: 'string',
placeholder: '2023-06-01-preview',
description:
'Description of Supported API Versions. Please refer <a target="_blank" href="https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference#completions">examples</a>'
},
{ {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -121,6 +107,7 @@ class AzureOpenAI_LLMs implements INode {
label: 'Top Probability', label: 'Top Probability',
name: 'topP', name: 'topP',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -128,6 +115,7 @@ class AzureOpenAI_LLMs implements INode {
label: 'Best Of', label: 'Best Of',
name: 'bestOf', name: 'bestOf',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -135,6 +123,7 @@ class AzureOpenAI_LLMs implements INode {
label: 'Frequency Penalty', label: 'Frequency Penalty',
name: 'frequencyPenalty', name: 'frequencyPenalty',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -142,6 +131,7 @@ class AzureOpenAI_LLMs implements INode {
label: 'Presence Penalty', label: 'Presence Penalty',
name: 'presencePenalty', name: 'presencePenalty',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -149,19 +139,16 @@ class AzureOpenAI_LLMs implements INode {
label: 'Timeout', label: 'Timeout',
name: 'timeout', name: 'timeout',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
} }
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const azureOpenAIApiKey = nodeData.inputs?.azureOpenAIApiKey as string
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const modelName = nodeData.inputs?.modelName as string const modelName = nodeData.inputs?.modelName as string
const azureOpenAIApiInstanceName = nodeData.inputs?.azureOpenAIApiInstanceName as string
const azureOpenAIApiDeploymentName = nodeData.inputs?.azureOpenAIApiDeploymentName as string
const azureOpenAIApiVersion = nodeData.inputs?.azureOpenAIApiVersion as string
const maxTokens = nodeData.inputs?.maxTokens as string const maxTokens = nodeData.inputs?.maxTokens as string
const topP = nodeData.inputs?.topP as string const topP = nodeData.inputs?.topP as string
const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string
@@ -170,6 +157,12 @@ class AzureOpenAI_LLMs implements INode {
const bestOf = nodeData.inputs?.bestOf as string const bestOf = nodeData.inputs?.bestOf as string
const streaming = nodeData.inputs?.streaming as boolean const streaming = nodeData.inputs?.streaming as boolean
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const azureOpenAIApiKey = getCredentialParam('azureOpenAIApiKey', credentialData, nodeData)
const azureOpenAIApiInstanceName = getCredentialParam('azureOpenAIApiInstanceName', credentialData, nodeData)
const azureOpenAIApiDeploymentName = getCredentialParam('azureOpenAIApiDeploymentName', credentialData, nodeData)
const azureOpenAIApiVersion = getCredentialParam('azureOpenAIApiVersion', credentialData, nodeData)
const obj: Partial<AzureOpenAIInput> & Partial<OpenAIInput> = { const obj: Partial<AzureOpenAIInput> & Partial<OpenAIInput> = {
temperature: parseFloat(temperature), temperature: parseFloat(temperature),
modelName, modelName,
@@ -182,8 +175,8 @@ class AzureOpenAI_LLMs implements INode {
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
if (topP) obj.topP = parseFloat(topP) if (topP) obj.topP = parseFloat(topP)
if (frequencyPenalty) obj.frequencyPenalty = parseInt(frequencyPenalty, 10) if (frequencyPenalty) obj.frequencyPenalty = parseFloat(frequencyPenalty)
if (presencePenalty) obj.presencePenalty = parseInt(presencePenalty, 10) if (presencePenalty) obj.presencePenalty = parseFloat(presencePenalty)
if (timeout) obj.timeout = parseInt(timeout, 10) if (timeout) obj.timeout = parseInt(timeout, 10)
if (bestOf) obj.bestOf = parseInt(bestOf, 10) if (bestOf) obj.bestOf = parseInt(bestOf, 10)
+18 -10
View File
@@ -1,31 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { Cohere, CohereInput } from './core' import { Cohere, CohereInput } from './core'
class Cohere_LLMs implements INode { class Cohere_LLMs implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Cohere' this.label = 'Cohere'
this.name = 'cohere' this.name = 'cohere'
this.version = 1.0
this.type = 'Cohere' this.type = 'Cohere'
this.icon = 'cohere.png' this.icon = 'cohere.png'
this.category = 'LLMs' this.category = 'LLMs'
this.description = 'Wrapper around Cohere large language models' this.description = 'Wrapper around Cohere large language models'
this.baseClasses = [this.type, ...getBaseClasses(Cohere)] this.baseClasses = [this.type, ...getBaseClasses(Cohere)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['cohereApi']
}
this.inputs = [ this.inputs = [
{
label: 'Cohere Api Key',
name: 'cohereApiKey',
type: 'password'
},
{ {
label: 'Model Name', label: 'Model Name',
name: 'modelName', name: 'modelName',
@@ -63,6 +67,7 @@ class Cohere_LLMs implements INode {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
default: 0.7, default: 0.7,
optional: true optional: true
}, },
@@ -70,19 +75,22 @@ class Cohere_LLMs implements INode {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
optional: true optional: true
} }
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const modelName = nodeData.inputs?.modelName as string const modelName = nodeData.inputs?.modelName as string
const apiKey = nodeData.inputs?.cohereApiKey as string
const maxTokens = nodeData.inputs?.maxTokens as string const maxTokens = nodeData.inputs?.maxTokens as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const cohereApiKey = getCredentialParam('cohereApiKey', credentialData, nodeData)
const obj: CohereInput = { const obj: CohereInput = {
apiKey apiKey: cohereApiKey
} }
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
@@ -1,41 +1,56 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { HFInput, HuggingFaceInference } from './core' import { HFInput, HuggingFaceInference } from './core'
class HuggingFaceInference_LLMs implements INode { class HuggingFaceInference_LLMs implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'HuggingFace Inference' this.label = 'HuggingFace Inference'
this.name = 'huggingFaceInference_LLMs' this.name = 'huggingFaceInference_LLMs'
this.version = 1.0
this.type = 'HuggingFaceInference' this.type = 'HuggingFaceInference'
this.icon = 'huggingface.png' this.icon = 'huggingface.png'
this.category = 'LLMs' this.category = 'LLMs'
this.description = 'Wrapper around HuggingFace large language models' this.description = 'Wrapper around HuggingFace large language models'
this.baseClasses = [this.type, ...getBaseClasses(HuggingFaceInference)] this.baseClasses = [this.type, ...getBaseClasses(HuggingFaceInference)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['huggingFaceApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Model', label: 'Model',
name: 'model', name: 'model',
type: 'string', type: 'string',
placeholder: 'gpt2' description: 'If using own inference endpoint, leave this blank',
placeholder: 'gpt2',
optional: true
}, },
{ {
label: 'HuggingFace Api Key', label: 'Endpoint',
name: 'apiKey', name: 'endpoint',
type: 'password' type: 'string',
placeholder: 'https://xyz.eu-west-1.aws.endpoints.huggingface.cloud/gpt2',
description: 'Using your own inference endpoint',
optional: true
}, },
{ {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
description: 'Temperature parameter may not apply to certain model. Please check available model parameters', description: 'Temperature parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -44,6 +59,7 @@ class HuggingFaceInference_LLMs implements INode {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
description: 'Max Tokens parameter may not apply to certain model. Please check available model parameters', description: 'Max Tokens parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -52,6 +68,7 @@ class HuggingFaceInference_LLMs implements INode {
label: 'Top Probability', label: 'Top Probability',
name: 'topP', name: 'topP',
type: 'number', type: 'number',
step: 0.1,
description: 'Top Probability parameter may not apply to certain model. Please check available model parameters', description: 'Top Probability parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -60,6 +77,7 @@ class HuggingFaceInference_LLMs implements INode {
label: 'Top K', label: 'Top K',
name: 'hfTopK', name: 'hfTopK',
type: 'number', type: 'number',
step: 0.1,
description: 'Top K parameter may not apply to certain model. Please check available model parameters', description: 'Top K parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -68,25 +86,16 @@ class HuggingFaceInference_LLMs implements INode {
label: 'Frequency Penalty', label: 'Frequency Penalty',
name: 'frequencyPenalty', name: 'frequencyPenalty',
type: 'number', type: 'number',
step: 0.1,
description: 'Frequency Penalty parameter may not apply to certain model. Please check available model parameters', description: 'Frequency Penalty parameter may not apply to certain model. Please check available model parameters',
optional: true, optional: true,
additionalParams: true additionalParams: true
},
{
label: 'Endpoint',
name: 'endpoint',
type: 'string',
placeholder: 'https://xyz.eu-west-1.aws.endpoints.huggingface.cloud/gpt2',
description: 'Using your own inference endpoint',
optional: true,
additionalParams: true
} }
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const model = nodeData.inputs?.model as string const model = nodeData.inputs?.model as string
const apiKey = nodeData.inputs?.apiKey as string
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const maxTokens = nodeData.inputs?.maxTokens as string const maxTokens = nodeData.inputs?.maxTokens as string
const topP = nodeData.inputs?.topP as string const topP = nodeData.inputs?.topP as string
@@ -94,16 +103,19 @@ class HuggingFaceInference_LLMs implements INode {
const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string
const endpoint = nodeData.inputs?.endpoint as string const endpoint = nodeData.inputs?.endpoint as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const huggingFaceApiKey = getCredentialParam('huggingFaceApiKey', credentialData, nodeData)
const obj: Partial<HFInput> = { const obj: Partial<HFInput> = {
model, model,
apiKey apiKey: huggingFaceApiKey
} }
if (temperature) obj.temperature = parseFloat(temperature) if (temperature) obj.temperature = parseFloat(temperature)
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
if (topP) obj.topP = parseFloat(topP) if (topP) obj.topP = parseFloat(topP)
if (hfTopK) obj.topK = parseFloat(hfTopK) if (hfTopK) obj.topK = parseFloat(hfTopK)
if (frequencyPenalty) obj.frequencyPenalty = parseInt(frequencyPenalty, 10) if (frequencyPenalty) obj.frequencyPenalty = parseFloat(frequencyPenalty)
if (endpoint) obj.endpoint = endpoint if (endpoint) obj.endpoint = endpoint
const huggingFace = new HuggingFaceInference(obj) const huggingFace = new HuggingFaceInference(obj)
+25 -11
View File
@@ -1,31 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { OpenAI, OpenAIInput } from 'langchain/llms/openai' import { OpenAI, OpenAIInput } from 'langchain/llms/openai'
class OpenAI_LLMs implements INode { class OpenAI_LLMs implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'OpenAI' this.label = 'OpenAI'
this.name = 'openAI' this.name = 'openAI'
this.version = 1.0
this.type = 'OpenAI' this.type = 'OpenAI'
this.icon = 'openai.png' this.icon = 'openai.png'
this.category = 'LLMs' this.category = 'LLMs'
this.description = 'Wrapper around OpenAI large language models' this.description = 'Wrapper around OpenAI large language models'
this.baseClasses = [this.type, ...getBaseClasses(OpenAI)] this.baseClasses = [this.type, ...getBaseClasses(OpenAI)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['openAIApi']
}
this.inputs = [ this.inputs = [
{
label: 'OpenAI Api Key',
name: 'openAIApiKey',
type: 'password'
},
{ {
label: 'Model Name', label: 'Model Name',
name: 'modelName', name: 'modelName',
@@ -55,6 +59,7 @@ class OpenAI_LLMs implements INode {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
default: 0.7, default: 0.7,
optional: true optional: true
}, },
@@ -62,6 +67,7 @@ class OpenAI_LLMs implements INode {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -69,6 +75,7 @@ class OpenAI_LLMs implements INode {
label: 'Top Probability', label: 'Top Probability',
name: 'topP', name: 'topP',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -76,6 +83,7 @@ class OpenAI_LLMs implements INode {
label: 'Best Of', label: 'Best Of',
name: 'bestOf', name: 'bestOf',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -83,6 +91,7 @@ class OpenAI_LLMs implements INode {
label: 'Frequency Penalty', label: 'Frequency Penalty',
name: 'frequencyPenalty', name: 'frequencyPenalty',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -90,6 +99,7 @@ class OpenAI_LLMs implements INode {
label: 'Presence Penalty', label: 'Presence Penalty',
name: 'presencePenalty', name: 'presencePenalty',
type: 'number', type: 'number',
step: 0.1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -97,6 +107,7 @@ class OpenAI_LLMs implements INode {
label: 'Batch Size', label: 'Batch Size',
name: 'batchSize', name: 'batchSize',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -104,6 +115,7 @@ class OpenAI_LLMs implements INode {
label: 'Timeout', label: 'Timeout',
name: 'timeout', name: 'timeout',
type: 'number', type: 'number',
step: 1,
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -117,10 +129,9 @@ class OpenAI_LLMs implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const modelName = nodeData.inputs?.modelName as string const modelName = nodeData.inputs?.modelName as string
const openAIApiKey = nodeData.inputs?.openAIApiKey as string
const maxTokens = nodeData.inputs?.maxTokens as string const maxTokens = nodeData.inputs?.maxTokens as string
const topP = nodeData.inputs?.topP as string const topP = nodeData.inputs?.topP as string
const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string
@@ -131,6 +142,9 @@ class OpenAI_LLMs implements INode {
const streaming = nodeData.inputs?.streaming as boolean const streaming = nodeData.inputs?.streaming as boolean
const basePath = nodeData.inputs?.basepath as string const basePath = nodeData.inputs?.basepath as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const openAIApiKey = getCredentialParam('openAIApiKey', credentialData, nodeData)
const obj: Partial<OpenAIInput> & { openAIApiKey?: string } = { const obj: Partial<OpenAIInput> & { openAIApiKey?: string } = {
temperature: parseFloat(temperature), temperature: parseFloat(temperature),
modelName, modelName,
@@ -140,8 +154,8 @@ class OpenAI_LLMs implements INode {
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
if (topP) obj.topP = parseFloat(topP) if (topP) obj.topP = parseFloat(topP)
if (frequencyPenalty) obj.frequencyPenalty = parseInt(frequencyPenalty, 10) if (frequencyPenalty) obj.frequencyPenalty = parseFloat(frequencyPenalty)
if (presencePenalty) obj.presencePenalty = parseInt(presencePenalty, 10) if (presencePenalty) obj.presencePenalty = parseFloat(presencePenalty)
if (timeout) obj.timeout = parseInt(timeout, 10) if (timeout) obj.timeout = parseInt(timeout, 10)
if (batchSize) obj.batchSize = parseInt(batchSize, 10) if (batchSize) obj.batchSize = parseInt(batchSize, 10)
if (bestOf) obj.bestOf = parseInt(bestOf, 10) if (bestOf) obj.bestOf = parseInt(bestOf, 10)
@@ -1,31 +1,35 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { Replicate, ReplicateInput } from 'langchain/llms/replicate' import { Replicate, ReplicateInput } from 'langchain/llms/replicate'
class Replicate_LLMs implements INode { class Replicate_LLMs implements INode {
label: string label: string
name: string name: string
version: number
type: string type: string
icon: string icon: string
category: string category: string
description: string description: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Replicate' this.label = 'Replicate'
this.name = 'replicate' this.name = 'replicate'
this.version = 1.0
this.type = 'Replicate' this.type = 'Replicate'
this.icon = 'replicate.svg' this.icon = 'replicate.svg'
this.category = 'LLMs' this.category = 'LLMs'
this.description = 'Use Replicate to run open source models on cloud' this.description = 'Use Replicate to run open source models on cloud'
this.baseClasses = [this.type, 'BaseChatModel', ...getBaseClasses(Replicate)] this.baseClasses = [this.type, 'BaseChatModel', ...getBaseClasses(Replicate)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['replicateApi']
}
this.inputs = [ this.inputs = [
{
label: 'Replicate Api Key',
name: 'replicateApiKey',
type: 'password'
},
{ {
label: 'Model', label: 'Model',
name: 'model', name: 'model',
@@ -37,6 +41,7 @@ class Replicate_LLMs implements INode {
label: 'Temperature', label: 'Temperature',
name: 'temperature', name: 'temperature',
type: 'number', type: 'number',
step: 0.1,
description: description:
'Adjusts randomness of outputs, greater than 1 is random and 0 is deterministic, 0.75 is a good starting value.', 'Adjusts randomness of outputs, greater than 1 is random and 0 is deterministic, 0.75 is a good starting value.',
default: 0.7, default: 0.7,
@@ -46,6 +51,7 @@ class Replicate_LLMs implements INode {
label: 'Max Tokens', label: 'Max Tokens',
name: 'maxTokens', name: 'maxTokens',
type: 'number', type: 'number',
step: 1,
description: 'Maximum number of tokens to generate. A word is generally 2-3 tokens', description: 'Maximum number of tokens to generate. A word is generally 2-3 tokens',
optional: true, optional: true,
additionalParams: true additionalParams: true
@@ -54,6 +60,7 @@ class Replicate_LLMs implements INode {
label: 'Top Probability', label: 'Top Probability',
name: 'topP', name: 'topP',
type: 'number', type: 'number',
step: 0.1,
description: description:
'When decoding text, samples from the top p percentage of most likely tokens; lower to ignore less likely tokens', 'When decoding text, samples from the top p percentage of most likely tokens; lower to ignore less likely tokens',
optional: true, optional: true,
@@ -63,6 +70,7 @@ class Replicate_LLMs implements INode {
label: 'Repetition Penalty', label: 'Repetition Penalty',
name: 'repetitionPenalty', name: 'repetitionPenalty',
type: 'number', type: 'number',
step: 0.1,
description: description:
'Penalty for repeated words in generated text; 1 is no penalty, values greater than 1 discourage repetition, less than 1 encourage it. (minimum: 0.01; maximum: 5)', 'Penalty for repeated words in generated text; 1 is no penalty, values greater than 1 discourage repetition, less than 1 encourage it. (minimum: 0.01; maximum: 5)',
optional: true, optional: true,
@@ -80,15 +88,17 @@ class Replicate_LLMs implements INode {
] ]
} }
async init(nodeData: INodeData): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const modelName = nodeData.inputs?.model as string const modelName = nodeData.inputs?.model as string
const apiKey = nodeData.inputs?.replicateApiKey as string
const temperature = nodeData.inputs?.temperature as string const temperature = nodeData.inputs?.temperature as string
const maxTokens = nodeData.inputs?.maxTokens as string const maxTokens = nodeData.inputs?.maxTokens as string
const topP = nodeData.inputs?.topP as string const topP = nodeData.inputs?.topP as string
const repetitionPenalty = nodeData.inputs?.repetitionPenalty as string const repetitionPenalty = nodeData.inputs?.repetitionPenalty as string
const additionalInputs = nodeData.inputs?.additionalInputs as string const additionalInputs = nodeData.inputs?.additionalInputs as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const apiKey = getCredentialParam('apiKey', credentialData, nodeData)
const version = modelName.split(':').pop() const version = modelName.split(':').pop()
const name = modelName.split(':')[0].split('/').pop() const name = modelName.split(':')[0].split('/').pop()
const org = modelName.split(':')[0].split('/')[0] const org = modelName.split(':')[0].split('/')[0]
@@ -5,6 +5,7 @@ import { BufferMemory } from 'langchain/memory'
class BufferMemory_Memory implements INode { class BufferMemory_Memory implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class BufferMemory_Memory implements INode {
constructor() { constructor() {
this.label = 'Buffer Memory' this.label = 'Buffer Memory'
this.name = 'bufferMemory' this.name = 'bufferMemory'
this.version = 1.0
this.type = 'BufferMemory' this.type = 'BufferMemory'
this.icon = 'memory.svg' this.icon = 'memory.svg'
this.category = 'Memory' this.category = 'Memory'
@@ -5,6 +5,7 @@ import { BufferWindowMemory, BufferWindowMemoryInput } from 'langchain/memory'
class BufferWindowMemory_Memory implements INode { class BufferWindowMemory_Memory implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class BufferWindowMemory_Memory implements INode {
constructor() { constructor() {
this.label = 'Buffer Window Memory' this.label = 'Buffer Window Memory'
this.name = 'bufferWindowMemory' this.name = 'bufferWindowMemory'
this.version = 1.0
this.type = 'BufferWindowMemory' this.type = 'BufferWindowMemory'
this.icon = 'memory.svg' this.icon = 'memory.svg'
this.category = 'Memory' this.category = 'Memory'
@@ -6,6 +6,7 @@ import { BaseLanguageModel } from 'langchain/base_language'
class ConversationSummaryMemory_Memory implements INode { class ConversationSummaryMemory_Memory implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -16,6 +17,7 @@ class ConversationSummaryMemory_Memory implements INode {
constructor() { constructor() {
this.label = 'Conversation Summary Memory' this.label = 'Conversation Summary Memory'
this.name = 'conversationSummaryMemory' this.name = 'conversationSummaryMemory'
this.version = 1.0
this.type = 'ConversationSummaryMemory' this.type = 'ConversationSummaryMemory'
this.icon = 'memory.svg' this.icon = 'memory.svg'
this.category = 'Memory' this.category = 'Memory'
@@ -1,25 +1,34 @@
import { ICommonObject, INode, INodeData, INodeParams, getBaseClasses } from '../../../src' import { ICommonObject, INode, INodeData, INodeParams, getBaseClasses, getCredentialData, getCredentialParam } from '../../../src'
import { DynamoDBChatMessageHistory } from 'langchain/stores/message/dynamodb' import { DynamoDBChatMessageHistory } from 'langchain/stores/message/dynamodb'
import { BufferMemory } from 'langchain/memory' import { BufferMemory } from 'langchain/memory'
class DynamoDb_Memory implements INode { class DynamoDb_Memory implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'DynamoDB Chat Memory' this.label = 'DynamoDB Chat Memory'
this.name = 'DynamoDBChatMemory' this.name = 'DynamoDBChatMemory'
this.version = 1.0
this.type = 'DynamoDBChatMemory' this.type = 'DynamoDBChatMemory'
this.icon = 'dynamodb.svg' this.icon = 'dynamodb.svg'
this.category = 'Memory' this.category = 'Memory'
this.description = 'Stores the conversation in dynamo db table' this.description = 'Stores the conversation in dynamo db table'
this.baseClasses = [this.type, ...getBaseClasses(BufferMemory)] this.baseClasses = [this.type, ...getBaseClasses(BufferMemory)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
credentialNames: ['dynamodbMemoryApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Table Name', label: 'Table Name',
@@ -31,6 +40,13 @@ class DynamoDb_Memory implements INode {
name: 'partitionKey', name: 'partitionKey',
type: 'string' type: 'string'
}, },
{
label: 'Region',
name: 'region',
type: 'string',
description: 'The aws region in which table is located',
placeholder: 'us-east-1'
},
{ {
label: 'Session ID', label: 'Session ID',
name: 'sessionId', name: 'sessionId',
@@ -40,28 +56,12 @@ class DynamoDb_Memory implements INode {
additionalParams: true, additionalParams: true,
optional: true optional: true
}, },
{
label: 'Region',
name: 'region',
type: 'string',
description: 'The aws region in which table is located',
placeholder: 'us-east-1'
},
{
label: 'Access Key',
name: 'accessKey',
type: 'password'
},
{
label: 'Secret Access Key',
name: 'secretAccessKey',
type: 'password'
},
{ {
label: 'Memory Key', label: 'Memory Key',
name: 'memoryKey', name: 'memoryKey',
type: 'string', type: 'string',
default: 'chat_history' default: 'chat_history',
additionalParams: true
} }
] ]
} }
@@ -71,22 +71,24 @@ class DynamoDb_Memory implements INode {
} }
async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise<void> { async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise<void> {
const dynamodbMemory = initalizeDynamoDB(nodeData, options) const dynamodbMemory = await initalizeDynamoDB(nodeData, options)
dynamodbMemory.clear() await dynamodbMemory.clear()
} }
} }
const initalizeDynamoDB = (nodeData: INodeData, options: ICommonObject): BufferMemory => { const initalizeDynamoDB = async (nodeData: INodeData, options: ICommonObject): Promise<BufferMemory> => {
const tableName = nodeData.inputs?.tableName as string const tableName = nodeData.inputs?.tableName as string
const partitionKey = nodeData.inputs?.partitionKey as string const partitionKey = nodeData.inputs?.partitionKey as string
const sessionId = nodeData.inputs?.sessionId as string const sessionId = nodeData.inputs?.sessionId as string
const region = nodeData.inputs?.region as string const region = nodeData.inputs?.region as string
const accessKey = nodeData.inputs?.accessKey as string
const secretAccessKey = nodeData.inputs?.secretAccessKey as string
const memoryKey = nodeData.inputs?.memoryKey as string const memoryKey = nodeData.inputs?.memoryKey as string
const chatId = options.chatId const chatId = options.chatId
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const accessKeyId = getCredentialParam('accessKey', credentialData, nodeData)
const secretAccessKey = getCredentialParam('secretAccessKey', credentialData, nodeData)
const dynamoDb = new DynamoDBChatMessageHistory({ const dynamoDb = new DynamoDBChatMessageHistory({
tableName, tableName,
partitionKey, partitionKey,
@@ -94,7 +96,7 @@ const initalizeDynamoDB = (nodeData: INodeData, options: ICommonObject): BufferM
config: { config: {
region, region,
credentials: { credentials: {
accessKeyId: accessKey, accessKeyId,
secretAccessKey secretAccessKey
} }
} }
@@ -1,26 +1,37 @@
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { ICommonObject } from '../../../src' import { ICommonObject } from '../../../src'
import { MotorheadMemory, MotorheadMemoryInput } from 'langchain/memory' import { MotorheadMemory, MotorheadMemoryInput } from 'langchain/memory'
class MotorMemory_Memory implements INode { class MotorMemory_Memory implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Motorhead Memory' this.label = 'Motorhead Memory'
this.name = 'motorheadMemory' this.name = 'motorheadMemory'
this.version = 1.0
this.type = 'MotorheadMemory' this.type = 'MotorheadMemory'
this.icon = 'motorhead.png' this.icon = 'motorhead.png'
this.category = 'Memory' this.category = 'Memory'
this.description = 'Remembers previous conversational back and forths directly' this.description = 'Use Motorhead Memory to store chat conversations'
this.baseClasses = [this.type, ...getBaseClasses(MotorheadMemory)] this.baseClasses = [this.type, ...getBaseClasses(MotorheadMemory)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
optional: true,
description: 'Only needed when using hosted solution - https://getmetal.io',
credentialNames: ['motorheadMemoryApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Base URL', label: 'Base URL',
@@ -29,12 +40,6 @@ class MotorMemory_Memory implements INode {
optional: true, optional: true,
description: 'To use the online version, leave the URL blank. More details at https://getmetal.io.' description: 'To use the online version, leave the URL blank. More details at https://getmetal.io.'
}, },
{
label: 'Memory Key',
name: 'memoryKey',
type: 'string',
default: 'chat_history'
},
{ {
label: 'Session Id', label: 'Session Id',
name: 'sessionId', name: 'sessionId',
@@ -45,20 +50,11 @@ class MotorMemory_Memory implements INode {
optional: true optional: true
}, },
{ {
label: 'API Key', label: 'Memory Key',
name: 'apiKey', name: 'memoryKey',
type: 'password',
description: 'Only needed when using hosted solution - https://getmetal.io',
additionalParams: true,
optional: true
},
{
label: 'Client ID',
name: 'clientId',
type: 'string', type: 'string',
description: 'Only needed when using hosted solution - https://getmetal.io', default: 'chat_history',
additionalParams: true, additionalParams: true
optional: true
} }
] ]
} }
@@ -68,20 +64,22 @@ class MotorMemory_Memory implements INode {
} }
async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise<void> { async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise<void> {
const motorhead = initalizeMotorhead(nodeData, options) const motorhead = await initalizeMotorhead(nodeData, options)
motorhead.clear() await motorhead.clear()
} }
} }
const initalizeMotorhead = (nodeData: INodeData, options: ICommonObject): MotorheadMemory => { const initalizeMotorhead = async (nodeData: INodeData, options: ICommonObject): Promise<MotorheadMemory> => {
const memoryKey = nodeData.inputs?.memoryKey as string const memoryKey = nodeData.inputs?.memoryKey as string
const baseURL = nodeData.inputs?.baseURL as string const baseURL = nodeData.inputs?.baseURL as string
const sessionId = nodeData.inputs?.sessionId as string const sessionId = nodeData.inputs?.sessionId as string
const apiKey = nodeData.inputs?.apiKey as string
const clientId = nodeData.inputs?.clientId as string
const chatId = options?.chatId as string const chatId = options?.chatId as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const apiKey = getCredentialParam('apiKey', credentialData, nodeData)
const clientId = getCredentialParam('clientId', credentialData, nodeData)
let obj: MotorheadMemoryInput = { let obj: MotorheadMemoryInput = {
returnMessages: true, returnMessages: true,
sessionId: sessionId ? sessionId : chatId, sessionId: sessionId ? sessionId : chatId,
@@ -8,6 +8,7 @@ import { createClient } from 'redis'
class RedisBackedChatMemory_Memory implements INode { class RedisBackedChatMemory_Memory implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -18,6 +19,7 @@ class RedisBackedChatMemory_Memory implements INode {
constructor() { constructor() {
this.label = 'Redis-Backed Chat Memory' this.label = 'Redis-Backed Chat Memory'
this.name = 'RedisBackedChatMemory' this.name = 'RedisBackedChatMemory'
this.version = 1.0
this.type = 'RedisBackedChatMemory' this.type = 'RedisBackedChatMemory'
this.icon = 'redis.svg' this.icon = 'redis.svg'
this.category = 'Memory' this.category = 'Memory'
@@ -44,13 +46,15 @@ class RedisBackedChatMemory_Memory implements INode {
name: 'sessionTTL', name: 'sessionTTL',
type: 'number', type: 'number',
description: 'Omit this parameter to make sessions never expire', description: 'Omit this parameter to make sessions never expire',
additionalParams: true,
optional: true optional: true
}, },
{ {
label: 'Memory Key', label: 'Memory Key',
name: 'memoryKey', name: 'memoryKey',
type: 'string', type: 'string',
default: 'chat_history' default: 'chat_history',
additionalParams: true
} }
] ]
} }
@@ -1,27 +1,38 @@
import { SystemMessage } from 'langchain/schema' import { SystemMessage } from 'langchain/schema'
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { ZepMemory, ZepMemoryInput } from 'langchain/memory/zep' import { ZepMemory, ZepMemoryInput } from 'langchain/memory/zep'
import { ICommonObject } from '../../../src' import { ICommonObject } from '../../../src'
class ZepMemory_Memory implements INode { class ZepMemory_Memory implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
category: string category: string
baseClasses: string[] baseClasses: string[]
credential: INodeParams
inputs: INodeParams[] inputs: INodeParams[]
constructor() { constructor() {
this.label = 'Zep Memory' this.label = 'Zep Memory'
this.name = 'ZepMemory' this.name = 'ZepMemory'
this.version = 1.0
this.type = 'ZepMemory' this.type = 'ZepMemory'
this.icon = 'zep.png' this.icon = 'zep.png'
this.category = 'Memory' this.category = 'Memory'
this.description = 'Summarizes the conversation and stores the memory in zep server' this.description = 'Summarizes the conversation and stores the memory in zep server'
this.baseClasses = [this.type, ...getBaseClasses(ZepMemory)] this.baseClasses = [this.type, ...getBaseClasses(ZepMemory)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
type: 'credential',
optional: true,
description: 'Configure JWT authentication on your Zep instance (Optional)',
credentialNames: ['zepMemoryApi']
}
this.inputs = [ this.inputs = [
{ {
label: 'Base URL', label: 'Base URL',
@@ -44,13 +55,6 @@ class ZepMemory_Memory implements INode {
additionalParams: true, additionalParams: true,
optional: true optional: true
}, },
{
label: 'API Key',
name: 'apiKey',
type: 'password',
additionalParams: true,
optional: true
},
{ {
label: 'Size', label: 'Size',
name: 'k', name: 'k',
@@ -106,9 +110,10 @@ class ZepMemory_Memory implements INode {
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> { async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const autoSummaryTemplate = nodeData.inputs?.autoSummaryTemplate as string const autoSummaryTemplate = nodeData.inputs?.autoSummaryTemplate as string
const autoSummary = nodeData.inputs?.autoSummary as boolean const autoSummary = nodeData.inputs?.autoSummary as boolean
const k = nodeData.inputs?.k as string const k = nodeData.inputs?.k as string
let zep = initalizeZep(nodeData, options) let zep = await initalizeZep(nodeData, options)
// hack to support summary // hack to support summary
let tmpFunc = zep.loadMemoryVariables let tmpFunc = zep.loadMemoryVariables
@@ -135,23 +140,24 @@ class ZepMemory_Memory implements INode {
} }
async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise<void> { async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise<void> {
const zep = initalizeZep(nodeData, options) const zep = await initalizeZep(nodeData, options)
zep.clear() await zep.clear()
} }
} }
const initalizeZep = (nodeData: INodeData, options: ICommonObject) => { const initalizeZep = async (nodeData: INodeData, options: ICommonObject): Promise<ZepMemory> => {
const baseURL = nodeData.inputs?.baseURL as string const baseURL = nodeData.inputs?.baseURL as string
const aiPrefix = nodeData.inputs?.aiPrefix as string const aiPrefix = nodeData.inputs?.aiPrefix as string
const humanPrefix = nodeData.inputs?.humanPrefix as string const humanPrefix = nodeData.inputs?.humanPrefix as string
const memoryKey = nodeData.inputs?.memoryKey as string const memoryKey = nodeData.inputs?.memoryKey as string
const inputKey = nodeData.inputs?.inputKey as string const inputKey = nodeData.inputs?.inputKey as string
const sessionId = nodeData.inputs?.sessionId as string const sessionId = nodeData.inputs?.sessionId as string
const apiKey = nodeData.inputs?.apiKey as string
const chatId = options?.chatId as string const chatId = options?.chatId as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const apiKey = getCredentialParam('apiKey', credentialData, nodeData)
const obj: ZepMemoryInput = { const obj: ZepMemoryInput = {
baseURL, baseURL,
sessionId: sessionId ? sessionId : chatId, sessionId: sessionId ? sessionId : chatId,
@@ -5,6 +5,7 @@ import { ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemp
class ChatPromptTemplate_Prompts implements INode { class ChatPromptTemplate_Prompts implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class ChatPromptTemplate_Prompts implements INode {
constructor() { constructor() {
this.label = 'Chat Prompt Template' this.label = 'Chat Prompt Template'
this.name = 'chatPromptTemplate' this.name = 'chatPromptTemplate'
this.version = 1.0
this.type = 'ChatPromptTemplate' this.type = 'ChatPromptTemplate'
this.icon = 'prompt.svg' this.icon = 'prompt.svg'
this.category = 'Prompts' this.category = 'Prompts'
@@ -7,6 +7,7 @@ import { TemplateFormat } from 'langchain/dist/prompts/template'
class FewShotPromptTemplate_Prompts implements INode { class FewShotPromptTemplate_Prompts implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -17,6 +18,7 @@ class FewShotPromptTemplate_Prompts implements INode {
constructor() { constructor() {
this.label = 'Few Shot Prompt Template' this.label = 'Few Shot Prompt Template'
this.name = 'fewShotPromptTemplate' this.name = 'fewShotPromptTemplate'
this.version = 1.0
this.type = 'FewShotPromptTemplate' this.type = 'FewShotPromptTemplate'
this.icon = 'prompt.svg' this.icon = 'prompt.svg'
this.category = 'Prompts' this.category = 'Prompts'
@@ -5,6 +5,7 @@ import { PromptTemplateInput } from 'langchain/prompts'
class PromptTemplate_Prompts implements INode { class PromptTemplate_Prompts implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -15,6 +16,7 @@ class PromptTemplate_Prompts implements INode {
constructor() { constructor() {
this.label = 'Prompt Template' this.label = 'Prompt Template'
this.name = 'promptTemplate' this.name = 'promptTemplate'
this.version = 1.0
this.type = 'PromptTemplate' this.type = 'PromptTemplate'
this.icon = 'prompt.svg' this.icon = 'prompt.svg'
this.category = 'Prompts' this.category = 'Prompts'
@@ -7,6 +7,7 @@ import { PromptTemplate } from 'langchain/prompts'
class HydeRetriever_Retrievers implements INode { class HydeRetriever_Retrievers implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -17,6 +18,7 @@ class HydeRetriever_Retrievers implements INode {
constructor() { constructor() {
this.label = 'Hyde Retriever' this.label = 'Hyde Retriever'
this.name = 'HydeRetriever' this.name = 'HydeRetriever'
this.version = 1.0
this.type = 'HydeRetriever' this.type = 'HydeRetriever'
this.icon = 'hyderetriever.svg' this.icon = 'hyderetriever.svg'
this.category = 'Retrievers' this.category = 'Retrievers'
@@ -3,6 +3,7 @@ import { INode, INodeData, INodeParams, PromptRetriever, PromptRetrieverInput }
class PromptRetriever_Retrievers implements INode { class PromptRetriever_Retrievers implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -13,6 +14,7 @@ class PromptRetriever_Retrievers implements INode {
constructor() { constructor() {
this.label = 'Prompt Retriever' this.label = 'Prompt Retriever'
this.name = 'promptRetriever' this.name = 'promptRetriever'
this.version = 1.0
this.type = 'PromptRetriever' this.type = 'PromptRetriever'
this.icon = 'promptretriever.svg' this.icon = 'promptretriever.svg'
this.category = 'Retrievers' this.category = 'Retrievers'
@@ -4,6 +4,7 @@ import { INode, INodeData, INodeParams, VectorStoreRetriever, VectorStoreRetriev
class VectorStoreRetriever_Retrievers implements INode { class VectorStoreRetriever_Retrievers implements INode {
label: string label: string
name: string name: string
version: number
description: string description: string
type: string type: string
icon: string icon: string
@@ -14,6 +15,7 @@ class VectorStoreRetriever_Retrievers implements INode {
constructor() { constructor() {
this.label = 'Vector Store Retriever' this.label = 'Vector Store Retriever'
this.name = 'vectorStoreRetriever' this.name = 'vectorStoreRetriever'
this.version = 1.0
this.type = 'VectorStoreRetriever' this.type = 'VectorStoreRetriever'
this.icon = 'vectorretriever.svg' this.icon = 'vectorretriever.svg'
this.category = 'Retrievers' this.category = 'Retrievers'

Some files were not shown because too many files have changed in this diff Show More