@mastra/pg 1.6.1 → 1.7.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/CHANGELOG.md +74 -0
- package/dist/docs/SKILL.md +40 -0
- package/dist/docs/assets/SOURCE_MAP.json +6 -0
- package/dist/docs/references/docs-memory-semantic-recall.md +272 -0
- package/dist/docs/references/docs-memory-storage.md +261 -0
- package/dist/docs/references/docs-memory-working-memory.md +400 -0
- package/dist/docs/references/docs-rag-overview.md +72 -0
- package/dist/docs/references/docs-rag-retrieval.md +515 -0
- package/dist/docs/references/docs-rag-vector-databases.md +645 -0
- package/dist/docs/references/reference-memory-memory-class.md +147 -0
- package/dist/docs/references/reference-processors-message-history-processor.md +85 -0
- package/dist/docs/references/reference-processors-semantic-recall-processor.md +117 -0
- package/dist/docs/references/reference-processors-working-memory-processor.md +152 -0
- package/dist/docs/references/reference-rag-metadata-filters.md +216 -0
- package/dist/docs/references/reference-storage-composite.md +235 -0
- package/dist/docs/references/reference-storage-dynamodb.md +282 -0
- package/dist/docs/references/reference-storage-postgresql.md +526 -0
- package/dist/docs/references/reference-tools-vector-query-tool.md +459 -0
- package/dist/docs/references/reference-vectors-pg.md +408 -0
- package/dist/index.cjs +62 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +62 -5
- package/dist/index.js.map +1 -1
- package/dist/storage/db/index.d.ts.map +1 -1
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/vector/index.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -790,8 +790,12 @@ var PgVector = class extends MastraVector {
|
|
|
790
790
|
}) {
|
|
791
791
|
try {
|
|
792
792
|
validateTopK("PG", topK);
|
|
793
|
-
if (
|
|
794
|
-
|
|
793
|
+
if (queryVector !== void 0) {
|
|
794
|
+
if (!Array.isArray(queryVector) || !queryVector.every((x) => typeof x === "number" && Number.isFinite(x))) {
|
|
795
|
+
throw new Error("queryVector must be an array of finite numbers");
|
|
796
|
+
}
|
|
797
|
+
} else if (!filter || Object.keys(filter).length === 0) {
|
|
798
|
+
throw new Error("Either queryVector or filter must be provided");
|
|
795
799
|
}
|
|
796
800
|
} catch (error) {
|
|
797
801
|
const mastraError = new MastraError(
|
|
@@ -808,6 +812,46 @@ var PgVector = class extends MastraVector {
|
|
|
808
812
|
this.logger?.trackException(mastraError);
|
|
809
813
|
throw mastraError;
|
|
810
814
|
}
|
|
815
|
+
if (queryVector === void 0) {
|
|
816
|
+
const client2 = await this.pool.connect();
|
|
817
|
+
try {
|
|
818
|
+
const translatedFilter = this.transformFilter(filter);
|
|
819
|
+
const { sql: filterQuery, values: filterValues } = buildDeleteFilterQuery(translatedFilter);
|
|
820
|
+
const { tableName } = this.getTableName(indexName);
|
|
821
|
+
const query = `
|
|
822
|
+
SELECT
|
|
823
|
+
vector_id as id,
|
|
824
|
+
metadata
|
|
825
|
+
${includeVector ? ", embedding" : ""}
|
|
826
|
+
FROM ${tableName}
|
|
827
|
+
${filterQuery}
|
|
828
|
+
ORDER BY vector_id
|
|
829
|
+
LIMIT $${filterValues.length + 1}`;
|
|
830
|
+
const result = await client2.query(query, [...filterValues, topK]);
|
|
831
|
+
return result.rows.map(({ id, metadata, embedding }) => ({
|
|
832
|
+
id,
|
|
833
|
+
score: 0,
|
|
834
|
+
metadata,
|
|
835
|
+
...includeVector && embedding && { vector: JSON.parse(embedding) }
|
|
836
|
+
}));
|
|
837
|
+
} catch (error) {
|
|
838
|
+
const mastraError = new MastraError(
|
|
839
|
+
{
|
|
840
|
+
id: createVectorErrorId("PG", "QUERY", "FAILED"),
|
|
841
|
+
domain: ErrorDomain.MASTRA_VECTOR,
|
|
842
|
+
category: ErrorCategory.THIRD_PARTY,
|
|
843
|
+
details: {
|
|
844
|
+
indexName
|
|
845
|
+
}
|
|
846
|
+
},
|
|
847
|
+
error
|
|
848
|
+
);
|
|
849
|
+
this.logger?.trackException(mastraError);
|
|
850
|
+
throw mastraError;
|
|
851
|
+
} finally {
|
|
852
|
+
client2.release();
|
|
853
|
+
}
|
|
854
|
+
}
|
|
811
855
|
const client = await this.pool.connect();
|
|
812
856
|
try {
|
|
813
857
|
await client.query("BEGIN");
|
|
@@ -2031,6 +2075,17 @@ function generateTableSQL({
|
|
|
2031
2075
|
ADD CONSTRAINT ${workflowSnapshotConstraint}
|
|
2032
2076
|
UNIQUE (workflow_name, run_id);
|
|
2033
2077
|
END IF;
|
|
2078
|
+
IF EXISTS (
|
|
2079
|
+
SELECT 1 FROM pg_index i
|
|
2080
|
+
JOIN pg_class c ON i.indexrelid = c.oid
|
|
2081
|
+
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
2082
|
+
WHERE c.relname = lower('${workflowSnapshotConstraint}')
|
|
2083
|
+
AND n.nspname = '${schemaFilter}'
|
|
2084
|
+
AND i.indisreplident = false
|
|
2085
|
+
) THEN
|
|
2086
|
+
ALTER TABLE ${getTableName({ indexName: tableName, schemaName: quotedSchemaName })}
|
|
2087
|
+
REPLICA IDENTITY USING INDEX ${workflowSnapshotConstraint};
|
|
2088
|
+
END IF;
|
|
2034
2089
|
END $$;
|
|
2035
2090
|
` : ""}
|
|
2036
2091
|
${// For spans table: Include PRIMARY KEY in exports, but not in runtime (handled after deduplication)
|
|
@@ -8570,11 +8625,13 @@ var MemoryPG = class _MemoryPG extends MemoryStorage {
|
|
|
8570
8625
|
const maxOvershoot = retentionFloor * 0.95;
|
|
8571
8626
|
const overshoot = bestOverTokens - targetMessageTokens;
|
|
8572
8627
|
const remainingAfterOver = input.currentPendingTokens - bestOverTokens;
|
|
8573
|
-
|
|
8628
|
+
const remainingAfterUnder = input.currentPendingTokens - bestUnderTokens;
|
|
8629
|
+
const minRemaining = Math.min(1e3, retentionFloor);
|
|
8630
|
+
if (input.forceMaxActivation && bestOverBoundary > 0 && remainingAfterOver >= minRemaining) {
|
|
8574
8631
|
chunksToActivate = bestOverBoundary;
|
|
8575
|
-
} else if (bestOverBoundary > 0 && overshoot <= maxOvershoot &&
|
|
8632
|
+
} else if (bestOverBoundary > 0 && overshoot <= maxOvershoot && remainingAfterOver >= minRemaining) {
|
|
8576
8633
|
chunksToActivate = bestOverBoundary;
|
|
8577
|
-
} else if (bestUnderBoundary > 0) {
|
|
8634
|
+
} else if (bestUnderBoundary > 0 && remainingAfterUnder >= minRemaining) {
|
|
8578
8635
|
chunksToActivate = bestUnderBoundary;
|
|
8579
8636
|
} else if (bestOverBoundary > 0) {
|
|
8580
8637
|
chunksToActivate = bestOverBoundary;
|