@llmops/gateway 0.2.6 → 0.2.7-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -4304,8 +4304,57 @@ function _instanceof(cls, params = {}) {
4304
4304
  return inst;
4305
4305
  }
4306
4306
 
4307
+ //#endregion
4308
+ //#region src/providers/providerIdMapping.ts
4309
+ /**
4310
+ * Provider ID mapping between models.dev and Portkey gateway.
4311
+ *
4312
+ * models.dev uses different provider IDs than Portkey for some providers.
4313
+ * This mapping allows converting from models.dev IDs to Portkey gateway IDs.
4314
+ *
4315
+ * Key: models.dev provider ID
4316
+ * Value: Portkey gateway provider ID
4317
+ */
4318
+ const MODELS_DEV_TO_PORTKEY_PROVIDER_MAP = {
4319
+ "azure-cognitive-services": "azure-ai",
4320
+ azure: "azure-openai"
4321
+ };
4322
+ /**
4323
+ * Reverse mapping from Portkey to models.dev
4324
+ */
4325
+ const PORTKEY_TO_MODELS_DEV_PROVIDER_MAP = Object.fromEntries(Object.entries(MODELS_DEV_TO_PORTKEY_PROVIDER_MAP).map(([k, v]) => [v, k]));
4326
+ /**
4327
+ * Get the Portkey gateway provider ID for a given models.dev provider ID.
4328
+ * Returns the original ID if no mapping exists.
4329
+ *
4330
+ * @param modelsDevProviderId - The provider ID from models.dev
4331
+ * @returns The corresponding Portkey gateway provider ID
4332
+ */
4333
+ function getPortkeyProviderId(modelsDevProviderId) {
4334
+ return MODELS_DEV_TO_PORTKEY_PROVIDER_MAP[modelsDevProviderId] ?? modelsDevProviderId;
4335
+ }
4336
+ /**
4337
+ * Get the models.dev provider ID for a given Portkey gateway provider ID.
4338
+ * Returns the original ID if no mapping exists.
4339
+ *
4340
+ * @param portkeyProviderId - The provider ID from Portkey gateway
4341
+ * @returns The corresponding models.dev provider ID
4342
+ */
4343
+ function getModelsDevProviderId(portkeyProviderId) {
4344
+ return PORTKEY_TO_MODELS_DEV_PROVIDER_MAP[portkeyProviderId] ?? portkeyProviderId;
4345
+ }
4346
+
4307
4347
  //#endregion
4308
4348
  //#region src/middlewares/requestValidator/schema/config.ts
