Skip to content

Commit 967f0bb

Browse files
committed
Add distanceStrategy parameter
1 parent 2627b76 commit 967f0bb

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed

packages/components/nodes/vectorstores/Postgres/Postgres.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,29 @@ class Postgres_VectorStores implements INode {
136136
additionalParams: true,
137137
optional: true
138138
},
139+
{
140+
label: 'Distance Strategy',
141+
name: 'distanceStrategy',
142+
description: 'Strategy for calculating distances between vectors',
143+
type: 'option',
144+
options: [
145+
{
146+
label: 'Cosine',
147+
name: 'cosine'
148+
},
149+
{
150+
label: 'Euclidean',
151+
name: 'euclidean'
152+
},
153+
{
154+
label: 'Inner Product',
155+
name: 'innerProduct'
156+
}
157+
],
158+
additionalParams: true,
159+
default: 'cosine',
160+
optional: true
161+
},
139162
{
140163
label: 'Postgres Metadata Filter',
141164
name: 'pgMetadataFilter',

packages/components/nodes/vectorstores/Postgres/driver/PGVector.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { VectorStoreDriver } from './Base'
22
import { getCredentialData, getCredentialParam } from '../../../../src'
3-
import { PGVectorStore, PGVectorStoreArgs } from '@langchain/community/vectorstores/pgvector'
3+
import { DistanceStrategy, PGVectorStore, PGVectorStoreArgs } from '@langchain/community/vectorstores/pgvector'
44
import { Document } from '@langchain/core/documents'
55
import { PoolConfig } from 'pg'
66

@@ -45,7 +45,8 @@ export class PGVectorDriver extends VectorStoreDriver {
4545
tableName: this.getTableName(),
4646
columns: {
4747
contentColumnName: (this.nodeData.inputs?.contentColumnName || PGVectorDriver.CONTENT_COLUMN_NAME_DEFAULT) as string
48-
}
48+
},
49+
distanceStrategy: (this.nodeData.inputs?.distanceStrategy || 'cosine') as DistanceStrategy
4950
}
5051
}
5152

packages/components/nodes/vectorstores/Postgres/driver/TypeORM.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ export class TypeORMDriver extends VectorStoreDriver {
8080
k,
8181
tableName,
8282
await this.getPostgresConnectionOptions(),
83-
filter ?? metadataFilters
83+
filter ?? metadataFilters,
84+
this.computedOperatorString
8485
)
8586
}
8687

@@ -105,12 +106,28 @@ export class TypeORMDriver extends VectorStoreDriver {
105106
return instance
106107
}
107108

109+
get computedOperatorString() {
110+
const { distanceStrategy = 'cosine' } = this.nodeData.inputs || {}
111+
112+
switch (distanceStrategy) {
113+
case 'cosine':
114+
return '<=>'
115+
case 'innerProduct':
116+
return '<#>'
117+
case 'euclidean':
118+
return '<->'
119+
default:
120+
throw new Error(`Unknown distance strategy: ${distanceStrategy}`)
121+
}
122+
}
123+
108124
static similaritySearchVectorWithScore = async (
109125
query: number[],
110126
k: number,
111127
tableName: string,
112128
postgresConnectionOptions: ICommonObject,
113-
filter?: any
129+
filter?: any,
130+
distanceOperator: string = '<=>'
114131
) => {
115132
const embeddingString = `[${query.join(',')}]`
116133
let notExists = ''
@@ -127,7 +144,7 @@ export class TypeORMDriver extends VectorStoreDriver {
127144
}
128145

129146
const queryString = `
130-
SELECT *, embedding <=> $1 as "_distance"
147+
SELECT *, embedding ${distanceOperator} $1 as "_distance"
131148
FROM ${tableName}
132149
WHERE metadata @> $2
133150
${notExists}

0 commit comments

Comments
 (0)