From e561f1c30b7f2db0641aba9b08ed5f1dbbcf4d63 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 25 Jul 2023 18:23:47 +0900 Subject: [PATCH 1/6] add svg --- .../nodes/retrievers/HydeRetriever/hyderetriever.svg | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/components/nodes/retrievers/HydeRetriever/hyderetriever.svg diff --git a/packages/components/nodes/retrievers/HydeRetriever/hyderetriever.svg b/packages/components/nodes/retrievers/HydeRetriever/hyderetriever.svg new file mode 100644 index 000000000..da3a9f207 --- /dev/null +++ b/packages/components/nodes/retrievers/HydeRetriever/hyderetriever.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file From 8fd9332224892699f6d12347fb5ef36071cda1a5 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 25 Jul 2023 18:24:10 +0900 Subject: [PATCH 2/6] add Hyde component.js --- .../components/nodes/retrievers/HydeRetriever/HydeRetriever.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js diff --git a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js new file mode 100644 index 000000000..e69de29bb From 0ffdea771c4893138f5c19629e1fc1e1054a3714 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 25 Jul 2023 18:27:41 +0900 Subject: [PATCH 3/6] Add HydeRetriever node class for retrieving from a vector store --- .../retrievers/HydeRetriever/HydeRetriever.js | 0 .../retrievers/HydeRetriever/HydeRetriever.ts | 114 ++++++++++++++++++ packages/components/src/Interface.ts | 10 ++ 3 files changed, 124 insertions(+) delete mode 100644 packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js create mode 100644 packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts diff --git a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts new file mode 100644 index 000000000..058f98861 --- /dev/null +++ b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts @@ -0,0 +1,114 @@ +import { VectorStore } from 'langchain/vectorstores/base' +import { INode, INodeData, INodeParams, HyDERetrieverInput } from '../../../src/Interface' +import { HydeRetriever } from 'langchain/retrievers/hyde' +import { BaseLanguageModel } from 'langchain/base_language' +import { Embeddings } from 'langchain/embeddings/base' + +class HydeRetriever_Retrievers implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Hyde Retriever' + this.name = 'HydeRetriever' + this.type = 'HydeRetriever' + this.icon = 'hyderetriever.svg' + this.category = 'Retrievers' + this.description = 'Use HyDE retriever to retrieve from a vector store' + this.baseClasses = [this.type, 'BaseRetriever'] + this.inputs = [ + { + label: 'Language Model', + name: 'model', + type: 'BaseLanguageModel' + }, + { + label: 'Vector Store', + name: 'vectorStore', + type: 'VectorStore' + }, + { + label: 'Embeddings', + name: 'embeddings', + type: 'Embeddings' + }, + { + label: 'Prompt Key', + name: 'promptKey', + type: 'options', + options: [ + { + label: 'websearch', + name: 'websearch' + }, + { + label: 'scifact', + name: 'scifact' + }, + { + label: 'arguana', + name: 'arguana' + }, + { + label: 'trec-covid', + name: 'trec-covid' + }, + { + label: 'fiqa', + name: 'fiqa' + }, + { + label: 'dbpedia-entity', + name: 'dbpedia-entity' + }, + { + label: 'trec-news', + name: 'trec-news' + }, + { + label: 'mr-tydi', + name: 'mr-tydi' + } + ], + default: 'websearch' + }, + { + label: 'Top K', + name: 'topK', + description: 'Number of top results to fetch. Default to 4', + placeholder: '4', + type: 'number', + default: 4, + additionalParams: true, + optional: true + } + ] + } + + async init(nodeData: INodeData): Promise { + const llm = nodeData.inputs?.model as BaseLanguageModel + const vectorStore = nodeData.inputs?.vectorStore as VectorStore + const embeddings = nodeData.inputs?.embeddings as Embeddings + const promptKey = nodeData.inputs?.promptKey as string + const topK = nodeData.inputs?.topK as number + + const obj = { + llm, + vectorStore, + embeddings, + promptKey, + topK + } as HyDERetrieverInput + + const retriever = new HydeRetriever(obj) + return retriever + } +} + +module.exports = { nodeClass: HydeRetriever_Retrievers } diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index 47b5aba29..17c80aea9 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -119,6 +119,8 @@ export interface IMessage { import { PromptTemplate as LangchainPromptTemplate, PromptTemplateInput } from 'langchain/prompts' import { VectorStore } from 'langchain/vectorstores/base' +import { BaseLanguageModel } from 'langchain/base_language' +import { Embeddings } from 'langchain/embeddings/base' export class PromptTemplate extends LangchainPromptTemplate { promptValues: ICommonObject @@ -166,3 +168,11 @@ export class VectorStoreRetriever { this.vectorStore = fields.vectorStore } } + +export interface HyDERetrieverInput { + llm: BaseLanguageModel + vectorStore: VectorStore + embeddings: Embeddings + promptKey: string + topK: number +} \ No newline at end of file From 0f6c700e583005087a920148b53af91532dd6a54 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 25 Jul 2023 19:19:25 +0900 Subject: [PATCH 4/6] fix lint --- packages/components/src/Interface.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index 17c80aea9..942754ca6 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -175,4 +175,4 @@ export interface HyDERetrieverInput { embeddings: Embeddings promptKey: string topK: number -} \ No newline at end of file +} From b567e39f3eae37d963292d5014f8852138022145 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Tue, 25 Jul 2023 15:44:05 +0100 Subject: [PATCH 5/6] Update HydeRetriever.ts Add custom prompt --- .../retrievers/HydeRetriever/HydeRetriever.ts | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts index 058f98861..a90f98704 100644 --- a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts +++ b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts @@ -1,8 +1,8 @@ import { VectorStore } from 'langchain/vectorstores/base' -import { INode, INodeData, INodeParams, HyDERetrieverInput } from '../../../src/Interface' -import { HydeRetriever } from 'langchain/retrievers/hyde' +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { HydeRetriever, HydeRetrieverOptions, PromptKey } from 'langchain/retrievers/hyde' import { BaseLanguageModel } from 'langchain/base_language' -import { Embeddings } from 'langchain/embeddings/base' +import { PromptTemplate } from 'langchain/prompts' class HydeRetriever_Retrievers implements INode { label: string @@ -33,11 +33,6 @@ class HydeRetriever_Retrievers implements INode { name: 'vectorStore', type: 'VectorStore' }, - { - label: 'Embeddings', - name: 'embeddings', - type: 'Embeddings' - }, { label: 'Prompt Key', name: 'promptKey', @@ -78,6 +73,16 @@ class HydeRetriever_Retrievers implements INode { ], default: 'websearch' }, + { + label: 'Custom Prompt', + name: 'customPrompt', + description: 'If custom prompt is used, this will override Prompt Key', + placeholder: 'Please write a passage to answer the question\nQuestion: {question}\nPassage:', + type: 'string', + rows: 4, + additionalParams: true, + optional: true + }, { label: 'Top K', name: 'topK', @@ -94,17 +99,19 @@ class HydeRetriever_Retrievers implements INode { async init(nodeData: INodeData): Promise { const llm = nodeData.inputs?.model as BaseLanguageModel const vectorStore = nodeData.inputs?.vectorStore as VectorStore - const embeddings = nodeData.inputs?.embeddings as Embeddings - const promptKey = nodeData.inputs?.promptKey as string - const topK = nodeData.inputs?.topK as number + const promptKey = nodeData.inputs?.promptKey as PromptKey + const customPrompt = nodeData.inputs?.customPrompt as string + const topK = nodeData.inputs?.topK as string + const k = topK ? parseInt(topK, 10) : 4 - const obj = { + const obj: HydeRetrieverOptions = { llm, vectorStore, - embeddings, - promptKey, - topK - } as HyDERetrieverInput + k + } + + if (customPrompt) obj.promptTemplate = PromptTemplate.fromTemplate(customPrompt) + else if (promptKey) obj.promptTemplate = promptKey const retriever = new HydeRetriever(obj) return retriever From 63d896599ee1647bfc87de49e88691abe8139cc2 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Tue, 25 Jul 2023 15:45:06 +0100 Subject: [PATCH 6/6] Update Interface.ts --- packages/components/src/Interface.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index 942754ca6..47b5aba29 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -119,8 +119,6 @@ export interface IMessage { import { PromptTemplate as LangchainPromptTemplate, PromptTemplateInput } from 'langchain/prompts' import { VectorStore } from 'langchain/vectorstores/base' -import { BaseLanguageModel } from 'langchain/base_language' -import { Embeddings } from 'langchain/embeddings/base' export class PromptTemplate extends LangchainPromptTemplate { promptValues: ICommonObject @@ -168,11 +166,3 @@ export class VectorStoreRetriever { this.vectorStore = fields.vectorStore } } - -export interface HyDERetrieverInput { - llm: BaseLanguageModel - vectorStore: VectorStore - embeddings: Embeddings - promptKey: string - topK: number -}