@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/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- const require_db = require('./db-BF1a1duC.cjs');
2
- const require_neon_dialect = require('./neon-dialect-BQsMY2pg.cjs');
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;