@llmops/core 1.0.0-beta.1 → 1.0.0-beta.2

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.mjs CHANGED
@@ -1,4 +1,4 @@
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";
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-CZ8KtpL-.mjs";
2
2
  import { n as executeWithSchema, t as createNeonDialect } from "./neon-dialect-DySGBYUi.mjs";
3
3
  import gateway from "@llmops/gateway";
4
4
  import { CompiledQuery, Kysely, PostgresDialect, sql } from "kysely";
@@ -1384,99 +1384,6 @@ const createDatasetsDataLayer = (db) => {
1384
1384
  };
1385
1385
  };
1386
1386
 
1387
- //#endregion
1388
- //#region src/datalayer/guardrailConfigs.ts
1389
- const createGuardrailConfig = zod_default.object({
1390
- name: zod_default.string().min(1),
1391
- pluginId: zod_default.string().min(1),
1392
- functionId: zod_default.string().min(1),
1393
- hookType: zod_default.enum(["beforeRequestHook", "afterRequestHook"]),
1394
- parameters: zod_default.record(zod_default.string(), zod_default.unknown()).optional().default({}),
1395
- enabled: zod_default.boolean().optional().default(true),
1396
- priority: zod_default.number().int().optional().default(0),
1397
- onFail: zod_default.enum(["block", "log"]).optional().default("block")
1398
- });
1399
- const updateGuardrailConfig = zod_default.object({
1400
- id: zod_default.string().uuid(),
1401
- name: zod_default.string().min(1).optional(),
1402
- hookType: zod_default.enum(["beforeRequestHook", "afterRequestHook"]).optional(),
1403
- parameters: zod_default.record(zod_default.string(), zod_default.unknown()).optional(),
1404
- enabled: zod_default.boolean().optional(),
1405
- priority: zod_default.number().int().optional(),
1406
- onFail: zod_default.enum(["block", "log"]).optional()
1407
- });
1408
- const getGuardrailConfigById = zod_default.object({ id: zod_default.string().uuid() });
1409
- const deleteGuardrailConfig = zod_default.object({ id: zod_default.string().uuid() });
1410
- const listGuardrailConfigs = zod_default.object({
1411
- limit: zod_default.number().int().positive().optional(),
1412
- offset: zod_default.number().int().nonnegative().optional(),
1413
- hookType: zod_default.enum(["beforeRequestHook", "afterRequestHook"]).optional(),
1414
- enabled: zod_default.boolean().optional()
1415
- });
1416
- const createGuardrailConfigsDataLayer = (db) => {
1417
- return {
1418
- createGuardrailConfig: async (params) => {
1419
- const value = await createGuardrailConfig.safeParseAsync(params);
1420
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1421
- const { name, pluginId, functionId, hookType, parameters, enabled, priority, onFail } = value.data;
1422
- return db.insertInto("guardrail_configs").values({
1423
- id: randomUUID(),
1424
- name,
1425
- pluginId,
1426
- functionId,
1427
- hookType,
1428
- parameters: JSON.stringify(parameters),
1429
- enabled,
1430
- priority,
1431
- onFail,
1432
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1433
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1434
- }).returningAll().executeTakeFirst();
1435
- },
1436
- updateGuardrailConfig: async (params) => {
1437
- const value = await updateGuardrailConfig.safeParseAsync(params);
1438
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1439
- const { id, name, hookType, parameters, enabled, priority, onFail } = value.data;
1440
- const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
1441
- if (name !== void 0) updateData.name = name;
1442
- if (hookType !== void 0) updateData.hookType = hookType;
1443
- if (parameters !== void 0) updateData.parameters = JSON.stringify(parameters);
1444
- if (enabled !== void 0) updateData.enabled = enabled;
1445
- if (priority !== void 0) updateData.priority = priority;
1446
- if (onFail !== void 0) updateData.onFail = onFail;
1447
- return db.updateTable("guardrail_configs").set(updateData).where("id", "=", id).returningAll().executeTakeFirst();
1448
- },
1449
- getGuardrailConfigById: async (params) => {
1450
- const value = await getGuardrailConfigById.safeParseAsync(params);
1451
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1452
- const { id } = value.data;
1453
- return db.selectFrom("guardrail_configs").selectAll().where("id", "=", id).executeTakeFirst();
1454
- },
1455
- deleteGuardrailConfig: async (params) => {
1456
- const value = await deleteGuardrailConfig.safeParseAsync(params);
1457
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1458
- const { id } = value.data;
1459
- return db.deleteFrom("guardrail_configs").where("id", "=", id).returningAll().executeTakeFirst();
1460
- },
1461
- listGuardrailConfigs: async (params) => {
1462
- const value = await listGuardrailConfigs.safeParseAsync(params || {});
1463
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1464
- const { limit = 100, offset = 0, hookType, enabled } = value.data;
1465
- let query = db.selectFrom("guardrail_configs").selectAll().orderBy("priority", "desc").orderBy("createdAt", "desc").limit(limit).offset(offset);
1466
- if (hookType !== void 0) query = query.where("hookType", "=", hookType);
1467
- if (enabled !== void 0) query = query.where("enabled", "=", enabled);
1468
- return query.execute();
1469
- },
1470
- countGuardrailConfigs: async () => {
1471
- const result = await db.selectFrom("guardrail_configs").select(db.fn.countAll().as("count")).executeTakeFirst();
1472
- return Number(result?.count ?? 0);
1473
- },
1474
- getEnabledGuardrailsByHookType: async (hookType) => {
1475
- return db.selectFrom("guardrail_configs").selectAll().where("hookType", "=", hookType).where("enabled", "=", true).orderBy("priority", "desc").execute();
1476
- }
1477
- };
1478
- };
1479
-
1480
1387
  //#endregion
