@mastra/pg 1.27.0-alpha.0 → 1.27.0-alpha.1
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/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/reference-memory-memory-class.md +2 -0
- package/dist/docs/references/reference-storage-retention.md +9 -7
- package/dist/index.cjs +62 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +62 -33
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/datasets/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/v-next/trace-query.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -5642,6 +5642,19 @@ var ChannelsPG = class ChannelsPG extends ChannelsStorage {
|
|
|
5642
5642
|
function jsonbArg(value) {
|
|
5643
5643
|
return value === void 0 || value === null ? null : JSON.stringify(value);
|
|
5644
5644
|
}
|
|
5645
|
+
/** Preserve JSON null as data, rather than converting it to an absent SQL value. */
|
|
5646
|
+
function jsonDataArg(value) {
|
|
5647
|
+
return value === void 0 ? null : JSON.stringify(value);
|
|
5648
|
+
}
|
|
5649
|
+
const ITEM_SELECT_COLUMNS = [
|
|
5650
|
+
...Object.keys(DATASET_ITEMS_SCHEMA),
|
|
5651
|
+
"createdAtZ",
|
|
5652
|
+
"updatedAtZ"
|
|
5653
|
+
].map((column) => [
|
|
5654
|
+
"input",
|
|
5655
|
+
"groundTruth",
|
|
5656
|
+
"expectedTrajectory"
|
|
5657
|
+
].includes(column) ? `"${column}"::text AS "${column}"` : `"${column}"`).join(", ");
|
|
5645
5658
|
function parseStoredJSON(value) {
|
|
5646
5659
|
if (typeof value === "string") try {
|
|
5647
5660
|
return JSON.parse(value);
|
|
@@ -5816,9 +5829,9 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
5816
5829
|
groundTruthSchema: row.groundTruthSchema ? safelyParseJSON(row.groundTruthSchema) : void 0,
|
|
5817
5830
|
requestContextSchema: row.requestContextSchema ? safelyParseJSON(row.requestContextSchema) : void 0,
|
|
5818
5831
|
tags: row.tags ? safelyParseJSON(row.tags) : void 0,
|
|
5819
|
-
targetType: row.targetType ||
|
|
5820
|
-
targetIds: row.targetIds
|
|
5821
|
-
scorerIds: row.scorerIds
|
|
5832
|
+
targetType: row.targetType || void 0,
|
|
5833
|
+
targetIds: row.targetIds ?? void 0,
|
|
5834
|
+
scorerIds: row.scorerIds ?? void 0,
|
|
5822
5835
|
organizationId: row.organizationId ?? null,
|
|
5823
5836
|
projectId: row.projectId ?? null,
|
|
5824
5837
|
candidateKey: row.candidateKey ?? null,
|
|
@@ -5920,9 +5933,9 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
5920
5933
|
inputSchema: input.inputSchema ?? void 0,
|
|
5921
5934
|
groundTruthSchema: input.groundTruthSchema ?? void 0,
|
|
5922
5935
|
requestContextSchema: input.requestContextSchema ?? void 0,
|
|
5923
|
-
targetType: input.targetType ??
|
|
5924
|
-
targetIds: input.targetIds ??
|
|
5925
|
-
scorerIds: input.scorerIds ??
|
|
5936
|
+
targetType: input.targetType ?? void 0,
|
|
5937
|
+
targetIds: input.targetIds ?? void 0,
|
|
5938
|
+
scorerIds: input.scorerIds ?? void 0,
|
|
5926
5939
|
organizationId: input.organizationId ?? null,
|
|
5927
5940
|
projectId: input.projectId ?? null,
|
|
5928
5941
|
candidateKey: input.candidateKey ?? null,
|
|
@@ -6049,9 +6062,9 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6049
6062
|
groundTruthSchema: (args.groundTruthSchema !== void 0 ? args.groundTruthSchema : existing.groundTruthSchema) ?? void 0,
|
|
6050
6063
|
requestContextSchema: (args.requestContextSchema !== void 0 ? args.requestContextSchema : existing.requestContextSchema) ?? void 0,
|
|
6051
6064
|
tags: (args.tags !== void 0 ? args.tags : existing.tags) ?? void 0,
|
|
6052
|
-
targetType: (args.targetType !== void 0 ? args.targetType : existing.targetType) ??
|
|
6053
|
-
targetIds: (args.targetIds !== void 0 ? args.targetIds : existing.targetIds) ??
|
|
6054
|
-
scorerIds: (args.scorerIds !== void 0 ? args.scorerIds : existing.scorerIds) ??
|
|
6065
|
+
targetType: (args.targetType !== void 0 ? args.targetType : existing.targetType) ?? void 0,
|
|
6066
|
+
targetIds: (args.targetIds !== void 0 ? args.targetIds : existing.targetIds) ?? void 0,
|
|
6067
|
+
scorerIds: (args.scorerIds !== void 0 ? args.scorerIds : existing.scorerIds) ?? void 0,
|
|
6055
6068
|
organizationId: existing.organizationId ?? null,
|
|
6056
6069
|
projectId: existing.projectId ?? null,
|
|
6057
6070
|
candidateKey: existing.candidateKey ?? null,
|
|
@@ -6229,8 +6242,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6229
6242
|
parentOrganizationId,
|
|
6230
6243
|
parentProjectId,
|
|
6231
6244
|
JSON.stringify(args.input),
|
|
6232
|
-
|
|
6233
|
-
|
|
6245
|
+
jsonDataArg(args.groundTruth),
|
|
6246
|
+
jsonDataArg(args.expectedTrajectory),
|
|
6234
6247
|
jsonbArg(args.toolMocks),
|
|
6235
6248
|
args.unmockedToolPolicy ?? null,
|
|
6236
6249
|
jsonbArg(args.scorerIds),
|
|
@@ -6346,8 +6359,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6346
6359
|
parentOrganizationId,
|
|
6347
6360
|
parentProjectId,
|
|
6348
6361
|
JSON.stringify(mergedInput),
|
|
6349
|
-
|
|
6350
|
-
|
|
6362
|
+
jsonDataArg(mergedGroundTruth),
|
|
6363
|
+
jsonDataArg(mergedExpectedTrajectory),
|
|
6351
6364
|
jsonbArg(mergedToolMocks),
|
|
6352
6365
|
mergedUnmockedToolPolicy ?? null,
|
|
6353
6366
|
jsonbArg(mergedScorerIds),
|
|
@@ -6436,8 +6449,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6436
6449
|
parentOrganizationId,
|
|
6437
6450
|
parentProjectId,
|
|
6438
6451
|
JSON.stringify(existing.input),
|
|
6439
|
-
|
|
6440
|
-
|
|
6452
|
+
jsonDataArg(existing.groundTruth),
|
|
6453
|
+
jsonDataArg(existing.expectedTrajectory),
|
|
6441
6454
|
jsonbArg(existing.toolMocks),
|
|
6442
6455
|
existing.unmockedToolPolicy ?? null,
|
|
6443
6456
|
jsonbArg(existing.scorerIds),
|
|
@@ -6537,7 +6550,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6537
6550
|
details: { datasetId: input.datasetId }
|
|
6538
6551
|
});
|
|
6539
6552
|
const externalIds = [...new Set(input.items.flatMap((item) => item.externalId ? [item.externalId] : []))];
|
|
6540
|
-
const historyRows = externalIds.length ? await t.manyOrNone(`SELECT
|
|
6553
|
+
const historyRows = externalIds.length ? await t.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${itemsTable} WHERE "datasetId" = $1 AND "externalId" = ANY($2::text[]) ORDER BY "datasetVersion"`, [input.datasetId, externalIds]) : [];
|
|
6541
6554
|
const plan = this.planDatasetItemBatch(input.items, historyRows.map((row) => this.transformItemRowFull(row)), () => crypto.randomUUID());
|
|
6542
6555
|
const resolved = new Map([...plan.existingCurrentItems].map(([id, row]) => [id, this.datasetItemFromRow(row)]));
|
|
6543
6556
|
if (plan.inserts.length > 0) {
|
|
@@ -6554,8 +6567,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6554
6567
|
dataset.organizationId ?? null,
|
|
6555
6568
|
dataset.projectId ?? null,
|
|
6556
6569
|
JSON.stringify(item.input),
|
|
6557
|
-
|
|
6558
|
-
|
|
6570
|
+
jsonDataArg(item.groundTruth),
|
|
6571
|
+
jsonDataArg(item.expectedTrajectory),
|
|
6559
6572
|
jsonbArg(item.toolMocks),
|
|
6560
6573
|
item.unmockedToolPolicy ?? null,
|
|
6561
6574
|
jsonbArg(item.scorerIds),
|
|
@@ -6632,7 +6645,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6632
6645
|
category: ErrorCategory.USER,
|
|
6633
6646
|
details: { datasetId: input.datasetId }
|
|
6634
6647
|
});
|
|
6635
|
-
const currentItems = (await t.manyOrNone(`SELECT
|
|
6648
|
+
const currentItems = (await t.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${itemsTable} WHERE "id" = ANY($1::text[]) AND "datasetId" = $2 AND "validTo" IS NULL AND "isDeleted" = false`, [input.itemIds, input.datasetId])).map((row) => this.transformItemRow(row));
|
|
6636
6649
|
if (currentItems.length === 0) return;
|
|
6637
6650
|
const parentOrganizationId = dataset.organizationId ?? null;
|
|
6638
6651
|
const parentProjectId = dataset.projectId ?? null;
|
|
@@ -6647,8 +6660,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6647
6660
|
parentOrganizationId,
|
|
6648
6661
|
parentProjectId,
|
|
6649
6662
|
JSON.stringify(item.input),
|
|
6650
|
-
|
|
6651
|
-
|
|
6663
|
+
jsonDataArg(item.groundTruth),
|
|
6664
|
+
jsonDataArg(item.expectedTrajectory),
|
|
6652
6665
|
jsonbArg(item.toolMocks),
|
|
6653
6666
|
item.unmockedToolPolicy ?? null,
|
|
6654
6667
|
jsonbArg(item.scorerIds),
|
|
@@ -6688,8 +6701,8 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6688
6701
|
schemaName: getSchemaName$5(this.#schema)
|
|
6689
6702
|
});
|
|
6690
6703
|
let result;
|
|
6691
|
-
if (args.datasetVersion !== void 0) result = await client.oneOrNone(`SELECT
|
|
6692
|
-
else result = await client.oneOrNone(`SELECT
|
|
6704
|
+
if (args.datasetVersion !== void 0) result = await client.oneOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} WHERE "id" = $1 AND "datasetVersion" <= $2 AND ("validTo" IS NULL OR "validTo" > $2) AND "isDeleted" = false ORDER BY "datasetVersion" DESC LIMIT 1`, [args.id, args.datasetVersion]);
|
|
6705
|
+
else result = await client.oneOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} WHERE "id" = $1 AND "validTo" IS NULL AND "isDeleted" = false`, [args.id]);
|
|
6693
6706
|
return result ? this.transformItemRow(result) : null;
|
|
6694
6707
|
} catch (error) {
|
|
6695
6708
|
throw new MastraError({
|
|
@@ -6705,7 +6718,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6705
6718
|
indexName: TABLE_DATASET_ITEMS,
|
|
6706
6719
|
schemaName: getSchemaName$5(this.#schema)
|
|
6707
6720
|
});
|
|
6708
|
-
return (await this.#db.readClient.manyOrNone(`SELECT
|
|
6721
|
+
return (await this.#db.readClient.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} WHERE "datasetId" = $1 AND "datasetVersion" <= $2 AND ("validTo" IS NULL OR "validTo" > $3) AND "isDeleted" = false ORDER BY "createdAt" DESC, "id" ASC`, [
|
|
6709
6722
|
datasetId,
|
|
6710
6723
|
version,
|
|
6711
6724
|
version
|
|
@@ -6724,7 +6737,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6724
6737
|
indexName: TABLE_DATASET_ITEMS,
|
|
6725
6738
|
schemaName: getSchemaName$5(this.#schema)
|
|
6726
6739
|
});
|
|
6727
|
-
return (await this.#db.readClient.manyOrNone(`SELECT
|
|
6740
|
+
return (await this.#db.readClient.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} WHERE "id" = $1 ORDER BY "datasetVersion" DESC`, [itemId]) || []).map((row) => this.transformItemRowFull(row));
|
|
6728
6741
|
} catch (error) {
|
|
6729
6742
|
throw new MastraError({
|
|
6730
6743
|
id: createStorageErrorId("PG", "GET_ITEM_HISTORY", "FAILED"),
|
|
@@ -6796,7 +6809,7 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6796
6809
|
const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
6797
6810
|
const limitValue = perPageInput === false ? total : perPage;
|
|
6798
6811
|
return {
|
|
6799
|
-
items: (await client.manyOrNone(`SELECT
|
|
6812
|
+
items: (await client.manyOrNone(`SELECT ${ITEM_SELECT_COLUMNS} FROM ${tableName} ${whereClause} ORDER BY "${orderBy.field}" ${orderBy.direction}, "id" ASC LIMIT $${paramIndex} OFFSET $${paramIndex + 1}`, [
|
|
6800
6813
|
...queryParams,
|
|
6801
6814
|
limitValue,
|
|
6802
6815
|
offset
|
|
@@ -17246,7 +17259,8 @@ const TRACE_FIELDS = {
|
|
|
17246
17259
|
entityName: "r.\"entityName\"",
|
|
17247
17260
|
entityType: "r.\"entityType\"",
|
|
17248
17261
|
environment: "r.\"environment\"",
|
|
17249
|
-
status: TRACE_STATUS_SQL
|
|
17262
|
+
status: TRACE_STATUS_SQL,
|
|
17263
|
+
tags: "r.\"tags\""
|
|
17250
17264
|
};
|
|
17251
17265
|
const SPAN_FIELDS = {
|
|
17252
17266
|
name: "s.\"name\"",
|
|
@@ -17348,6 +17362,19 @@ function compileScalarPredicate(predicate, registry, parameterOffset, allowMetad
|
|
|
17348
17362
|
sql: `${field} IS ${predicate.operator === "exists" ? "NOT " : ""}NULL`,
|
|
17349
17363
|
values: fieldValues
|
|
17350
17364
|
};
|
|
17365
|
+
if (predicate.type === "collection") {
|
|
17366
|
+
if (predicate.operator === "includes" || predicate.operator === "notIncludes") {
|
|
17367
|
+
const contains = `${field} @> ARRAY[$${parameterOffset}]::text[]`;
|
|
17368
|
+
return {
|
|
17369
|
+
sql: predicate.operator === "includes" ? contains : `cardinality(${field}) > 0 AND NOT (${contains})`,
|
|
17370
|
+
values: [...fieldValues, predicate.value]
|
|
17371
|
+
};
|
|
17372
|
+
}
|
|
17373
|
+
return {
|
|
17374
|
+
sql: `cardinality(${field}) ${predicate.operator === "empty" ? "=" : ">"} 0`,
|
|
17375
|
+
values: fieldValues
|
|
17376
|
+
};
|
|
17377
|
+
}
|
|
17351
17378
|
if (predicate.type === "membership") {
|
|
17352
17379
|
const list = placeholders(predicate.values, parameterOffset);
|
|
17353
17380
|
if (predicate.operator === "in") return {
|
|
@@ -17401,6 +17428,7 @@ function compileFeedbackScalarPredicate(predicate, parameterOffset) {
|
|
|
17401
17428
|
};
|
|
17402
17429
|
}
|
|
17403
17430
|
if (predicate.field !== "value") return compileScalarPredicate(predicate, FEEDBACK_FIELDS, parameterOffset);
|
|
17431
|
+
if (predicate.type === "collection") throw new Error(`Unsupported trusted trace-query field: ${predicate.field}`);
|
|
17404
17432
|
if (predicate.type === "presence") {
|
|
17405
17433
|
const present = `(s."valueString" IS NOT NULL OR s."valueNumber" IS NOT NULL)`;
|
|
17406
17434
|
return {
|
|
@@ -17784,22 +17812,23 @@ LIMIT $${values.length}`,
|
|
|
17784
17812
|
}
|
|
17785
17813
|
function compilePostgresTraceQueryValues(schema, plan) {
|
|
17786
17814
|
const { ctes, values } = compilePostgresTraceScope(schema, plan, discoveryCollections(plan.predicateScope), plan.scope);
|
|
17787
|
-
let
|
|
17788
|
-
if (plan.predicateScope === "trace" && plan.path.
|
|
17815
|
+
let extracted;
|
|
17816
|
+
if (plan.predicateScope === "trace" && plan.path === "tags") extracted = `SELECT value FROM (SELECT DISTINCT r."traceId", UNNEST(r."tags") AS value FROM root_scope r) t`;
|
|
17817
|
+
else if (plan.predicateScope === "trace" && plan.path.startsWith("metadata.")) {
|
|
17789
17818
|
const keyParameter = `$${values.length + 1}`;
|
|
17790
|
-
|
|
17819
|
+
extracted = `SELECT COALESCE(
|
|
17791
17820
|
CASE WHEN jsonb_typeof(r."metadataSearch" -> ${keyParameter}) = 'string' THEN r."metadataSearch" ->> ${keyParameter} END,
|
|
17792
17821
|
CASE WHEN jsonb_typeof(r."metadataRaw" -> ${keyParameter}) = 'string' THEN NULLIF(btrim(r."metadataRaw" ->> ${keyParameter}), '') END
|
|
17793
|
-
)`;
|
|
17822
|
+
)::text AS value FROM root_scope r`;
|
|
17794
17823
|
values.push(plan.path.slice(9));
|
|
17795
|
-
} else
|
|
17824
|
+
} else extracted = `SELECT ${fieldSql(discoveryRegistry(plan.predicateScope), plan.path)}::text AS value FROM ${discoverySource(plan.predicateScope)}`;
|
|
17796
17825
|
const searchParameter = values.length + 1;
|
|
17797
17826
|
const search = plan.search ? `AND strpos(lower(value), lower($${searchParameter})) > 0` : "";
|
|
17798
17827
|
if (plan.search) values.push(plan.search);
|
|
17799
17828
|
values.push(plan.limit + 1);
|
|
17800
17829
|
return {
|
|
17801
17830
|
text: `WITH ${ctes.join(",\n")}, extracted AS (
|
|
17802
|
-
|
|
17831
|
+
${extracted}
|
|
17803
17832
|
)
|
|
17804
17833
|
SELECT value, count(*)::bigint AS count
|
|
17805
17834
|
FROM extracted
|