@llmops/core 0.1.9 → 0.2.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.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_db = require('./db-1Ar4ItM_.cjs');
1
+ const require_db = require('./db-BdclKAD3.cjs');
2
2
  let __llmops_gateway = require("@llmops/gateway");
3
3
  __llmops_gateway = require_db.__toESM(__llmops_gateway);
4
4
  let kysely = require("kysely");
@@ -421,33 +421,9 @@ const variantJsonDataSchema = require_db.object({
421
421
 
422
422
  //#endregion
423
423
  //#region src/schemas/config.ts
424
- /**
425
- * Provider configuration schema
426
- *
427
- * This is a flexible schema that allows any provider configuration.
428
- * The actual provider validation happens at the gateway level.
429
- * Uses passthrough() to allow provider-specific options.
430
- */
431
- const providerConfigSchema = require_db.object({
432
- apiKey: require_db.string().min(1, "API key is required"),
433
- customHost: require_db.string().optional(),
434
- requestTimeout: require_db.number().optional(),
435
- forwardHeaders: require_db.array(require_db.string()).optional()
436
- }).passthrough();
437
- /**
438
- * Build a partial object schema from SupportedProviders enum
439
- * Each provider key is optional, allowing users to configure only the providers they need
440
- */
441
- const providerEntries = Object.values(SupportedProviders).map((provider) => [provider, providerConfigSchema.optional()]);
442
- /**
443
- * Providers configuration - maps supported provider names to their configs
444
- * All providers are optional, but at least one must be configured
445
- */
446
- const providersSchema = require_db.object(Object.fromEntries(providerEntries)).refine((providers) => Object.values(providers).some((v) => v !== void 0 && v !== null), "At least one provider must be configured");
447
424
  const llmopsConfigSchema = require_db.object({
448
425
  database: require_db.any(),
449
426
  basePath: require_db.string().min(1, "Base path is required and cannot be empty").refine((path) => path.startsWith("/"), "Base path must start with a forward slash"),
450
- providers: providersSchema,
451
427
  schema: require_db.string().optional().default("llmops")
452
428
  });
453
429
  function validateLLMOpsConfig(config) {
@@ -1787,6 +1763,99 @@ const createLLMRequestsDataLayer = (db) => {
1787
1763
  };
1788
1764
  };
1789
1765
 
1766
+ //#endregion
1767
+ //#region src/datalayer/providerConfigs.ts
1768
+ const createProviderConfig = require_db.zod_default.object({
1769
+ providerId: require_db.zod_default.string().min(1),
1770
+ config: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()),
1771
+ enabled: require_db.zod_default.boolean().optional().default(true)
1772
+ });
1773
+ const updateProviderConfig = require_db.zod_default.object({
1774
+ id: require_db.zod_default.uuidv4(),
1775
+ config: require_db.zod_default.record(require_db.zod_default.string(), require_db.zod_default.unknown()).optional(),
1776
+ enabled: require_db.zod_default.boolean().optional()
1777
+ });
1778
+ const getProviderConfigById = require_db.zod_default.object({ id: require_db.zod_default.uuidv4() });
1779
+ const getProviderConfigByProviderId = require_db.zod_default.object({ providerId: require_db.zod_default.string().min(1) });
1780
+ const deleteProviderConfig = require_db.zod_default.object({ id: require_db.zod_default.uuidv4() });
1781
+ const listProviderConfigs = require_db.zod_default.object({
1782
+ limit: require_db.zod_default.number().int().positive().optional(),
1783
+ offset: require_db.zod_default.number().int().nonnegative().optional()
1784
+ });
1785
+ const createProviderConfigsDataLayer = (db) => {
1786
+ return {
1787
+ createProviderConfig: async (params) => {
1788
+ const value = await createProviderConfig.safeParseAsync(params);
1789
+ if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1790
+ const { providerId, config, enabled } = value.data;
1791
+ return db.insertInto("provider_configs").values({
1792
+ id: (0, node_crypto.randomUUID)(),
1793
+ providerId,
1794
+ config: JSON.stringify(config),
1795
+ enabled,
1796
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1797
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1798
+ }).returningAll().executeTakeFirst();
1799
+ },
1800
+ updateProviderConfig: async (params) => {
1801
+ const value = await updateProviderConfig.safeParseAsync(params);
1802
+ if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1803
+ const { id, config, enabled } = value.data;
1804
+ const updateData = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
1805
+ if (config !== void 0) updateData.config = JSON.stringify(config);
1806
+ if (enabled !== void 0) updateData.enabled = enabled;
1807
+ return db.updateTable("provider_configs").set(updateData).where("id", "=", id).returningAll().executeTakeFirst();
1808
+ },
1809
+ getProviderConfigById: async (params) => {
1810
+ const value = await getProviderConfigById.safeParseAsync(params);
1811
+ if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1812
+ const { id } = value.data;
1813
+ return db.selectFrom("provider_configs").selectAll().where("id", "=", id).executeTakeFirst();
1814
+ },
1815
+ getProviderConfigByProviderId: async (params) => {
1816
+ const value = await getProviderConfigByProviderId.safeParseAsync(params);
1817
+ if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1818
+ const { providerId } = value.data;
1819
+ return db.selectFrom("provider_configs").selectAll().where("providerId", "=", providerId).executeTakeFirst();
1820
+ },
1821
+ deleteProviderConfig: async (params) => {
1822
+ const value = await deleteProviderConfig.safeParseAsync(params);
1823
+ if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1824
+ const { id } = value.data;
1825
+ return db.deleteFrom("provider_configs").where("id", "=", id).returningAll().executeTakeFirst();
1826
+ },
1827
+ listProviderConfigs: async (params) => {
1828
+ const value = await listProviderConfigs.safeParseAsync(params || {});
1829
+ if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1830
+ const { limit = 100, offset = 0 } = value.data;
1831
+ return db.selectFrom("provider_configs").selectAll().orderBy("createdAt", "desc").limit(limit).offset(offset).execute();
1832
+ },
1833
+ countProviderConfigs: async () => {
1834
+ const result = await db.selectFrom("provider_configs").select(db.fn.countAll().as("count")).executeTakeFirst();
1835
+ return Number(result?.count ?? 0);
1836
+ },
1837
+ upsertProviderConfig: async (params) => {
1838
+ const value = await createProviderConfig.safeParseAsync(params);
1839
+ if (!value.success) throw new LLMOpsError(`Invalid parameters: ${value.error.message}`);
1840
+ const { providerId, config, enabled } = value.data;
1841
+ const existing = await db.selectFrom("provider_configs").selectAll().where("providerId", "=", providerId).executeTakeFirst();
1842
+ if (existing) return db.updateTable("provider_configs").set({
1843
+ config: JSON.stringify(config),
1844
+ enabled,
1845
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1846
+ }).where("id", "=", existing.id).returningAll().executeTakeFirst();
1847
+ return db.insertInto("provider_configs").values({
1848
+ id: (0, node_crypto.randomUUID)(),
1849
+ providerId,
1850
+ config: JSON.stringify(config),
1851
+ enabled,
1852
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1853
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1854
+ }).returningAll().executeTakeFirst();
1855
+ }
1856
+ };
1857
+ };
1858
+
1790
1859
  //#endregion
1791
1860
  //#region src/datalayer/targetingRules.ts
1792
1861
  const createTargetingRule = require_db.zod_default.object({
@@ -2261,6 +2330,7 @@ const createDataLayer = async (db) => {
2261
2330
  ...createEnvironmentDataLayer(db),
2262
2331
  ...createEnvironmentSecretDataLayer(db),
2263
2332
  ...createLLMRequestsDataLayer(db),
2333
+ ...createProviderConfigsDataLayer(db),
2264
2334
  ...createTargetingRulesDataLayer(db),
2265
2335
  ...createVariantDataLayer(db),
2266
2336
  ...createVariantVersionsDataLayer(db),
@@ -2487,6 +2557,7 @@ exports.createDataLayer = createDataLayer;
2487
2557
  exports.createDatabase = require_db.createDatabase;
2488
2558
  exports.createDatabaseFromConnection = require_db.createDatabaseFromConnection;
2489
2559
  exports.createLLMRequestsDataLayer = createLLMRequestsDataLayer;
2560
+ exports.createProviderConfigsDataLayer = createProviderConfigsDataLayer;
2490
2561
  exports.createWorkspaceSettingsDataLayer = createWorkspaceSettingsDataLayer;
2491
2562
  exports.detectDatabaseType = require_db.detectDatabaseType;
2492
2563
  exports.dollarsToMicroDollars = dollarsToMicroDollars;
@@ -2510,6 +2581,7 @@ exports.matchType = require_db.matchType;
2510
2581
  exports.microDollarsToDollars = microDollarsToDollars;
2511
2582
  exports.parsePartialTableData = require_db.parsePartialTableData;
2512
2583
  exports.parseTableData = require_db.parseTableData;
2584
+ exports.providerConfigsSchema = require_db.providerConfigsSchema;
2513
2585
  exports.runAutoMigrations = require_db.runAutoMigrations;
2514
2586
  exports.schemas = require_db.schemas;
2515
2587
  exports.targetingRulesSchema = require_db.targetingRulesSchema;