@mastra/spanner 1.5.0 → 1.6.0-alpha.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 +47 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +56 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +56 -2
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/experiments/index.d.ts.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# @mastra/spanner
|
|
2
2
|
|
|
3
|
+
## 1.6.0-alpha.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added experiment provenance and grouping support to the LibSQL, MongoDB, MySQL, PostgreSQL, and Spanner storage adapters. These fields remain available for later grouping and filtering. ([#20645](https://github.com/mastra-ai/mastra/pull/20645))
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { PostgresStore } from '@mastra/pg';
|
|
11
|
+
|
|
12
|
+
const storage = new PostgresStore({
|
|
13
|
+
id: 'postgres-storage',
|
|
14
|
+
connectionString: process.env.DATABASE_URL!,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
await dataset.startExperiment({
|
|
18
|
+
task,
|
|
19
|
+
scorers,
|
|
20
|
+
provenance: { source: 'github', sourceVersion: 'abc123' },
|
|
21
|
+
grouping: { experimentSetId: 'benchmark-1', variantId: 'candidate', trialIndex: 0 },
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- Memory list reads now surface database errors instead of silently returning empty results. ([#17910](https://github.com/mastra-ai/mastra/pull/17910))
|
|
26
|
+
|
|
27
|
+
Previously, the paginated memory reads (`listThreads`, `listMessages`, `listMessagesByResourceId`, and `listMessagesById`) caught backend failures, logged them, and returned an empty payload like `{ threads: [], total: 0, hasMore: false }`. A transient outage (locked table, dropped connection) was therefore indistinguishable from a genuinely empty result, so an agent reading conversation history during a brief failure would treat it as "no history" and could overwrite real state. These methods now re-throw the failure as a `MastraError`. Validation (USER) errors and genuinely empty results are unchanged.
|
|
28
|
+
|
|
29
|
+
**Behavior change**
|
|
30
|
+
|
|
31
|
+
Callers that previously received an empty result on a backend failure will now receive a thrown `MastraError`. If you call these read methods directly (rather than through an agent, which already surfaces errors), wrap them so a transient outage doesn't crash the caller:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
try {
|
|
35
|
+
const { threads } = await storage.listThreads({ resourceId });
|
|
36
|
+
// ...use threads
|
|
37
|
+
} catch (error) {
|
|
38
|
+
// a real backend failure. Decide whether to retry, surface, or degrade.
|
|
39
|
+
// An empty thread list no longer hides here; it only means "no threads".
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Patch Changes
|
|
44
|
+
|
|
45
|
+
- dependencies updates: ([#20409](https://github.com/mastra-ai/mastra/pull/20409))
|
|
46
|
+
- Updated dependency [`@google-cloud/spanner@^8.10.0` ↗︎](https://www.npmjs.com/package/@google-cloud/spanner/v/8.10.0) (from `^8.9.0`, in `dependencies`)
|
|
47
|
+
- Updated dependencies [[`e7109ee`](https://github.com/mastra-ai/mastra/commit/e7109ee6f731bacc79c885906f3c7dca8d8f013a), [`772c0c8`](https://github.com/mastra-ai/mastra/commit/772c0c897cec383258de2e6178147f8014767c7b), [`578bf2e`](https://github.com/mastra-ai/mastra/commit/578bf2e6a88e9d5b8bf502204e15a95dfbb679ae), [`06b2d87`](https://github.com/mastra-ai/mastra/commit/06b2d87e63bcdd0ed59215c6789692b9b12de376), [`ac01d63`](https://github.com/mastra-ai/mastra/commit/ac01d6355974aec73fdb8781449ed12bac582094), [`a810a05`](https://github.com/mastra-ai/mastra/commit/a810a058f62ad407cfc1701e0be36ae91145d7cf), [`f8da216`](https://github.com/mastra-ai/mastra/commit/f8da21633e7eb0e31c9ce0fc30567870d19416d3), [`6104347`](https://github.com/mastra-ai/mastra/commit/61043473ba6bfd0a25156824e853e13165562e6c), [`45bfb88`](https://github.com/mastra-ai/mastra/commit/45bfb88fd52f1dd3be20e2a38905777c96499c90), [`e3b9307`](https://github.com/mastra-ai/mastra/commit/e3b9307098daefbfae2a52ae2ef51bc9fc701190), [`d6834c5`](https://github.com/mastra-ai/mastra/commit/d6834c5a7866b16734d23900163c2414ed70d791), [`c52d346`](https://github.com/mastra-ai/mastra/commit/c52d3462ec831a5d95926ecd3d3373f5928ad2e5), [`0023e79`](https://github.com/mastra-ai/mastra/commit/0023e7919431078280abd11c89d1edeae35fcc69), [`c2ad51e`](https://github.com/mastra-ai/mastra/commit/c2ad51e2467f901eecba8c9f4a45e22a50bd7c18), [`3dc97ea`](https://github.com/mastra-ai/mastra/commit/3dc97ea415fad353b48a13095fad1835933cc12a), [`3d01cd3`](https://github.com/mastra-ai/mastra/commit/3d01cd387321b6f9c5cac31d487c84bf51b19c78), [`7bf3086`](https://github.com/mastra-ai/mastra/commit/7bf308663f0115ca74ad20554ade740f06640859), [`a8dd139`](https://github.com/mastra-ai/mastra/commit/a8dd1391a9fe9a6632c25809ef236980afa9a020), [`e5786be`](https://github.com/mastra-ai/mastra/commit/e5786be02bb903073082bd9d6da880ebaacc343f), [`2093fbd`](https://github.com/mastra-ai/mastra/commit/2093fbd53bb744bae19ec89f6d73db9a66fbe8a7), [`e7a5da4`](https://github.com/mastra-ai/mastra/commit/e7a5da4ef8e4dd452d2f232961b4e682a85ffe43), [`7b4393d`](https://github.com/mastra-ai/mastra/commit/7b4393d557411fdcf07b0e30e5acaf7cc85154ae)]:
|
|
48
|
+
- @mastra/core@1.58.0-alpha.1
|
|
49
|
+
|
|
3
50
|
## 1.5.0
|
|
4
51
|
|
|
5
52
|
### Minor Changes
|
package/dist/docs/SKILL.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -3971,6 +3971,12 @@ function rowToExperiment(row) {
|
|
|
3971
3971
|
name: t.name ?? void 0,
|
|
3972
3972
|
description: t.description ?? void 0,
|
|
3973
3973
|
metadata: t.metadata ?? void 0,
|
|
3974
|
+
provenance: t.provenance ?? null,
|
|
3975
|
+
runnerAttestation: t.runnerAttestation ?? null,
|
|
3976
|
+
experimentSetId: t.experimentSetId ?? null,
|
|
3977
|
+
comparisonId: t.comparisonId ?? null,
|
|
3978
|
+
variantId: t.variantId ?? null,
|
|
3979
|
+
trialIndex: t.trialIndex == null ? null : Number(t.trialIndex),
|
|
3974
3980
|
datasetId: t.datasetId ?? null,
|
|
3975
3981
|
datasetVersion: t.datasetVersion == null ? null : Number(t.datasetVersion),
|
|
3976
3982
|
organizationId: t.organizationId ?? null,
|
|
@@ -4051,7 +4057,17 @@ var ExperimentsSpanner = class ExperimentsSpanner extends _mastra_core_storage.E
|
|
|
4051
4057
|
await this.db.alterTable({
|
|
4052
4058
|
tableName: _mastra_core_storage.TABLE_EXPERIMENTS,
|
|
4053
4059
|
schema: _mastra_core_storage.TABLE_SCHEMAS[_mastra_core_storage.TABLE_EXPERIMENTS],
|
|
4054
|
-
ifNotExists: [
|
|
4060
|
+
ifNotExists: [
|
|
4061
|
+
"agentVersion",
|
|
4062
|
+
"organizationId",
|
|
4063
|
+
"projectId",
|
|
4064
|
+
"provenance",
|
|
4065
|
+
"runnerAttestation",
|
|
4066
|
+
"experimentSetId",
|
|
4067
|
+
"comparisonId",
|
|
4068
|
+
"variantId",
|
|
4069
|
+
"trialIndex"
|
|
4070
|
+
]
|
|
4055
4071
|
});
|
|
4056
4072
|
await this.db.alterTable({
|
|
4057
4073
|
tableName: _mastra_core_storage.TABLE_EXPERIMENT_RESULTS,
|
|
@@ -4072,6 +4088,16 @@ var ExperimentsSpanner = class ExperimentsSpanner extends _mastra_core_storage.E
|
|
|
4072
4088
|
table: _mastra_core_storage.TABLE_EXPERIMENTS,
|
|
4073
4089
|
columns: ["datasetId"]
|
|
4074
4090
|
},
|
|
4091
|
+
{
|
|
4092
|
+
name: "mastra_experiments_grouping_idx",
|
|
4093
|
+
table: _mastra_core_storage.TABLE_EXPERIMENTS,
|
|
4094
|
+
columns: [
|
|
4095
|
+
"experimentSetId",
|
|
4096
|
+
"comparisonId",
|
|
4097
|
+
"variantId",
|
|
4098
|
+
"trialIndex"
|
|
4099
|
+
]
|
|
4100
|
+
},
|
|
4075
4101
|
{
|
|
4076
4102
|
name: "mastra_experiment_results_experimentid_idx",
|
|
4077
4103
|
table: _mastra_core_storage.TABLE_EXPERIMENT_RESULTS,
|
|
@@ -4116,6 +4142,12 @@ var ExperimentsSpanner = class ExperimentsSpanner extends _mastra_core_storage.E
|
|
|
4116
4142
|
name: input.name ?? void 0,
|
|
4117
4143
|
description: input.description ?? void 0,
|
|
4118
4144
|
metadata: input.metadata ?? void 0,
|
|
4145
|
+
provenance: input.provenance ?? null,
|
|
4146
|
+
runnerAttestation: input.runnerAttestation ?? null,
|
|
4147
|
+
experimentSetId: input.experimentSetId ?? null,
|
|
4148
|
+
comparisonId: input.comparisonId ?? null,
|
|
4149
|
+
variantId: input.variantId ?? null,
|
|
4150
|
+
trialIndex: input.trialIndex ?? null,
|
|
4119
4151
|
datasetId: input.datasetId ?? null,
|
|
4120
4152
|
datasetVersion: input.datasetVersion ?? null,
|
|
4121
4153
|
organizationId: input.organizationId ?? null,
|
|
@@ -4140,6 +4172,12 @@ var ExperimentsSpanner = class ExperimentsSpanner extends _mastra_core_storage.E
|
|
|
4140
4172
|
name: experiment.name ?? null,
|
|
4141
4173
|
description: experiment.description ?? null,
|
|
4142
4174
|
metadata: experiment.metadata ?? null,
|
|
4175
|
+
provenance: experiment.provenance,
|
|
4176
|
+
runnerAttestation: experiment.runnerAttestation,
|
|
4177
|
+
experimentSetId: experiment.experimentSetId,
|
|
4178
|
+
comparisonId: experiment.comparisonId,
|
|
4179
|
+
variantId: experiment.variantId,
|
|
4180
|
+
trialIndex: experiment.trialIndex,
|
|
4143
4181
|
datasetId: experiment.datasetId,
|
|
4144
4182
|
datasetVersion: experiment.datasetVersion,
|
|
4145
4183
|
organizationId: experiment.organizationId,
|
|
@@ -4274,6 +4312,22 @@ var ExperimentsSpanner = class ExperimentsSpanner extends _mastra_core_storage.E
|
|
|
4274
4312
|
conditions.push(`${quoteIdent("status", "column name")} = @status`);
|
|
4275
4313
|
params.status = args.status;
|
|
4276
4314
|
}
|
|
4315
|
+
if (args.experimentSetId !== void 0) {
|
|
4316
|
+
conditions.push(`${quoteIdent("experimentSetId", "column name")} = @experimentSetId`);
|
|
4317
|
+
params.experimentSetId = args.experimentSetId;
|
|
4318
|
+
}
|
|
4319
|
+
if (args.comparisonId !== void 0) {
|
|
4320
|
+
conditions.push(`${quoteIdent("comparisonId", "column name")} = @comparisonId`);
|
|
4321
|
+
params.comparisonId = args.comparisonId;
|
|
4322
|
+
}
|
|
4323
|
+
if (args.variantId !== void 0) {
|
|
4324
|
+
conditions.push(`${quoteIdent("variantId", "column name")} = @variantId`);
|
|
4325
|
+
params.variantId = args.variantId;
|
|
4326
|
+
}
|
|
4327
|
+
if (args.trialIndex !== void 0) {
|
|
4328
|
+
conditions.push(`${quoteIdent("trialIndex", "column name")} = @trialIndex`);
|
|
4329
|
+
params.trialIndex = args.trialIndex;
|
|
4330
|
+
}
|
|
4277
4331
|
if (args.filters) {
|
|
4278
4332
|
const { organizationId, projectId } = args.filters;
|
|
4279
4333
|
if (organizationId !== void 0) {
|
|
@@ -6681,7 +6735,7 @@ var MemorySpanner = class MemorySpanner extends _mastra_core_storage.MemoryStora
|
|
|
6681
6735
|
}, error);
|
|
6682
6736
|
this.logger?.error?.(mastraError.toString());
|
|
6683
6737
|
this.logger?.trackException?.(mastraError);
|
|
6684
|
-
|
|
6738
|
+
throw mastraError;
|
|
6685
6739
|
}
|
|
6686
6740
|
}
|
|
6687
6741
|
/** Resolves the `include` clause: pinned messages plus their before/after windows. */
|