@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 +96 -10
- package/dist/index.d.cts +33 -1
- package/dist/index.d.mts +33 -1
- package/dist/index.mjs +92 -10
- package/package.json +1 -1
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) =>
|
|
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`] && !
|
|
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.
|
|
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
|
-
|
|
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) =>
|
|
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`] && !
|
|
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.
|
|
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
|
-
|
|
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 };
|