1481
1388
  //#region src/datalayer/llmRequests.ts
1482
1389
  /**
@@ -2185,245 +2092,6 @@ const createPlaygroundRunsDataLayer = (db) => {
2185
2092
  };
2186
2093
  };
2187
2094
 
2188
- //#endregion
2189
- //#region src/datalayer/providerConfigs.ts
2190
- /**
2191
- * Generate a unique slug for a provider config.
2192
- * If the base slug already exists, appends -01, -02, etc.
2193
- */
2194
- async function generateUniqueSlug(db, baseSlug) {
2195
- const existing = await db.selectFrom("provider_configs").select("slug").where("slug", "like", `${baseSlug}%`).execute();
2196
- if (existing.length === 0) return baseSlug;
2197
- const existingSlugs = new Set(existing.map((e) => e.slug));
2198
- if (!existingSlugs.has(baseSlug)) return baseSlug;
2199
- let counter = 1;
2200
- while (counter < 100) {
2201
- const candidateSlug = `${baseSlug}-${counter.toString().padStart(2, "0")}`;
2202
- if (!existingSlugs.has(candidateSlug)) return candidateSlug;
2203
- counter++;
2204
- }
2205
- return `${baseSlug}-${randomUUID().slice(0, 8)}`;
2206
- }
2207
- const createProviderConfig = zod_default.object({
2208
- providerId: zod_default.string().min(1),
2209
- slug: zod_default.string().nullable().optional(),
2210
- name: zod_default.string().nullable().optional(),
2211
- config: zod_default.record(zod_default.string(), zod_default.unknown()),
2212
- enabled: zod_default.boolean().optional().default(true)
2213
- });
2214
- const updateProviderConfig = zod_default.object({
2215
- id: zod_default.uuidv4(),
2216
- slug: zod_default.string().nullable().optional(),
2217
- name: zod_default.string().nullable().optional(),
2218
- config: zod_default.record(zod_default.string(), zod_default.unknown()).optional(),
2219
- enabled: zod_default.boolean().optional()
2220
- });
2221
- const getProviderConfigById = zod_default.object({ id: zod_default.uuidv4() });
2222
- const getProviderConfigByProviderId = zod_default.object({ providerId: zod_default.string().min(1) });
2223
- const getProviderConfigBySlug = zod_default.object({ slug: zod_default.string().min(1) });
2224
- const deleteProviderConfig = zod_default.object({ id: zod_default.uuidv4() });
2225
- const listProviderConfigs = zod_default.object({
2226
- limit: zod_default.number().int().positive().optional(),
2227
- offset: zod_default.number().int().nonnegative().optional()
2228
- });
2229
- const createProviderConfigsDataLayer = (db) => {
2230
- return {
2231
- createProviderConfig: async (params) => {
2232
- const value = await createProviderConfig.safeParseAsync(params);
2233
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2234
- const { providerId, slug, name, config, enabled } = value.data;
2235
- const finalSlug = slug ?? await generateUniqueSlug(db, providerId);
2236
- return db.insertInto("provider_configs").values({
2237
- id: randomUUID(),
2238
- providerId,
2239
- slug: finalSlug,
2240
- name: name ?? null,
2241
- config: JSON.stringify(config),
2242
- enabled,
2243
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2244
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2245
- }).returningAll().executeTakeFirst();
2246
- },
2247
- updateProviderConfig: async (params) => {
2248
- const value = await updateProviderConfig.safeParseAsync(params);
2249
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2250
- const { id, slug, name, config, enabled } = value.data;
2251
- const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
2252
- if (slug !== void 0) updateData.slug = slug;
2253
- if (name !== void 0) updateData.name = name;
2254
- if (config !== void 0) updateData.config = JSON.stringify(config);
2255
- if (enabled !== void 0) updateData.enabled = enabled;
2256
- return db.updateTable("provider_configs").set(updateData).where("id", "=", id).returningAll().executeTakeFirst();
2257
- },
2258
- getProviderConfigById: async (params) => {
2259
- const value = await getProviderConfigById.safeParseAsync(params);
2260
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2261
- const { id } = value.data;
2262
- return db.selectFrom("provider_configs").selectAll().where("id", "=", id).executeTakeFirst();
2263
- },
2264
- getProviderConfigByProviderId: async (params) => {
2265
- const value = await getProviderConfigByProviderId.safeParseAsync(params);
2266
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2267
- const { providerId } = value.data;
2268
- return db.selectFrom("provider_configs").selectAll().where("providerId", "=", providerId).executeTakeFirst();
2269
- },
2270
- getProviderConfigBySlug: async (params) => {
2271
- const value = await getProviderConfigBySlug.safeParseAsync(params);
2272
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2273
- const { slug } = value.data;
2274
- return db.selectFrom("provider_configs").selectAll().where("slug", "=", slug).executeTakeFirst();
2275
- },
2276
- deleteProviderConfig: async (params) => {
2277
- const value = await deleteProviderConfig.safeParseAsync(params);
2278
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2279
- const { id } = value.data;
2280
- return db.deleteFrom("provider_configs").where("id", "=", id).returningAll().executeTakeFirst();
2281
- },
2282
- listProviderConfigs: async (params) => {
2283
- const value = await listProviderConfigs.safeParseAsync(params || {});
2284
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2285
- const { limit = 100, offset = 0 } = value.data;
2286
- return db.selectFrom("provider_configs").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
2287
- },
2288
- countProviderConfigs: async () => {
2289
- const result = await db.selectFrom("provider_configs").select(db.fn.countAll().as("count")).executeTakeFirst();
2290
- return Number(result?.count ?? 0);
2291
- },
2292
- upsertProviderConfig: async (params) => {
2293
- const value = await createProviderConfig.safeParseAsync(params);
2294
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2295
- const { providerId, slug, name, config, enabled } = value.data;
2296
- const existing = await db.selectFrom("provider_configs").selectAll().where("providerId", "=", providerId).executeTakeFirst();
2297
- if (existing) {
2298
- const finalSlug$1 = slug ?? existing.slug ?? await generateUniqueSlug(db, providerId);
2299
- return db.updateTable("provider_configs").set({
2300
- slug: finalSlug$1,
2301
- name: name ?? existing.name,
2302
- config: JSON.stringify(config),
2303
- enabled,
2304
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2305
- }).where("id", "=", existing.id).returningAll().executeTakeFirst();
2306
- }
2307
- const finalSlug = slug ?? await generateUniqueSlug(db, providerId);
2308
- return db.insertInto("provider_configs").values({
2309
- id: randomUUID(),
2310
- providerId,
2311
- slug: finalSlug,
2312
- name: name ?? null,
2313
- config: JSON.stringify(config),
2314
- enabled,
2315
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2316
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2317
- }).returningAll().executeTakeFirst();
2318
- }
2319
- };
2320
- };
2321
-
2322
- //#endregion
2323
- //#region src/datalayer/providerGuardrailOverrides.ts
2324
- const createProviderGuardrailOverride = zod_default.object({
2325
- providerConfigId: zod_default.string().uuid(),
2326
- guardrailConfigId: zod_default.string().uuid(),
2327
- enabled: zod_default.boolean().optional().default(true),
2328
- parameters: zod_default.record(zod_default.string(), zod_default.unknown()).nullable().optional()
2329
- });
2330
- const updateProviderGuardrailOverride = zod_default.object({
2331
- id: zod_default.string().uuid(),
2332
- enabled: zod_default.boolean().optional(),
2333
- parameters: zod_default.record(zod_default.string(), zod_default.unknown()).nullable().optional()
2334
- });
2335
- const getOverrideById = zod_default.object({ id: zod_default.string().uuid() });
2336
- const deleteOverride = zod_default.object({ id: zod_default.string().uuid() });
2337
- const getOverridesByProviderConfigId = zod_default.object({ providerConfigId: zod_default.string().uuid() });
2338
- const getOverridesByGuardrailConfigId = zod_default.object({ guardrailConfigId: zod_default.string().uuid() });
2339
- const getOverrideByProviderAndGuardrail = zod_default.object({
2340
- providerConfigId: zod_default.string().uuid(),
2341
- guardrailConfigId: zod_default.string().uuid()
2342
- });
2343
- const createProviderGuardrailOverridesDataLayer = (db) => {
2344
- return {
2345
- createProviderGuardrailOverride: async (params) => {
2346
- const value = await createProviderGuardrailOverride.safeParseAsync(params);
2347
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2348
- const { providerConfigId, guardrailConfigId, enabled, parameters } = value.data;
2349
- return db.insertInto("provider_guardrail_overrides").values({
2350
- id: randomUUID(),
2351
- providerConfigId,
2352
- guardrailConfigId,
2353
- enabled,
2354
- parameters: parameters ? JSON.stringify(parameters) : null,
2355
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2356
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2357
- }).returningAll().executeTakeFirst();
2358
- },
2359
- updateProviderGuardrailOverride: async (params) => {
2360
- const value = await updateProviderGuardrailOverride.safeParseAsync(params);
2361
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2362
- const { id, enabled, parameters } = value.data;
2363
- const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
2364
- if (enabled !== void 0) updateData.enabled = enabled;
2365
- if (parameters !== void 0) updateData.parameters = parameters ? JSON.stringify(parameters) : null;
2366
- return db.updateTable("provider_guardrail_overrides").set(updateData).where("id", "=", id).returningAll().executeTakeFirst();
2367
- },
2368
- getOverrideById: async (params) => {
2369
- const value = await getOverrideById.safeParseAsync(params);
2370
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2371
- const { id } = value.data;
2372
- return db.selectFrom("provider_guardrail_overrides").selectAll().where("id", "=", id).executeTakeFirst();
2373
- },
2374
- deleteProviderGuardrailOverride: async (params) => {
2375
- const value = await deleteOverride.safeParseAsync(params);
2376
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2377
- const { id } = value.data;
2378
- return db.deleteFrom("provider_guardrail_overrides").where("id", "=", id).returningAll().executeTakeFirst();
2379
- },
2380
- getOverridesByProviderConfigId: async (params) => {
2381
- const value = await getOverridesByProviderConfigId.safeParseAsync(params);
2382
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2383
- const { providerConfigId } = value.data;
2384
- return db.selectFrom("provider_guardrail_overrides").selectAll().where("providerConfigId", "=", providerConfigId).execute();
2385
- },
2386
- getOverridesByGuardrailConfigId: async (params) => {
2387
- const value = await getOverridesByGuardrailConfigId.safeParseAsync(params);
2388
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2389
- const { guardrailConfigId } = value.data;
2390
- return db.selectFrom("provider_guardrail_overrides").selectAll().where("guardrailConfigId", "=", guardrailConfigId).execute();
2391
- },
2392
- getOverrideByProviderAndGuardrail: async (params) => {
2393
- const value = await getOverrideByProviderAndGuardrail.safeParseAsync(params);
2394
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2395
- const { providerConfigId, guardrailConfigId } = value.data;
2396
- return db.selectFrom("provider_guardrail_overrides").selectAll().where("providerConfigId", "=", providerConfigId).where("guardrailConfigId", "=", guardrailConfigId).executeTakeFirst();
2397
- },
2398
- upsertProviderGuardrailOverride: async (params) => {
2399
- const value = await createProviderGuardrailOverride.safeParseAsync(params);
2400
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2401
- const { providerConfigId, guardrailConfigId, enabled, parameters } = value.data;
2402
- const existing = await db.selectFrom("provider_guardrail_overrides").selectAll().where("providerConfigId", "=", providerConfigId).where("guardrailConfigId", "=", guardrailConfigId).executeTakeFirst();
2403
- if (existing) return db.updateTable("provider_guardrail_overrides").set({
2404
- enabled,
2405
- parameters: parameters ? JSON.stringify(parameters) : null,
2406
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2407
- }).where("id", "=", existing.id).returningAll().executeTakeFirst();
2408
- return db.insertInto("provider_guardrail_overrides").values({
2409
- id: randomUUID(),
2410
- providerConfigId,
2411
- guardrailConfigId,
2412
- enabled,
2413
- parameters: parameters ? JSON.stringify(parameters) : null,
2414
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2415
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2416
- }).returningAll().executeTakeFirst();
2417
- },
2418
- deleteOverridesByGuardrailConfigId: async (params) => {
2419
- const value = await getOverridesByGuardrailConfigId.safeParseAsync(params);
2420
- if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
2421
- const { guardrailConfigId } = value.data;
2422
- return db.deleteFrom("provider_guardrail_overrides").where("guardrailConfigId", "=", guardrailConfigId).execute();
2423
- }
2424
- };
2425
- };
2426
-
2427
2095
  //#endregion
