@mastra/pg 1.23.1-alpha.0 → 1.24.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/index.cjs +87 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +87 -15
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/experiments/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
|
@@ -7084,6 +7084,12 @@ var ExperimentsPG = class ExperimentsPG extends ExperimentsStorage {
|
|
|
7084
7084
|
name: "idx_experiment_results_org_project",
|
|
7085
7085
|
table: TABLE_EXPERIMENT_RESULTS,
|
|
7086
7086
|
columns: ["organizationId", "projectId"]
|
|
7087
|
+
},
|
|
7088
|
+
{
|
|
7089
|
+
name: "idx_experiment_results_tags_gin",
|
|
7090
|
+
table: TABLE_EXPERIMENT_RESULTS,
|
|
7091
|
+
columns: ["tags"],
|
|
7092
|
+
method: "gin"
|
|
7087
7093
|
}
|
|
7088
7094
|
];
|
|
7089
7095
|
}
|
|
@@ -7692,6 +7698,10 @@ var ExperimentsPG = class ExperimentsPG extends ExperimentsStorage {
|
|
|
7692
7698
|
conditions.push(`"status" = $${paramIndex++}`);
|
|
7693
7699
|
queryParams.push(args.status);
|
|
7694
7700
|
}
|
|
7701
|
+
for (const tag of args.tags ?? []) {
|
|
7702
|
+
conditions.push(`"tags" @> $${paramIndex++}::jsonb`);
|
|
7703
|
+
queryParams.push(JSON.stringify([tag]));
|
|
7704
|
+
}
|
|
7695
7705
|
if (args.filters) {
|
|
7696
7706
|
const { organizationId, projectId } = args.filters;
|
|
7697
7707
|
if (organizationId !== void 0) {
|
|
@@ -17057,12 +17067,32 @@ const TRACE_FIELDS = {
|
|
|
17057
17067
|
status: TRACE_STATUS_SQL
|
|
17058
17068
|
};
|
|
17059
17069
|
const SPAN_FIELDS = {
|
|
17070
|
+
name: "s.\"name\"",
|
|
17060
17071
|
spanType: "s.\"spanType\"",
|
|
17061
|
-
|
|
17072
|
+
model: "s.\"model\"",
|
|
17073
|
+
provider: "s.\"provider\"",
|
|
17074
|
+
startedAt: "s.\"startedAt\"",
|
|
17075
|
+
endedAt: "s.\"endedAt\"",
|
|
17076
|
+
durationMs: "s.\"durationMs\"",
|
|
17077
|
+
status: "s.\"status\"",
|
|
17078
|
+
error: "s.\"error\"",
|
|
17079
|
+
entityType: "s.\"entityType\"",
|
|
17080
|
+
entityId: "s.\"entityId\"",
|
|
17081
|
+
entityName: "s.\"entityName\"",
|
|
17082
|
+
entityVersionId: "s.\"entityVersionId\"",
|
|
17083
|
+
parentEntityVersionId: "s.\"parentEntityVersionId\"",
|
|
17084
|
+
rootEntityVersionId: "s.\"rootEntityVersionId\""
|
|
17062
17085
|
};
|
|
17063
17086
|
const SCORE_FIELDS = {
|
|
17064
17087
|
scorerId: "s.\"scorerId\"",
|
|
17065
|
-
|
|
17088
|
+
scorerVersion: "s.\"scorerVersion\"",
|
|
17089
|
+
scoreSource: "s.\"scoreSource\"",
|
|
17090
|
+
score: "s.\"score\"",
|
|
17091
|
+
timestamp: "s.\"timestamp\"",
|
|
17092
|
+
spanId: "s.\"spanId\"",
|
|
17093
|
+
entityVersionId: "s.\"entityVersionId\"",
|
|
17094
|
+
parentEntityVersionId: "s.\"parentEntityVersionId\"",
|
|
17095
|
+
rootEntityVersionId: "s.\"rootEntityVersionId\""
|
|
17066
17096
|
};
|
|
17067
17097
|
const TRACE_SELECT = `
|
|
17068
17098
|
r."traceId" AS "traceId",
|
|
@@ -17080,15 +17110,18 @@ function fieldSql(registry, field) {
|
|
|
17080
17110
|
if (sql === void 0) throw new Error(`Unsupported trusted trace-query field: ${field}`);
|
|
17081
17111
|
return sql;
|
|
17082
17112
|
}
|
|
17113
|
+
function isMetadataField(field) {
|
|
17114
|
+
return field.startsWith("metadata.");
|
|
17115
|
+
}
|
|
17083
17116
|
function placeholders(values, offset) {
|
|
17084
17117
|
return values.map((_, index) => `$${offset + index}`).join(", ");
|
|
17085
17118
|
}
|
|
17086
|
-
function compileScalarPredicate(predicate, registry, parameterOffset) {
|
|
17119
|
+
function compileScalarPredicate(predicate, registry, parameterOffset, allowMetadata = false) {
|
|
17087
17120
|
if (predicate.type === "boolean") {
|
|
17088
17121
|
const values = [];
|
|
17089
17122
|
return {
|
|
17090
17123
|
sql: predicate.args.map((arg) => {
|
|
17091
|
-
const compiled = compileScalarPredicate(arg, registry, parameterOffset + values.length);
|
|
17124
|
+
const compiled = compileScalarPredicate(arg, registry, parameterOffset + values.length, allowMetadata);
|
|
17092
17125
|
values.push(...compiled.values);
|
|
17093
17126
|
return `(${compiled.sql})`;
|
|
17094
17127
|
}).join(predicate.operator === "and" ? " AND " : " OR "),
|
|
@@ -17096,26 +17129,36 @@ function compileScalarPredicate(predicate, registry, parameterOffset) {
|
|
|
17096
17129
|
};
|
|
17097
17130
|
}
|
|
17098
17131
|
if (predicate.type === "not") {
|
|
17099
|
-
const compiled = compileScalarPredicate(predicate.arg, registry, parameterOffset);
|
|
17132
|
+
const compiled = compileScalarPredicate(predicate.arg, registry, parameterOffset, allowMetadata);
|
|
17100
17133
|
return {
|
|
17101
17134
|
sql: `NOT (${compiled.sql})`,
|
|
17102
17135
|
values: compiled.values
|
|
17103
17136
|
};
|
|
17104
17137
|
}
|
|
17105
|
-
|
|
17138
|
+
let field;
|
|
17139
|
+
let fieldValues = [];
|
|
17140
|
+
if (isMetadataField(predicate.field)) {
|
|
17141
|
+
if (!allowMetadata) throw new Error(`Unsupported trusted trace-query field: ${predicate.field}`);
|
|
17142
|
+
const keyParameter = `$${parameterOffset++}`;
|
|
17143
|
+
field = `COALESCE(
|
|
17144
|
+
CASE WHEN jsonb_typeof(r."metadataSearch" -> ${keyParameter}) = 'string' THEN r."metadataSearch" ->> ${keyParameter} END,
|
|
17145
|
+
CASE WHEN jsonb_typeof(r."metadataRaw" -> ${keyParameter}) = 'string' THEN NULLIF(btrim(r."metadataRaw" ->> ${keyParameter}), '') END
|
|
17146
|
+
)`;
|
|
17147
|
+
fieldValues = [predicate.field.slice(9)];
|
|
17148
|
+
} else field = fieldSql(registry, predicate.field);
|
|
17106
17149
|
if (predicate.type === "presence") return {
|
|
17107
17150
|
sql: `${field} IS ${predicate.operator === "exists" ? "NOT " : ""}NULL`,
|
|
17108
|
-
values:
|
|
17151
|
+
values: fieldValues
|
|
17109
17152
|
};
|
|
17110
17153
|
if (predicate.type === "membership") {
|
|
17111
17154
|
const list = placeholders(predicate.values, parameterOffset);
|
|
17112
17155
|
if (predicate.operator === "in") return {
|
|
17113
17156
|
sql: `${field} IS NOT NULL AND ${field} IN (${list})`,
|
|
17114
|
-
values: predicate.values
|
|
17157
|
+
values: [...fieldValues, ...predicate.values]
|
|
17115
17158
|
};
|
|
17116
17159
|
return {
|
|
17117
17160
|
sql: `${field} IS NULL OR ${field} NOT IN (${list})`,
|
|
17118
|
-
values: predicate.values
|
|
17161
|
+
values: [...fieldValues, ...predicate.values]
|
|
17119
17162
|
};
|
|
17120
17163
|
}
|
|
17121
17164
|
const parameter = `$${parameterOffset}`;
|
|
@@ -17127,17 +17170,17 @@ function compileScalarPredicate(predicate, registry, parameterOffset) {
|
|
|
17127
17170
|
};
|
|
17128
17171
|
if (predicate.operator === "eq") return {
|
|
17129
17172
|
sql: `${field} IS NOT DISTINCT FROM ${parameter}`,
|
|
17130
|
-
values: [predicate.value]
|
|
17173
|
+
values: [...fieldValues, predicate.value]
|
|
17131
17174
|
};
|
|
17132
17175
|
if (predicate.operator === "ne") return {
|
|
17133
17176
|
sql: `${field} IS DISTINCT FROM ${parameter}`,
|
|
17134
|
-
values: [predicate.value]
|
|
17177
|
+
values: [...fieldValues, predicate.value]
|
|
17135
17178
|
};
|
|
17136
17179
|
const operator = operators[predicate.operator];
|
|
17137
17180
|
if (operator === void 0) throw new Error(`Unsupported trusted trace-query operator: ${predicate.operator}`);
|
|
17138
17181
|
return {
|
|
17139
17182
|
sql: `${field} IS NOT NULL AND ${field} ${operator} ${parameter}`,
|
|
17140
|
-
values: [predicate.value]
|
|
17183
|
+
values: [...fieldValues, predicate.value]
|
|
17141
17184
|
};
|
|
17142
17185
|
}
|
|
17143
17186
|
function latestRootPredicate$1(spanTable) {
|
|
@@ -17202,7 +17245,7 @@ function compilePredicate(predicate, parameterOffset) {
|
|
|
17202
17245
|
values: compiled.values
|
|
17203
17246
|
};
|
|
17204
17247
|
}
|
|
17205
|
-
return compileScalarPredicate(predicate, TRACE_FIELDS, parameterOffset);
|
|
17248
|
+
return compileScalarPredicate(predicate, TRACE_FIELDS, parameterOffset, true);
|
|
17206
17249
|
}
|
|
17207
17250
|
function compilePostgresTraceQuery(schema, plan) {
|
|
17208
17251
|
const spanTable = qualifiedTable(schema, TABLE_SPAN_EVENTS);
|
|
@@ -17222,14 +17265,43 @@ function compilePostgresTraceQuery(schema, plan) {
|
|
|
17222
17265
|
].join("\n AND ")}
|
|
17223
17266
|
)`];
|
|
17224
17267
|
if (relationCollections.has("spans")) ctes.push(`current_spans AS MATERIALIZED (
|
|
17225
|
-
SELECT
|
|
17268
|
+
SELECT
|
|
17269
|
+
s."traceId",
|
|
17270
|
+
s."name",
|
|
17271
|
+
s."spanType",
|
|
17272
|
+
CASE WHEN jsonb_typeof(s."attributes" -> 'model') = 'string' THEN s."attributes" ->> 'model' END AS "model",
|
|
17273
|
+
CASE WHEN jsonb_typeof(s."attributes" -> 'provider') = 'string' THEN s."attributes" ->> 'provider' END AS "provider",
|
|
17274
|
+
s."startedAt",
|
|
17275
|
+
CASE WHEN s."isPending" THEN NULL ELSE s."endedAt" END AS "endedAt",
|
|
17276
|
+
CASE
|
|
17277
|
+
WHEN s."isPending" THEN NULL
|
|
17278
|
+
ELSE EXTRACT(EPOCH FROM (s."endedAt" - s."startedAt")) * 1000
|
|
17279
|
+
END AS "durationMs",
|
|
17280
|
+
CASE WHEN s."error" IS NOT NULL THEN 'error' ELSE 'success' END AS "status",
|
|
17281
|
+
s."error",
|
|
17282
|
+
s."entityType",
|
|
17283
|
+
s."entityId",
|
|
17284
|
+
s."entityName",
|
|
17285
|
+
s."entityVersionId",
|
|
17286
|
+
s."parentEntityVersionId",
|
|
17287
|
+
s."rootEntityVersionId"
|
|
17226
17288
|
FROM ${spanTable} s
|
|
17227
17289
|
WHERE s."traceId" IS NOT NULL
|
|
17228
17290
|
AND s."traceId" IN (SELECT "traceId" FROM root_scope)
|
|
17229
17291
|
AND ${latestSpanPredicate$1(spanTable)}
|
|
17230
17292
|
)`);
|
|
17231
17293
|
if (relationCollections.has("scores")) ctes.push(`current_scores AS MATERIALIZED (
|
|
17232
|
-
SELECT
|
|
17294
|
+
SELECT
|
|
17295
|
+
s."traceId",
|
|
17296
|
+
s."spanId",
|
|
17297
|
+
s."timestamp",
|
|
17298
|
+
s."scorerId",
|
|
17299
|
+
s."scorerVersion",
|
|
17300
|
+
s."scoreSource",
|
|
17301
|
+
s."score",
|
|
17302
|
+
s."entityVersionId",
|
|
17303
|
+
s."parentEntityVersionId",
|
|
17304
|
+
s."rootEntityVersionId"
|
|
17233
17305
|
FROM ${scoreTable} s
|
|
17234
17306
|
WHERE s."traceId" IS NOT NULL
|
|
17235
17307
|
AND s."traceId" IN (SELECT "traceId" FROM root_scope)
|