diff --git a/packages/components/nodes/llms/Replicate/Replicate.ts b/packages/components/nodes/llms/Replicate/Replicate.ts
new file mode 100644
index 00000000000..03e20fb701b
--- /dev/null
+++ b/packages/components/nodes/llms/Replicate/Replicate.ts
@@ -0,0 +1,118 @@
+import { INode, INodeData, INodeParams } from '../../../src/Interface'
+import { getBaseClasses } from '../../../src/utils'
+import { Replicate, ReplicateInput } from 'langchain/llms/replicate'
+
+class Replicate_LLMs implements INode {
+ label: string
+ name: string
+ type: string
+ icon: string
+ category: string
+ description: string
+ baseClasses: string[]
+ inputs: INodeParams[]
+
+ constructor() {
+ this.label = 'Replicate'
+ this.name = 'replicate'
+ this.type = 'Replicate'
+ this.icon = 'replicate.svg'
+ this.category = 'LLMs'
+ this.description = 'Use Replicate to run open source models on cloud'
+ this.baseClasses = [this.type, 'BaseChatModel', ...getBaseClasses(Replicate)]
+ this.inputs = [
+ {
+ label: 'Replicate Api Key',
+ name: 'replicateApiKey',
+ type: 'password'
+ },
+ {
+ label: 'Model',
+ name: 'model',
+ type: 'string',
+ placeholder: 'a16z-infra/llama13b-v2-chat:df7690f1994d94e96ad9d568eac121aecf50684a0b0963b25a41cc40061269e5',
+ optional: true
+ },
+ {
+ label: 'Temperature',
+ name: 'temperature',
+ type: 'number',
+ description:
+ 'Adjusts randomness of outputs, greater than 1 is random and 0 is deterministic, 0.75 is a good starting value.',
+ default: 0.7,
+ optional: true
+ },
+ {
+ label: 'Max Tokens',
+ name: 'maxTokens',
+ type: 'number',
+ description: 'Maximum number of tokens to generate. A word is generally 2-3 tokens',
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Top Probability',
+ name: 'topP',
+ type: 'number',
+ description:
+ 'When decoding text, samples from the top p percentage of most likely tokens; lower to ignore less likely tokens',
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Repetition Penalty',
+ name: 'repetitionPenalty',
+ type: 'number',
+ 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)',
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Additional Inputs',
+ name: 'additionalInputs',
+ type: 'json',
+ description:
+ 'Each model has different parameters, refer to the specific model accepted inputs. For example: llama13b-v2',
+ additionalParams: true,
+ optional: true
+ }
+ ]
+ }
+
+ async init(nodeData: INodeData): Promise {
+ const modelName = nodeData.inputs?.model as string
+ const apiKey = nodeData.inputs?.replicateApiKey as string
+ const temperature = nodeData.inputs?.temperature as string
+ const maxTokens = nodeData.inputs?.maxTokens as string
+ const topP = nodeData.inputs?.topP as string
+ const repetitionPenalty = nodeData.inputs?.repetitionPenalty as string
+ const additionalInputs = nodeData.inputs?.additionalInputs as string
+
+ const version = modelName.split(':').pop()
+ const name = modelName.split(':')[0].split('/').pop()
+ const org = modelName.split(':')[0].split('/')[0]
+
+ const obj: ReplicateInput = {
+ model: `${org}/${name}:${version}`,
+ apiKey
+ }
+
+ let inputs: any = {}
+ if (maxTokens) inputs.max_length = parseInt(maxTokens, 10)
+ if (temperature) inputs.temperature = parseFloat(temperature)
+ if (topP) inputs.top_p = parseFloat(topP)
+ if (repetitionPenalty) inputs.repetition_penalty = parseFloat(repetitionPenalty)
+ if (additionalInputs) {
+ const parsedInputs =
+ typeof additionalInputs === 'object' ? additionalInputs : additionalInputs ? JSON.parse(additionalInputs) : {}
+ inputs = { ...inputs, ...parsedInputs }
+ }
+ if (Object.keys(inputs).length) obj.input = inputs
+
+ const model = new Replicate(obj)
+ return model
+ }
+}
+
+module.exports = { nodeClass: Replicate_LLMs }
diff --git a/packages/components/nodes/llms/Replicate/replicate.svg b/packages/components/nodes/llms/Replicate/replicate.svg
new file mode 100644
index 00000000000..2e46453f817
--- /dev/null
+++ b/packages/components/nodes/llms/Replicate/replicate.svg
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/packages/components/package.json b/packages/components/package.json
index 8cc0223592c..77f376f8191 100644
--- a/packages/components/package.json
+++ b/packages/components/package.json
@@ -37,7 +37,7 @@
"form-data": "^4.0.0",
"graphql": "^16.6.0",
"html-to-text": "^9.0.5",
- "langchain": "^0.0.104",
+ "langchain": "^0.0.112",
"linkifyjs": "^4.1.1",
"mammoth": "^1.5.1",
"moment": "^2.29.3",
@@ -48,6 +48,7 @@
"playwright": "^1.35.0",
"puppeteer": "^20.7.1",
"redis": "^4.6.7",
+ "replicate": "^0.12.3",
"srt-parser-2": "^1.2.3",
"vm2": "^3.9.19",
"weaviate-ts-client": "^1.1.0",
diff --git a/packages/server/marketplaces/chatflows/Replicate LLM.json b/packages/server/marketplaces/chatflows/Replicate LLM.json
new file mode 100644
index 00000000000..66377663433
--- /dev/null
+++ b/packages/server/marketplaces/chatflows/Replicate LLM.json
@@ -0,0 +1,273 @@
+{
+ "description": "Use Replicate API that runs Llama 13b v2 model with LLMChain",
+ "nodes": [
+ {
+ "width": 300,
+ "height": 405,
+ "id": "llmChain_1",
+ "position": {
+ "x": 967.581544453458,
+ "y": 320.56761595884564
+ },
+ "type": "customNode",
+ "data": {
+ "id": "llmChain_1",
+ "label": "LLM Chain",
+ "name": "llmChain",
+ "type": "LLMChain",
+ "baseClasses": ["LLMChain", "BaseChain", "BaseLangChain"],
+ "category": "Chains",
+ "description": "Chain to run queries against LLMs",
+ "inputParams": [
+ {
+ "label": "Chain Name",
+ "name": "chainName",
+ "type": "string",
+ "placeholder": "Name Your Chain",
+ "optional": true,
+ "id": "llmChain_1-input-chainName-string"
+ }
+ ],
+ "inputAnchors": [
+ {
+ "label": "Language Model",
+ "name": "model",
+ "type": "BaseLanguageModel",
+ "id": "llmChain_1-input-model-BaseLanguageModel"
+ },
+ {
+ "label": "Prompt",
+ "name": "prompt",
+ "type": "BasePromptTemplate",
+ "id": "llmChain_1-input-prompt-BasePromptTemplate"
+ }
+ ],
+ "inputs": {
+ "model": "{{replicate_0.data.instance}}",
+ "prompt": "{{promptTemplate_0.data.instance}}",
+ "chainName": ""
+ },
+ "outputAnchors": [
+ {
+ "name": "output",
+ "label": "Output",
+ "type": "options",
+ "options": [
+ {
+ "id": "llmChain_1-output-llmChain-LLMChain|BaseChain|BaseLangChain",
+ "name": "llmChain",
+ "label": "LLM Chain",
+ "type": "LLMChain | BaseChain | BaseLangChain"
+ },
+ {
+ "id": "llmChain_1-output-outputPrediction-string|json",
+ "name": "outputPrediction",
+ "label": "Output Prediction",
+ "type": "string | json"
+ }
+ ],
+ "default": "llmChain"
+ }
+ ],
+ "outputs": {
+ "output": "llmChain"
+ },
+ "selected": false
+ },
+ "positionAbsolute": {
+ "x": 967.581544453458,
+ "y": 320.56761595884564
+ },
+ "selected": false,
+ "dragging": false
+ },
+ {
+ "width": 300,
+ "height": 475,
+ "id": "promptTemplate_0",
+ "position": {
+ "x": 269.2203229225663,
+ "y": 129.02909641085535
+ },
+ "type": "customNode",
+ "data": {
+ "id": "promptTemplate_0",
+ "label": "Prompt Template",
+ "name": "promptTemplate",
+ "type": "PromptTemplate",
+ "baseClasses": ["PromptTemplate", "BaseStringPromptTemplate", "BasePromptTemplate"],
+ "category": "Prompts",
+ "description": "Schema to represent a basic prompt for an LLM",
+ "inputParams": [
+ {
+ "label": "Template",
+ "name": "template",
+ "type": "string",
+ "rows": 4,
+ "placeholder": "What is a good name for a company that makes {product}?",
+ "id": "promptTemplate_0-input-template-string"
+ },
+ {
+ "label": "Format Prompt Values",
+ "name": "promptValues",
+ "type": "json",
+ "optional": true,
+ "acceptVariable": true,
+ "list": true,
+ "id": "promptTemplate_0-input-promptValues-json"
+ }
+ ],
+ "inputAnchors": [],
+ "inputs": {
+ "template": "Assistant: You are a helpful assistant. You do not respond as 'User' or pretend to be 'User'. You only respond once as Assistant.\nUser: {query}\nAssistant:",
+ "promptValues": "{\"query\":\"{{question}}\"}"
+ },
+ "outputAnchors": [
+ {
+ "id": "promptTemplate_0-output-promptTemplate-PromptTemplate|BaseStringPromptTemplate|BasePromptTemplate",
+ "name": "promptTemplate",
+ "label": "PromptTemplate",
+ "type": "PromptTemplate | BaseStringPromptTemplate | BasePromptTemplate"
+ }
+ ],
+ "outputs": {},
+ "selected": false
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 269.2203229225663,
+ "y": 129.02909641085535
+ },
+ "dragging": false
+ },
+ {
+ "width": 300,
+ "height": 527,
+ "id": "replicate_0",
+ "position": {
+ "x": 607.4915400488668,
+ "y": -60.643337207007804
+ },
+ "type": "customNode",
+ "data": {
+ "id": "replicate_0",
+ "label": "Replicate",
+ "name": "replicate",
+ "type": "Replicate",
+ "baseClasses": ["Replicate", "LLM", "BaseLLM", "BaseLanguageModel"],
+ "category": "LLMs",
+ "description": "Use Replicate to run open source models on cloud",
+ "inputParams": [
+ {
+ "label": "Replicate Api Key",
+ "name": "replicateApiKey",
+ "type": "password",
+ "id": "replicate_0-input-replicateApiKey-password"
+ },
+ {
+ "label": "Model",
+ "name": "model",
+ "type": "string",
+ "placeholder": "a16z-infra/llama13b-v2-chat:df7690f1994d94e96ad9d568eac121aecf50684a0b0963b25a41cc40061269e5",
+ "optional": true,
+ "id": "replicate_0-input-model-string"
+ },
+ {
+ "label": "Temperature",
+ "name": "temperature",
+ "type": "number",
+ "description": "Adjusts randomness of outputs, greater than 1 is random and 0 is deterministic, 0.75 is a good starting value.",
+ "default": 0.7,
+ "optional": true,
+ "id": "replicate_0-input-temperature-number"
+ },
+ {
+ "label": "Max Tokens",
+ "name": "maxTokens",
+ "type": "number",
+ "description": "Maximum number of tokens to generate. A word is generally 2-3 tokens",
+ "optional": true,
+ "additionalParams": true,
+ "id": "replicate_0-input-maxTokens-number"
+ },
+ {
+ "label": "Top Probability",
+ "name": "topP",
+ "type": "number",
+ "description": "When decoding text, samples from the top p percentage of most likely tokens; lower to ignore less likely tokens",
+ "optional": true,
+ "additionalParams": true,
+ "id": "replicate_0-input-topP-number"
+ },
+ {
+ "label": "Repetition Penalty",
+ "name": "repetitionPenalty",
+ "type": "number",
+ "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)",
+ "optional": true,
+ "additionalParams": true,
+ "id": "replicate_0-input-repetitionPenalty-number"
+ },
+ {
+ "label": "Additional Inputs",
+ "name": "additionalInputs",
+ "type": "json",
+ "description": "Each model has different parameters, refer to the specific model accepted inputs. For example: llama13b-v2",
+ "additionalParams": true,
+ "optional": true,
+ "id": "replicate_0-input-additionalInputs-json"
+ }
+ ],
+ "inputAnchors": [],
+ "inputs": {
+ "model": "a16z-infra/llama13b-v2-chat:df7690f1994d94e96ad9d568eac121aecf50684a0b0963b25a41cc40061269e5",
+ "temperature": 0.7,
+ "maxTokens": "",
+ "topP": "",
+ "repetitionPenalty": "",
+ "additionalInputs": ""
+ },
+ "outputAnchors": [
+ {
+ "id": "replicate_0-output-replicate-Replicate|LLM|BaseLLM|BaseLanguageModel",
+ "name": "replicate",
+ "label": "Replicate",
+ "type": "Replicate | LLM | BaseLLM | BaseLanguageModel"
+ }
+ ],
+ "outputs": {},
+ "selected": false
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 607.4915400488668,
+ "y": -60.643337207007804
+ },
+ "dragging": false
+ }
+ ],
+ "edges": [
+ {
+ "source": "promptTemplate_0",
+ "sourceHandle": "promptTemplate_0-output-promptTemplate-PromptTemplate|BaseStringPromptTemplate|BasePromptTemplate",
+ "target": "llmChain_1",
+ "targetHandle": "llmChain_1-input-prompt-BasePromptTemplate",
+ "type": "buttonedge",
+ "id": "promptTemplate_0-promptTemplate_0-output-promptTemplate-PromptTemplate|BaseStringPromptTemplate|BasePromptTemplate-llmChain_1-llmChain_1-input-prompt-BasePromptTemplate",
+ "data": {
+ "label": ""
+ }
+ },
+ {
+ "source": "replicate_0",
+ "sourceHandle": "replicate_0-output-replicate-Replicate|LLM|BaseLLM|BaseLanguageModel",
+ "target": "llmChain_1",
+ "targetHandle": "llmChain_1-input-model-BaseLanguageModel",
+ "type": "buttonedge",
+ "id": "replicate_0-replicate_0-output-replicate-Replicate|LLM|BaseLLM|BaseLanguageModel-llmChain_1-llmChain_1-input-model-BaseLanguageModel",
+ "data": {
+ "label": ""
+ }
+ }
+ ]
+}