@mastra/libsql 1.16.0-alpha.0 → 1.16.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 +54 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-memory-overview.md +4 -4
- package/dist/index.cjs +123 -68
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +124 -69
- package/dist/index.js.map +1 -1
- package/dist/storage/db/index.d.ts +5 -0
- package/dist/storage/db/index.d.ts.map +1 -1
- package/dist/storage/domains/datasets/index.d.ts.map +1 -1
- package/package.json +10 -10
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createClient } from '@libsql/client';
|
|
2
2
|
import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
|
|
3
|
-
import { createVectorErrorId, AgentsStorage, AGENTS_SCHEMA, TABLE_AGENTS, AGENT_VERSIONS_SCHEMA, TABLE_AGENT_VERSIONS, createStorageErrorId, normalizePerPage, calculatePagination, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS, BlobStore, TABLE_SKILL_BLOBS, SKILL_BLOBS_SCHEMA, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, DatasetsStorage, DATASETS_SCHEMA, TABLE_DATASETS, DATASET_ITEMS_SCHEMA, TABLE_DATASET_ITEMS, DATASET_VERSIONS_SCHEMA, TABLE_DATASET_VERSIONS, TABLE_EXPERIMENTS, TABLE_EXPERIMENT_RESULTS, ensureDate, safelyParseJSON, ExperimentsStorage, EXPERIMENTS_SCHEMA, EXPERIMENT_RESULTS_SCHEMA, FavoritesStorage, FAVORITES_SCHEMA, TABLE_FAVORITES, TABLE_SKILLS, HarnessStorage, TABLE_HARNESS_SESSIONS, MCPClientsStorage, MCP_CLIENTS_SCHEMA, TABLE_MCP_CLIENTS, MCP_CLIENT_VERSIONS_SCHEMA, TABLE_MCP_CLIENT_VERSIONS, MCPServersStorage, MCP_SERVERS_SCHEMA, TABLE_MCP_SERVERS, MCP_SERVER_VERSIONS_SCHEMA, TABLE_MCP_SERVER_VERSIONS, MemoryStorage, TABLE_THREADS, TABLE_RESOURCES, TABLE_MESSAGES, OBSERVATIONAL_MEMORY_TABLE_SCHEMA, NotificationsStorage, TABLE_NOTIFICATIONS, ObservabilityStorage, TABLE_SPANS, SPAN_SCHEMA, listTracesArgsSchema, toTraceSpans, PromptBlocksStorage, PROMPT_BLOCKS_SCHEMA, TABLE_PROMPT_BLOCKS, PROMPT_BLOCK_VERSIONS_SCHEMA, TABLE_PROMPT_BLOCK_VERSIONS, SchedulesStorage, TABLE_SCHEDULE_TRIGGERS, TABLE_SCHEDULES, ScorerDefinitionsStorage, SCORER_DEFINITIONS_SCHEMA, TABLE_SCORER_DEFINITIONS, SCORER_DEFINITION_VERSIONS_SCHEMA, TABLE_SCORER_DEFINITION_VERSIONS, ScoresStorage, TABLE_SCORERS, SCORERS_SCHEMA, transformScoreRow, SkillsStorage, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, TABLE_SKILL_VERSIONS, ThreadStateStorage, TABLE_THREAD_STATE, THREAD_STATE_SCHEMA, ToolProviderConnectionsStorage, TOOL_PROVIDER_CONNECTIONS_SCHEMA, TABLE_TOOL_PROVIDER_CONNECTIONS, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, WorkspacesStorage, WORKSPACES_SCHEMA, TABLE_WORKSPACES, WORKSPACE_VERSIONS_SCHEMA, TABLE_WORKSPACE_VERSIONS, MastraCompositeStore, getSqlType, parseDuration, normalizeScheduleTarget, TraceStatus, mergeWorkflowStepResult } from '@mastra/core/storage';
|
|
3
|
+
import { createVectorErrorId, AgentsStorage, AGENTS_SCHEMA, TABLE_AGENTS, AGENT_VERSIONS_SCHEMA, TABLE_AGENT_VERSIONS, createStorageErrorId, normalizePerPage, calculatePagination, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS, BlobStore, TABLE_SKILL_BLOBS, SKILL_BLOBS_SCHEMA, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, DatasetsStorage, DATASETS_SCHEMA, TABLE_DATASETS, DATASET_ITEMS_SCHEMA, TABLE_DATASET_ITEMS, DATASET_VERSIONS_SCHEMA, TABLE_DATASET_VERSIONS, TABLE_EXPERIMENTS, TABLE_EXPERIMENT_RESULTS, ensureDate, safelyParseJSON, hasErrorCode, ExperimentsStorage, EXPERIMENTS_SCHEMA, EXPERIMENT_RESULTS_SCHEMA, FavoritesStorage, FAVORITES_SCHEMA, TABLE_FAVORITES, TABLE_SKILLS, HarnessStorage, TABLE_HARNESS_SESSIONS, MCPClientsStorage, MCP_CLIENTS_SCHEMA, TABLE_MCP_CLIENTS, MCP_CLIENT_VERSIONS_SCHEMA, TABLE_MCP_CLIENT_VERSIONS, MCPServersStorage, MCP_SERVERS_SCHEMA, TABLE_MCP_SERVERS, MCP_SERVER_VERSIONS_SCHEMA, TABLE_MCP_SERVER_VERSIONS, MemoryStorage, TABLE_THREADS, TABLE_RESOURCES, TABLE_MESSAGES, OBSERVATIONAL_MEMORY_TABLE_SCHEMA, NotificationsStorage, TABLE_NOTIFICATIONS, ObservabilityStorage, TABLE_SPANS, SPAN_SCHEMA, listTracesArgsSchema, toTraceSpans, PromptBlocksStorage, PROMPT_BLOCKS_SCHEMA, TABLE_PROMPT_BLOCKS, PROMPT_BLOCK_VERSIONS_SCHEMA, TABLE_PROMPT_BLOCK_VERSIONS, SchedulesStorage, TABLE_SCHEDULE_TRIGGERS, TABLE_SCHEDULES, ScorerDefinitionsStorage, SCORER_DEFINITIONS_SCHEMA, TABLE_SCORER_DEFINITIONS, SCORER_DEFINITION_VERSIONS_SCHEMA, TABLE_SCORER_DEFINITION_VERSIONS, ScoresStorage, TABLE_SCORERS, SCORERS_SCHEMA, transformScoreRow, SkillsStorage, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, TABLE_SKILL_VERSIONS, ThreadStateStorage, TABLE_THREAD_STATE, THREAD_STATE_SCHEMA, ToolProviderConnectionsStorage, TOOL_PROVIDER_CONNECTIONS_SCHEMA, TABLE_TOOL_PROVIDER_CONNECTIONS, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, WorkspacesStorage, WORKSPACES_SCHEMA, TABLE_WORKSPACES, WORKSPACE_VERSIONS_SCHEMA, TABLE_WORKSPACE_VERSIONS, MastraCompositeStore, getSqlType, parseDuration, normalizeScheduleTarget, TraceStatus, mergeWorkflowStepResult } from '@mastra/core/storage';
|
|
4
4
|
import { parseSqlIdentifier, parseFieldKey } from '@mastra/core/utils';
|
|
5
5
|
import { MastraVector, validateTopK, validateUpsertInput } from '@mastra/core/vector';
|
|
6
6
|
import { BaseFilterTranslator } from '@mastra/core/vector/filter';
|
|
@@ -1595,6 +1595,19 @@ var LibSQLDB = class extends MastraBase {
|
|
|
1595
1595
|
insert(args) {
|
|
1596
1596
|
return this.executeWriteOperationWithRetry(() => this.doInsert(args), `insert into table ${args.tableName}`);
|
|
1597
1597
|
}
|
|
1598
|
+
/** Inserts a record without replacing an existing primary key. */
|
|
1599
|
+
insertOnly(args) {
|
|
1600
|
+
return this.executeWriteOperationWithRetry(async () => {
|
|
1601
|
+
const filteredRecord = await this.filterRecordToKnownColumns(args.tableName, args.record);
|
|
1602
|
+
if (Object.keys(filteredRecord).length === 0) return;
|
|
1603
|
+
const statement = prepareStatement({ tableName: args.tableName, record: filteredRecord });
|
|
1604
|
+
if (!statement.sql.startsWith("INSERT OR REPLACE")) {
|
|
1605
|
+
throw new Error(`Unexpected insert statement generated for table ${args.tableName}`);
|
|
1606
|
+
}
|
|
1607
|
+
statement.sql = statement.sql.replace("INSERT OR REPLACE", "INSERT");
|
|
1608
|
+
await withClientWriteLock(this.client, () => this.client.execute(statement));
|
|
1609
|
+
}, `insert into table ${args.tableName}`);
|
|
1610
|
+
}
|
|
1598
1611
|
/**
|
|
1599
1612
|
* Internal update implementation without retry logic.
|
|
1600
1613
|
*/
|
|
@@ -3904,6 +3917,7 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
3904
3917
|
await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "organizationId", "TEXT");
|
|
3905
3918
|
await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "projectId", "TEXT");
|
|
3906
3919
|
await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "toolMocks", "TEXT");
|
|
3920
|
+
await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "externalId", "TEXT");
|
|
3907
3921
|
await this.#client.batch(
|
|
3908
3922
|
[
|
|
3909
3923
|
{
|
|
@@ -3914,6 +3928,10 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
3914
3928
|
sql: `CREATE INDEX IF NOT EXISTS idx_dataset_items_dataset_version ON "${TABLE_DATASET_ITEMS}" ("datasetId", "datasetVersion")`,
|
|
3915
3929
|
args: []
|
|
3916
3930
|
},
|
|
3931
|
+
{
|
|
3932
|
+
sql: `CREATE INDEX IF NOT EXISTS idx_dataset_items_dataset_externalid_version ON "${TABLE_DATASET_ITEMS}" ("datasetId", "externalId", "datasetVersion")`,
|
|
3933
|
+
args: []
|
|
3934
|
+
},
|
|
3917
3935
|
{
|
|
3918
3936
|
sql: `CREATE INDEX IF NOT EXISTS idx_dataset_items_dataset_validto_deleted ON "${TABLE_DATASET_ITEMS}" ("datasetId", "validTo", "isDeleted")`,
|
|
3919
3937
|
args: []
|
|
@@ -3993,6 +4011,7 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
3993
4011
|
id: row.id,
|
|
3994
4012
|
datasetId: row.datasetId,
|
|
3995
4013
|
datasetVersion: row.datasetVersion,
|
|
4014
|
+
externalId: row.externalId ?? null,
|
|
3996
4015
|
organizationId: row.organizationId ?? null,
|
|
3997
4016
|
projectId: row.projectId ?? null,
|
|
3998
4017
|
input: safelyParseJSON(row.input),
|
|
@@ -4011,6 +4030,7 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4011
4030
|
id: row.id,
|
|
4012
4031
|
datasetId: row.datasetId,
|
|
4013
4032
|
datasetVersion: row.datasetVersion,
|
|
4033
|
+
externalId: row.externalId ?? null,
|
|
4014
4034
|
organizationId: row.organizationId ?? null,
|
|
4015
4035
|
projectId: row.projectId ?? null,
|
|
4016
4036
|
validTo: row.validTo,
|
|
@@ -4037,10 +4057,11 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4037
4057
|
// --- Dataset CRUD ---
|
|
4038
4058
|
async createDataset(input) {
|
|
4039
4059
|
try {
|
|
4040
|
-
const id = crypto.randomUUID();
|
|
4060
|
+
const id = input.id ?? crypto.randomUUID();
|
|
4061
|
+
if (input.id !== void 0) this.validateCallerDefinedDatasetId(input.id);
|
|
4041
4062
|
const now = /* @__PURE__ */ new Date();
|
|
4042
4063
|
const nowIso = now.toISOString();
|
|
4043
|
-
await this.#db.
|
|
4064
|
+
await this.#db.insertOnly({
|
|
4044
4065
|
tableName: TABLE_DATASETS,
|
|
4045
4066
|
record: {
|
|
4046
4067
|
id,
|
|
@@ -4082,6 +4103,11 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4082
4103
|
updatedAt: now
|
|
4083
4104
|
};
|
|
4084
4105
|
} catch (error) {
|
|
4106
|
+
if (input.id !== void 0 && hasErrorCode(error, /* @__PURE__ */ new Set(["SQLITE_CONSTRAINT", "SQLITE_CONSTRAINT_PRIMARYKEY", "SQLITE_CONSTRAINT_UNIQUE"]))) {
|
|
4107
|
+
const existing = await this.getDatasetById({ id: input.id });
|
|
4108
|
+
if (existing) return this.resolveExistingDataset(existing, { ...input, id: input.id });
|
|
4109
|
+
}
|
|
4110
|
+
if (error instanceof MastraError) throw error;
|
|
4085
4111
|
throw new MastraError(
|
|
4086
4112
|
{
|
|
4087
4113
|
id: createStorageErrorId("LIBSQL", "CREATE_DATASET", "FAILED"),
|
|
@@ -4327,11 +4353,12 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4327
4353
|
args: [args.datasetId]
|
|
4328
4354
|
},
|
|
4329
4355
|
{
|
|
4330
|
-
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4356
|
+
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, externalId, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?, (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4331
4357
|
args: [
|
|
4332
4358
|
id,
|
|
4333
4359
|
args.datasetId,
|
|
4334
4360
|
args.datasetId,
|
|
4361
|
+
args.externalId ?? null,
|
|
4335
4362
|
args.datasetId,
|
|
4336
4363
|
args.datasetId,
|
|
4337
4364
|
jsonbArg(args.input),
|
|
@@ -4357,6 +4384,7 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4357
4384
|
id,
|
|
4358
4385
|
datasetId: args.datasetId,
|
|
4359
4386
|
datasetVersion: newVersion,
|
|
4387
|
+
externalId: args.externalId ?? null,
|
|
4360
4388
|
organizationId: dataset?.organizationId ?? null,
|
|
4361
4389
|
projectId: dataset?.projectId ?? null,
|
|
4362
4390
|
input: args.input,
|
|
@@ -4422,11 +4450,12 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4422
4450
|
args: [args.datasetId, args.id]
|
|
4423
4451
|
},
|
|
4424
4452
|
{
|
|
4425
|
-
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4453
|
+
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, externalId, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?, (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4426
4454
|
args: [
|
|
4427
4455
|
args.id,
|
|
4428
4456
|
args.datasetId,
|
|
4429
4457
|
args.datasetId,
|
|
4458
|
+
existing.externalId ?? null,
|
|
4430
4459
|
args.datasetId,
|
|
4431
4460
|
args.datasetId,
|
|
4432
4461
|
jsonbArg(mergedInput),
|
|
@@ -4499,11 +4528,12 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4499
4528
|
args: [datasetId, id]
|
|
4500
4529
|
},
|
|
4501
4530
|
{
|
|
4502
|
-
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4531
|
+
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, externalId, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?, (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4503
4532
|
args: [
|
|
4504
4533
|
id,
|
|
4505
4534
|
datasetId,
|
|
4506
4535
|
datasetId,
|
|
4536
|
+
existing.externalId ?? null,
|
|
4507
4537
|
datasetId,
|
|
4508
4538
|
datasetId,
|
|
4509
4539
|
jsonbArg(existing.input),
|
|
@@ -4785,70 +4815,94 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4785
4815
|
// --- Bulk operations (SCD-2 internally) ---
|
|
4786
4816
|
async _doBatchInsertItems(input) {
|
|
4787
4817
|
try {
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4818
|
+
if (input.items.length === 0) return [];
|
|
4819
|
+
return await withClientWriteLock(this.#client, async () => {
|
|
4820
|
+
const tx = await this.#client.transaction("write");
|
|
4821
|
+
try {
|
|
4822
|
+
const datasetResult = await tx.execute({
|
|
4823
|
+
sql: `SELECT version, organizationId, projectId FROM ${TABLE_DATASETS} WHERE id = ?`,
|
|
4824
|
+
args: [input.datasetId]
|
|
4825
|
+
});
|
|
4826
|
+
const dataset = datasetResult.rows[0];
|
|
4827
|
+
if (!dataset)
|
|
4828
|
+
throw new MastraError({
|
|
4829
|
+
id: createStorageErrorId("LIBSQL", "BULK_ADD_ITEMS", "DATASET_NOT_FOUND"),
|
|
4830
|
+
domain: ErrorDomain.STORAGE,
|
|
4831
|
+
category: ErrorCategory.USER,
|
|
4832
|
+
details: { datasetId: input.datasetId }
|
|
4833
|
+
});
|
|
4834
|
+
const externalIds = [...new Set(input.items.flatMap((item) => item.externalId ? [item.externalId] : []))];
|
|
4835
|
+
const historyResult = externalIds.length ? await tx.execute({
|
|
4836
|
+
sql: `SELECT id, datasetId, datasetVersion, externalId, organizationId, projectId, validTo, isDeleted, json(input) AS input, json(groundTruth) AS groundTruth, json(expectedTrajectory) AS expectedTrajectory, json(toolMocks) AS toolMocks, json(requestContext) AS requestContext, json(metadata) AS metadata, json(source) AS source, createdAt, updatedAt FROM ${TABLE_DATASET_ITEMS} WHERE datasetId = ? AND externalId IN (${externalIds.map(() => "?").join(",")}) ORDER BY datasetVersion`,
|
|
4837
|
+
args: [input.datasetId, ...externalIds]
|
|
4838
|
+
}) : { rows: [] };
|
|
4839
|
+
const plan = this.planDatasetItemBatch(
|
|
4840
|
+
input.items,
|
|
4841
|
+
historyResult.rows.map((row) => this.transformItemRowFull(row)),
|
|
4842
|
+
() => crypto.randomUUID()
|
|
4843
|
+
);
|
|
4844
|
+
const resolved = new Map(
|
|
4845
|
+
[...plan.existingCurrentItems].map(([id, row]) => [id, this.datasetItemFromRow(row)])
|
|
4846
|
+
);
|
|
4847
|
+
if (plan.inserts.length > 0) {
|
|
4848
|
+
const newVersion = Number(dataset.version) + 1;
|
|
4849
|
+
const now = /* @__PURE__ */ new Date();
|
|
4850
|
+
const nowIso = now.toISOString();
|
|
4851
|
+
await tx.execute({
|
|
4852
|
+
sql: `UPDATE ${TABLE_DATASETS} SET version = ? WHERE id = ?`,
|
|
4853
|
+
args: [newVersion, input.datasetId]
|
|
4854
|
+
});
|
|
4855
|
+
for (const { id, item } of plan.inserts) {
|
|
4856
|
+
await tx.execute({
|
|
4857
|
+
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, externalId, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, ?, ?, ?, ?, NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4858
|
+
args: [
|
|
4859
|
+
id,
|
|
4860
|
+
input.datasetId,
|
|
4861
|
+
newVersion,
|
|
4862
|
+
item.externalId ?? null,
|
|
4863
|
+
dataset.organizationId ?? null,
|
|
4864
|
+
dataset.projectId ?? null,
|
|
4865
|
+
jsonbArg(item.input),
|
|
4866
|
+
jsonbArg(item.groundTruth),
|
|
4867
|
+
jsonbArg(item.expectedTrajectory),
|
|
4868
|
+
jsonbArg(item.toolMocks),
|
|
4869
|
+
jsonbArg(item.requestContext),
|
|
4870
|
+
jsonbArg(item.metadata),
|
|
4871
|
+
jsonbArg(item.source),
|
|
4872
|
+
nowIso,
|
|
4873
|
+
nowIso
|
|
4874
|
+
]
|
|
4875
|
+
});
|
|
4876
|
+
resolved.set(id, {
|
|
4877
|
+
id,
|
|
4878
|
+
datasetId: input.datasetId,
|
|
4879
|
+
datasetVersion: newVersion,
|
|
4880
|
+
externalId: item.externalId ?? null,
|
|
4881
|
+
organizationId: dataset.organizationId,
|
|
4882
|
+
projectId: dataset.projectId,
|
|
4883
|
+
input: item.input,
|
|
4884
|
+
groundTruth: item.groundTruth,
|
|
4885
|
+
expectedTrajectory: item.expectedTrajectory,
|
|
4886
|
+
toolMocks: item.toolMocks,
|
|
4887
|
+
requestContext: item.requestContext,
|
|
4888
|
+
metadata: item.metadata,
|
|
4889
|
+
source: item.source,
|
|
4890
|
+
createdAt: now,
|
|
4891
|
+
updatedAt: now
|
|
4892
|
+
});
|
|
4893
|
+
}
|
|
4894
|
+
await tx.execute({
|
|
4895
|
+
sql: `INSERT INTO ${TABLE_DATASET_VERSIONS} (id, datasetId, version, createdAt) VALUES (?, ?, ?, ?)`,
|
|
4896
|
+
args: [crypto.randomUUID(), input.datasetId, newVersion, nowIso]
|
|
4897
|
+
});
|
|
4898
|
+
}
|
|
4899
|
+
await tx.commit();
|
|
4900
|
+
return plan.resolvedIds.map((id) => resolved.get(id));
|
|
4901
|
+
} catch (error) {
|
|
4902
|
+
if (!tx.closed) await tx.rollback();
|
|
4903
|
+
throw error;
|
|
4804
4904
|
}
|
|
4805
|
-
];
|
|
4806
|
-
const items = [];
|
|
4807
|
-
for (const itemInput of input.items) {
|
|
4808
|
-
const id = crypto.randomUUID();
|
|
4809
|
-
items.push({ id, input: itemInput });
|
|
4810
|
-
statements.push({
|
|
4811
|
-
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?, ?, NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4812
|
-
args: [
|
|
4813
|
-
id,
|
|
4814
|
-
input.datasetId,
|
|
4815
|
-
input.datasetId,
|
|
4816
|
-
dataset.organizationId ?? null,
|
|
4817
|
-
dataset.projectId ?? null,
|
|
4818
|
-
jsonbArg(itemInput.input),
|
|
4819
|
-
jsonbArg(itemInput.groundTruth),
|
|
4820
|
-
jsonbArg(itemInput.expectedTrajectory),
|
|
4821
|
-
jsonbArg(itemInput.toolMocks),
|
|
4822
|
-
jsonbArg(itemInput.requestContext),
|
|
4823
|
-
jsonbArg(itemInput.metadata),
|
|
4824
|
-
jsonbArg(itemInput.source),
|
|
4825
|
-
nowIso,
|
|
4826
|
-
nowIso
|
|
4827
|
-
]
|
|
4828
|
-
});
|
|
4829
|
-
}
|
|
4830
|
-
statements.push({
|
|
4831
|
-
sql: `INSERT INTO ${TABLE_DATASET_VERSIONS} (id, datasetId, version, createdAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?)`,
|
|
4832
|
-
args: [versionId, input.datasetId, input.datasetId, nowIso]
|
|
4833
4905
|
});
|
|
4834
|
-
const results = await this.#client.batch(statements, "write");
|
|
4835
|
-
const newVersion = Number(results[0].rows[0].version);
|
|
4836
|
-
return items.map(({ id, input: itemInput }) => ({
|
|
4837
|
-
id,
|
|
4838
|
-
datasetId: input.datasetId,
|
|
4839
|
-
datasetVersion: newVersion,
|
|
4840
|
-
organizationId: dataset.organizationId ?? null,
|
|
4841
|
-
projectId: dataset.projectId ?? null,
|
|
4842
|
-
input: itemInput.input,
|
|
4843
|
-
groundTruth: itemInput.groundTruth,
|
|
4844
|
-
expectedTrajectory: itemInput.expectedTrajectory,
|
|
4845
|
-
toolMocks: itemInput.toolMocks,
|
|
4846
|
-
requestContext: itemInput.requestContext,
|
|
4847
|
-
metadata: itemInput.metadata,
|
|
4848
|
-
source: itemInput.source,
|
|
4849
|
-
createdAt: now,
|
|
4850
|
-
updatedAt: now
|
|
4851
|
-
}));
|
|
4852
4906
|
} catch (error) {
|
|
4853
4907
|
if (error instanceof MastraError) throw error;
|
|
4854
4908
|
throw new MastraError(
|
|
@@ -4894,11 +4948,12 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
4894
4948
|
args: [input.datasetId, item.id]
|
|
4895
4949
|
});
|
|
4896
4950
|
statements.push({
|
|
4897
|
-
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?, ?, NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4951
|
+
sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, externalId, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?, ?, ?, NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
4898
4952
|
args: [
|
|
4899
4953
|
item.id,
|
|
4900
4954
|
input.datasetId,
|
|
4901
4955
|
input.datasetId,
|
|
4956
|
+
item.externalId ?? null,
|
|
4902
4957
|
dataset.organizationId ?? null,
|
|
4903
4958
|
dataset.projectId ?? null,
|
|
4904
4959
|
jsonbArg(item.input),
|