Revert "Bugfix/OpenSearch illegal invocation"

This commit is contained in:
Henry Heng
2023-10-18 13:39:23 +01:00
committed by GitHub
parent 8797203d40
commit 88d7cb47e2
5 changed files with 3 additions and 97 deletions
@@ -1,8 +0,0 @@
export const buildMetadataTerms = (filter?: object): { term: Record<string, unknown> }[] => {
if (filter == null) return []
const result = []
for (const [key, value] of Object.entries(filter)) {
result.push({ term: { [`metadata.${key}`]: value } })
}
return result
}
@@ -1,10 +1,8 @@
import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface'
import { OpenSearchVectorStore } from 'langchain/vectorstores/opensearch'
import { Embeddings } from 'langchain/embeddings/base'
import { Document } from 'langchain/document'
import { Client, RequestParams } from '@opensearch-project/opensearch'
import { Client } from '@opensearch-project/opensearch'
import { getBaseClasses } from '../../../src/utils'
import { buildMetadataTerms } from './core'
class OpenSearch_Existing_VectorStores implements INode {
label: string
@@ -44,13 +42,6 @@ class OpenSearch_Existing_VectorStores implements INode {
name: 'indexName',
type: 'string'
},
{
label: 'OpenSearch Metadata Filter',
name: 'openSearchMetadataFilter',
type: 'json',
optional: true,
additionalParams: true
},
{
label: 'Top K',
name: 'topK',
@@ -82,7 +73,6 @@ class OpenSearch_Existing_VectorStores implements INode {
const output = nodeData.outputs?.output as string
const topK = nodeData.inputs?.topK as string
const k = topK ? parseFloat(topK) : 4
const openSearchMetadataFilter = nodeData.inputs?.openSearchMetadataFilter
const client = new Client({
nodes: [opensearchURL]
@@ -93,46 +83,6 @@ class OpenSearch_Existing_VectorStores implements INode {
indexName
})
vectorStore.similaritySearchVectorWithScore = async (
query: number[],
k: number,
filter?: object | undefined
): Promise<[Document, number][]> => {
if (openSearchMetadataFilter) {
const metadatafilter =
typeof openSearchMetadataFilter === 'object' ? openSearchMetadataFilter : JSON.parse(openSearchMetadataFilter)
filter = metadatafilter
}
const search: RequestParams.Search = {
index: indexName,
body: {
query: {
bool: {
filter: { bool: { must: buildMetadataTerms(filter) } },
must: [
{
knn: {
embedding: { vector: query, k }
}
}
]
}
},
size: k
}
}
const { body } = await client.search(search)
return body.hits.hits.map((hit: any) => [
new Document({
pageContent: hit._source.text,
metadata: hit._source.metadata
}),
hit._score
])
}
if (output === 'retriever') {
const retriever = vectorStore.asRetriever(k)
return retriever

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

@@ -2,10 +2,9 @@ import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/I
import { OpenSearchVectorStore } from 'langchain/vectorstores/opensearch'
import { Embeddings } from 'langchain/embeddings/base'
import { Document } from 'langchain/document'
import { Client, RequestParams } from '@opensearch-project/opensearch'
import { Client } from '@opensearch-project/opensearch'
import { flatten } from 'lodash'
import { getBaseClasses } from '../../../src/utils'
import { buildMetadataTerms } from './core'
class OpenSearchUpsert_VectorStores implements INode {
label: string
@@ -96,44 +95,9 @@ class OpenSearchUpsert_VectorStores implements INode {
const vectorStore = await OpenSearchVectorStore.fromDocuments(finalDocs, embeddings, {
client,
indexName
indexName: indexName
})
vectorStore.similaritySearchVectorWithScore = async (
query: number[],
k: number,
filter?: object | undefined
): Promise<[Document, number][]> => {
const search: RequestParams.Search = {
index: indexName,
body: {
query: {
bool: {
filter: { bool: { must: buildMetadataTerms(filter) } },
must: [
{
knn: {
embedding: { vector: query, k }
}
}
]
}
},
size: k
}
}
const { body } = await client.search(search)
return body.hits.hits.map((hit: any) => [
new Document({
pageContent: hit._source.text,
metadata: hit._source.metadata
}),
hit._score
])
}
if (output === 'retriever') {
const retriever = vectorStore.asRetriever(k)
return retriever
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB