@llmops/core 0.6.10 → 1.0.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-C06VxkTn.cjs → bun-sqlite-dialect-C3HVUfYl.cjs} +1 -1
- package/dist/db/index.cjs +2 -2
- package/dist/db/index.d.cts +1 -1
- package/dist/db/index.d.mts +1 -1
- package/dist/db/index.mjs +1 -1
- package/dist/{db-CdAtHHw5.mjs → db-CjwRQB4N.mjs} +4 -290
- package/dist/{db-D8otWwZL.cjs → db-D3WDjcvd.cjs} +5 -299
- package/dist/{index-D3onb7gK.d.mts → index-BmGf4wCW.d.cts} +278 -832
- package/dist/{index-CyVFWq76.d.cts → index-BoDvuqku.d.mts} +278 -832
- package/dist/index.cjs +52 -1171
- package/dist/index.d.cts +38 -1082
- package/dist/index.d.mts +38 -1082
- package/dist/index.mjs +52 -1162
- package/dist/{neon-dialect-DIuEesTA.cjs → neon-dialect-BSJpZ9YH.cjs} +1 -1
- package/dist/{neon-dialect-ccr-mLKR.cjs → neon-dialect-DMClTHvw.cjs} +1 -1
- package/dist/{node-sqlite-dialect-AU81Qz0n.cjs → node-sqlite-dialect-BZGXfDHS.cjs} +1 -1
- package/package.json +2 -4
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { A as
|
|
1
|
+
import { A as spanEventsSchema, B as array, C as playgroundColumnSchema, D as providerConfigsSchema, E as playgroundsSchema, F as variantsSchema, G as record, H as literal, I as workspaceSettingsSchema, J as unknown, K as string, L as zod_default, M as targetingRulesSchema, N as tracesSchema, O as providerGuardrailOverridesSchema, P as variantVersionsSchema, R as _enum, S as llmRequestsSchema, T as playgroundRunsSchema, U as number, V as boolean, W as object, Y as __require, _ as datasetVersionsSchema, a as matchType, b as environmentsSchema, c as parsePartialTableData, d as validateTableData, f as SCHEMA_METADATA, g as datasetVersionRecordsSchema, h as datasetRecordsSchema, i as getMigrations, j as spansSchema, k as schemas, l as parseTableData, m as configsSchema, n as createDatabaseFromConnection, o as runAutoMigrations, p as configVariantsSchema, q as union, r as detectDatabaseType, s as logger, t as createDatabase, u as validatePartialTableData, v as datasetsSchema, w as playgroundResultsSchema, x as guardrailConfigsSchema, y as environmentSecretsSchema, z as any } from "./db-CjwRQB4N.mjs";
|
|
2
2
|
import { n as executeWithSchema, t as createNeonDialect } from "./neon-dialect-DySGBYUi.mjs";
|
|
3
3
|
import gateway from "@llmops/gateway";
|
|
4
|
-
import { sql } from "kysely";
|
|
4
|
+
import { CompiledQuery, Kysely, PostgresDialect, sql } from "kysely";
|
|
5
5
|
import * as path from "node:path";
|
|
6
|
-
import { createRandomStringGenerator } from "@better-auth/utils/random";
|
|
7
6
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
8
|
-
import jsonLogic from "json-logic-js";
|
|
9
7
|
|
|
10
8
|
//#region src/constants/headers.ts
|
|
11
9
|
/**
|
|
@@ -630,9 +628,8 @@ const providersConfigSchema = array(inlineProviderConfigSchema).optional();
|
|
|
630
628
|
* Base schema without refinements (used for transform)
|
|
631
629
|
*/
|
|
632
630
|
const llmopsConfigBaseSchema = object({
|
|
633
|
-
|
|
631
|
+
telemetry: any().optional(),
|
|
634
632
|
basePath: string().min(1, "Base path cannot be empty").refine((path$1) => path$1.startsWith("/"), "Base path must start with a forward slash").default("/llmops"),
|
|
635
|
-
schema: string().optional().default("llmops"),
|
|
636
633
|
providers: providersConfigSchema
|
|
637
634
|
});
|
|
638
635
|
const llmopsConfigSchema = llmopsConfigBaseSchema.transform((config) => ({
|
|
@@ -1157,8 +1154,13 @@ var CacheService = class {
|
|
|
1157
1154
|
|
|
1158
1155
|
//#endregion
|
|
1159
1156
|
//#region src/utils/id.ts
|
|
1157
|
+
const CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
1160
1158
|
const generateId = (size) => {
|
|
1161
|
-
|
|
1159
|
+
const length = size || 32;
|
|
1160
|
+
const bytes = randomBytes(length);
|
|
1161
|
+
let result = "";
|
|
1162
|
+
for (let i = 0; i < length; i++) result += CHARS[bytes[i] % 62];
|
|
1163
|
+
return result;
|
|
1162
1164
|
};
|
|
1163
1165
|
|
|
1164
1166
|
//#endregion
|
|
@@ -1173,339 +1175,6 @@ var LLMOpsError = class extends Error {
|
|
|
1173
1175
|
}
|
|
1174
1176
|
};
|
|
1175
1177
|
|
|
1176
|
-
//#endregion
|
|
1177
|
-
//#region src/datalayer/configs.ts
|
|
1178
|
-
/**
|
|
1179
|
-
* Generate a short unique ID for configs (8 characters, URL-safe)
|
|
1180
|
-
* Uses base62 encoding (a-z, A-Z, 0-9) for shorter, readable IDs
|
|
1181
|
-
*/
|
|
1182
|
-
function generateShortId(length = 8) {
|
|
1183
|
-
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
1184
|
-
const bytes = randomBytes(length);
|
|
1185
|
-
let result = "";
|
|
1186
|
-
for (let i = 0; i < length; i++) result += chars[bytes[i] % 62];
|
|
1187
|
-
return result;
|
|
1188
|
-
}
|
|
1189
|
-
const createNewConfig = zod_default.object({ name: zod_default.string() });
|
|
1190
|
-
const updateConfigName = zod_default.object({
|
|
1191
|
-
configId: zod_default.uuidv4(),
|
|
1192
|
-
newName: zod_default.string()
|
|
1193
|
-
});
|
|
1194
|
-
const getConfigById = zod_default.object({ configId: zod_default.uuidv4() });
|
|
1195
|
-
const deleteConfig = zod_default.object({ configId: zod_default.uuidv4() });
|
|
1196
|
-
const listConfigs = zod_default.object({
|
|
1197
|
-
limit: zod_default.number().int().positive().optional(),
|
|
1198
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
1199
|
-
});
|
|
1200
|
-
const createConfigDataLayer = (db) => {
|
|
1201
|
-
return {
|
|
1202
|
-
createNewConfig: async (params) => {
|
|
1203
|
-
const value = await createNewConfig.safeParseAsync(params);
|
|
1204
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1205
|
-
const { name } = value.data;
|
|
1206
|
-
return db.insertInto("configs").values({
|
|
1207
|
-
id: randomUUID(),
|
|
1208
|
-
slug: generateShortId(),
|
|
1209
|
-
name,
|
|
1210
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1211
|
-
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1212
|
-
}).returningAll().executeTakeFirst();
|
|
1213
|
-
},
|
|
1214
|
-
updateConfigName: async (params) => {
|
|
1215
|
-
const value = await updateConfigName.safeParseAsync(params);
|
|
1216
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1217
|
-
const { newName, configId } = value.data;
|
|
1218
|
-
return db.updateTable("configs").set({
|
|
1219
|
-
name: newName,
|
|
1220
|
-
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1221
|
-
}).where("id", "=", configId).returningAll().executeTakeFirst();
|
|
1222
|
-
},
|
|
1223
|
-
getConfigById: async (params) => {
|
|
1224
|
-
const value = await getConfigById.safeParseAsync(params);
|
|
1225
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1226
|
-
const { configId } = value.data;
|
|
1227
|
-
return db.selectFrom("configs").selectAll().where("id", "=", configId).executeTakeFirst();
|
|
1228
|
-
},
|
|
1229
|
-
deleteConfig: async (params) => {
|
|
1230
|
-
const value = await deleteConfig.safeParseAsync(params);
|
|
1231
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1232
|
-
const { configId } = value.data;
|
|
1233
|
-
return db.deleteFrom("configs").where("id", "=", configId).returningAll().executeTakeFirst();
|
|
1234
|
-
},
|
|
1235
|
-
listConfigs: async (params) => {
|
|
1236
|
-
const value = await listConfigs.safeParseAsync(params || {});
|
|
1237
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1238
|
-
const { limit = 100, offset = 0 } = value.data;
|
|
1239
|
-
return db.selectFrom("configs").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1240
|
-
},
|
|
1241
|
-
getConfigWithVariants: async (params) => {
|
|
1242
|
-
const value = await getConfigById.safeParseAsync(params);
|
|
1243
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1244
|
-
const { configId } = value.data;
|
|
1245
|
-
const configData = await db.selectFrom("configs").leftJoin("config_variants", "configs.id", "config_variants.configId").leftJoin("variants", "config_variants.variantId", "variants.id").select([
|
|
1246
|
-
"configs.id",
|
|
1247
|
-
"configs.slug",
|
|
1248
|
-
"configs.name",
|
|
1249
|
-
"configs.createdAt",
|
|
1250
|
-
"configs.updatedAt",
|
|
1251
|
-
"variants.id as variantId",
|
|
1252
|
-
"variants.name as variantName"
|
|
1253
|
-
]).where("configs.id", "=", configId).execute();
|
|
1254
|
-
const variantIds = configData.map((row) => row.variantId).filter((id) => id !== null);
|
|
1255
|
-
if (variantIds.length === 0) return configData.map((row) => ({
|
|
1256
|
-
...row,
|
|
1257
|
-
provider: null,
|
|
1258
|
-
modelName: null,
|
|
1259
|
-
jsonData: null,
|
|
1260
|
-
variantVersionId: null
|
|
1261
|
-
}));
|
|
1262
|
-
const latestVersions = await Promise.all(variantIds.map((variantId) => db.selectFrom("variant_versions").selectAll().where("variantId", "=", variantId).orderBy("version", "desc").limit(1).executeTakeFirst()));
|
|
1263
|
-
const versionMap = new Map(latestVersions.filter((v) => v !== void 0).map((v) => [v.variantId, v]));
|
|
1264
|
-
return configData.map((row) => {
|
|
1265
|
-
const version = row.variantId ? versionMap.get(row.variantId) : null;
|
|
1266
|
-
return {
|
|
1267
|
-
...row,
|
|
1268
|
-
provider: version?.provider ?? null,
|
|
1269
|
-
modelName: version?.modelName ?? null,
|
|
1270
|
-
jsonData: version?.jsonData ?? null,
|
|
1271
|
-
variantVersionId: version?.id ?? null
|
|
1272
|
-
};
|
|
1273
|
-
});
|
|
1274
|
-
}
|
|
1275
|
-
};
|
|
1276
|
-
};
|
|
1277
|
-
|
|
1278
|
-
//#endregion
|
|
1279
|
-
//#region src/datalayer/configVariants.ts
|
|
1280
|
-
const createConfigVariant = zod_default.object({
|
|
1281
|
-
configId: zod_default.string().uuid(),
|
|
1282
|
-
variantId: zod_default.string().uuid()
|
|
1283
|
-
});
|
|
1284
|
-
const getConfigVariantById = zod_default.object({ id: zod_default.string().uuid() });
|
|
1285
|
-
const getConfigVariantsByConfigId = zod_default.object({
|
|
1286
|
-
configId: zod_default.string().uuid(),
|
|
1287
|
-
limit: zod_default.number().int().positive().optional(),
|
|
1288
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
1289
|
-
});
|
|
1290
|
-
const getConfigVariantsByVariantId = zod_default.object({
|
|
1291
|
-
variantId: zod_default.string().uuid(),
|
|
1292
|
-
limit: zod_default.number().int().positive().optional(),
|
|
1293
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
1294
|
-
});
|
|
1295
|
-
const deleteConfigVariant = zod_default.object({ id: zod_default.string().uuid() });
|
|
1296
|
-
const deleteConfigVariantByIds = zod_default.object({
|
|
1297
|
-
configId: zod_default.string().uuid(),
|
|
1298
|
-
variantId: zod_default.string().uuid()
|
|
1299
|
-
});
|
|
1300
|
-
const listConfigVariants = zod_default.object({
|
|
1301
|
-
limit: zod_default.number().int().positive().optional(),
|
|
1302
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
1303
|
-
});
|
|
1304
|
-
const createVariantAndLinkToConfig = zod_default.object({
|
|
1305
|
-
configId: zod_default.string().uuid(),
|
|
1306
|
-
name: zod_default.string(),
|
|
1307
|
-
provider: zod_default.string(),
|
|
1308
|
-
modelName: zod_default.string(),
|
|
1309
|
-
jsonData: zod_default.record(zod_default.string(), zod_default.unknown()).optional().default({})
|
|
1310
|
-
});
|
|
1311
|
-
const getVariantJsonDataForConfig = zod_default.object({
|
|
1312
|
-
configId: zod_default.string(),
|
|
1313
|
-
envSecret: zod_default.string().optional()
|
|
1314
|
-
});
|
|
1315
|
-
const createConfigVariantDataLayer = (db) => {
|
|
1316
|
-
return {
|
|
1317
|
-
createConfigVariant: async (params) => {
|
|
1318
|
-
const value = await createConfigVariant.safeParseAsync(params);
|
|
1319
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1320
|
-
const { configId, variantId } = value.data;
|
|
1321
|
-
return db.insertInto("config_variants").values({
|
|
1322
|
-
id: randomUUID(),
|
|
1323
|
-
configId,
|
|
1324
|
-
variantId,
|
|
1325
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1326
|
-
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1327
|
-
}).returningAll().executeTakeFirst();
|
|
1328
|
-
},
|
|
1329
|
-
getConfigVariantById: async (params) => {
|
|
1330
|
-
const value = await getConfigVariantById.safeParseAsync(params);
|
|
1331
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1332
|
-
const { id } = value.data;
|
|
1333
|
-
return db.selectFrom("config_variants").selectAll().where("id", "=", id).executeTakeFirst();
|
|
1334
|
-
},
|
|
1335
|
-
getConfigVariantsByConfigId: async (params) => {
|
|
1336
|
-
const value = await getConfigVariantsByConfigId.safeParseAsync(params);
|
|
1337
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1338
|
-
const { configId, limit = 100, offset = 0 } = value.data;
|
|
1339
|
-
return db.selectFrom("config_variants").selectAll().where("configId", "=", configId).orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1340
|
-
},
|
|
1341
|
-
getConfigVariantsByVariantId: async (params) => {
|
|
1342
|
-
const value = await getConfigVariantsByVariantId.safeParseAsync(params);
|
|
1343
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1344
|
-
const { variantId, limit = 100, offset = 0 } = value.data;
|
|
1345
|
-
return db.selectFrom("config_variants").selectAll().where("variantId", "=", variantId).orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1346
|
-
},
|
|
1347
|
-
deleteConfigVariant: async (params) => {
|
|
1348
|
-
const value = await deleteConfigVariant.safeParseAsync(params);
|
|
1349
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1350
|
-
const { id } = value.data;
|
|
1351
|
-
return db.deleteFrom("config_variants").where("id", "=", id).returningAll().executeTakeFirst();
|
|
1352
|
-
},
|
|
1353
|
-
deleteConfigVariantByIds: async (params) => {
|
|
1354
|
-
const value = await deleteConfigVariantByIds.safeParseAsync(params);
|
|
1355
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1356
|
-
const { configId, variantId } = value.data;
|
|
1357
|
-
return db.deleteFrom("config_variants").where("configId", "=", configId).where("variantId", "=", variantId).returningAll().executeTakeFirst();
|
|
1358
|
-
},
|
|
1359
|
-
listConfigVariants: async (params) => {
|
|
1360
|
-
const value = await listConfigVariants.safeParseAsync(params || {});
|
|
1361
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1362
|
-
const { limit = 100, offset = 0 } = value.data;
|
|
1363
|
-
return db.selectFrom("config_variants").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1364
|
-
},
|
|
1365
|
-
getConfigVariantWithDetails: async (params) => {
|
|
1366
|
-
const value = await getConfigVariantById.safeParseAsync(params);
|
|
1367
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1368
|
-
const { id } = value.data;
|
|
1369
|
-
const configVariant = await db.selectFrom("config_variants").leftJoin("configs", "config_variants.configId", "configs.id").leftJoin("variants", "config_variants.variantId", "variants.id").select([
|
|
1370
|
-
"config_variants.id",
|
|
1371
|
-
"config_variants.configId",
|
|
1372
|
-
"config_variants.variantId",
|
|
1373
|
-
"config_variants.createdAt",
|
|
1374
|
-
"config_variants.updatedAt",
|
|
1375
|
-
"configs.name as configName",
|
|
1376
|
-
"variants.name as variantName"
|
|
1377
|
-
]).where("config_variants.id", "=", id).executeTakeFirst();
|
|
1378
|
-
if (!configVariant) return;
|
|
1379
|
-
const latestVersion = await db.selectFrom("variant_versions").selectAll().where("variantId", "=", configVariant.variantId).orderBy("version", "desc").limit(1).executeTakeFirst();
|
|
1380
|
-
return {
|
|
1381
|
-
...configVariant,
|
|
1382
|
-
latestVersion: latestVersion ?? null
|
|
1383
|
-
};
|
|
1384
|
-
},
|
|
1385
|
-
getConfigVariantsWithDetailsByConfigId: async (params) => {
|
|
1386
|
-
const value = await getConfigVariantsByConfigId.safeParseAsync(params);
|
|
1387
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1388
|
-
const { configId, limit = 100, offset = 0 } = value.data;
|
|
1389
|
-
const configVariants = await db.selectFrom("config_variants").leftJoin("variants", "config_variants.variantId", "variants.id").select([
|
|
1390
|
-
"config_variants.id",
|
|
1391
|
-
"config_variants.configId",
|
|
1392
|
-
"config_variants.variantId",
|
|
1393
|
-
"config_variants.createdAt",
|
|
1394
|
-
"config_variants.updatedAt",
|
|
1395
|
-
"variants.name"
|
|
1396
|
-
]).where("config_variants.configId", "=", configId).orderBy("config_variants.createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1397
|
-
if (configVariants.length === 0) return [];
|
|
1398
|
-
return await Promise.all(configVariants.map(async (cv) => {
|
|
1399
|
-
const latestVersion = cv.variantId ? await db.selectFrom("variant_versions").selectAll().where("variantId", "=", cv.variantId).orderBy("version", "desc").limit(1).executeTakeFirst() : null;
|
|
1400
|
-
return {
|
|
1401
|
-
...cv,
|
|
1402
|
-
provider: latestVersion?.provider ?? null,
|
|
1403
|
-
modelName: latestVersion?.modelName ?? null,
|
|
1404
|
-
jsonData: latestVersion?.jsonData ?? null,
|
|
1405
|
-
latestVersion: latestVersion ?? null
|
|
1406
|
-
};
|
|
1407
|
-
}));
|
|
1408
|
-
},
|
|
1409
|
-
createVariantAndLinkToConfig: async (params) => {
|
|
1410
|
-
const value = await createVariantAndLinkToConfig.safeParseAsync(params);
|
|
1411
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1412
|
-
const { configId, name, provider, modelName, jsonData } = value.data;
|
|
1413
|
-
const variantId = randomUUID();
|
|
1414
|
-
const versionId = randomUUID();
|
|
1415
|
-
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
1416
|
-
const variant = await db.insertInto("variants").values({
|
|
1417
|
-
id: variantId,
|
|
1418
|
-
name,
|
|
1419
|
-
createdAt: now,
|
|
1420
|
-
updatedAt: now
|
|
1421
|
-
}).returningAll().executeTakeFirst();
|
|
1422
|
-
if (!variant) throw new LLMOpsError("Failed to create variant");
|
|
1423
|
-
const version = await db.insertInto("variant_versions").values({
|
|
1424
|
-
id: versionId,
|
|
1425
|
-
variantId,
|
|
1426
|
-
version: 1,
|
|
1427
|
-
provider,
|
|
1428
|
-
modelName,
|
|
1429
|
-
jsonData: JSON.stringify(jsonData),
|
|
1430
|
-
createdAt: now,
|
|
1431
|
-
updatedAt: now
|
|
1432
|
-
}).returningAll().executeTakeFirst();
|
|
1433
|
-
if (!version) throw new LLMOpsError("Failed to create variant version");
|
|
1434
|
-
const configVariant = await db.insertInto("config_variants").values({
|
|
1435
|
-
id: randomUUID(),
|
|
1436
|
-
configId,
|
|
1437
|
-
variantId,
|
|
1438
|
-
createdAt: now,
|
|
1439
|
-
updatedAt: now
|
|
1440
|
-
}).returningAll().executeTakeFirst();
|
|
1441
|
-
if (!configVariant) throw new LLMOpsError("Failed to link variant to config");
|
|
1442
|
-
return {
|
|
1443
|
-
variant,
|
|
1444
|
-
version,
|
|
1445
|
-
configVariant
|
|
1446
|
-
};
|
|
1447
|
-
},
|
|
1448
|
-
getVariantJsonDataForConfig: async (params) => {
|
|
1449
|
-
const value = await getVariantJsonDataForConfig.safeParseAsync(params);
|
|
1450
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1451
|
-
const { configId: configIdOrSlug, envSecret } = value.data;
|
|
1452
|
-
const UUID_REGEX$1 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
1453
|
-
let resolvedConfigId;
|
|
1454
|
-
if (UUID_REGEX$1.test(configIdOrSlug)) resolvedConfigId = configIdOrSlug;
|
|
1455
|
-
else {
|
|
1456
|
-
const config = await db.selectFrom("configs").select("id").where("slug", "=", configIdOrSlug).executeTakeFirst();
|
|
1457
|
-
if (!config) throw new LLMOpsError(`Config not found: ${configIdOrSlug}`);
|
|
1458
|
-
resolvedConfigId = config.id;
|
|
1459
|
-
}
|
|
1460
|
-
let environmentId;
|
|
1461
|
-
if (envSecret) {
|
|
1462
|
-
const secret = await db.selectFrom("environment_secrets").select("environmentId").where("keyValue", "=", envSecret).executeTakeFirst();
|
|
1463
|
-
if (!secret) throw new LLMOpsError("Invalid environment secret");
|
|
1464
|
-
environmentId = secret.environmentId;
|
|
1465
|
-
} else {
|
|
1466
|
-
const prodEnv = await db.selectFrom("environments").select("id").where("isProd", "=", true).executeTakeFirst();
|
|
1467
|
-
if (!prodEnv) throw new LLMOpsError("No production environment found");
|
|
1468
|
-
environmentId = prodEnv.id;
|
|
1469
|
-
}
|
|
1470
|
-
const targetingRule = await db.selectFrom("targeting_rules").select(["configVariantId", "variantVersionId"]).where("configId", "=", resolvedConfigId).where("environmentId", "=", environmentId).where("enabled", "=", true).orderBy("priority", "desc").orderBy("weight", "desc").executeTakeFirst();
|
|
1471
|
-
if (!targetingRule) throw new LLMOpsError(`No targeting rule found for config ${resolvedConfigId} in environment ${environmentId}`);
|
|
1472
|
-
const configVariant = await db.selectFrom("config_variants").select("variantId").where("id", "=", targetingRule.configVariantId).executeTakeFirst();
|
|
1473
|
-
if (!configVariant) throw new LLMOpsError(`No config variant found for ${targetingRule.configVariantId}`);
|
|
1474
|
-
let versionData;
|
|
1475
|
-
if (targetingRule.variantVersionId) versionData = await db.selectFrom("variant_versions").select([
|
|
1476
|
-
"jsonData",
|
|
1477
|
-
"provider",
|
|
1478
|
-
"modelName",
|
|
1479
|
-
"version"
|
|
1480
|
-
]).where("id", "=", targetingRule.variantVersionId).executeTakeFirst();
|
|
1481
|
-
else versionData = await db.selectFrom("variant_versions").select([
|
|
1482
|
-
"jsonData",
|
|
1483
|
-
"provider",
|
|
1484
|
-
"modelName",
|
|
1485
|
-
"version"
|
|
1486
|
-
]).where("variantId", "=", configVariant.variantId).orderBy("version", "desc").limit(1).executeTakeFirst();
|
|
1487
|
-
if (!versionData) throw new LLMOpsError(`No variant version found for variant ${configVariant.variantId}`);
|
|
1488
|
-
let finalProvider = versionData.provider;
|
|
1489
|
-
let providerConfigId = null;
|
|
1490
|
-
if (UUID_REGEX$1.test(versionData.provider)) {
|
|
1491
|
-
const providerConfig = await db.selectFrom("provider_configs").select(["id", "providerId"]).where("id", "=", versionData.provider).executeTakeFirst();
|
|
1492
|
-
if (providerConfig) {
|
|
1493
|
-
finalProvider = providerConfig.providerId;
|
|
1494
|
-
providerConfigId = providerConfig.id;
|
|
1495
|
-
}
|
|
1496
|
-
}
|
|
1497
|
-
return {
|
|
1498
|
-
...versionData,
|
|
1499
|
-
provider: finalProvider,
|
|
1500
|
-
providerConfigId,
|
|
1501
|
-
configId: resolvedConfigId,
|
|
1502
|
-
variantId: configVariant.variantId,
|
|
1503
|
-
environmentId
|
|
1504
|
-
};
|
|
1505
|
-
}
|
|
1506
|
-
};
|
|
1507
|
-
};
|
|
1508
|
-
|
|
1509
1178
|
//#endregion
|
|
1510
1179
|
//#region src/datalayer/datasets.ts
|
|
1511
1180
|
const createDataset = zod_default.object({
|
|
@@ -1715,161 +1384,6 @@ const createDatasetsDataLayer = (db) => {
|
|
|
1715
1384
|
};
|
|
1716
1385
|
};
|
|
1717
1386
|
|
|
1718
|
-
//#endregion
|
|
1719
|
-
//#region src/datalayer/environments.ts
|
|
1720
|
-
const createNewEnvironment = zod_default.object({
|
|
1721
|
-
name: zod_default.string(),
|
|
1722
|
-
slug: zod_default.string(),
|
|
1723
|
-
isProd: zod_default.boolean().optional().default(false)
|
|
1724
|
-
});
|
|
1725
|
-
const updateEnvironment = zod_default.object({
|
|
1726
|
-
environmentId: zod_default.uuidv4(),
|
|
1727
|
-
name: zod_default.string().optional(),
|
|
1728
|
-
slug: zod_default.string().optional()
|
|
1729
|
-
});
|
|
1730
|
-
const getEnvironmentById = zod_default.object({ environmentId: zod_default.uuidv4() });
|
|
1731
|
-
const getEnvironmentBySlug = zod_default.object({ slug: zod_default.string() });
|
|
1732
|
-
const deleteEnvironment = zod_default.object({ environmentId: zod_default.uuidv4() });
|
|
1733
|
-
const listEnvironments = zod_default.object({
|
|
1734
|
-
limit: zod_default.number().int().positive().optional(),
|
|
1735
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
1736
|
-
});
|
|
1737
|
-
const createEnvironmentDataLayer = (db) => {
|
|
1738
|
-
return {
|
|
1739
|
-
createNewEnvironment: async (params) => {
|
|
1740
|
-
const value = await createNewEnvironment.safeParseAsync(params);
|
|
1741
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1742
|
-
const { name, slug, isProd } = value.data;
|
|
1743
|
-
return db.insertInto("environments").values({
|
|
1744
|
-
id: randomUUID(),
|
|
1745
|
-
name,
|
|
1746
|
-
slug,
|
|
1747
|
-
isProd,
|
|
1748
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1749
|
-
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1750
|
-
}).returningAll().executeTakeFirst();
|
|
1751
|
-
},
|
|
1752
|
-
updateEnvironment: async (params) => {
|
|
1753
|
-
const value = await updateEnvironment.safeParseAsync(params);
|
|
1754
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1755
|
-
const { environmentId, name, slug } = value.data;
|
|
1756
|
-
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
1757
|
-
if (name !== void 0) updateData.name = name;
|
|
1758
|
-
if (slug !== void 0) updateData.slug = slug;
|
|
1759
|
-
return db.updateTable("environments").set(updateData).where("id", "=", environmentId).returningAll().executeTakeFirst();
|
|
1760
|
-
},
|
|
1761
|
-
getEnvironmentById: async (params) => {
|
|
1762
|
-
const value = await getEnvironmentById.safeParseAsync(params);
|
|
1763
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1764
|
-
const { environmentId } = value.data;
|
|
1765
|
-
return db.selectFrom("environments").selectAll().where("id", "=", environmentId).executeTakeFirst();
|
|
1766
|
-
},
|
|
1767
|
-
getEnvironmentBySlug: async (params) => {
|
|
1768
|
-
const value = await getEnvironmentBySlug.safeParseAsync(params);
|
|
1769
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1770
|
-
const { slug } = value.data;
|
|
1771
|
-
return db.selectFrom("environments").selectAll().where("slug", "=", slug).executeTakeFirst();
|
|
1772
|
-
},
|
|
1773
|
-
deleteEnvironment: async (params) => {
|
|
1774
|
-
const value = await deleteEnvironment.safeParseAsync(params);
|
|
1775
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1776
|
-
const { environmentId } = value.data;
|
|
1777
|
-
return db.deleteFrom("environments").where("id", "=", environmentId).returningAll().executeTakeFirst();
|
|
1778
|
-
},
|
|
1779
|
-
listEnvironments: async (params) => {
|
|
1780
|
-
const value = await listEnvironments.safeParseAsync(params || {});
|
|
1781
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1782
|
-
const { limit = 100, offset = 0 } = value.data;
|
|
1783
|
-
return db.selectFrom("environments").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1784
|
-
},
|
|
1785
|
-
countEnvironments: async () => {
|
|
1786
|
-
const result = await db.selectFrom("environments").select(db.fn.countAll().as("count")).executeTakeFirst();
|
|
1787
|
-
return Number(result?.count ?? 0);
|
|
1788
|
-
}
|
|
1789
|
-
};
|
|
1790
|
-
};
|
|
1791
|
-
|
|
1792
|
-
//#endregion
|
|
1793
|
-
//#region src/datalayer/environmentSecrets.ts
|
|
1794
|
-
const createEnvironmentSecret = zod_default.object({
|
|
1795
|
-
environmentId: zod_default.uuidv4(),
|
|
1796
|
-
keyName: zod_default.string(),
|
|
1797
|
-
keyValue: zod_default.string()
|
|
1798
|
-
});
|
|
1799
|
-
const updateEnvironmentSecret = zod_default.object({
|
|
1800
|
-
secretId: zod_default.uuidv4(),
|
|
1801
|
-
keyName: zod_default.string().optional(),
|
|
1802
|
-
keyValue: zod_default.string().optional()
|
|
1803
|
-
});
|
|
1804
|
-
const getEnvironmentSecretById = zod_default.object({ secretId: zod_default.uuidv4() });
|
|
1805
|
-
const getSecretsByEnvironmentId = zod_default.object({ environmentId: zod_default.uuidv4() });
|
|
1806
|
-
const deleteEnvironmentSecret = zod_default.object({ secretId: zod_default.uuidv4() });
|
|
1807
|
-
const deleteSecretsByEnvironmentId = zod_default.object({ environmentId: zod_default.uuidv4() });
|
|
1808
|
-
const listEnvironmentSecrets = zod_default.object({
|
|
1809
|
-
limit: zod_default.number().int().positive().optional(),
|
|
1810
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
1811
|
-
});
|
|
1812
|
-
const createEnvironmentSecretDataLayer = (db) => {
|
|
1813
|
-
return {
|
|
1814
|
-
createEnvironmentSecret: async (params) => {
|
|
1815
|
-
const value = await createEnvironmentSecret.safeParseAsync(params);
|
|
1816
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1817
|
-
const { environmentId, keyName, keyValue } = value.data;
|
|
1818
|
-
return db.insertInto("environment_secrets").values({
|
|
1819
|
-
id: randomUUID(),
|
|
1820
|
-
environmentId,
|
|
1821
|
-
keyName,
|
|
1822
|
-
keyValue,
|
|
1823
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1824
|
-
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1825
|
-
}).returningAll().executeTakeFirst();
|
|
1826
|
-
},
|
|
1827
|
-
updateEnvironmentSecret: async (params) => {
|
|
1828
|
-
const value = await updateEnvironmentSecret.safeParseAsync(params);
|
|
1829
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1830
|
-
const { secretId, keyName, keyValue } = value.data;
|
|
1831
|
-
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
1832
|
-
if (keyName !== void 0) updateData.keyName = keyName;
|
|
1833
|
-
if (keyValue !== void 0) updateData.keyValue = keyValue;
|
|
1834
|
-
return db.updateTable("environment_secrets").set(updateData).where("id", "=", secretId).returningAll().executeTakeFirst();
|
|
1835
|
-
},
|
|
1836
|
-
getEnvironmentSecretById: async (params) => {
|
|
1837
|
-
const value = await getEnvironmentSecretById.safeParseAsync(params);
|
|
1838
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1839
|
-
const { secretId } = value.data;
|
|
1840
|
-
return db.selectFrom("environment_secrets").selectAll().where("id", "=", secretId).executeTakeFirst();
|
|
1841
|
-
},
|
|
1842
|
-
getSecretsByEnvironmentId: async (params) => {
|
|
1843
|
-
const value = await getSecretsByEnvironmentId.safeParseAsync(params);
|
|
1844
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1845
|
-
const { environmentId } = value.data;
|
|
1846
|
-
return db.selectFrom("environment_secrets").selectAll().where("environmentId", "=", environmentId).orderBy("createdAt", "desc").execute();
|
|
1847
|
-
},
|
|
1848
|
-
deleteEnvironmentSecret: async (params) => {
|
|
1849
|
-
const value = await deleteEnvironmentSecret.safeParseAsync(params);
|
|
1850
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1851
|
-
const { secretId } = value.data;
|
|
1852
|
-
return db.deleteFrom("environment_secrets").where("id", "=", secretId).returningAll().executeTakeFirst();
|
|
1853
|
-
},
|
|
1854
|
-
deleteSecretsByEnvironmentId: async (params) => {
|
|
1855
|
-
const value = await deleteSecretsByEnvironmentId.safeParseAsync(params);
|
|
1856
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1857
|
-
const { environmentId } = value.data;
|
|
1858
|
-
return db.deleteFrom("environment_secrets").where("environmentId", "=", environmentId).returningAll().execute();
|
|
1859
|
-
},
|
|
1860
|
-
listEnvironmentSecrets: async (params) => {
|
|
1861
|
-
const value = await listEnvironmentSecrets.safeParseAsync(params || {});
|
|
1862
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
1863
|
-
const { limit = 100, offset = 0 } = value.data;
|
|
1864
|
-
return db.selectFrom("environment_secrets").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
1865
|
-
},
|
|
1866
|
-
countEnvironmentSecrets: async () => {
|
|
1867
|
-
const result = await db.selectFrom("environment_secrets").select(db.fn.countAll().as("count")).executeTakeFirst();
|
|
1868
|
-
return Number(result?.count ?? 0);
|
|
1869
|
-
}
|
|
1870
|
-
};
|
|
1871
|
-
};
|
|
1872
|
-
|
|
1873
1387
|
//#endregion
|
|
1874
1388
|
//#region src/datalayer/guardrailConfigs.ts
|
|
1875
1389
|
const createGuardrailConfig = zod_default.object({
|
|
@@ -2054,7 +1568,6 @@ const COST_SUMMARY_GROUP_BY = [
|
|
|
2054
1568
|
"hour",
|
|
2055
1569
|
"model",
|
|
2056
1570
|
"provider",
|
|
2057
|
-
"config",
|
|
2058
1571
|
"endpoint",
|
|
2059
1572
|
"tags"
|
|
2060
1573
|
];
|
|
@@ -2076,7 +1589,6 @@ const costSummarySchema = zod_default.object({
|
|
|
2076
1589
|
* Uses sql.ref() to properly quote column names for the database
|
|
2077
1590
|
*/
|
|
2078
1591
|
const col$1 = (name) => sql.ref(name);
|
|
2079
|
-
const tableCol = (table, name) => sql.ref(`${table}.${name}`);
|
|
2080
1592
|
const createLLMRequestsDataLayer = (db) => {
|
|
2081
1593
|
return {
|
|
2082
1594
|
batchInsertRequests: async (requests) => {
|
|
@@ -2250,25 +1762,6 @@ const createLLMRequestsDataLayer = (db) => {
|
|
|
2250
1762
|
sql`AVG(${col$1("latencyMs")})`.as("avgLatencyMs")
|
|
2251
1763
|
]).where(sql`${col$1("createdAt")} >= ${startDate.toISOString()}`).where(sql`${col$1("createdAt")} <= ${endDate.toISOString()}`).groupBy("provider").orderBy(sql`SUM(${col$1("cost")})`, "desc").execute();
|
|
2252
1764
|
},
|
|
2253
|
-
getCostByConfig: async (params) => {
|
|
2254
|
-
const result = await dateRangeSchema.safeParseAsync(params);
|
|
2255
|
-
if (!result.success) throw new LLMOpsError(`Invalid parameters: ${result.error.message}`);
|
|
2256
|
-
const { startDate, endDate } = result.data;
|
|
2257
|
-
return db.selectFrom("llm_requests").leftJoin("configs", "llm_requests.configId", "configs.id").select([
|
|
2258
|
-
"llm_requests.configId",
|
|
2259
|
-
"configs.name as configName",
|
|
2260
|
-
"configs.slug as configSlug",
|
|
2261
|
-
sql`COALESCE(SUM(${tableCol("llm_requests", "cost")}), 0)`.as("totalCost"),
|
|
2262
|
-
sql`COALESCE(SUM(${tableCol("llm_requests", "inputCost")}), 0)`.as("totalInputCost"),
|
|
2263
|
-
sql`COALESCE(SUM(${tableCol("llm_requests", "outputCost")}), 0)`.as("totalOutputCost"),
|
|
2264
|
-
sql`COALESCE(SUM(${tableCol("llm_requests", "totalTokens")}), 0)`.as("totalTokens"),
|
|
2265
|
-
sql`COUNT(*)`.as("requestCount")
|
|
2266
|
-
]).where(sql`${tableCol("llm_requests", "createdAt")} >= ${startDate.toISOString()}`).where(sql`${tableCol("llm_requests", "createdAt")} <= ${endDate.toISOString()}`).groupBy([
|
|
2267
|
-
"llm_requests.configId",
|
|
2268
|
-
"configs.name",
|
|
2269
|
-
"configs.slug"
|
|
2270
|
-
]).orderBy(sql`SUM(${tableCol("llm_requests", "cost")})`, "desc").execute();
|
|
2271
|
-
},
|
|
2272
1765
|
getDailyCosts: async (params) => {
|
|
2273
1766
|
const result = await dateRangeSchema.safeParseAsync(params);
|
|
2274
1767
|
if (!result.success) throw new LLMOpsError(`Invalid parameters: ${result.error.message}`);
|
|
@@ -2321,11 +1814,6 @@ const createLLMRequestsDataLayer = (db) => {
|
|
|
2321
1814
|
sql`COALESCE(SUM(${col$1("cost")}), 0)`.as("totalCost"),
|
|
2322
1815
|
sql`COUNT(*)`.as("requestCount")
|
|
2323
1816
|
]).groupBy("provider").orderBy(sql`SUM(${col$1("cost")})`, "desc").execute();
|
|
2324
|
-
case "config": return baseQuery.select([
|
|
2325
|
-
sql`COALESCE(${col$1("configId")}::text, 'no-config')`.as("groupKey"),
|
|
2326
|
-
sql`COALESCE(SUM(${col$1("cost")}), 0)`.as("totalCost"),
|
|
2327
|
-
sql`COUNT(*)`.as("requestCount")
|
|
2328
|
-
]).groupBy("configId").orderBy(sql`SUM(${col$1("cost")})`, "desc").execute();
|
|
2329
1817
|
case "endpoint": return baseQuery.select([
|
|
2330
1818
|
sql`COALESCE(${col$1("endpoint")}, 'unknown')`.as("groupKey"),
|
|
2331
1819
|
sql`COALESCE(SUM(${col$1("cost")}), 0)`.as("totalCost"),
|
|
@@ -2936,199 +2424,6 @@ const createProviderGuardrailOverridesDataLayer = (db) => {
|
|
|
2936
2424
|
};
|
|
2937
2425
|
};
|
|
2938
2426
|
|
|
2939
|
-
//#endregion
|
|
2940
|
-
//#region src/datalayer/targetingRules.ts
|
|
2941
|
-
const createTargetingRule = zod_default.object({
|
|
2942
|
-
environmentId: zod_default.string().uuid(),
|
|
2943
|
-
configId: zod_default.string().uuid(),
|
|
2944
|
-
configVariantId: zod_default.string().uuid(),
|
|
2945
|
-
variantVersionId: zod_default.string().uuid().nullable().optional(),
|
|
2946
|
-
weight: zod_default.number().int().min(0).max(1e4).optional().default(1e4),
|
|
2947
|
-
priority: zod_default.number().int().optional().default(0),
|
|
2948
|
-
enabled: zod_default.boolean().optional().default(true),
|
|
2949
|
-
conditions: zod_default.record(zod_default.string(), zod_default.unknown()).nullable().optional()
|
|
2950
|
-
});
|
|
2951
|
-
const updateTargetingRule = zod_default.object({
|
|
2952
|
-
id: zod_default.string().uuid(),
|
|
2953
|
-
variantVersionId: zod_default.string().uuid().nullable().optional(),
|
|
2954
|
-
weight: zod_default.number().int().min(0).max(1e4).optional(),
|
|
2955
|
-
priority: zod_default.number().int().optional(),
|
|
2956
|
-
enabled: zod_default.boolean().optional(),
|
|
2957
|
-
conditions: zod_default.record(zod_default.string(), zod_default.unknown()).nullable().optional()
|
|
2958
|
-
});
|
|
2959
|
-
const getTargetingRuleById = zod_default.object({ id: zod_default.string().uuid() });
|
|
2960
|
-
const getTargetingRulesByConfigId = zod_default.object({
|
|
2961
|
-
configId: zod_default.string().uuid(),
|
|
2962
|
-
limit: zod_default.number().int().positive().optional(),
|
|
2963
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
2964
|
-
});
|
|
2965
|
-
const getTargetingRulesByEnvironmentId = zod_default.object({
|
|
2966
|
-
environmentId: zod_default.string().uuid(),
|
|
2967
|
-
limit: zod_default.number().int().positive().optional(),
|
|
2968
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
2969
|
-
});
|
|
2970
|
-
const getTargetingRulesByConfigAndEnvironment = zod_default.object({
|
|
2971
|
-
configId: zod_default.string().uuid(),
|
|
2972
|
-
environmentId: zod_default.string().uuid()
|
|
2973
|
-
});
|
|
2974
|
-
const deleteTargetingRule = zod_default.object({ id: zod_default.string().uuid() });
|
|
2975
|
-
const deleteTargetingRulesByConfigId = zod_default.object({ configId: zod_default.string().uuid() });
|
|
2976
|
-
const deleteTargetingRulesByEnvironmentId = zod_default.object({ environmentId: zod_default.string().uuid() });
|
|
2977
|
-
const listTargetingRules = zod_default.object({
|
|
2978
|
-
limit: zod_default.number().int().positive().optional(),
|
|
2979
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
2980
|
-
});
|
|
2981
|
-
const setTargetingForEnvironment = zod_default.object({
|
|
2982
|
-
environmentId: zod_default.string().uuid(),
|
|
2983
|
-
configId: zod_default.string().uuid(),
|
|
2984
|
-
configVariantId: zod_default.string().uuid(),
|
|
2985
|
-
variantVersionId: zod_default.string().uuid().nullable().optional()
|
|
2986
|
-
});
|
|
2987
|
-
const createTargetingRulesDataLayer = (db) => {
|
|
2988
|
-
return {
|
|
2989
|
-
createTargetingRule: async (params) => {
|
|
2990
|
-
const value = await createTargetingRule.safeParseAsync(params);
|
|
2991
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
2992
|
-
const { environmentId, configId, configVariantId, variantVersionId, weight, priority, enabled, conditions } = value.data;
|
|
2993
|
-
return db.insertInto("targeting_rules").values({
|
|
2994
|
-
id: randomUUID(),
|
|
2995
|
-
environmentId,
|
|
2996
|
-
configId,
|
|
2997
|
-
configVariantId,
|
|
2998
|
-
variantVersionId: variantVersionId ?? null,
|
|
2999
|
-
weight,
|
|
3000
|
-
priority,
|
|
3001
|
-
enabled,
|
|
3002
|
-
conditions: JSON.stringify(conditions ?? {}),
|
|
3003
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
3004
|
-
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
3005
|
-
}).returningAll().executeTakeFirst();
|
|
3006
|
-
},
|
|
3007
|
-
updateTargetingRule: async (params) => {
|
|
3008
|
-
const value = await updateTargetingRule.safeParseAsync(params);
|
|
3009
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3010
|
-
const { id, variantVersionId, weight, priority, enabled, conditions } = value.data;
|
|
3011
|
-
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
3012
|
-
if (variantVersionId !== void 0) updateData.variantVersionId = variantVersionId;
|
|
3013
|
-
if (weight !== void 0) updateData.weight = weight;
|
|
3014
|
-
if (priority !== void 0) updateData.priority = priority;
|
|
3015
|
-
if (enabled !== void 0) updateData.enabled = enabled;
|
|
3016
|
-
if (conditions !== void 0) updateData.conditions = conditions ? JSON.stringify(conditions) : null;
|
|
3017
|
-
return db.updateTable("targeting_rules").set(updateData).where("id", "=", id).returningAll().executeTakeFirst();
|
|
3018
|
-
},
|
|
3019
|
-
getTargetingRuleById: async (params) => {
|
|
3020
|
-
const value = await getTargetingRuleById.safeParseAsync(params);
|
|
3021
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3022
|
-
const { id } = value.data;
|
|
3023
|
-
return db.selectFrom("targeting_rules").selectAll().where("id", "=", id).executeTakeFirst();
|
|
3024
|
-
},
|
|
3025
|
-
getTargetingRulesByConfigId: async (params) => {
|
|
3026
|
-
const value = await getTargetingRulesByConfigId.safeParseAsync(params);
|
|
3027
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3028
|
-
const { configId, limit = 100, offset = 0 } = value.data;
|
|
3029
|
-
return db.selectFrom("targeting_rules").selectAll().where("configId", "=", configId).where("enabled", "=", true).orderBy("priority", "desc").orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
3030
|
-
},
|
|
3031
|
-
getTargetingRulesByEnvironmentId: async (params) => {
|
|
3032
|
-
const value = await getTargetingRulesByEnvironmentId.safeParseAsync(params);
|
|
3033
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3034
|
-
const { environmentId, limit = 100, offset = 0 } = value.data;
|
|
3035
|
-
return db.selectFrom("targeting_rules").selectAll().where("environmentId", "=", environmentId).where("enabled", "=", true).orderBy("priority", "desc").orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
3036
|
-
},
|
|
3037
|
-
getTargetingRulesByConfigAndEnvironment: async (params) => {
|
|
3038
|
-
const value = await getTargetingRulesByConfigAndEnvironment.safeParseAsync(params);
|
|
3039
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3040
|
-
const { configId, environmentId } = value.data;
|
|
3041
|
-
return db.selectFrom("targeting_rules").selectAll().where("configId", "=", configId).where("environmentId", "=", environmentId).where("enabled", "=", true).orderBy("priority", "desc").orderBy("weight", "desc").execute();
|
|
3042
|
-
},
|
|
3043
|
-
deleteTargetingRule: async (params) => {
|
|
3044
|
-
const value = await deleteTargetingRule.safeParseAsync(params);
|
|
3045
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3046
|
-
const { id } = value.data;
|
|
3047
|
-
return db.deleteFrom("targeting_rules").where("id", "=", id).returningAll().executeTakeFirst();
|
|
3048
|
-
},
|
|
3049
|
-
deleteTargetingRulesByConfigId: async (params) => {
|
|
3050
|
-
const value = await deleteTargetingRulesByConfigId.safeParseAsync(params);
|
|
3051
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3052
|
-
const { configId } = value.data;
|
|
3053
|
-
return db.deleteFrom("targeting_rules").where("configId", "=", configId).returningAll().execute();
|
|
3054
|
-
},
|
|
3055
|
-
deleteTargetingRulesByEnvironmentId: async (params) => {
|
|
3056
|
-
const value = await deleteTargetingRulesByEnvironmentId.safeParseAsync(params);
|
|
3057
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3058
|
-
const { environmentId } = value.data;
|
|
3059
|
-
return db.deleteFrom("targeting_rules").where("environmentId", "=", environmentId).returningAll().execute();
|
|
3060
|
-
},
|
|
3061
|
-
listTargetingRules: async (params) => {
|
|
3062
|
-
const value = await listTargetingRules.safeParseAsync(params || {});
|
|
3063
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3064
|
-
const { limit = 100, offset = 0 } = value.data;
|
|
3065
|
-
return db.selectFrom("targeting_rules").selectAll().orderBy("priority", "desc").orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
3066
|
-
},
|
|
3067
|
-
getTargetingRulesWithDetailsByConfigId: async (params) => {
|
|
3068
|
-
const value = await getTargetingRulesByConfigId.safeParseAsync(params);
|
|
3069
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3070
|
-
const { configId, limit = 100, offset = 0 } = value.data;
|
|
3071
|
-
const rules = await db.selectFrom("targeting_rules").leftJoin("environments", "targeting_rules.environmentId", "environments.id").leftJoin("config_variants", "targeting_rules.configVariantId", "config_variants.id").leftJoin("variants", "config_variants.variantId", "variants.id").select([
|
|
3072
|
-
"targeting_rules.id",
|
|
3073
|
-
"targeting_rules.environmentId",
|
|
3074
|
-
"targeting_rules.configId",
|
|
3075
|
-
"targeting_rules.configVariantId",
|
|
3076
|
-
"targeting_rules.variantVersionId",
|
|
3077
|
-
"targeting_rules.weight",
|
|
3078
|
-
"targeting_rules.priority",
|
|
3079
|
-
"targeting_rules.enabled",
|
|
3080
|
-
"targeting_rules.conditions",
|
|
3081
|
-
"targeting_rules.createdAt",
|
|
3082
|
-
"targeting_rules.updatedAt",
|
|
3083
|
-
"environments.name as environmentName",
|
|
3084
|
-
"environments.slug as environmentSlug",
|
|
3085
|
-
"variants.name as variantName",
|
|
3086
|
-
"config_variants.variantId"
|
|
3087
|
-
]).where("targeting_rules.configId", "=", configId).orderBy("targeting_rules.priority", "desc").orderBy("targeting_rules.createdAt", "desc").limit(limit).offset(offset).execute();
|
|
3088
|
-
return await Promise.all(rules.map(async (rule) => {
|
|
3089
|
-
let versionInfo = null;
|
|
3090
|
-
if (rule.variantVersionId) versionInfo = await db.selectFrom("variant_versions").select([
|
|
3091
|
-
"provider",
|
|
3092
|
-
"modelName",
|
|
3093
|
-
"version"
|
|
3094
|
-
]).where("id", "=", rule.variantVersionId).executeTakeFirst();
|
|
3095
|
-
else if (rule.variantId) versionInfo = await db.selectFrom("variant_versions").select([
|
|
3096
|
-
"provider",
|
|
3097
|
-
"modelName",
|
|
3098
|
-
"version"
|
|
3099
|
-
]).where("variantId", "=", rule.variantId).orderBy("version", "desc").limit(1).executeTakeFirst();
|
|
3100
|
-
return {
|
|
3101
|
-
...rule,
|
|
3102
|
-
variantProvider: versionInfo?.provider ?? null,
|
|
3103
|
-
variantModelName: versionInfo?.modelName ?? null,
|
|
3104
|
-
pinnedVersion: rule.variantVersionId ? versionInfo?.version : null,
|
|
3105
|
-
latestVersion: !rule.variantVersionId ? versionInfo?.version : null
|
|
3106
|
-
};
|
|
3107
|
-
}));
|
|
3108
|
-
},
|
|
3109
|
-
setTargetingForEnvironment: async (params) => {
|
|
3110
|
-
const value = await setTargetingForEnvironment.safeParseAsync(params);
|
|
3111
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3112
|
-
const { environmentId, configId, configVariantId, variantVersionId } = value.data;
|
|
3113
|
-
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
3114
|
-
await db.deleteFrom("targeting_rules").where("configId", "=", configId).where("environmentId", "=", environmentId).execute();
|
|
3115
|
-
return db.insertInto("targeting_rules").values({
|
|
3116
|
-
id: randomUUID(),
|
|
3117
|
-
environmentId,
|
|
3118
|
-
configId,
|
|
3119
|
-
configVariantId,
|
|
3120
|
-
variantVersionId: variantVersionId ?? null,
|
|
3121
|
-
weight: 1e4,
|
|
3122
|
-
priority: 0,
|
|
3123
|
-
enabled: true,
|
|
3124
|
-
conditions: JSON.stringify({}),
|
|
3125
|
-
createdAt: now,
|
|
3126
|
-
updatedAt: now
|
|
3127
|
-
}).returningAll().executeTakeFirst();
|
|
3128
|
-
}
|
|
3129
|
-
};
|
|
3130
|
-
};
|
|
3131
|
-
|
|
3132
2427
|
//#endregion
|
|
3133
2428
|
//#region src/datalayer/traces.ts
|
|
3134
2429
|
const col = (name) => sql.ref(name);
|
|
@@ -3408,198 +2703,6 @@ const createTracesDataLayer = (db) => {
|
|
|
3408
2703
|
};
|
|
3409
2704
|
};
|
|
3410
2705
|
|
|
3411
|
-
//#endregion
|
|
3412
|
-
//#region src/datalayer/variants.ts
|
|
3413
|
-
const createVariant = zod_default.object({ name: zod_default.string() });
|
|
3414
|
-
const updateVariant = zod_default.object({
|
|
3415
|
-
variantId: zod_default.string().uuid(),
|
|
3416
|
-
name: zod_default.string().optional()
|
|
3417
|
-
});
|
|
3418
|
-
const getVariantById = zod_default.object({ variantId: zod_default.string().uuid() });
|
|
3419
|
-
const deleteVariant = zod_default.object({ variantId: zod_default.string().uuid() });
|
|
3420
|
-
const listVariants = zod_default.object({
|
|
3421
|
-
limit: zod_default.number().int().positive().optional(),
|
|
3422
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
3423
|
-
});
|
|
3424
|
-
const createVariantDataLayer = (db) => {
|
|
3425
|
-
return {
|
|
3426
|
-
createVariant: async (params) => {
|
|
3427
|
-
const value = await createVariant.safeParseAsync(params);
|
|
3428
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3429
|
-
const { name } = value.data;
|
|
3430
|
-
return db.insertInto("variants").values({
|
|
3431
|
-
id: randomUUID(),
|
|
3432
|
-
name,
|
|
3433
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
3434
|
-
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
3435
|
-
}).returningAll().executeTakeFirst();
|
|
3436
|
-
},
|
|
3437
|
-
updateVariant: async (params) => {
|
|
3438
|
-
const value = await updateVariant.safeParseAsync(params);
|
|
3439
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3440
|
-
const { variantId, ...updates } = value.data;
|
|
3441
|
-
const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
3442
|
-
if (updates.name) updateData.name = updates.name;
|
|
3443
|
-
return db.updateTable("variants").set(updateData).where("id", "=", variantId).returningAll().executeTakeFirst();
|
|
3444
|
-
},
|
|
3445
|
-
getVariantById: async (params) => {
|
|
3446
|
-
const value = await getVariantById.safeParseAsync(params);
|
|
3447
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3448
|
-
const { variantId } = value.data;
|
|
3449
|
-
return db.selectFrom("variants").selectAll().where("id", "=", variantId).executeTakeFirst();
|
|
3450
|
-
},
|
|
3451
|
-
getVariantWithLatestVersion: async (params) => {
|
|
3452
|
-
const value = await getVariantById.safeParseAsync(params);
|
|
3453
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3454
|
-
const { variantId } = value.data;
|
|
3455
|
-
const variant = await db.selectFrom("variants").selectAll().where("id", "=", variantId).executeTakeFirst();
|
|
3456
|
-
if (!variant) return;
|
|
3457
|
-
const latestVersion = await db.selectFrom("variant_versions").selectAll().where("variantId", "=", variantId).orderBy("version", "desc").limit(1).executeTakeFirst();
|
|
3458
|
-
return {
|
|
3459
|
-
...variant,
|
|
3460
|
-
latestVersion: latestVersion ?? null
|
|
3461
|
-
};
|
|
3462
|
-
},
|
|
3463
|
-
deleteVariant: async (params) => {
|
|
3464
|
-
const value = await deleteVariant.safeParseAsync(params);
|
|
3465
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3466
|
-
const { variantId } = value.data;
|
|
3467
|
-
await db.deleteFrom("variant_versions").where("variantId", "=", variantId).execute();
|
|
3468
|
-
return db.deleteFrom("variants").where("id", "=", variantId).returningAll().executeTakeFirst();
|
|
3469
|
-
},
|
|
3470
|
-
listVariants: async (params) => {
|
|
3471
|
-
const value = await listVariants.safeParseAsync(params || {});
|
|
3472
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3473
|
-
const { limit = 100, offset = 0 } = value.data;
|
|
3474
|
-
return db.selectFrom("variants").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
3475
|
-
},
|
|
3476
|
-
listVariantsWithLatestVersion: async (params) => {
|
|
3477
|
-
const value = await listVariants.safeParseAsync(params || {});
|
|
3478
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3479
|
-
const { limit = 100, offset = 0 } = value.data;
|
|
3480
|
-
const variants = await db.selectFrom("variants").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
|
|
3481
|
-
if (variants.length === 0) return [];
|
|
3482
|
-
return await Promise.all(variants.map(async (variant) => {
|
|
3483
|
-
const latestVersion = await db.selectFrom("variant_versions").selectAll().where("variantId", "=", variant.id).orderBy("version", "desc").limit(1).executeTakeFirst();
|
|
3484
|
-
return {
|
|
3485
|
-
...variant,
|
|
3486
|
-
latestVersion: latestVersion ?? null
|
|
3487
|
-
};
|
|
3488
|
-
}));
|
|
3489
|
-
}
|
|
3490
|
-
};
|
|
3491
|
-
};
|
|
3492
|
-
|
|
3493
|
-
//#endregion
|
|
3494
|
-
//#region src/datalayer/variantVersions.ts
|
|
3495
|
-
const createVariantVersion = zod_default.object({
|
|
3496
|
-
variantId: zod_default.string().uuid(),
|
|
3497
|
-
provider: zod_default.string(),
|
|
3498
|
-
modelName: zod_default.string(),
|
|
3499
|
-
jsonData: zod_default.record(zod_default.string(), zod_default.unknown()).optional().default({})
|
|
3500
|
-
});
|
|
3501
|
-
const getVariantVersionById = zod_default.object({ id: zod_default.string().uuid() });
|
|
3502
|
-
const getVariantVersionsByVariantId = zod_default.object({
|
|
3503
|
-
variantId: zod_default.string().uuid(),
|
|
3504
|
-
limit: zod_default.number().int().positive().optional(),
|
|
3505
|
-
offset: zod_default.number().int().nonnegative().optional()
|
|
3506
|
-
});
|
|
3507
|
-
const getLatestVariantVersion = zod_default.object({ variantId: zod_default.string().uuid() });
|
|
3508
|
-
const getVariantVersionByNumber = zod_default.object({
|
|
3509
|
-
variantId: zod_default.string().uuid(),
|
|
3510
|
-
version: zod_default.number().int().positive()
|
|
3511
|
-
});
|
|
3512
|
-
const deleteVariantVersion = zod_default.object({ id: zod_default.string().uuid() });
|
|
3513
|
-
const createVariantVersionsDataLayer = (db) => {
|
|
3514
|
-
return {
|
|
3515
|
-
createVariantVersion: async (params) => {
|
|
3516
|
-
const value = await createVariantVersion.safeParseAsync(params);
|
|
3517
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3518
|
-
const { variantId, provider, modelName, jsonData } = value.data;
|
|
3519
|
-
const newVersionNumber = ((await db.selectFrom("variant_versions").select("version").where("variantId", "=", variantId).orderBy("version", "desc").limit(1).executeTakeFirst())?.version ?? 0) + 1;
|
|
3520
|
-
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
3521
|
-
return db.insertInto("variant_versions").values({
|
|
3522
|
-
id: randomUUID(),
|
|
3523
|
-
variantId,
|
|
3524
|
-
version: newVersionNumber,
|
|
3525
|
-
provider,
|
|
3526
|
-
modelName,
|
|
3527
|
-
jsonData: JSON.stringify(jsonData),
|
|
3528
|
-
createdAt: now,
|
|
3529
|
-
updatedAt: now
|
|
3530
|
-
}).returningAll().executeTakeFirst();
|
|
3531
|
-
},
|
|
3532
|
-
getVariantVersionById: async (params) => {
|
|
3533
|
-
const value = await getVariantVersionById.safeParseAsync(params);
|
|
3534
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3535
|
-
const { id } = value.data;
|
|
3536
|
-
return db.selectFrom("variant_versions").selectAll().where("id", "=", id).executeTakeFirst();
|
|
3537
|
-
},
|
|
3538
|
-
getVariantVersionsByVariantId: async (params) => {
|
|
3539
|
-
const value = await getVariantVersionsByVariantId.safeParseAsync(params);
|
|
3540
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3541
|
-
const { variantId, limit = 100, offset = 0 } = value.data;
|
|
3542
|
-
return db.selectFrom("variant_versions").selectAll().where("variantId", "=", variantId).orderBy("version", "desc").limit(limit).offset(offset).execute();
|
|
3543
|
-
},
|
|
3544
|
-
getLatestVariantVersion: async (params) => {
|
|
3545
|
-
const value = await getLatestVariantVersion.safeParseAsync(params);
|
|
3546
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3547
|
-
const { variantId } = value.data;
|
|
3548
|
-
return db.selectFrom("variant_versions").selectAll().where("variantId", "=", variantId).orderBy("version", "desc").limit(1).executeTakeFirst();
|
|
3549
|
-
},
|
|
3550
|
-
getVariantVersionByNumber: async (params) => {
|
|
3551
|
-
const value = await getVariantVersionByNumber.safeParseAsync(params);
|
|
3552
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3553
|
-
const { variantId, version } = value.data;
|
|
3554
|
-
return db.selectFrom("variant_versions").selectAll().where("variantId", "=", variantId).where("version", "=", version).executeTakeFirst();
|
|
3555
|
-
},
|
|
3556
|
-
deleteVariantVersion: async (params) => {
|
|
3557
|
-
const value = await deleteVariantVersion.safeParseAsync(params);
|
|
3558
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3559
|
-
const { id } = value.data;
|
|
3560
|
-
return db.deleteFrom("variant_versions").where("id", "=", id).returningAll().executeTakeFirst();
|
|
3561
|
-
},
|
|
3562
|
-
deleteVariantVersionsByVariantId: async (params) => {
|
|
3563
|
-
const value = await getLatestVariantVersion.safeParseAsync(params);
|
|
3564
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3565
|
-
const { variantId } = value.data;
|
|
3566
|
-
return db.deleteFrom("variant_versions").where("variantId", "=", variantId).returningAll().execute();
|
|
3567
|
-
},
|
|
3568
|
-
getVariantVersionWithVariant: async (params) => {
|
|
3569
|
-
const value = await getVariantVersionById.safeParseAsync(params);
|
|
3570
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3571
|
-
const { id } = value.data;
|
|
3572
|
-
return db.selectFrom("variant_versions").innerJoin("variants", "variant_versions.variantId", "variants.id").select([
|
|
3573
|
-
"variant_versions.id",
|
|
3574
|
-
"variant_versions.variantId",
|
|
3575
|
-
"variant_versions.version",
|
|
3576
|
-
"variant_versions.provider",
|
|
3577
|
-
"variant_versions.modelName",
|
|
3578
|
-
"variant_versions.jsonData",
|
|
3579
|
-
"variant_versions.createdAt",
|
|
3580
|
-
"variant_versions.updatedAt",
|
|
3581
|
-
"variants.name as variantName"
|
|
3582
|
-
]).where("variant_versions.id", "=", id).executeTakeFirst();
|
|
3583
|
-
},
|
|
3584
|
-
getVariantVersionsWithVariantByVariantId: async (params) => {
|
|
3585
|
-
const value = await getVariantVersionsByVariantId.safeParseAsync(params);
|
|
3586
|
-
if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
|
|
3587
|
-
const { variantId, limit = 100, offset = 0 } = value.data;
|
|
3588
|
-
return db.selectFrom("variant_versions").innerJoin("variants", "variant_versions.variantId", "variants.id").select([
|
|
3589
|
-
"variant_versions.id",
|
|
3590
|
-
"variant_versions.variantId",
|
|
3591
|
-
"variant_versions.version",
|
|
3592
|
-
"variant_versions.provider",
|
|
3593
|
-
"variant_versions.modelName",
|
|
3594
|
-
"variant_versions.jsonData",
|
|
3595
|
-
"variant_versions.createdAt",
|
|
3596
|
-
"variant_versions.updatedAt",
|
|
3597
|
-
"variants.name as variantName"
|
|
3598
|
-
]).where("variant_versions.variantId", "=", variantId).orderBy("variant_versions.version", "desc").limit(limit).offset(offset).execute();
|
|
3599
|
-
}
|
|
3600
|
-
};
|
|
3601
|
-
};
|
|
3602
|
-
|
|
3603
2706
|
//#endregion
|
|
3604
2707
|
//#region src/datalayer/workspaceSettings.ts
|
|
3605
2708
|
const updateWorkspaceSettings = zod_default.object({
|
|
@@ -3692,11 +2795,7 @@ const createWorkspaceSettingsDataLayer = (db) => {
|
|
|
3692
2795
|
*/
|
|
3693
2796
|
function createDataLayer(db) {
|
|
3694
2797
|
return {
|
|
3695
|
-
...createConfigDataLayer(db),
|
|
3696
|
-
...createConfigVariantDataLayer(db),
|
|
3697
2798
|
...createDatasetsDataLayer(db),
|
|
3698
|
-
...createEnvironmentDataLayer(db),
|
|
3699
|
-
...createEnvironmentSecretDataLayer(db),
|
|
3700
2799
|
...createGuardrailConfigsDataLayer(db),
|
|
3701
2800
|
...createLLMRequestsDataLayer(db),
|
|
3702
2801
|
...createPlaygroundDataLayer(db),
|
|
@@ -3704,10 +2803,7 @@ function createDataLayer(db) {
|
|
|
3704
2803
|
...createPlaygroundRunsDataLayer(db),
|
|
3705
2804
|
...createProviderConfigsDataLayer(db),
|
|
3706
2805
|
...createProviderGuardrailOverridesDataLayer(db),
|
|
3707
|
-
...createTargetingRulesDataLayer(db),
|
|
3708
2806
|
...createTracesDataLayer(db),
|
|
3709
|
-
...createVariantDataLayer(db),
|
|
3710
|
-
...createVariantVersionsDataLayer(db),
|
|
3711
2807
|
...createWorkspaceSettingsDataLayer(db)
|
|
3712
2808
|
};
|
|
3713
2809
|
}
|
|
@@ -3985,122 +3081,58 @@ function getDefaultPricingProvider() {
|
|
|
3985
3081
|
return defaultProvider;
|
|
3986
3082
|
}
|
|
3987
3083
|
|
|
3084
|
+
//#endregion
|
|
3085
|
+
//#region src/telemetry/postgres.ts
|
|
3086
|
+
/**
|
|
3087
|
+
* Create a PostgreSQL-backed telemetry store.
|
|
3088
|
+
*
|
|
3089
|
+
* Usage:
|
|
3090
|
+
* ```ts
|
|
3091
|
+
* import { llmops, pgStore } from '@llmops/sdk'
|
|
3092
|
+
*
|
|
3093
|
+
* const ops = llmops({
|
|
3094
|
+
* telemetry: pgStore(process.env.DATABASE_URL),
|
|
3095
|
+
* })
|
|
3096
|
+
* ```
|
|
3097
|
+
*/
|
|
3098
|
+
function createPgStore(connectionString, options) {
|
|
3099
|
+
const schema = options?.schema ?? "llmops";
|
|
3100
|
+
let pool;
|
|
3101
|
+
try {
|
|
3102
|
+
pool = new (__require("pg")).Pool({ connectionString });
|
|
3103
|
+
} catch {
|
|
3104
|
+
throw new Error("pgStore requires the \"pg\" package. Install it with: pnpm add pg");
|
|
3105
|
+
}
|
|
3106
|
+
const db = new Kysely({ dialect: new PostgresDialect({
|
|
3107
|
+
pool,
|
|
3108
|
+
onCreateConnection: async (connection) => {
|
|
3109
|
+
await connection.executeQuery(CompiledQuery.raw(`SET search_path TO "${schema}"`));
|
|
3110
|
+
}
|
|
3111
|
+
}) });
|
|
3112
|
+
const llmRequests = createLLMRequestsDataLayer(db);
|
|
3113
|
+
const traces = createTracesDataLayer(db);
|
|
3114
|
+
logger.debug(`pgStore: initialized with schema "${schema}"`);
|
|
3115
|
+
return {
|
|
3116
|
+
...llmRequests,
|
|
3117
|
+
...traces,
|
|
3118
|
+
_db: db
|
|
3119
|
+
};
|
|
3120
|
+
}
|
|
3121
|
+
|
|
3988
3122
|
//#endregion
|
|
3989
3123
|
//#region src/manifest/builder.ts
|
|
3990
|
-
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
3991
3124
|
/**
|
|
3992
|
-
* Builds the gateway
|
|
3125
|
+
* Builds the gateway manifest from database
|
|
3993
3126
|
*/
|
|
3994
3127
|
var ManifestBuilder = class {
|
|
3995
3128
|
constructor(db) {
|
|
3996
3129
|
this.db = db;
|
|
3997
3130
|
}
|
|
3998
3131
|
/**
|
|
3999
|
-
* Build the
|
|
3132
|
+
* Build the manifest from database
|
|
4000
3133
|
*/
|
|
4001
3134
|
async build() {
|
|
4002
|
-
const [
|
|
4003
|
-
this.db.selectFrom("configs").selectAll().execute(),
|
|
4004
|
-
this.db.selectFrom("environments").selectAll().execute(),
|
|
4005
|
-
this.db.selectFrom("environment_secrets").selectAll().execute(),
|
|
4006
|
-
this.db.selectFrom("targeting_rules").where("enabled", "=", true).selectAll().execute(),
|
|
4007
|
-
this.db.selectFrom("config_variants").selectAll().execute(),
|
|
4008
|
-
this.db.selectFrom("variant_versions").selectAll().execute(),
|
|
4009
|
-
this.db.selectFrom("provider_configs").selectAll().execute(),
|
|
4010
|
-
this.db.selectFrom("guardrail_configs").where("enabled", "=", true).selectAll().execute(),
|
|
4011
|
-
this.db.selectFrom("provider_guardrail_overrides").selectAll().execute()
|
|
4012
|
-
]);
|
|
4013
|
-
const manifestConfigs = {};
|
|
4014
|
-
const configsBySlug = {};
|
|
4015
|
-
for (const config of configs) {
|
|
4016
|
-
manifestConfigs[config.id] = {
|
|
4017
|
-
id: config.id,
|
|
4018
|
-
slug: config.slug,
|
|
4019
|
-
name: config.name ?? null
|
|
4020
|
-
};
|
|
4021
|
-
configsBySlug[config.slug] = config.id;
|
|
4022
|
-
}
|
|
4023
|
-
const manifestEnvironments = {};
|
|
4024
|
-
const environmentsBySlug = {};
|
|
4025
|
-
for (const env of environments) {
|
|
4026
|
-
manifestEnvironments[env.id] = {
|
|
4027
|
-
id: env.id,
|
|
4028
|
-
slug: env.slug,
|
|
4029
|
-
name: env.name,
|
|
4030
|
-
isProd: env.isProd
|
|
4031
|
-
};
|
|
4032
|
-
environmentsBySlug[env.slug] = env.id;
|
|
4033
|
-
}
|
|
4034
|
-
const secretToEnvironment = {};
|
|
4035
|
-
for (const secret of environmentSecrets) secretToEnvironment[secret.keyValue] = secret.environmentId;
|
|
4036
|
-
const configVariantMap = new Map(configVariants.map((cv) => [cv.id, cv]));
|
|
4037
|
-
const providerConfigMap = new Map(providerConfigs.map((pc) => [pc.id, pc]));
|
|
4038
|
-
const versionsByVariant = /* @__PURE__ */ new Map();
|
|
4039
|
-
for (const vv of variantVersions) {
|
|
4040
|
-
const list = versionsByVariant.get(vv.variantId) || [];
|
|
4041
|
-
list.push(vv);
|
|
4042
|
-
versionsByVariant.set(vv.variantId, list);
|
|
4043
|
-
}
|
|
4044
|
-
for (const list of versionsByVariant.values()) list.sort((a, b) => b.version - a.version);
|
|
4045
|
-
const versionById = new Map(variantVersions.map((vv) => [vv.id, vv]));
|
|
4046
|
-
const resolveProvider = (provider) => {
|
|
4047
|
-
if (UUID_REGEX.test(provider)) {
|
|
4048
|
-
const pc = providerConfigMap.get(provider);
|
|
4049
|
-
if (pc) return {
|
|
4050
|
-
providerId: pc.providerId,
|
|
4051
|
-
providerConfigId: pc.id
|
|
4052
|
-
};
|
|
4053
|
-
}
|
|
4054
|
-
return {
|
|
4055
|
-
providerId: provider,
|
|
4056
|
-
providerConfigId: null
|
|
4057
|
-
};
|
|
4058
|
-
};
|
|
4059
|
-
const buildVersion = (vv) => {
|
|
4060
|
-
const { providerId, providerConfigId } = resolveProvider(vv.provider);
|
|
4061
|
-
const jsonData = typeof vv.jsonData === "string" ? JSON.parse(vv.jsonData) : vv.jsonData;
|
|
4062
|
-
return {
|
|
4063
|
-
id: vv.id,
|
|
4064
|
-
variantId: vv.variantId,
|
|
4065
|
-
version: vv.version,
|
|
4066
|
-
provider: providerId,
|
|
4067
|
-
providerConfigId,
|
|
4068
|
-
modelName: vv.modelName,
|
|
4069
|
-
jsonData
|
|
4070
|
-
};
|
|
4071
|
-
};
|
|
4072
|
-
const routingTable = {};
|
|
4073
|
-
for (const rule of targetingRules) {
|
|
4074
|
-
const configVariant = configVariantMap.get(rule.configVariantId);
|
|
4075
|
-
if (!configVariant) continue;
|
|
4076
|
-
const variantId = configVariant.variantId;
|
|
4077
|
-
let resolvedVersionData;
|
|
4078
|
-
if (rule.variantVersionId) resolvedVersionData = versionById.get(rule.variantVersionId);
|
|
4079
|
-
else resolvedVersionData = versionsByVariant.get(variantId)?.[0];
|
|
4080
|
-
if (!resolvedVersionData) continue;
|
|
4081
|
-
let conditions = null;
|
|
4082
|
-
if (rule.conditions) {
|
|
4083
|
-
const conditionsObj = typeof rule.conditions === "string" ? JSON.parse(rule.conditions) : rule.conditions;
|
|
4084
|
-
if (conditionsObj && Object.keys(conditionsObj).length > 0) conditions = conditionsObj;
|
|
4085
|
-
}
|
|
4086
|
-
const manifestRule = {
|
|
4087
|
-
id: rule.id,
|
|
4088
|
-
configVariantId: rule.configVariantId,
|
|
4089
|
-
variantVersionId: rule.variantVersionId,
|
|
4090
|
-
weight: rule.weight,
|
|
4091
|
-
priority: rule.priority,
|
|
4092
|
-
enabled: rule.enabled,
|
|
4093
|
-
conditions,
|
|
4094
|
-
resolvedVersion: buildVersion(resolvedVersionData)
|
|
4095
|
-
};
|
|
4096
|
-
if (!routingTable[rule.configId]) routingTable[rule.configId] = {};
|
|
4097
|
-
if (!routingTable[rule.configId][rule.environmentId]) routingTable[rule.configId][rule.environmentId] = [];
|
|
4098
|
-
routingTable[rule.configId][rule.environmentId].push(manifestRule);
|
|
4099
|
-
}
|
|
4100
|
-
for (const configRules of Object.values(routingTable)) for (const envRules of Object.values(configRules)) envRules.sort((a, b) => {
|
|
4101
|
-
if (b.priority !== a.priority) return b.priority - a.priority;
|
|
4102
|
-
return b.weight - a.weight;
|
|
4103
|
-
});
|
|
3135
|
+
const [guardrailConfigs, providerGuardrailOverridesData] = await Promise.all([this.db.selectFrom("guardrail_configs").where("enabled", "=", true).selectAll().execute(), this.db.selectFrom("provider_guardrail_overrides").selectAll().execute()]);
|
|
4104
3136
|
const beforeRequestGuardrails = [];
|
|
4105
3137
|
const afterRequestGuardrails = [];
|
|
4106
3138
|
logger.info(`[ManifestBuilder] Found ${guardrailConfigs.length} enabled guardrail configs`);
|
|
@@ -4137,12 +3169,6 @@ var ManifestBuilder = class {
|
|
|
4137
3169
|
return {
|
|
4138
3170
|
version: Date.now(),
|
|
4139
3171
|
builtAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
4140
|
-
configs: manifestConfigs,
|
|
4141
|
-
configsBySlug,
|
|
4142
|
-
environments: manifestEnvironments,
|
|
4143
|
-
environmentsBySlug,
|
|
4144
|
-
routingTable,
|
|
4145
|
-
secretToEnvironment,
|
|
4146
3172
|
guardrails: {
|
|
4147
3173
|
beforeRequestHook: beforeRequestGuardrails,
|
|
4148
3174
|
afterRequestHook: afterRequestGuardrails
|
|
@@ -4174,11 +3200,7 @@ var ManifestService = class {
|
|
|
4174
3200
|
const manifest = await this.cache.getOrSet(MANIFEST_CACHE_KEY, async () => {
|
|
4175
3201
|
log.info("Building new manifest");
|
|
4176
3202
|
const built = await this.builder.build();
|
|
4177
|
-
log.info({
|
|
4178
|
-
version: built.version,
|
|
4179
|
-
configCount: Object.keys(built.configs).length,
|
|
4180
|
-
environmentCount: Object.keys(built.environments).length
|
|
4181
|
-
}, "Manifest built successfully");
|
|
3203
|
+
log.info({ version: built.version }, "Manifest built successfully");
|
|
4182
3204
|
return built;
|
|
4183
3205
|
}, {
|
|
4184
3206
|
namespace: MANIFEST_NAMESPACE,
|
|
@@ -4222,136 +3244,4 @@ var ManifestService = class {
|
|
|
4222
3244
|
};
|
|
4223
3245
|
|
|
4224
3246
|
//#endregion
|
|
4225
|
-
|
|
4226
|
-
/**
|
|
4227
|
-
* Router for evaluating the gateway manifest and selecting variants
|
|
4228
|
-
*/
|
|
4229
|
-
var ManifestRouter = class {
|
|
4230
|
-
constructor(manifest) {
|
|
4231
|
-
this.manifest = manifest;
|
|
4232
|
-
}
|
|
4233
|
-
/**
|
|
4234
|
-
* Resolve a config identifier (UUID or slug) to config ID
|
|
4235
|
-
*/
|
|
4236
|
-
resolveConfigId(configIdOrSlug) {
|
|
4237
|
-
if (this.manifest.configs[configIdOrSlug]) return configIdOrSlug;
|
|
4238
|
-
return this.manifest.configsBySlug[configIdOrSlug] ?? null;
|
|
4239
|
-
}
|
|
4240
|
-
/**
|
|
4241
|
-
* Resolve environment from secret value
|
|
4242
|
-
*/
|
|
4243
|
-
resolveEnvironmentFromSecret(secretValue) {
|
|
4244
|
-
return this.manifest.secretToEnvironment[secretValue] ?? null;
|
|
4245
|
-
}
|
|
4246
|
-
/**
|
|
4247
|
-
* Get production environment ID
|
|
4248
|
-
*/
|
|
4249
|
-
getProductionEnvironmentId() {
|
|
4250
|
-
for (const env of Object.values(this.manifest.environments)) if (env.isProd) return env.id;
|
|
4251
|
-
return null;
|
|
4252
|
-
}
|
|
4253
|
-
/**
|
|
4254
|
-
* Get environment by ID
|
|
4255
|
-
*/
|
|
4256
|
-
getEnvironment(environmentId) {
|
|
4257
|
-
return this.manifest.environments[environmentId] ?? null;
|
|
4258
|
-
}
|
|
4259
|
-
/**
|
|
4260
|
-
* Get config by ID
|
|
4261
|
-
*/
|
|
4262
|
-
getConfig(configId) {
|
|
4263
|
-
return this.manifest.configs[configId] ?? null;
|
|
4264
|
-
}
|
|
4265
|
-
/**
|
|
4266
|
-
* Route a request to the appropriate variant version (first match wins)
|
|
4267
|
-
*/
|
|
4268
|
-
route(configIdOrSlug, environmentId, context = {}) {
|
|
4269
|
-
const configId = this.resolveConfigId(configIdOrSlug);
|
|
4270
|
-
if (!configId) return null;
|
|
4271
|
-
const rules = this.manifest.routingTable[configId]?.[environmentId];
|
|
4272
|
-
if (!rules || rules.length === 0) return null;
|
|
4273
|
-
const evalContext = {
|
|
4274
|
-
...context,
|
|
4275
|
-
timestamp: context.timestamp ?? Date.now()
|
|
4276
|
-
};
|
|
4277
|
-
for (const rule of rules) {
|
|
4278
|
-
if (!rule.enabled) continue;
|
|
4279
|
-
if (rule.conditions) try {
|
|
4280
|
-
if (!jsonLogic.apply(rule.conditions, evalContext)) continue;
|
|
4281
|
-
} catch (error) {
|
|
4282
|
-
console.warn(`JSONLogic evaluation error for rule ${rule.id}:`, error);
|
|
4283
|
-
continue;
|
|
4284
|
-
}
|
|
4285
|
-
return {
|
|
4286
|
-
configId,
|
|
4287
|
-
environmentId,
|
|
4288
|
-
variantId: rule.resolvedVersion.variantId,
|
|
4289
|
-
version: rule.resolvedVersion,
|
|
4290
|
-
rule
|
|
4291
|
-
};
|
|
4292
|
-
}
|
|
4293
|
-
return null;
|
|
4294
|
-
}
|
|
4295
|
-
/**
|
|
4296
|
-
* Route with weighted random selection among matching rules of same priority
|
|
4297
|
-
*/
|
|
4298
|
-
routeWithWeights(configIdOrSlug, environmentId, context = {}) {
|
|
4299
|
-
const configId = this.resolveConfigId(configIdOrSlug);
|
|
4300
|
-
if (!configId) return null;
|
|
4301
|
-
const rules = this.manifest.routingTable[configId]?.[environmentId];
|
|
4302
|
-
if (!rules || rules.length === 0) return null;
|
|
4303
|
-
const evalContext = {
|
|
4304
|
-
...context,
|
|
4305
|
-
timestamp: context.timestamp ?? Date.now()
|
|
4306
|
-
};
|
|
4307
|
-
const rulesByPriority = /* @__PURE__ */ new Map();
|
|
4308
|
-
for (const rule$1 of rules) {
|
|
4309
|
-
if (!rule$1.enabled) continue;
|
|
4310
|
-
if (rule$1.conditions) try {
|
|
4311
|
-
if (!jsonLogic.apply(rule$1.conditions, evalContext)) continue;
|
|
4312
|
-
} catch {
|
|
4313
|
-
continue;
|
|
4314
|
-
}
|
|
4315
|
-
const list = rulesByPriority.get(rule$1.priority) || [];
|
|
4316
|
-
list.push(rule$1);
|
|
4317
|
-
rulesByPriority.set(rule$1.priority, list);
|
|
4318
|
-
}
|
|
4319
|
-
const priorities = Array.from(rulesByPriority.keys()).sort((a, b) => b - a);
|
|
4320
|
-
if (priorities.length === 0) return null;
|
|
4321
|
-
const topPriorityRules = rulesByPriority.get(priorities[0]);
|
|
4322
|
-
if (topPriorityRules.length === 1) {
|
|
4323
|
-
const rule$1 = topPriorityRules[0];
|
|
4324
|
-
return {
|
|
4325
|
-
configId,
|
|
4326
|
-
environmentId,
|
|
4327
|
-
variantId: rule$1.resolvedVersion.variantId,
|
|
4328
|
-
version: rule$1.resolvedVersion,
|
|
4329
|
-
rule: rule$1
|
|
4330
|
-
};
|
|
4331
|
-
}
|
|
4332
|
-
const totalWeight = topPriorityRules.reduce((sum, r) => sum + r.weight, 0);
|
|
4333
|
-
if (totalWeight === 0) return null;
|
|
4334
|
-
let random = Math.random() * totalWeight;
|
|
4335
|
-
for (const rule$1 of topPriorityRules) {
|
|
4336
|
-
random -= rule$1.weight;
|
|
4337
|
-
if (random <= 0) return {
|
|
4338
|
-
configId,
|
|
4339
|
-
environmentId,
|
|
4340
|
-
variantId: rule$1.resolvedVersion.variantId,
|
|
4341
|
-
version: rule$1.resolvedVersion,
|
|
4342
|
-
rule: rule$1
|
|
4343
|
-
};
|
|
4344
|
-
}
|
|
4345
|
-
const rule = topPriorityRules[0];
|
|
4346
|
-
return {
|
|
4347
|
-
configId,
|
|
4348
|
-
environmentId,
|
|
4349
|
-
variantId: rule.resolvedVersion.variantId,
|
|
4350
|
-
version: rule.resolvedVersion,
|
|
4351
|
-
rule
|
|
4352
|
-
};
|
|
4353
|
-
}
|
|
4354
|
-
};
|
|
4355
|
-
|
|
4356
|
-
//#endregion
|
|
4357
|
-
export { COST_SUMMARY_GROUP_BY, CacheService, DEFAULT_PROVIDER_ENV_VARS, FileCacheBackend, LLMOPS_INTERNAL_HEADER, LLMOPS_REQUEST_ID_HEADER, LLMOPS_SESSION_ID_HEADER, LLMOPS_SPAN_ID_HEADER, LLMOPS_SPAN_NAME_HEADER, LLMOPS_TRACE_ID_HEADER, LLMOPS_TRACE_NAME_HEADER, LLMOPS_USER_ID_HEADER, LLMOpsPricingProvider, MS, ManifestBuilder, ManifestRouter, ManifestService, MemoryCacheBackend, SCHEMA_METADATA, SupportedProviders, calculateCacheAwareCost, calculateCost, chatCompletionCreateParamsBaseSchema, configVariantsSchema, configsSchema, createConfigDataLayer, createConfigVariantDataLayer, createDataLayer, createDatabase, createDatabaseFromConnection, createDatasetsDataLayer, createEnvironmentDataLayer, createEnvironmentSecretDataLayer, createGuardrailConfigsDataLayer, createLLMRequestsDataLayer, createNeonDialect, createPlaygroundDataLayer, createPlaygroundResultsDataLayer, createPlaygroundRunsDataLayer, createProviderConfigsDataLayer, createProviderGuardrailOverridesDataLayer, createTargetingRulesDataLayer, createTracesDataLayer, createVariantDataLayer, createVariantVersionsDataLayer, createWorkspaceSettingsDataLayer, datasetRecordsSchema, datasetVersionRecordsSchema, datasetVersionsSchema, datasetsSchema, detectDatabaseType, dollarsToMicroDollars, environmentSecretsSchema, environmentsSchema, executeWithSchema, formatCost, gateway, generateId, getAuthClientOptions, getDefaultPricingProvider, getDefaultProviders, getMigrations, guardrailConfigsSchema, llmRequestsSchema, llmopsConfigSchema, logger, matchType, mergeWithDefaultProviders, microDollarsToDollars, parsePartialTableData, parseTableData, playgroundColumnSchema, playgroundResultsSchema, playgroundRunsSchema, playgroundsSchema, providerConfigsSchema, providerGuardrailOverridesSchema, runAutoMigrations, schemas, spanEventsSchema, spansSchema, targetingRulesSchema, tracesSchema, validateLLMOpsConfig, validatePartialTableData, validateTableData, variantJsonDataSchema, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
|
|
3247
|
+
export { COST_SUMMARY_GROUP_BY, CacheService, DEFAULT_PROVIDER_ENV_VARS, FileCacheBackend, LLMOPS_INTERNAL_HEADER, LLMOPS_REQUEST_ID_HEADER, LLMOPS_SESSION_ID_HEADER, LLMOPS_SPAN_ID_HEADER, LLMOPS_SPAN_NAME_HEADER, LLMOPS_TRACE_ID_HEADER, LLMOPS_TRACE_NAME_HEADER, LLMOPS_USER_ID_HEADER, LLMOpsPricingProvider, MS, ManifestBuilder, ManifestService, MemoryCacheBackend, SCHEMA_METADATA, SupportedProviders, calculateCacheAwareCost, calculateCost, chatCompletionCreateParamsBaseSchema, configVariantsSchema, configsSchema, createDataLayer, createDatabase, createDatabaseFromConnection, createDatasetsDataLayer, createGuardrailConfigsDataLayer, createLLMRequestsDataLayer, createNeonDialect, createPgStore, createPlaygroundDataLayer, createPlaygroundResultsDataLayer, createPlaygroundRunsDataLayer, createProviderConfigsDataLayer, createProviderGuardrailOverridesDataLayer, createTracesDataLayer, createWorkspaceSettingsDataLayer, datasetRecordsSchema, datasetVersionRecordsSchema, datasetVersionsSchema, datasetsSchema, detectDatabaseType, dollarsToMicroDollars, environmentSecretsSchema, environmentsSchema, executeWithSchema, formatCost, gateway, generateId, getDefaultPricingProvider, getDefaultProviders, getMigrations, guardrailConfigsSchema, llmRequestsSchema, llmopsConfigSchema, logger, matchType, mergeWithDefaultProviders, microDollarsToDollars, parsePartialTableData, parseTableData, playgroundColumnSchema, playgroundResultsSchema, playgroundRunsSchema, playgroundsSchema, providerConfigsSchema, providerGuardrailOverridesSchema, runAutoMigrations, schemas, spanEventsSchema, spansSchema, targetingRulesSchema, tracesSchema, validateLLMOpsConfig, validatePartialTableData, validateTableData, variantJsonDataSchema, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
|