@mastra/pg 1.34.0-alpha.1 → 1.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1080,42 +1080,43 @@ var PgVector = class extends MastraVector {
1080
1080
  const scoreExpr = ops.scoreExpr(distanceExpr);
1081
1081
  const filterClause = filterQuery.trim().replace(/^WHERE\s+/i, "");
1082
1082
  const hasFilter = filterClause.length > 0;
1083
- const useIndexedOrder = indexInfo.type === "hnsw" && !hasFilter && minScore <= 0;
1084
1083
  const namespaceParam = filterValues.length + 1;
1085
- const query = useIndexedOrder ? `
1084
+ const queryValues = [...filterValues, namespace];
1085
+ const selectColumns = `vector_id as id, ${scoreExpr} as score, metadata${includeVector ? ", embedding" : ""}`;
1086
+ const whereClause = `WHERE namespace = $${namespaceParam}${filterClause ? ` AND (${filterClause})` : ""}`;
1087
+ const useIndexedOrder = indexInfo.type === "hnsw" && (!hasFilter || this.supportsIterativeScan());
1088
+ let rows;
1089
+ if (useIndexedOrder) {
1090
+ const indexedQuery = `
1086
1091
  WITH vector_scores AS (
1087
- SELECT
1088
- vector_id as id,
1089
- ${scoreExpr} as score,
1090
- metadata
1091
- ${includeVector ? ", embedding" : ""}
1092
+ SELECT ${selectColumns}
1092
1093
  FROM ${tableName}
1093
- WHERE namespace = $${namespaceParam}
1094
+ ${whereClause}
1094
1095
  ORDER BY ${distanceExpr}
1095
1096
  LIMIT $2
1096
1097
  )
1097
- SELECT *
1098
+ SELECT *, score > $1 AS above_min_score
1098
1099
  FROM vector_scores
1099
- WHERE score > $1
1100
- ORDER BY score DESC` : `
1100
+ ORDER BY score DESC`;
1101
+ const candidates = (await client.query(indexedQuery, queryValues)).rows;
1102
+ if (candidates.length >= topK) rows = candidates.filter((row) => row.above_min_score);
1103
+ }
1104
+ if (!rows) {
1105
+ const exactQuery = `
1101
1106
  WITH vector_scores AS (
1102
- SELECT
1103
- vector_id as id,
1104
- ${scoreExpr} as score,
1105
- metadata
1106
- ${includeVector ? ", embedding" : ""}
1107
+ SELECT ${selectColumns}
1107
1108
  FROM ${tableName}
1108
- WHERE namespace = $${namespaceParam}
1109
- ${filterClause ? `AND (${filterClause})` : ""}
1109
+ ${whereClause}
1110
1110
  )
1111
1111
  SELECT *
1112
1112
  FROM vector_scores
1113
1113
  WHERE score > $1
1114
1114
  ORDER BY score DESC
1115
1115
  LIMIT $2`;
1116
- const result = await client.query(query, [...filterValues, namespace]);
1116
+ rows = (await client.query(exactQuery, queryValues)).rows;
1117
+ }
1117
1118
  await client.query("COMMIT");
1118
- return result.rows.map(({ id, score, metadata, embedding }) => ({
1119
+ return rows.map(({ id, score, metadata, embedding }) => ({
1119
1120
  id,
1120
1121
  score,
1121
1122
  metadata,
@@ -1382,7 +1383,7 @@ var PgVector = class extends MastraVector {
1382
1383
  indexConfig,
1383
1384
  vectorType
1384
1385
  }, client);
1385
- if (metadataIndexes?.length) await this.createMetadataIndexes(tableName, indexName, metadataIndexes);
1386
+ if (metadataIndexes?.length) await this.createMetadataIndexes(client, tableName, indexName, metadataIndexes);
1386
1387
  } catch (error) {
1387
1388
  this.createdIndexes.delete(indexName);
1388
1389
  this.namespaceReadyIndexes.delete(indexName);
@@ -1532,13 +1533,13 @@ var PgVector = class extends MastraVector {
1532
1533
  await client.query(indexSQL);
1533
1534
  });
1534
1535
  }
1535
- async createMetadataIndexes(tableName, indexName, metadataFields) {
1536
+ async createMetadataIndexes(client, tableName, indexName, metadataFields) {
1536
1537
  const hasher = await this.hasher;
1537
1538
  for (const field of metadataFields) {
1538
1539
  const fieldHash = hasher.h32(field).toString(16);
1539
1540
  const metadataIdxName = `"${indexName.slice(0, 55 - fieldHash.length)}_md_${fieldHash}_idx"`;
1540
1541
  const escapedField = field.replace(/'/g, "''");
1541
- await this.pool.query(`
1542
+ await client.query(`
1542
1543
  CREATE INDEX CONCURRENTLY IF NOT EXISTS ${metadataIdxName}
1543
1544
  ON ${tableName} ((metadata->>'${escapedField}'))
1544
1545
  `);