4349
+ /**
4350
+ * Check if a provider ID is valid.
4351
+ * Accepts both Portkey provider IDs and models.dev provider IDs that can be mapped.
4352
+ */
4353
+ function isValidProvider$1(value) {
4354
+ if (VALID_PROVIDERS.includes(value)) return true;
4355
+ const mappedId = getPortkeyProviderId(value);
4356
+ return VALID_PROVIDERS.includes(mappedId);
4357
+ }
4309
4358
  const configSchema = object({
4310
4359
  strategy: object({
4311
4360
  mode: string().refine((value) => [
@@ -4321,7 +4370,7 @@ const configSchema = object({
4321
4370
  })).optional(),
4322
4371
  default: string().optional()
4323
4372
  }).optional(),
4324
- provider: string().refine((value) => VALID_PROVIDERS.includes(value), { message: `Invalid 'provider' value. Must be one of: ${VALID_PROVIDERS.join(", ")}` }).optional(),
4373
+ provider: string().refine((value) => isValidProvider$1(value), { message: `Invalid 'provider' value. Must be one of: ${VALID_PROVIDERS.join(", ")}` }).optional(),
4325
4374
  api_key: string().optional(),
4326
4375
  aws_secret_access_key: string().optional(),
4327
4376
  aws_access_key_id: string().optional(),
@@ -4351,8 +4400,17 @@ const configSchema = object({
4351
4400
  vertex_service_account_json: object({}).catchall(string()).optional(),
4352
4401
  openai_project: string().optional(),
4353
4402
  openai_organization: string().optional(),
4403
+ azure_resource_name: string().optional(),
4404
+ azure_deployment_id: string().optional(),
4405
+ azure_api_version: string().optional(),
4354
4406
  azure_model_name: string().optional(),
4355
4407
  azure_auth_mode: string().optional(),
4408
+ azure_ad_token: string().optional(),
4409
+ azure_managed_client_id: string().optional(),
4410
+ azure_workload_client_id: string().optional(),
4411
+ azure_entra_client_id: string().optional(),
4412
+ azure_entra_client_secret: string().optional(),
4413
+ azure_entra_tenant_id: string().optional(),
4356
4414
  strict_open_ai_compliance: boolean().optional()
4357
4415
  }).refine((value) => {
4358
4416
  const hasProviderApiKey = value.provider !== void 0 && value.api_key !== void 0;
@@ -4447,6 +4505,15 @@ const Environment = (c) => {
4447
4505
 
4448
4506
  //#endregion
4449
4507
  //#region src/middlewares/requestValidator/index.ts
4508
+ /**
4509
+ * Check if a provider ID is valid.
4510
+ * Accepts both Portkey provider IDs and models.dev provider IDs that can be mapped.
4511
+ */
4512
+ function isValidProvider(value) {
4513
+ if (VALID_PROVIDERS.includes(value)) return true;
4514
+ const mappedId = getPortkeyProviderId(value);
4515
+ return VALID_PROVIDERS.includes(mappedId);
4516
+ }
4450
4517
  const VALIDATION_PATTERNS = {
4451
4518
  CONTROL_CHARS: /[\x00-\x1F\x7F]/,
4452
4519
  SUSPICIOUS_CHARS: /[\s<>{}|\\^`]/,
@@ -4552,7 +4619,7 @@ const requestValidator = (c, next) => {
4552
4619
  status: 400,
4553
4620
  headers: { "content-type": "application/json" }
4554
4621
  });
4555
- if (requestHeaders[`x-${POWERED_BY}-provider`] && !VALID_PROVIDERS.includes(requestHeaders[`x-${POWERED_BY}-provider`])) return new Response(JSON.stringify({
4622
+ if (requestHeaders[`x-${POWERED_BY}-provider`] && !isValidProvider(requestHeaders[`x-${POWERED_BY}-provider`])) return new Response(JSON.stringify({
4556
4623
  status: "failure",
4557
4624
  message: `Invalid provider passed`
4558
4625
  }), {
@@ -10172,7 +10239,7 @@ const retryRequest = async (url, options, retryCount, statusCodesToRetry, timeou
10172
10239
 
10173
10240
  //#endregion
10174
10241
  //#region package.json
10175
- var version = "0.2.6";
10242
+ var version = "0.2.7-beta.1";
10176
10243
 
10177
10244
  //#endregion
10178
10245
  //#region src/providers/bytez/api.ts
@@ -17090,7 +17157,7 @@ const transformToProviderRequest = (provider, params, requestBody, fn, requestHe
17090
17157
  if (fn === "createFinetune" && [AZURE_OPEN_AI, FIREWORKS_AI].includes(provider)) return transformToProviderRequestBody(provider, requestBody, requestHeaders, providerOptions, fn);
17091
17158
  if (requestBody instanceof FormData || requestBody instanceof ArrayBuffer) return requestBody;
17092
17159
  if (fn === "proxy") return params;
17093
- const providerAPIConfig = providers_default[provider].api;
17160
+ const providerAPIConfig = providers_default[getPortkeyProviderId(provider)].api;
17094
17161
  if (providerAPIConfig.transformToFormData && providerAPIConfig.transformToFormData({ gatewayRequestBody: params })) return transformToProviderRequestFormData(provider, params, fn, providerOptions);
17095
17162
  return transformToProviderRequestJSON(provider, params, fn, providerOptions);
17096
17163
  };
@@ -30051,7 +30118,7 @@ async function responseHandler(c, response, streamingMode, providerOptions, resp
30051
30118
  let responseTransformerFunction;
30052
30119
  const responseContentType = response.headers?.get("content-type");
30053
30120
  const isSuccessStatusCode = [200, 246].includes(response.status);
30054
- const provider = providerOptions.provider;
30121
+ const provider = getPortkeyProviderId(providerOptions.provider);
30055
30122
  const providerConfig = providers_default[provider];
30056
30123
  let providerTransformers = providers_default[provider]?.responseTransforms;
30057
30124
  if (providerConfig?.getConfig) providerTransformers = providerConfig.getConfig({
@@ -30653,7 +30720,8 @@ var PreRequestValidatorService = class {
30653
30720
  var ProviderContext = class {
30654
30721
  constructor(provider) {
30655
30722
  this.provider = provider;
30656
- if (!providers_default[provider]) throw new GatewayError(`Provider ${provider} not found`);
30723
+ this.provider = getPortkeyProviderId(provider);
30724
+ if (!providers_default[this.provider]) throw new GatewayError(`Provider ${provider} not found`);
30657
30725
  }
30658
30726
  get providerConfig() {
30659
30727
  return providers_default[this.provider];
@@ -30925,6 +30993,20 @@ var ResponseService = class {
30925
30993
 
30926
30994
  //#endregion
30927
30995
  //#region src/handlers/handlerUtils.ts
30996
+ /**
30997
+ * Normalizes Azure OpenAI config fields from JSON config format to provider format.
30998
+ * JSON config uses `azure_*` prefix (e.g., `azure_resource_name`) which converts to `azureResourceName`,
30999
+ * but the provider expects `resourceName`, `deploymentId`, etc.
31000
+ * This function recursively normalizes nested targets as well.
31001
+ */
31002
+ function normalizeAzureConfig(config$1) {
31003
+ const normalized = { ...config$1 };
31004
+ if (normalized.azureResourceName && !normalized.resourceName) normalized.resourceName = normalized.azureResourceName;
31005
+ if (normalized.azureDeploymentId && !normalized.deploymentId) normalized.deploymentId = normalized.azureDeploymentId;
31006
+ if (normalized.azureApiVersion && !normalized.apiVersion) normalized.apiVersion = normalized.azureApiVersion;
31007
+ if (Array.isArray(normalized.targets)) normalized.targets = normalized.targets.map((target) => normalizeAzureConfig(target));
31008
+ return normalized;
31009
+ }
30928
31010
  function constructRequestBody(requestContext, providerHeaders) {
30929
31011
  const headerContentType = providerHeaders[HEADER_KEYS.CONTENT_TYPE];
30930
31012
  const requestContentType = requestContext.getHeader(HEADER_KEYS.CONTENT_TYPE);
@@ -31438,7 +31520,7 @@ function constructConfigFromRequestHeaders(requestHeaders) {
31438
31520
  ...oracleConfig
31439
31521
  };
31440
31522
  }
31441
- return convertKeysToCamelCase(parsedConfigJson, [
31523
+ return normalizeAzureConfig(convertKeysToCamelCase(parsedConfigJson, [
31442
31524
  "override_params",
31443
31525
  "params",
31444
31526
  "checks",
@@ -31453,7 +31535,7 @@ function constructConfigFromRequestHeaders(requestHeaders) {
31453
31535
  "integrationDetails",
31454
31536
  "virtualKeyDetails",
31455
31537
  "cb_config"
31456
- ]);
31538
+ ]));
31457
31539
  }
31458
31540
  return {
31459
31541
  provider: requestHeaders[`x-${POWERED_BY}-provider`],
@@ -32041,7 +32123,7 @@ async function realTimeHandler(c) {
32041
32123
  try {
32042
32124
  const requestHeaders = Object.fromEntries(c.req.raw.headers);
32043
32125
  const providerOptions = constructConfigFromRequestHeaders(requestHeaders);
32044
- const apiConfig = providers_default[providerOptions.provider ?? ""].api;
32126
+ const apiConfig = providers_default[getPortkeyProviderId(providerOptions.provider ?? "")].api;
32045
32127
  const url = getURLForOutgoingConnection(apiConfig, providerOptions, c.req.url, c);
32046
32128
  const options = await getOptionsForOutgoingConnection(apiConfig, providerOptions, url, c);
32047
32129
  const sessionOptions = {
@@ -33336,5 +33418,9 @@ app.delete("/v1/*", requestValidator, proxyHandler);
33336
33418
  var src_default = app;
33337
33419
 
33338
33420
  //#endregion
33421
+ exports.MODELS_DEV_TO_PORTKEY_PROVIDER_MAP = MODELS_DEV_TO_PORTKEY_PROVIDER_MAP;
33422
+ exports.PORTKEY_TO_MODELS_DEV_PROVIDER_MAP = PORTKEY_TO_MODELS_DEV_PROVIDER_MAP;
33339
33423
  exports.Providers = providers_default;
33340
- exports.default = src_default;
33424
+ exports.default = src_default;
33425
+ exports.getModelsDevProviderId = getModelsDevProviderId;
33426
+ exports.getPortkeyProviderId = getPortkeyProviderId;
package/dist/index.d.cts CHANGED
@@ -423,6 +423,38 @@ interface ProviderConfigs {
423
423
  }) => any;
424
424
  }
425
425
  //#endregion
426
+ //#region src/providers/providerIdMapping.d.ts
427
+ /**
428
+ * Provider ID mapping between models.dev and Portkey gateway.
429
+ *
430
+ * models.dev uses different provider IDs than Portkey for some providers.
431
+ * This mapping allows converting from models.dev IDs to Portkey gateway IDs.
432
+ *
433
+ * Key: models.dev provider ID
434
+ * Value: Portkey gateway provider ID
435
+ */
436
+ declare const MODELS_DEV_TO_PORTKEY_PROVIDER_MAP: Record<string, string>;
437
+ /**
438
+ * Reverse mapping from Portkey to models.dev
439
+ */
440
+ declare const PORTKEY_TO_MODELS_DEV_PROVIDER_MAP: Record<string, string>;
441
+ /**
442
+ * Get the Portkey gateway provider ID for a given models.dev provider ID.
443
+ * Returns the original ID if no mapping exists.
444
+ *
445
+ * @param modelsDevProviderId - The provider ID from models.dev
446
+ * @returns The corresponding Portkey gateway provider ID
447
+ */
448
+ declare function getPortkeyProviderId(modelsDevProviderId: string): string;
449
+ /**
450
+ * Get the models.dev provider ID for a given Portkey gateway provider ID.
451
+ * Returns the original ID if no mapping exists.
452
+ *
453
+ * @param portkeyProviderId - The provider ID from Portkey gateway
454
+ * @returns The corresponding models.dev provider ID
455
+ */
456
+ declare function getModelsDevProviderId(portkeyProviderId: string): string;
457
+ //#endregion
426
458
  //#region src/providers/index.d.ts
427
459
  declare const Providers: {
428
460
  [key: string]: ProviderConfigs;
@@ -431,4 +463,4 @@ declare const Providers: {
431
463
  //#region src/index.d.ts
432
464
  declare const app: Hono<hono_types0.BlankEnv, hono_types0.BlankSchema, "/">;
433
465
  //#endregion
434
- export { Providers, app as default };
466
+ export { MODELS_DEV_TO_PORTKEY_PROVIDER_MAP, PORTKEY_TO_MODELS_DEV_PROVIDER_MAP, Providers, app as default, getModelsDevProviderId, getPortkeyProviderId };
package/dist/index.d.mts CHANGED
@@ -423,6 +423,38 @@ interface ProviderConfigs {
423
423
  }) => any;
424
424
  }
425
425
  //#endregion
426
+ //#region src/providers/providerIdMapping.d.ts
427
+ /**
428
+ * Provider ID mapping between models.dev and Portkey gateway.
429
+ *
430
+ * models.dev uses different provider IDs than Portkey for some providers.
431
+ * This mapping allows converting from models.dev IDs to Portkey gateway IDs.
432
+ *
433
+ * Key: models.dev provider ID
434
+ * Value: Portkey gateway provider ID
435
+ */
436
+ declare const MODELS_DEV_TO_PORTKEY_PROVIDER_MAP: Record<string, string>;
437
+ /**
438
+ * Reverse mapping from Portkey to models.dev
439
+ */
440
+ declare const PORTKEY_TO_MODELS_DEV_PROVIDER_MAP: Record<string, string>;
441
+ /**
442
+ * Get the Portkey gateway provider ID for a given models.dev provider ID.
443
+ * Returns the original ID if no mapping exists.
444
+ *
445
+ * @param modelsDevProviderId - The provider ID from models.dev
446
+ * @returns The corresponding Portkey gateway provider ID
447
+ */
448
+ declare function getPortkeyProviderId(modelsDevProviderId: string): string;
449
+ /**
450
+ * Get the models.dev provider ID for a given Portkey gateway provider ID.
451
+ * Returns the original ID if no mapping exists.
452
+ *
453
+ * @param portkeyProviderId - The provider ID from Portkey gateway
454
+ * @returns The corresponding models.dev provider ID
455
+ */
456
+ declare function getModelsDevProviderId(portkeyProviderId: string): string;
457
+ //#endregion
426
458
  //#region src/providers/index.d.ts
427
459
  declare const Providers: {
428
460
  [key: string]: ProviderConfigs;
@@ -431,4 +463,4 @@ declare const Providers: {
431
463
  //#region src/index.d.ts
432
464
  declare const app: Hono<hono_types0.BlankEnv, hono_types0.BlankSchema, "/">;
433
465
  //#endregion
434
- export { Providers, app as default };
466
+ export { MODELS_DEV_TO_PORTKEY_PROVIDER_MAP, PORTKEY_TO_MODELS_DEV_PROVIDER_MAP, Providers, app as default, getModelsDevProviderId, getPortkeyProviderId };
package/dist/index.mjs CHANGED
@@ -4277,8 +4277,57 @@ function _instanceof(cls, params = {}) {
4277
4277
  return inst;
4278
4278
  }
4279
4279
 
4280
+ //#endregion
4281
+ //#region src/providers/providerIdMapping.ts
4282
+ /**
4283
+ * Provider ID mapping between models.dev and Portkey gateway.
4284
+ *
4285
+ * models.dev uses different provider IDs than Portkey for some providers.
4286
+ * This mapping allows converting from models.dev IDs to Portkey gateway IDs.
4287
+ *
4288
+ * Key: models.dev provider ID
4289
+ * Value: Portkey gateway provider ID
4290
+ */
4291
+ const MODELS_DEV_TO_PORTKEY_PROVIDER_MAP = {
4292
+ "azure-cognitive-services": "azure-ai",
4293
+ azure: "azure-openai"
4294
+ };
4295
+ /**
4296
+ * Reverse mapping from Portkey to models.dev
4297
+ */
4298
+ const PORTKEY_TO_MODELS_DEV_PROVIDER_MAP = Object.fromEntries(Object.entries(MODELS_DEV_TO_PORTKEY_PROVIDER_MAP).map(([k, v]) => [v, k]));
4299
+ /**
4300
+ * Get the Portkey gateway provider ID for a given models.dev provider ID.
4301
+ * Returns the original ID if no mapping exists.
4302
+ *
4303
+ * @param modelsDevProviderId - The provider ID from models.dev
4304
+ * @returns The corresponding Portkey gateway provider ID
4305
+ */
4306
+ function getPortkeyProviderId(modelsDevProviderId) {
4307
+ return MODELS_DEV_TO_PORTKEY_PROVIDER_MAP[modelsDevProviderId] ?? modelsDevProviderId;
4308
+ }
4309
+ /**
4310
+ * Get the models.dev provider ID for a given Portkey gateway provider ID.
4311
+ * Returns the original ID if no mapping exists.
4312
+ *
4313
+ * @param portkeyProviderId - The provider ID from Portkey gateway
4314
+ * @returns The corresponding models.dev provider ID
4315
+ */
4316
+ function getModelsDevProviderId(portkeyProviderId) {
4317
+ return PORTKEY_TO_MODELS_DEV_PROVIDER_MAP[portkeyProviderId] ?? portkeyProviderId;
4318
+ }
4319
+
4280
4320
  //#endregion
4281
4321
  //#region src/middlewares/requestValidator/schema/config.ts
4322
+ /**
4323
+ * Check if a provider ID is valid.
4324
+ * Accepts both Portkey provider IDs and models.dev provider IDs that can be mapped.
4325
+ */
4326
+ function isValidProvider$1(value) {
4327
+ if (VALID_PROVIDERS.includes(value)) return true;
4328
+ const mappedId = getPortkeyProviderId(value);
4329
+ return VALID_PROVIDERS.includes(mappedId);
4330
+ }
4282
4331
  const configSchema = object({
4283
4332
  strategy: object({
4284
4333
  mode: string().refine((value) => [
@@ -4294,7 +4343,7 @@ const configSchema = object({
4294
4343
  })).optional(),
4295
4344
  default: string().optional()
4296
4345
  }).optional(),
4297
- provider: string().refine((value) => VALID_PROVIDERS.includes(value), { message: `Invalid 'provider' value. Must be one of: ${VALID_PROVIDERS.join(", ")}` }).optional(),
4346
+ provider: string().refine((value) => isValidProvider$1(value), { message: `Invalid 'provider' value. Must be one of: ${VALID_PROVIDERS.join(", ")}` }).optional(),
4298
4347
  api_key: string().optional(),
4299
4348
  aws_secret_access_key: string().optional(),
4300
4349
  aws_access_key_id: string().optional(),
@@ -4324,8 +4373,17 @@ const configSchema = object({
4324
4373
  vertex_service_account_json: object({}).catchall(string()).optional(),
4325
4374
  openai_project: string().optional(),
4326
4375
  openai_organization: string().optional(),
4376
+ azure_resource_name: string().optional(),
4377
+ azure_deployment_id: string().optional(),
4378
+ azure_api_version: string().optional(),
4327
4379
  azure_model_name: string().optional(),
4328
4380
  azure_auth_mode: string().optional(),
4381
+ azure_ad_token: string().optional(),
4382
+ azure_managed_client_id: string().optional(),
4383
+ azure_workload_client_id: string().optional(),
4384
+ azure_entra_client_id: string().optional(),
4385
+ azure_entra_client_secret: string().optional(),
4386
+ azure_entra_tenant_id: string().optional(),
4329
4387
  strict_open_ai_compliance: boolean().optional()
4330
4388
  }).refine((value) => {
4331
4389
  const hasProviderApiKey = value.provider !== void 0 && value.api_key !== void 0;
@@ -4420,6 +4478,15 @@ const Environment = (c) => {
4420
4478
 
4421
4479
  //#endregion
4422
4480
  //#region src/middlewares/requestValidator/index.ts
4481
+ /**
4482
+ * Check if a provider ID is valid.
4483
+ * Accepts both Portkey provider IDs and models.dev provider IDs that can be mapped.
4484
+ */
4485
+ function isValidProvider(value) {
4486
+ if (VALID_PROVIDERS.includes(value)) return true;
4487
+ const mappedId = getPortkeyProviderId(value);
4488
+ return VALID_PROVIDERS.includes(mappedId);
4489
+ }
4423
4490
  const VALIDATION_PATTERNS = {
4424
4491
  CONTROL_CHARS: /[\x00-\x1F\x7F]/,
4425
4492
  SUSPICIOUS_CHARS: /[\s<>{}|\\^`]/,
@@ -4525,7 +4592,7 @@ const requestValidator = (c, next) => {
4525
4592
  status: 400,
4526
4593
  headers: { "content-type": "application/json" }
4527
4594
  });
4528
- if (requestHeaders[`x-${POWERED_BY}-provider`] && !VALID_PROVIDERS.includes(requestHeaders[`x-${POWERED_BY}-provider`])) return new Response(JSON.stringify({
4595
+ if (requestHeaders[`x-${POWERED_BY}-provider`] && !isValidProvider(requestHeaders[`x-${POWERED_BY}-provider`])) return new Response(JSON.stringify({
4529
4596
  status: "failure",
4530
4597
  message: `Invalid provider passed`
4531
4598
  }), {
@@ -10145,7 +10212,7 @@ const retryRequest = async (url, options, retryCount, statusCodesToRetry, timeou
10145
10212
 
10146
10213
  //#endregion
10147
10214
  //#region package.json
10148
- var version = "0.2.6";
10215
+ var version = "0.2.7-beta.1";
10149
10216
 
10150
10217
  //#endregion
10151
10218
  //#region src/providers/bytez/api.ts
@@ -17063,7 +17130,7 @@ const transformToProviderRequest = (provider, params, requestBody, fn, requestHe
17063
17130
  if (fn === "createFinetune" && [AZURE_OPEN_AI, FIREWORKS_AI].includes(provider)) return transformToProviderRequestBody(provider, requestBody, requestHeaders, providerOptions, fn);
17064
17131
  if (requestBody instanceof FormData || requestBody instanceof ArrayBuffer) return requestBody;
17065
17132
  if (fn === "proxy") return params;
17066
- const providerAPIConfig = providers_default[provider].api;
17133
+ const providerAPIConfig = providers_default[getPortkeyProviderId(provider)].api;
17067
17134
  if (providerAPIConfig.transformToFormData && providerAPIConfig.transformToFormData({ gatewayRequestBody: params })) return transformToProviderRequestFormData(provider, params, fn, providerOptions);
17068
17135
  return transformToProviderRequestJSON(provider, params, fn, providerOptions);
17069
17136
  };
@@ -30024,7 +30091,7 @@ async function responseHandler(c, response, streamingMode, providerOptions, resp
30024
30091
  let responseTransformerFunction;
30025
30092
  const responseContentType = response.headers?.get("content-type");
30026
30093
  const isSuccessStatusCode = [200, 246].includes(response.status);
30027
- const provider = providerOptions.provider;
30094
+ const provider = getPortkeyProviderId(providerOptions.provider);
30028
30095
  const providerConfig = providers_default[provider];
30029
30096
  let providerTransformers = providers_default[provider]?.responseTransforms;
30030
30097
  if (providerConfig?.getConfig) providerTransformers = providerConfig.getConfig({
@@ -30626,7 +30693,8 @@ var PreRequestValidatorService = class {
30626
30693
  var ProviderContext = class {
30627
30694
  constructor(provider) {
30628
30695
  this.provider = provider;
30629
- if (!providers_default[provider]) throw new GatewayError(`Provider ${provider} not found`);
30696
+ this.provider = getPortkeyProviderId(provider);
30697
+ if (!providers_default[this.provider]) throw new GatewayError(`Provider ${provider} not found`);
30630
30698
  }
30631
30699
  get providerConfig() {
30632
30700
  return providers_default[this.provider];
@@ -30898,6 +30966,20 @@ var ResponseService = class {
30898
30966
 
30899
30967
  //#endregion
30900
30968
  //#region src/handlers/handlerUtils.ts
30969
+ /**
30970
+ * Normalizes Azure OpenAI config fields from JSON config format to provider format.
30971
+ * JSON config uses `azure_*` prefix (e.g., `azure_resource_name`) which converts to `azureResourceName`,
30972
+ * but the provider expects `resourceName`, `deploymentId`, etc.
30973
+ * This function recursively normalizes nested targets as well.
30974
+ */
30975
+ function normalizeAzureConfig(config$1) {
30976
+ const normalized = { ...config$1 };
30977
+ if (normalized.azureResourceName && !normalized.resourceName) normalized.resourceName = normalized.azureResourceName;
30978
+ if (normalized.azureDeploymentId && !normalized.deploymentId) normalized.deploymentId = normalized.azureDeploymentId;
30979
+ if (normalized.azureApiVersion && !normalized.apiVersion) normalized.apiVersion = normalized.azureApiVersion;
30980
+ if (Array.isArray(normalized.targets)) normalized.targets = normalized.targets.map((target) => normalizeAzureConfig(target));
30981
+ return normalized;
30982
+ }
30901
30983
  function constructRequestBody(requestContext, providerHeaders) {
30902
30984
  const headerContentType = providerHeaders[HEADER_KEYS.CONTENT_TYPE];
30903
30985
  const requestContentType = requestContext.getHeader(HEADER_KEYS.CONTENT_TYPE);
@@ -31411,7 +31493,7 @@ function constructConfigFromRequestHeaders(requestHeaders) {
31411
31493
  ...oracleConfig
31412
31494
  };
31413
31495
  }
31414
- return convertKeysToCamelCase(parsedConfigJson, [
31496
+ return normalizeAzureConfig(convertKeysToCamelCase(parsedConfigJson, [
31415
31497
  "override_params",
31416
31498
  "params",
31417
31499
  "checks",
@@ -31426,7 +31508,7 @@ function constructConfigFromRequestHeaders(requestHeaders) {
31426
31508
  "integrationDetails",
31427
31509
  "virtualKeyDetails",
31428
31510
  "cb_config"
31429
- ]);
31511
+ ]));
31430
31512
  }
31431
31513
  return {
31432
31514
  provider: requestHeaders[`x-${POWERED_BY}-provider`],
@@ -32014,7 +32096,7 @@ async function realTimeHandler(c) {
32014
32096
  try {
32015
32097
  const requestHeaders = Object.fromEntries(c.req.raw.headers);
32016
32098
  const providerOptions = constructConfigFromRequestHeaders(requestHeaders);
32017
- const apiConfig = providers_default[providerOptions.provider ?? ""].api;
32099
+ const apiConfig = providers_default[getPortkeyProviderId(providerOptions.provider ?? "")].api;
32018
32100
  const url = getURLForOutgoingConnection(apiConfig, providerOptions, c.req.url, c);
32019
32101
  const options = await getOptionsForOutgoingConnection(apiConfig, providerOptions, url, c);
32020
32102
  const sessionOptions = {
@@ -33309,4 +33391,4 @@ app.delete("/v1/*", requestValidator, proxyHandler);
33309
33391
  var src_default = app;
33310
33392
 
33311
33393
  //#endregion
33312
- export { providers_default as Providers, src_default as default };
33394
+ export { MODELS_DEV_TO_PORTKEY_PROVIDER_MAP, PORTKEY_TO_MODELS_DEV_PROVIDER_MAP, providers_default as Providers, src_default as default, getModelsDevProviderId, getPortkeyProviderId };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llmops/gateway",
3
- "version": "0.2.6",
3
+ "version": "0.2.7-beta.1",
4
4
  "description": "AI gateway for LLMOps (forked from Portkey)",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",