@llmops/core 0.3.3 → 0.4.0-beta.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/{bun-sqlite-dialect-B5odtOFX.cjs → bun-sqlite-dialect-BOVsPUU1.cjs} +1 -1
- package/dist/db/index.cjs +10 -2
- package/dist/db/index.d.cts +2 -2
- package/dist/db/index.d.mts +2 -2
- package/dist/db/index.mjs +2 -2
- package/dist/{db-CoCzHm6p.mjs → db-Dp8PJzcN.mjs} +412 -4
- package/dist/{db-BF1a1duC.cjs → db-Sv8HPCfx.cjs} +462 -6
- package/dist/{index-yuxB_8bc.d.mts → index-Bxn6FEh6.d.cts} +1188 -113
- package/dist/{index-BP_lIJcD.d.cts → index-DSpTOghh.d.mts} +1188 -113
- package/dist/index.cjs +524 -4
- package/dist/index.d.cts +1098 -14
- package/dist/index.d.mts +1098 -14
- package/dist/index.mjs +514 -5
- package/dist/{neon-dialect-BQsMY2pg.cjs → neon-dialect-CN5kb3Gw.cjs} +1 -1
- package/dist/{neon-dialect-DSmsjY8m.cjs → neon-dialect-DIrx-7Rh.cjs} +1 -1
- package/dist/{node-sqlite-dialect-BGjMUONa.cjs → node-sqlite-dialect-BeXYiIVe.cjs} +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_db = require('./db-
|
|
2
|
-
const require_neon_dialect = require('./neon-dialect-
|
|
1
|
+
const require_db = require('./db-Sv8HPCfx.cjs');
|
|
2
|
+
const require_neon_dialect = require('./neon-dialect-CN5kb3Gw.cjs');
|
|
3
3
|
let __llmops_gateway = require("@llmops/gateway");
|
|
4
4
|
__llmops_gateway = require_db.__toESM(__llmops_gateway);
|
|
5
5
|
let kysely = require("kysely");
|
|
@@ -1055,7 +1055,8 @@ const createConfigDataLayer = (db) => {
|
|
|
1055
1055
|
...row,
|
|
1056
1056
|
provider: null,
|
|
1057
1057
|
modelName: null,
|
|
1058
|
-
jsonData: null
|
|
1058
|
+
jsonData: null,
|
|
1059
|
+
variantVersionId: null
|
|
1059
1060
|
}));
|
|
1060
1061
|
const latestVersions = await Promise.all(variantIds.map((variantId) => db.selectFrom("variant_versions").selectAll().where("variantId", "=", variantId).orderBy("version", "desc").limit(1).executeTakeFirst()));
|
|
1061
1062
|
const versionMap = new Map(latestVersions.filter((v) => v !== void 0).map((v) => [v.variantId, v]));
|
|
@@ -1065,7 +1066,8 @@ const createConfigDataLayer = (db) => {
|
|
|
1065
1066
|
...row,
|
|
1066
1067
|
provider: version?.provider ?? null,
|
|
1067
1068
|
modelName: version?.modelName ?? null,
|
|
1068
|
-
jsonData: version?.jsonData ?? null
|
|
1069
|
+
jsonData: version?.jsonData ?? null,
|
|
1070
|
+
variantVersionId: version?.id ?? null
|
|
1069
1071
|
};
|
|
1070
1072
|
});
|
|
1071
1073
|
}
|
|
@@ -1303,6 +1305,215 @@ const createConfigVariantDataLayer = (db) => {
|
|
|
1303
1305
|
};
|
|
1304
1306
|
};
|
|
1305
1307
|
|
|
1308
|
+
//#endregion
|
|
1309
|
+
//#region src/datalayer/datasets.ts
|
|
1310
|
+
const createDataset = require_db.zod_default.object({
|
|
1311
|
+
name: require_db.zod_default.string(),
|
|
1312
|
+
description: require_db.zod_default.string().nullable().optional()
|
|
1313
|
+
});
|
|
1314
|
+
const updateDataset = require_db.zod_default.object({
|
|
1315
|
+
datasetId: require_db.zod_default.string().uuid(),
|
|
1316
|
+
name: require_db.zod_default.string().optional(),
|
|
1317
|
+
description: require_db.zod_default.string().nullable().optional()
|
|
1318
|
+
});
|
|
1319
|
+
const getDatasetById = require_db.zod_default.object({ datasetId: require_db.zod_default.string().uuid() });
|
|
1320
|
+
const deleteDataset = require_db.zod_default.object({ datasetId: require_db.zod_default.string().uuid() });
|
|
1321
|
+
const listDatasets = require_db.zod_default.object({
|
|
1322
|
+
limit: require_db.zod_default.number().int().positive().optional(),
|
|
1323
|
+
offset: require_db.zod_default.number().int().nonnegative().optional()
|
|
1324
|
+
});
|
|
1325
|
+
const createRecord = require_db.zod_default.object({
|
|
1326
|
+
datasetId: require_db.zod_default.string().uuid(),
|
|
1327
|
+
input: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()),
|
|
1328
|
+
expected: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()).nullable().optional(),
|
|
1329
|
+
metadata: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()).optional()
|
|
1330
|
+
});
|
|
1331
|
+
const updateRecord = require_db.zod_default.object({
|
|
1332
|
+
recordId: require_db.zod_default.string().uuid(),
|
|
1333
|
+
input: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()).optional(),
|
|
1334
|
+
expected: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()).nullable().optional(),
|
|
1335
|
+
metadata: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()).optional()
|
|
1336
|
+
});
|
|
1337
|
+
const deleteRecord = require_db.zod_default.object({ recordId: require_db.zod_default.string().uuid() });
|
|
1338
|
+
const listRecords = require_db.zod_default.object({
|
|
1339
|
+
datasetId: require_db.zod_default.string().uuid(),
|
|
1340
|
+
limit: require_db.zod_default.number().int().positive().optional(),
|
|
1341
|
+
offset: require_db.zod_default.number().int().nonnegative().optional()
|
|
1342
|
+
});
|
|
1343
|
+
const createVersion = require_db.zod_default.object({
|
|
1344
|
+
datasetId: require_db.zod_default.string().uuid(),
|
|
1345
|
+
name: require_db.zod_default.string().nullable().optional(),
|
|
1346
|
+
description: require_db.zod_default.string().nullable().optional()
|
|
1347
|
+
});
|
|
1348
|
+
const getVersionById = require_db.zod_default.object({ versionId: require_db.zod_default.string().uuid() });
|
|
1349
|
+
const listVersions = require_db.zod_default.object({
|
|
1350
|
+
datasetId: require_db.zod_default.string().uuid(),
|
|
1351
|
+
limit: require_db.zod_default.number().int().positive().optional(),
|
|
1352
|
+
offset: require_db.zod_default.number().int().nonnegative().optional()
|
|
1353
|
+
});
|
|
1354
|
+
const getVersionRecords = require_db.zod_default.object({
|
|
1355
|
+
versionId: require_db.zod_default.string().uuid(),
|
|
1356
|
+
limit: require_db.zod_default.number().int().positive().optional(),
|
|
1357
|
+
offset: require_db.zod_default.number().int().nonnegative().optional()
|
|
1358
|
+
});
|
|
1359
|
+
const createDatasetsDataLayer = (db) => {
|
|
1360
|
+
return {
|
|
1361
|
+
createDataset: async (params) => {
|
|
1362
|
+
const value = await createDataset.safeParseAsync(params);
|
|
1363
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1364
|
+
const { name, description } = value.data;
|
|
1365
|
+
return db.insertInto("datasets").values({
|
|
1366
|
+
id: (0, node_crypto.randomUUID)(),
|
|
1367
|
+
name,
|
|
1368
|
+
description: description ?? null,
|
|
1369
|
+
recordCount: 0,
|
|
1370
|
+
latestVersionNumber: 1,
|
|
1371
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1372
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1373
|
+
}).returningAll().executeTakeFirst();
|
|
1374
|
+
},
|
|
1375
|
+
updateDataset: async (params) => {
|
|
1376
|
+
const value = await updateDataset.safeParseAsync(params);
|
|
1377
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1378
|
+
const { datasetId, name, description } = value.data;
|
|
1379
|
+
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
1380
|
+
if (name !== void 0) updateData.name = name;
|
|
1381
|
+
if (description !== void 0) updateData.description = description;
|
|
1382
|
+
return db.updateTable("datasets").set(updateData).where("id", "=", datasetId).returningAll().executeTakeFirst();
|
|
1383
|
+
},
|
|
1384
|
+
getDatasetById: async (params) => {
|
|
1385
|
+
const value = await getDatasetById.safeParseAsync(params);
|
|
1386
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1387
|
+
const { datasetId } = value.data;
|
|
1388
|
+
return db.selectFrom("datasets").selectAll().where("id", "=", datasetId).executeTakeFirst();
|
|
1389
|
+
},
|
|
1390
|
+
deleteDataset: async (params) => {
|
|
1391
|
+
const value = await deleteDataset.safeParseAsync(params);
|
|
1392
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1393
|
+
const { datasetId } = value.data;
|
|
1394
|
+
await db.deleteFrom("dataset_version_records").where("datasetVersionId", "in", db.selectFrom("dataset_versions").select("id").where("datasetId", "=", datasetId)).execute();
|
|
1395
|
+
await db.deleteFrom("dataset_versions").where("datasetId", "=", datasetId).execute();
|
|
1396
|
+
await db.deleteFrom("dataset_records").where("datasetId", "=", datasetId).execute();
|
|
1397
|
+
return db.deleteFrom("datasets").where("id", "=", datasetId).returningAll().executeTakeFirst();
|
|
1398
|
+
},
|
|
1399
|
+
listDatasets: async (params) => {
|
|
1400
|
+
const value = await listDatasets.safeParseAsync(params || {});
|
|
1401
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1402
|
+
const { limit = 100, offset = 0 } = value.data;
|
|
1403
|
+
return db.selectFrom("datasets").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1404
|
+
},
|
|
1405
|
+
countDatasets: async () => {
|
|
1406
|
+
const result = await db.selectFrom("datasets").select(db.fn.countAll().as("count")).executeTakeFirst();
|
|
1407
|
+
return Number(result?.count ?? 0);
|
|
1408
|
+
},
|
|
1409
|
+
createRecord: async (params) => {
|
|
1410
|
+
const value = await createRecord.safeParseAsync(params);
|
|
1411
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1412
|
+
const { datasetId, input, expected, metadata } = value.data;
|
|
1413
|
+
const record$1 = await db.insertInto("dataset_records").values({
|
|
1414
|
+
id: (0, node_crypto.randomUUID)(),
|
|
1415
|
+
datasetId,
|
|
1416
|
+
input: JSON.stringify(input),
|
|
1417
|
+
expected: expected ? JSON.stringify(expected) : null,
|
|
1418
|
+
metadata: JSON.stringify(metadata || {}),
|
|
1419
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1420
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1421
|
+
}).returningAll().executeTakeFirst();
|
|
1422
|
+
await db.updateTable("datasets").set((eb) => ({
|
|
1423
|
+
recordCount: eb("recordCount", "+", 1),
|
|
1424
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1425
|
+
})).where("id", "=", datasetId).execute();
|
|
1426
|
+
return record$1;
|
|
1427
|
+
},
|
|
1428
|
+
updateRecord: async (params) => {
|
|
1429
|
+
const value = await updateRecord.safeParseAsync(params);
|
|
1430
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1431
|
+
const { recordId, input, expected, metadata } = value.data;
|
|
1432
|
+
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
1433
|
+
if (input !== void 0) updateData.input = JSON.stringify(input);
|
|
1434
|
+
if (expected !== void 0) updateData.expected = expected ? JSON.stringify(expected) : null;
|
|
1435
|
+
if (metadata !== void 0) updateData.metadata = JSON.stringify(metadata);
|
|
1436
|
+
return db.updateTable("dataset_records").set(updateData).where("id", "=", recordId).returningAll().executeTakeFirst();
|
|
1437
|
+
},
|
|
1438
|
+
deleteRecord: async (params) => {
|
|
1439
|
+
const value = await deleteRecord.safeParseAsync(params);
|
|
1440
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1441
|
+
const { recordId } = value.data;
|
|
1442
|
+
const record$1 = await db.selectFrom("dataset_records").select(["datasetId"]).where("id", "=", recordId).executeTakeFirst();
|
|
1443
|
+
if (!record$1) throw new LLMOpsError("Record not found");
|
|
1444
|
+
await db.deleteFrom("dataset_version_records").where("datasetRecordId", "=", recordId).execute();
|
|
1445
|
+
const deleted = await db.deleteFrom("dataset_records").where("id", "=", recordId).returningAll().executeTakeFirst();
|
|
1446
|
+
await db.updateTable("datasets").set((eb) => ({
|
|
1447
|
+
recordCount: eb("recordCount", "-", 1),
|
|
1448
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1449
|
+
})).where("id", "=", record$1.datasetId).execute();
|
|
1450
|
+
return deleted;
|
|
1451
|
+
},
|
|
1452
|
+
listRecords: async (params) => {
|
|
1453
|
+
const value = await listRecords.safeParseAsync(params);
|
|
1454
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1455
|
+
const { datasetId, limit = 100, offset = 0 } = value.data;
|
|
1456
|
+
return db.selectFrom("dataset_records").selectAll().where("datasetId", "=", datasetId).orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1457
|
+
},
|
|
1458
|
+
getRecordById: async (recordId) => {
|
|
1459
|
+
return db.selectFrom("dataset_records").selectAll().where("id", "=", recordId).executeTakeFirst();
|
|
1460
|
+
},
|
|
1461
|
+
createVersion: async (params) => {
|
|
1462
|
+
const value = await createVersion.safeParseAsync(params);
|
|
1463
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1464
|
+
const { datasetId, name, description } = value.data;
|
|
1465
|
+
const dataset = await db.selectFrom("datasets").select(["latestVersionNumber", "recordCount"]).where("id", "=", datasetId).executeTakeFirst();
|
|
1466
|
+
if (!dataset) throw new LLMOpsError("Dataset not found");
|
|
1467
|
+
const newVersionNumber = dataset.latestVersionNumber + 1;
|
|
1468
|
+
const recordIds = (await db.selectFrom("dataset_records").select(["id"]).where("datasetId", "=", datasetId).orderBy("createdAt", "asc").execute()).map((r) => r.id);
|
|
1469
|
+
const snapshotHash = (0, node_crypto.createHash)("sha256").update(recordIds.join(",")).digest("hex");
|
|
1470
|
+
const versionId = (0, node_crypto.randomUUID)();
|
|
1471
|
+
const version = await db.insertInto("dataset_versions").values({
|
|
1472
|
+
id: versionId,
|
|
1473
|
+
datasetId,
|
|
1474
|
+
versionNumber: newVersionNumber,
|
|
1475
|
+
name: name ?? null,
|
|
1476
|
+
description: description ?? null,
|
|
1477
|
+
recordCount: dataset.recordCount,
|
|
1478
|
+
snapshotHash,
|
|
1479
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1480
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1481
|
+
}).returningAll().executeTakeFirst();
|
|
1482
|
+
if (recordIds.length > 0) await db.insertInto("dataset_version_records").values(recordIds.map((recordId, index) => ({
|
|
1483
|
+
id: (0, node_crypto.randomUUID)(),
|
|
1484
|
+
datasetVersionId: versionId,
|
|
1485
|
+
datasetRecordId: recordId,
|
|
1486
|
+
position: index,
|
|
1487
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1488
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1489
|
+
}))).execute();
|
|
1490
|
+
await db.updateTable("datasets").set({
|
|
1491
|
+
latestVersionNumber: newVersionNumber,
|
|
1492
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1493
|
+
}).where("id", "=", datasetId).execute();
|
|
1494
|
+
return version;
|
|
1495
|
+
},
|
|
1496
|
+
getVersionById: async (params) => {
|
|
1497
|
+
const value = await getVersionById.safeParseAsync(params);
|
|
1498
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1499
|
+
const { versionId } = value.data;
|
|
1500
|
+
return db.selectFrom("dataset_versions").selectAll().where("id", "=", versionId).executeTakeFirst();
|
|
1501
|
+
},
|
|
1502
|
+
listVersions: async (params) => {
|
|
1503
|
+
const value = await listVersions.safeParseAsync(params);
|
|
1504
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1505
|
+
const { datasetId, limit = 100, offset = 0 } = value.data;
|
|
1506
|
+
return db.selectFrom("dataset_versions").selectAll().where("datasetId", "=", datasetId).orderBy("versionNumber", "desc").limit(limit).offset(offset).execute();
|
|
1507
|
+
},
|
|
1508
|
+
getVersionRecords: async (params) => {
|
|
1509
|
+
const value = await getVersionRecords.safeParseAsync(params);
|
|
1510
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1511
|
+
const { versionId, limit = 100, offset = 0 } = value.data;
|
|
1512
|
+
return db.selectFrom("dataset_version_records").innerJoin("dataset_records", "dataset_records.id", "dataset_version_records.datasetRecordId").selectAll("dataset_records").select("dataset_version_records.position").where("dataset_version_records.datasetVersionId", "=", versionId).orderBy("dataset_version_records.position", "asc").limit(limit).offset(offset).execute();
|
|
1513
|
+
}
|
|
1514
|
+
};
|
|
1515
|
+
};
|
|
1516
|
+
|
|
1306
1517
|
//#endregion
|
|
1307
1518
|
//#region src/datalayer/environments.ts
|
|
1308
1519
|
const createNewEnvironment = require_db.zod_default.object({
|
|
@@ -1931,6 +2142,300 @@ const createLLMRequestsDataLayer = (db) => {
|
|
|
1931
2142
|
};
|
|
1932
2143
|
};
|
|
1933
2144
|
|
|
2145
|
+
//#endregion
|
|
2146
|
+
//#region src/datalayer/playgrounds.ts
|
|
2147
|
+
const createNewPlayground = require_db.zod_default.object({
|
|
2148
|
+
name: require_db.zod_default.string(),
|
|
2149
|
+
datasetId: require_db.zod_default.string().uuid().nullable().optional(),
|
|
2150
|
+
columns: require_db.zod_default.array(require_db.playgroundColumnSchema).nullable().optional()
|
|
2151
|
+
});
|
|
2152
|
+
const updatePlayground = require_db.zod_default.object({
|
|
2153
|
+
playgroundId: require_db.zod_default.uuidv4(),
|
|
2154
|
+
name: require_db.zod_default.string().optional(),
|
|
2155
|
+
datasetId: require_db.zod_default.string().uuid().nullable().optional(),
|
|
2156
|
+
columns: require_db.zod_default.array(require_db.playgroundColumnSchema).nullable().optional()
|
|
2157
|
+
});
|
|
2158
|
+
const getPlaygroundById = require_db.zod_default.object({ playgroundId: require_db.zod_default.uuidv4() });
|
|
2159
|
+
const deletePlayground = require_db.zod_default.object({ playgroundId: require_db.zod_default.uuidv4() });
|
|
2160
|
+
const listPlaygrounds = require_db.zod_default.object({
|
|
2161
|
+
limit: require_db.zod_default.number().int().positive().optional(),
|
|
2162
|
+
offset: require_db.zod_default.number().int().nonnegative().optional()
|
|
2163
|
+
});
|
|
2164
|
+
const createPlaygroundDataLayer = (db) => {
|
|
2165
|
+
return {
|
|
2166
|
+
createNewPlayground: async (params) => {
|
|
2167
|
+
const value = await createNewPlayground.safeParseAsync(params);
|
|
2168
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2169
|
+
const { name, datasetId, columns } = value.data;
|
|
2170
|
+
return db.insertInto("playgrounds").values({
|
|
2171
|
+
id: (0, node_crypto.randomUUID)(),
|
|
2172
|
+
name,
|
|
2173
|
+
datasetId: datasetId ?? null,
|
|
2174
|
+
columns: columns ? JSON.stringify(columns) : null,
|
|
2175
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2176
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2177
|
+
}).returningAll().executeTakeFirst();
|
|
2178
|
+
},
|
|
2179
|
+
updatePlayground: async (params) => {
|
|
2180
|
+
const value = await updatePlayground.safeParseAsync(params);
|
|
2181
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2182
|
+
const { playgroundId, name, datasetId, columns } = value.data;
|
|
2183
|
+
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
2184
|
+
if (name !== void 0) updateData.name = name;
|
|
2185
|
+
if (datasetId !== void 0) updateData.datasetId = datasetId;
|
|
2186
|
+
if (columns !== void 0) updateData.columns = columns ? JSON.stringify(columns) : null;
|
|
2187
|
+
return db.updateTable("playgrounds").set(updateData).where("id", "=", playgroundId).returningAll().executeTakeFirst();
|
|
2188
|
+
},
|
|
2189
|
+
getPlaygroundById: async (params) => {
|
|
2190
|
+
const value = await getPlaygroundById.safeParseAsync(params);
|
|
2191
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2192
|
+
const { playgroundId } = value.data;
|
|
2193
|
+
return db.selectFrom("playgrounds").selectAll().where("id", "=", playgroundId).executeTakeFirst();
|
|
2194
|
+
},
|
|
2195
|
+
deletePlayground: async (params) => {
|
|
2196
|
+
const value = await deletePlayground.safeParseAsync(params);
|
|
2197
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2198
|
+
const { playgroundId } = value.data;
|
|
2199
|
+
return db.deleteFrom("playgrounds").where("id", "=", playgroundId).returningAll().executeTakeFirst();
|
|
2200
|
+
},
|
|
2201
|
+
listPlaygrounds: async (params) => {
|
|
2202
|
+
const value = await listPlaygrounds.safeParseAsync(params || {});
|
|
2203
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2204
|
+
const { limit = 100, offset = 0 } = value.data;
|
|
2205
|
+
return db.selectFrom("playgrounds").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
2206
|
+
},
|
|
2207
|
+
countPlaygrounds: async () => {
|
|
2208
|
+
const result = await db.selectFrom("playgrounds").select(db.fn.countAll().as("count")).executeTakeFirst();
|
|
2209
|
+
return Number(result?.count ?? 0);
|
|
2210
|
+
}
|
|
2211
|
+
};
|
|
2212
|
+
};
|
|
2213
|
+
|
|
2214
|
+
//#endregion
|
|
2215
|
+
//#region src/datalayer/playgroundResults.ts
|
|
2216
|
+
const createPlaygroundResult = require_db.zod_default.object({
|
|
2217
|
+
runId: require_db.zod_default.string().uuid(),
|
|
2218
|
+
columnId: require_db.zod_default.string().uuid(),
|
|
2219
|
+
datasetRecordId: require_db.zod_default.string().uuid().nullable().optional(),
|
|
2220
|
+
inputVariables: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()).default({}),
|
|
2221
|
+
status: require_db.zod_default.enum([
|
|
2222
|
+
"pending",
|
|
2223
|
+
"running",
|
|
2224
|
+
"completed",
|
|
2225
|
+
"failed"
|
|
2226
|
+
]).default("pending")
|
|
2227
|
+
});
|
|
2228
|
+
const createPlaygroundResultsBatch = require_db.zod_default.object({ results: require_db.zod_default.array(createPlaygroundResult) });
|
|
2229
|
+
const updatePlaygroundResult = require_db.zod_default.object({
|
|
2230
|
+
resultId: require_db.zod_default.string().uuid(),
|
|
2231
|
+
outputContent: require_db.zod_default.string().nullable().optional(),
|
|
2232
|
+
status: require_db.zod_default.enum([
|
|
2233
|
+
"pending",
|
|
2234
|
+
"running",
|
|
2235
|
+
"completed",
|
|
2236
|
+
"failed"
|
|
2237
|
+
]).optional(),
|
|
2238
|
+
error: require_db.zod_default.string().nullable().optional(),
|
|
2239
|
+
latencyMs: require_db.zod_default.number().int().nullable().optional(),
|
|
2240
|
+
promptTokens: require_db.zod_default.number().int().nullable().optional(),
|
|
2241
|
+
completionTokens: require_db.zod_default.number().int().nullable().optional(),
|
|
2242
|
+
totalTokens: require_db.zod_default.number().int().nullable().optional(),
|
|
2243
|
+
cost: require_db.zod_default.number().int().nullable().optional()
|
|
2244
|
+
});
|
|
2245
|
+
const getPlaygroundResultById = require_db.zod_default.object({ resultId: require_db.zod_default.string().uuid() });
|
|
2246
|
+
const listPlaygroundResults = require_db.zod_default.object({
|
|
2247
|
+
runId: require_db.zod_default.string().uuid(),
|
|
2248
|
+
columnId: require_db.zod_default.string().uuid().optional(),
|
|
2249
|
+
limit: require_db.zod_default.number().int().positive().optional(),
|
|
2250
|
+
offset: require_db.zod_default.number().int().nonnegative().optional()
|
|
2251
|
+
});
|
|
2252
|
+
const deletePlaygroundResultsByRunId = require_db.zod_default.object({ runId: require_db.zod_default.string().uuid() });
|
|
2253
|
+
const createPlaygroundResultsDataLayer = (db) => {
|
|
2254
|
+
return {
|
|
2255
|
+
createPlaygroundResult: async (params) => {
|
|
2256
|
+
const value = await createPlaygroundResult.safeParseAsync(params);
|
|
2257
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2258
|
+
const { runId, columnId, datasetRecordId, inputVariables, status } = value.data;
|
|
2259
|
+
return db.insertInto("playground_results").values({
|
|
2260
|
+
id: (0, node_crypto.randomUUID)(),
|
|
2261
|
+
runId,
|
|
2262
|
+
columnId,
|
|
2263
|
+
datasetRecordId: datasetRecordId ?? null,
|
|
2264
|
+
inputVariables: JSON.stringify(inputVariables),
|
|
2265
|
+
outputContent: null,
|
|
2266
|
+
status,
|
|
2267
|
+
error: null,
|
|
2268
|
+
latencyMs: null,
|
|
2269
|
+
promptTokens: null,
|
|
2270
|
+
completionTokens: null,
|
|
2271
|
+
totalTokens: null,
|
|
2272
|
+
cost: null,
|
|
2273
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2274
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2275
|
+
}).returningAll().executeTakeFirst();
|
|
2276
|
+
},
|
|
2277
|
+
createPlaygroundResultsBatch: async (params) => {
|
|
2278
|
+
const value = await createPlaygroundResultsBatch.safeParseAsync(params);
|
|
2279
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2280
|
+
const { results } = value.data;
|
|
2281
|
+
if (results.length === 0) return [];
|
|
2282
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
2283
|
+
const values = results.map((result) => ({
|
|
2284
|
+
id: (0, node_crypto.randomUUID)(),
|
|
2285
|
+
runId: result.runId,
|
|
2286
|
+
columnId: result.columnId,
|
|
2287
|
+
datasetRecordId: result.datasetRecordId ?? null,
|
|
2288
|
+
inputVariables: JSON.stringify(result.inputVariables),
|
|
2289
|
+
outputContent: null,
|
|
2290
|
+
status: result.status,
|
|
2291
|
+
error: null,
|
|
2292
|
+
latencyMs: null,
|
|
2293
|
+
promptTokens: null,
|
|
2294
|
+
completionTokens: null,
|
|
2295
|
+
totalTokens: null,
|
|
2296
|
+
cost: null,
|
|
2297
|
+
createdAt: now,
|
|
2298
|
+
updatedAt: now
|
|
2299
|
+
}));
|
|
2300
|
+
return db.insertInto("playground_results").values(values).returningAll().execute();
|
|
2301
|
+
},
|
|
2302
|
+
updatePlaygroundResult: async (params) => {
|
|
2303
|
+
const value = await updatePlaygroundResult.safeParseAsync(params);
|
|
2304
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2305
|
+
const { resultId, outputContent, status, error, latencyMs, promptTokens, completionTokens, totalTokens, cost } = value.data;
|
|
2306
|
+
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
2307
|
+
if (outputContent !== void 0) updateData.outputContent = outputContent;
|
|
2308
|
+
if (status !== void 0) updateData.status = status;
|
|
2309
|
+
if (error !== void 0) updateData.error = error;
|
|
2310
|
+
if (latencyMs !== void 0) updateData.latencyMs = latencyMs;
|
|
2311
|
+
if (promptTokens !== void 0) updateData.promptTokens = promptTokens;
|
|
2312
|
+
if (completionTokens !== void 0) updateData.completionTokens = completionTokens;
|
|
2313
|
+
if (totalTokens !== void 0) updateData.totalTokens = totalTokens;
|
|
2314
|
+
if (cost !== void 0) updateData.cost = cost;
|
|
2315
|
+
return db.updateTable("playground_results").set(updateData).where("id", "=", resultId).returningAll().executeTakeFirst();
|
|
2316
|
+
},
|
|
2317
|
+
getPlaygroundResultById: async (params) => {
|
|
2318
|
+
const value = await getPlaygroundResultById.safeParseAsync(params);
|
|
2319
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2320
|
+
const { resultId } = value.data;
|
|
2321
|
+
return db.selectFrom("playground_results").selectAll().where("id", "=", resultId).executeTakeFirst();
|
|
2322
|
+
},
|
|
2323
|
+
listPlaygroundResults: async (params) => {
|
|
2324
|
+
const value = await listPlaygroundResults.safeParseAsync(params);
|
|
2325
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2326
|
+
const { runId, columnId, limit = 500, offset = 0 } = value.data;
|
|
2327
|
+
let query = db.selectFrom("playground_results").selectAll().where("runId", "=", runId);
|
|
2328
|
+
if (columnId) query = query.where("columnId", "=", columnId);
|
|
2329
|
+
return query.orderBy("createdAt", "asc").limit(limit).offset(offset).execute();
|
|
2330
|
+
},
|
|
2331
|
+
deletePlaygroundResultsByRunId: async (params) => {
|
|
2332
|
+
const value = await deletePlaygroundResultsByRunId.safeParseAsync(params);
|
|
2333
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2334
|
+
const { runId } = value.data;
|
|
2335
|
+
return db.deleteFrom("playground_results").where("runId", "=", runId).returningAll().execute();
|
|
2336
|
+
},
|
|
2337
|
+
countPlaygroundResults: async (runId) => {
|
|
2338
|
+
const result = await db.selectFrom("playground_results").select(db.fn.countAll().as("count")).where("runId", "=", runId).executeTakeFirst();
|
|
2339
|
+
return Number(result?.count ?? 0);
|
|
2340
|
+
},
|
|
2341
|
+
countCompletedPlaygroundResults: async (runId) => {
|
|
2342
|
+
const result = await db.selectFrom("playground_results").select(db.fn.countAll().as("count")).where("runId", "=", runId).where("status", "=", "completed").executeTakeFirst();
|
|
2343
|
+
return Number(result?.count ?? 0);
|
|
2344
|
+
}
|
|
2345
|
+
};
|
|
2346
|
+
};
|
|
2347
|
+
|
|
2348
|
+
//#endregion
|
|
2349
|
+
//#region src/datalayer/playgroundRuns.ts
|
|
2350
|
+
const createPlaygroundRun = require_db.zod_default.object({
|
|
2351
|
+
playgroundId: require_db.zod_default.string().uuid(),
|
|
2352
|
+
datasetId: require_db.zod_default.string().uuid().nullable().optional(),
|
|
2353
|
+
datasetVersionId: require_db.zod_default.string().uuid().nullable().optional(),
|
|
2354
|
+
status: require_db.zod_default.enum([
|
|
2355
|
+
"pending",
|
|
2356
|
+
"running",
|
|
2357
|
+
"completed",
|
|
2358
|
+
"failed",
|
|
2359
|
+
"cancelled"
|
|
2360
|
+
]).default("pending"),
|
|
2361
|
+
totalRecords: require_db.zod_default.number().int().default(0)
|
|
2362
|
+
});
|
|
2363
|
+
const updatePlaygroundRun = require_db.zod_default.object({
|
|
2364
|
+
runId: require_db.zod_default.string().uuid(),
|
|
2365
|
+
status: require_db.zod_default.enum([
|
|
2366
|
+
"pending",
|
|
2367
|
+
"running",
|
|
2368
|
+
"completed",
|
|
2369
|
+
"failed",
|
|
2370
|
+
"cancelled"
|
|
2371
|
+
]).optional(),
|
|
2372
|
+
startedAt: require_db.zod_default.date().nullable().optional(),
|
|
2373
|
+
completedAt: require_db.zod_default.date().nullable().optional(),
|
|
2374
|
+
completedRecords: require_db.zod_default.number().int().optional()
|
|
2375
|
+
});
|
|
2376
|
+
const getPlaygroundRunById = require_db.zod_default.object({ runId: require_db.zod_default.string().uuid() });
|
|
2377
|
+
const listPlaygroundRuns = require_db.zod_default.object({
|
|
2378
|
+
playgroundId: require_db.zod_default.string().uuid(),
|
|
2379
|
+
limit: require_db.zod_default.number().int().positive().optional(),
|
|
2380
|
+
offset: require_db.zod_default.number().int().nonnegative().optional()
|
|
2381
|
+
});
|
|
2382
|
+
const deletePlaygroundRun = require_db.zod_default.object({ runId: require_db.zod_default.string().uuid() });
|
|
2383
|
+
const createPlaygroundRunsDataLayer = (db) => {
|
|
2384
|
+
return {
|
|
2385
|
+
createPlaygroundRun: async (params) => {
|
|
2386
|
+
const value = await createPlaygroundRun.safeParseAsync(params);
|
|
2387
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2388
|
+
const { playgroundId, datasetId, datasetVersionId, status, totalRecords } = value.data;
|
|
2389
|
+
return db.insertInto("playground_runs").values({
|
|
2390
|
+
id: (0, node_crypto.randomUUID)(),
|
|
2391
|
+
playgroundId,
|
|
2392
|
+
datasetId: datasetId ?? null,
|
|
2393
|
+
datasetVersionId: datasetVersionId ?? null,
|
|
2394
|
+
status,
|
|
2395
|
+
startedAt: null,
|
|
2396
|
+
completedAt: null,
|
|
2397
|
+
totalRecords,
|
|
2398
|
+
completedRecords: 0,
|
|
2399
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2400
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2401
|
+
}).returningAll().executeTakeFirst();
|
|
2402
|
+
},
|
|
2403
|
+
updatePlaygroundRun: async (params) => {
|
|
2404
|
+
const value = await updatePlaygroundRun.safeParseAsync(params);
|
|
2405
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2406
|
+
const { runId, status, startedAt, completedAt, completedRecords } = value.data;
|
|
2407
|
+
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
2408
|
+
if (status !== void 0) updateData.status = status;
|
|
2409
|
+
if (startedAt !== void 0) updateData.startedAt = startedAt?.toISOString() ?? null;
|
|
2410
|
+
if (completedAt !== void 0) updateData.completedAt = completedAt?.toISOString() ?? null;
|
|
2411
|
+
if (completedRecords !== void 0) updateData.completedRecords = completedRecords;
|
|
2412
|
+
return db.updateTable("playground_runs").set(updateData).where("id", "=", runId).returningAll().executeTakeFirst();
|
|
2413
|
+
},
|
|
2414
|
+
getPlaygroundRunById: async (params) => {
|
|
2415
|
+
const value = await getPlaygroundRunById.safeParseAsync(params);
|
|
2416
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2417
|
+
const { runId } = value.data;
|
|
2418
|
+
return db.selectFrom("playground_runs").selectAll().where("id", "=", runId).executeTakeFirst();
|
|
2419
|
+
},
|
|
2420
|
+
listPlaygroundRuns: async (params) => {
|
|
2421
|
+
const value = await listPlaygroundRuns.safeParseAsync(params);
|
|
2422
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2423
|
+
const { playgroundId, limit = 50, offset = 0 } = value.data;
|
|
2424
|
+
return db.selectFrom("playground_runs").selectAll().where("playgroundId", "=", playgroundId).orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
2425
|
+
},
|
|
2426
|
+
deletePlaygroundRun: async (params) => {
|
|
2427
|
+
const value = await deletePlaygroundRun.safeParseAsync(params);
|
|
2428
|
+
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2429
|
+
const { runId } = value.data;
|
|
2430
|
+
return db.deleteFrom("playground_runs").where("id", "=", runId).returningAll().executeTakeFirst();
|
|
2431
|
+
},
|
|
2432
|
+
countPlaygroundRuns: async (playgroundId) => {
|
|
2433
|
+
const result = await db.selectFrom("playground_runs").select(db.fn.countAll().as("count")).where("playgroundId", "=", playgroundId).executeTakeFirst();
|
|
2434
|
+
return Number(result?.count ?? 0);
|
|
2435
|
+
}
|
|
2436
|
+
};
|
|
2437
|
+
};
|
|
2438
|
+
|
|
1934
2439
|
//#endregion
|
|
1935
2440
|
//#region src/datalayer/providerConfigs.ts
|
|
1936
2441
|
/**
|
|
@@ -2641,10 +3146,14 @@ const createDataLayer = async (db) => {
|
|
|
2641
3146
|
return {
|
|
2642
3147
|
...createConfigDataLayer(db),
|
|
2643
3148
|
...createConfigVariantDataLayer(db),
|
|
3149
|
+
...createDatasetsDataLayer(db),
|
|
2644
3150
|
...createEnvironmentDataLayer(db),
|
|
2645
3151
|
...createEnvironmentSecretDataLayer(db),
|
|
2646
3152
|
...createGuardrailConfigsDataLayer(db),
|
|
2647
3153
|
...createLLMRequestsDataLayer(db),
|
|
3154
|
+
...createPlaygroundDataLayer(db),
|
|
3155
|
+
...createPlaygroundResultsDataLayer(db),
|
|
3156
|
+
...createPlaygroundRunsDataLayer(db),
|
|
2648
3157
|
...createProviderConfigsDataLayer(db),
|
|
2649
3158
|
...createProviderGuardrailOverridesDataLayer(db),
|
|
2650
3159
|
...createTargetingRulesDataLayer(db),
|
|
@@ -3243,12 +3752,19 @@ exports.configsSchema = require_db.configsSchema;
|
|
|
3243
3752
|
exports.createDataLayer = createDataLayer;
|
|
3244
3753
|
exports.createDatabase = require_db.createDatabase;
|
|
3245
3754
|
exports.createDatabaseFromConnection = require_db.createDatabaseFromConnection;
|
|
3755
|
+
exports.createDatasetsDataLayer = createDatasetsDataLayer;
|
|
3246
3756
|
exports.createGuardrailConfigsDataLayer = createGuardrailConfigsDataLayer;
|
|
3247
3757
|
exports.createLLMRequestsDataLayer = createLLMRequestsDataLayer;
|
|
3248
3758
|
exports.createNeonDialect = require_neon_dialect.createNeonDialect;
|
|
3759
|
+
exports.createPlaygroundResultsDataLayer = createPlaygroundResultsDataLayer;
|
|
3760
|
+
exports.createPlaygroundRunsDataLayer = createPlaygroundRunsDataLayer;
|
|
3249
3761
|
exports.createProviderConfigsDataLayer = createProviderConfigsDataLayer;
|
|
3250
3762
|
exports.createProviderGuardrailOverridesDataLayer = createProviderGuardrailOverridesDataLayer;
|
|
3251
3763
|
exports.createWorkspaceSettingsDataLayer = createWorkspaceSettingsDataLayer;
|
|
3764
|
+
exports.datasetRecordsSchema = require_db.datasetRecordsSchema;
|
|
3765
|
+
exports.datasetVersionRecordsSchema = require_db.datasetVersionRecordsSchema;
|
|
3766
|
+
exports.datasetVersionsSchema = require_db.datasetVersionsSchema;
|
|
3767
|
+
exports.datasetsSchema = require_db.datasetsSchema;
|
|
3252
3768
|
exports.detectDatabaseType = require_db.detectDatabaseType;
|
|
3253
3769
|
exports.dollarsToMicroDollars = dollarsToMicroDollars;
|
|
3254
3770
|
exports.environmentSecretsSchema = require_db.environmentSecretsSchema;
|
|
@@ -3273,6 +3789,10 @@ exports.matchType = require_db.matchType;
|
|
|
3273
3789
|
exports.microDollarsToDollars = microDollarsToDollars;
|
|
3274
3790
|
exports.parsePartialTableData = require_db.parsePartialTableData;
|
|
3275
3791
|
exports.parseTableData = require_db.parseTableData;
|
|
3792
|
+
exports.playgroundColumnSchema = require_db.playgroundColumnSchema;
|
|
3793
|
+
exports.playgroundResultsSchema = require_db.playgroundResultsSchema;
|
|
3794
|
+
exports.playgroundRunsSchema = require_db.playgroundRunsSchema;
|
|
3795
|
+
exports.playgroundsSchema = require_db.playgroundsSchema;
|
|
3276
3796
|
exports.providerConfigsSchema = require_db.providerConfigsSchema;
|
|
3277
3797
|
exports.providerGuardrailOverridesSchema = require_db.providerGuardrailOverridesSchema;
|
|
3278
3798
|
exports.runAutoMigrations = require_db.runAutoMigrations;
|