2428
2096
  //#region src/datalayer/traces.ts
2429
2097
  const col = (name) => sql.ref(name);
@@ -2796,13 +2464,10 @@ const createWorkspaceSettingsDataLayer = (db) => {
2796
2464
  function createDataLayer(db) {
2797
2465
  return {
2798
2466
  ...createDatasetsDataLayer(db),
2799
- ...createGuardrailConfigsDataLayer(db),
2800
2467
  ...createLLMRequestsDataLayer(db),
2801
2468
  ...createPlaygroundDataLayer(db),
2802
2469
  ...createPlaygroundResultsDataLayer(db),
2803
2470
  ...createPlaygroundRunsDataLayer(db),
2804
- ...createProviderConfigsDataLayer(db),
2805
- ...createProviderGuardrailOverridesDataLayer(db),
2806
2471
  ...createTracesDataLayer(db),
2807
2472
  ...createWorkspaceSettingsDataLayer(db)
2808
2473
  };
@@ -3120,128 +2785,4 @@ function createPgStore(connectionString, options) {
3120
2785
  }
3121
2786
 
3122
2787
  //#endregion
3123
- //#region src/manifest/builder.ts
3124
- /**
3125
- * Builds the gateway manifest from database
3126
- */
3127
- var ManifestBuilder = class {
3128
- constructor(db) {
3129
- this.db = db;
3130
- }
3131
- /**
3132
- * Build the manifest from database
3133
- */
3134
- async build() {
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()]);
3136
- const beforeRequestGuardrails = [];
3137
- const afterRequestGuardrails = [];
3138
- logger.info(`[ManifestBuilder] Found ${guardrailConfigs.length} enabled guardrail configs`);
3139
- for (const guardrail of guardrailConfigs) {
3140
- const parameters = typeof guardrail.parameters === "string" ? JSON.parse(guardrail.parameters) : guardrail.parameters;
3141
- const manifestGuardrail = {
3142
- id: guardrail.id,
3143
- name: guardrail.name,
3144
- pluginId: guardrail.pluginId,
3145
- functionId: guardrail.functionId,
3146
- hookType: guardrail.hookType,
3147
- parameters: parameters ?? {},
3148
- priority: guardrail.priority,
3149
- onFail: guardrail.onFail
3150
- };
3151
- if (guardrail.hookType === "beforeRequestHook") beforeRequestGuardrails.push(manifestGuardrail);
3152
- else afterRequestGuardrails.push(manifestGuardrail);
3153
- }
3154
- beforeRequestGuardrails.sort((a, b) => b.priority - a.priority);
3155
- afterRequestGuardrails.sort((a, b) => b.priority - a.priority);
3156
- const providerGuardrailOverrides = {};
3157
- for (const override of providerGuardrailOverridesData) {
3158
- const parameters = typeof override.parameters === "string" ? JSON.parse(override.parameters) : override.parameters;
3159
- const manifestOverride = {
3160
- id: override.id,
3161
- providerConfigId: override.providerConfigId,
3162
- guardrailConfigId: override.guardrailConfigId,
3163
- enabled: override.enabled,
3164
- parameters: parameters ?? null
3165
- };
3166
- if (!providerGuardrailOverrides[override.providerConfigId]) providerGuardrailOverrides[override.providerConfigId] = [];
3167
- providerGuardrailOverrides[override.providerConfigId].push(manifestOverride);
3168
- }
3169
- return {
3170
- version: Date.now(),
3171
- builtAt: (/* @__PURE__ */ new Date()).toISOString(),
3172
- guardrails: {
3173
- beforeRequestHook: beforeRequestGuardrails,
3174
- afterRequestHook: afterRequestGuardrails
3175
- },
3176
- providerGuardrailOverrides
3177
- };
3178
- }
3179
- };
3180
-
3181
- //#endregion
3182
- //#region src/manifest/service.ts
3183
- const MANIFEST_CACHE_KEY = "manifest";
3184
- const MANIFEST_NAMESPACE = "gateway";
3185
- const DEFAULT_TTL_MS = 300 * 1e3;
3186
- const log = logger.child({ module: "ManifestService" });
3187
- var ManifestService = class {
3188
- builder;
3189
- constructor(cache, db, ttlMs = DEFAULT_TTL_MS) {
3190
- this.cache = cache;
3191
- this.ttlMs = ttlMs;
3192
- this.builder = new ManifestBuilder(db);
3193
- log.debug({ ttlMs }, "ManifestService initialized");
3194
- }
3195
- /**
3196
- * Get the current manifest, building if necessary
3197
- */
3198
- async getManifest() {
3199
- log.debug("Getting manifest from cache or building");
3200
- const manifest = await this.cache.getOrSet(MANIFEST_CACHE_KEY, async () => {
3201
- log.info("Building new manifest");
3202
- const built = await this.builder.build();
3203
- log.info({ version: built.version }, "Manifest built successfully");
3204
- return built;
3205
- }, {
3206
- namespace: MANIFEST_NAMESPACE,
3207
- ttl: this.ttlMs
3208
- });
3209
- log.debug({ version: manifest.version }, "Manifest retrieved");
3210
- return manifest;
3211
- }
3212
- /**
3213
- * Force invalidate the manifest (called on mutations)
3214
- */
3215
- async invalidate() {
3216
- log.info("Invalidating manifest cache");
3217
- await this.cache.delete(MANIFEST_CACHE_KEY, MANIFEST_NAMESPACE);
3218
- }
3219
- /**
3220
- * Invalidate and immediately rebuild (atomic refresh)
3221
- */
3222
- async refresh() {
3223
- log.info("Refreshing manifest (invalidate + rebuild)");
3224
- await this.invalidate();
3225
- return this.getManifest();
3226
- }
3227
- /**
3228
- * Get manifest version without fetching full manifest
3229
- * Useful for checking if manifest is stale
3230
- */
3231
- async getVersion() {
3232
- const version = (await this.cache.get(MANIFEST_CACHE_KEY, MANIFEST_NAMESPACE))?.version ?? null;
3233
- log.debug({ version }, "Got manifest version");
3234
- return version;
3235
- }
3236
- /**
3237
- * Check if manifest exists in cache
3238
- */
3239
- async hasManifest() {
3240
- const exists = await this.cache.has(MANIFEST_CACHE_KEY, MANIFEST_NAMESPACE);
3241
- log.debug({ exists }, "Checked manifest existence");
3242
- return exists;
3243
- }
3244
- };
3245
-
3246
- //#endregion
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 };
2788
+ 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, MemoryCacheBackend, SCHEMA_METADATA, SupportedProviders, calculateCacheAwareCost, calculateCost, chatCompletionCreateParamsBaseSchema, configVariantsSchema, configsSchema, createDataLayer, createDatabase, createDatabaseFromConnection, createDatasetsDataLayer, createLLMRequestsDataLayer, createNeonDialect, createPgStore, createPlaygroundDataLayer, createPlaygroundResultsDataLayer, createPlaygroundRunsDataLayer, 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 };
@@ -1,3 +1,3 @@
1
- const require_neon_dialect = require('./neon-dialect-DMClTHvw.cjs');
1
+ const require_neon_dialect = require('./neon-dialect-ByrFa9iy.cjs');
2
2
 
3
3
  exports.createNeonDialect = require_neon_dialect.createNeonDialect;
@@ -1,4 +1,4 @@
1
- const require_db = require('./db-D3WDjcvd.cjs');
1
+ const require_db = require('./db-DZv0NtMm.cjs');
2
2
  let kysely_neon = require("kysely-neon");
3
3
  require("@neondatabase/serverless");
4
4
 
@@ -1,4 +1,4 @@
1
- const require_db = require('./db-D3WDjcvd.cjs');
1
+ const require_db = require('./db-DZv0NtMm.cjs');
2
2
  let kysely = require("kysely");
3
3
 
4
4
  //#region src/db/node-sqlite-dialect.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llmops/core",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.2",
4
4
  "description": "Core LLMOps functionality and utilities",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -53,7 +53,7 @@
53
53
  "kysely": "^0.28.8",
54
54
  "kysely-neon": "^2.0.2",
55
55
  "pino": "^10.1.0",
56
- "@llmops/gateway": "^1.0.0-beta.1"
56
+ "@llmops/gateway": "^1.0.0-beta.2"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@types/json-logic-js": "^2.0.8",