From 9b5fa501c6211bd46275e06dc309c092fb35039e Mon Sep 17 00:00:00 2001 From: visargD Date: Fri, 14 Feb 2025 02:56:42 +0530 Subject: [PATCH 1/4] feat: allow mutations in webhook plugin --- plugins/default/webhook.ts | 46 ++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/plugins/default/webhook.ts b/plugins/default/webhook.ts index 8d9db1e9f..22ff1493a 100644 --- a/plugins/default/webhook.ts +++ b/plugins/default/webhook.ts @@ -1,4 +1,9 @@ -import { PluginContext, PluginHandler, PluginParameters } from '../types'; +import { + HookEventType, + PluginContext, + PluginHandler, + PluginParameters, +} from '../types'; import { post } from '../utils'; function parseHeaders(headers: unknown): Record { @@ -22,11 +27,23 @@ function parseHeaders(headers: unknown): Record { export const handler: PluginHandler = async ( context: PluginContext, - parameters: PluginParameters + parameters: PluginParameters, + eventType: HookEventType ) => { let error = null; let verdict = false; let data: any = null; + const transformedData: Record = { + request: { + json: null, + text: null, + }, + response: { + json: null, + text: null, + }, + }; + let transformed = false; try { const url = parameters.webhookURL; @@ -49,9 +66,30 @@ export const handler: PluginHandler = async ( throw new Error(`Failed to parse headers: ${e.message}`); } - const response = await post(url, context, { headers }, 3000); + const response = await post( + url, + { ...context, eventType }, + { headers }, + 3000 + ); verdict = response.verdict; + if ( + response.transformedData?.request?.json && + eventType === 'beforeRequestHook' + ) { + transformedData.request.json = response.transformedData.request.json; + transformed = true; + } + + if ( + response.transformedData?.response?.json && + eventType === 'afterRequestHook' + ) { + transformedData.response.json = response.transformedData.response.json; + transformed = true; + } + data = { verdict, explanation: verdict @@ -78,5 +116,5 @@ export const handler: PluginHandler = async ( }; } - return { error, verdict, data }; + return { error, verdict, data, transformedData, transformed }; }; From f75975ebfd253dff05b368843cc3ac279c781f2b Mon Sep 17 00:00:00 2001 From: visargD Date: Fri, 14 Feb 2025 03:11:33 +0530 Subject: [PATCH 2/4] feat: make timeout configurable for plugins --- plugins/aporia/validateProject.ts | 8 ++++-- plugins/bedrock/index.ts | 3 +- plugins/bedrock/util.ts | 16 +++++++---- plugins/default/log.ts | 2 +- plugins/default/webhook.ts | 2 +- plugins/mistral/index.ts | 3 +- plugins/pangea/pii.ts | 7 ++++- plugins/pangea/textGuard.ts | 2 +- plugins/patronus/custom.ts | 2 +- plugins/patronus/globals.ts | 3 +- plugins/patronus/isConcise.ts | 2 +- plugins/patronus/isHelpful.ts | 2 +- plugins/patronus/isPolite.ts | 2 +- plugins/patronus/noApologies.ts | 2 +- plugins/patronus/noGenderBias.ts | 2 +- plugins/patronus/noRacialBias.ts | 2 +- plugins/patronus/phi.ts | 9 ++++-- plugins/patronus/pii.ts | 9 ++++-- plugins/patronus/retrievalAnswerRelevance.ts | 4 +-- plugins/patronus/toxicity.ts | 3 +- plugins/pillar/globals.ts | 7 +++-- plugins/pillar/scanPrompt.ts | 3 +- plugins/pillar/scanResponse.ts | 3 +- plugins/portkey/gibberish.ts | 3 +- plugins/portkey/globals.ts | 8 ++++-- plugins/portkey/language.ts | 3 +- plugins/portkey/moderateContent.ts | 3 +- plugins/portkey/pii.ts | 3 +- plugins/promptfoo/globals.ts | 30 +++++++++++++------- plugins/promptfoo/guard.ts | 6 +++- plugins/promptfoo/harm.ts | 6 +++- plugins/promptfoo/pii.ts | 8 ++++-- plugins/sydelabs/sydeguard.ts | 18 ++++++++---- 33 files changed, 122 insertions(+), 64 deletions(-) diff --git a/plugins/aporia/validateProject.ts b/plugins/aporia/validateProject.ts index f44654cb7..65aef7936 100644 --- a/plugins/aporia/validateProject.ts +++ b/plugins/aporia/validateProject.ts @@ -12,7 +12,8 @@ export const APORIA_BASE_URL = 'https://gr-prd.aporia.com'; export const validate = async ( projectID: string, credentials: any, - data: any + data: any, + timeout?: number ) => { const options = { headers: { @@ -26,7 +27,7 @@ export const validate = async ( baseURL = credentials.apiEndpoint; } - return post(`${baseURL}/${projectID}/validate`, data, options); + return post(`${baseURL}/${projectID}/validate`, data, options, timeout); }; export const handler: PluginHandler = async ( @@ -70,7 +71,8 @@ export const handler: PluginHandler = async ( const result: any = await validate( parameters.projectID, parameters.credentials, - aporiaObject + aporiaObject, + parameters.timeout ); // Result example: diff --git a/plugins/bedrock/index.ts b/plugins/bedrock/index.ts index 343900088..b24393871 100644 --- a/plugins/bedrock/index.ts +++ b/plugins/bedrock/index.ts @@ -142,7 +142,8 @@ export const pluginHandler: PluginHandler< { content: [{ text: { text } }], source: body.source, - } + }, + parameters.timeout ) : null ) diff --git a/plugins/bedrock/util.ts b/plugins/bedrock/util.ts index e24b03d1d..eb700c57a 100644 --- a/plugins/bedrock/util.ts +++ b/plugins/bedrock/util.ts @@ -49,7 +49,8 @@ export const generateAWSHeaders = async ( export const bedrockPost = async ( credentials: Record, - body: BedrockBody + body: BedrockBody, + timeout?: number ) => { const url = `https://bedrock-runtime.${credentials?.awsRegion}.amazonaws.com/guardrail/${credentials?.guardrailId}/version/${credentials?.guardrailVersion}/apply`; @@ -67,10 +68,15 @@ export const bedrockPost = async ( credentials?.awsSessionToken || '' ); - return await post(url, body, { - headers, - method: 'POST', - }); + return await post( + url, + body, + { + headers, + method: 'POST', + }, + timeout + ); }; const replaceMatches = ( diff --git a/plugins/default/log.ts b/plugins/default/log.ts index 039e861ad..faf087aa2 100644 --- a/plugins/default/log.ts +++ b/plugins/default/log.ts @@ -16,7 +16,7 @@ export const handler: PluginHandler = async ( : {}; // log the request - await post(url, context, { headers }, 3000); + await post(url, context, { headers }, parameters.timeout || 3000); verdict = true; data = { message: `Logged the request to ${url}` }; diff --git a/plugins/default/webhook.ts b/plugins/default/webhook.ts index 22ff1493a..2df9ff7ca 100644 --- a/plugins/default/webhook.ts +++ b/plugins/default/webhook.ts @@ -70,7 +70,7 @@ export const handler: PluginHandler = async ( url, { ...context, eventType }, { headers }, - 3000 + parameters.timeout || 3000 ); verdict = response.verdict; diff --git a/plugins/mistral/index.ts b/plugins/mistral/index.ts index 2c93f6992..056381f18 100644 --- a/plugins/mistral/index.ts +++ b/plugins/mistral/index.ts @@ -105,7 +105,8 @@ export const mistralGuardrailHandler: PluginHandler = async ( Authorization: `Bearer ${creds.apiKey}`, 'Content-Type': 'application/json', }, - } + }, + parameters.timeout ); const categories: Record = diff --git a/plugins/pangea/pii.ts b/plugins/pangea/pii.ts index 5e8297b90..7fc55537c 100644 --- a/plugins/pangea/pii.ts +++ b/plugins/pangea/pii.ts @@ -79,7 +79,12 @@ export const handler: PluginHandler = async ( data: textArray, }; - const response = await post(url, request, requestOptions); + const response = await post( + url, + request, + requestOptions, + parameters.timeout + ); const piiDetected = response.result?.count > 0 && response.result.redacted_data ? true diff --git a/plugins/pangea/textGuard.ts b/plugins/pangea/textGuard.ts index 9c38c34ff..7a12bba7d 100644 --- a/plugins/pangea/textGuard.ts +++ b/plugins/pangea/textGuard.ts @@ -63,7 +63,7 @@ export const handler: PluginHandler = async ( let response; try { - response = await post(url, request, requestOptions); + response = await post(url, request, requestOptions, parameters.timeout); } catch (e) { if (e instanceof HttpError) { error = `${e.message}. body: ${e.response.body}`; diff --git a/plugins/patronus/custom.ts b/plugins/patronus/custom.ts index 14467c943..9b7848ef8 100644 --- a/plugins/patronus/custom.ts +++ b/plugins/patronus/custom.ts @@ -31,7 +31,6 @@ export const handler: PluginHandler = async ( const evaluationBody: any = { input: context.request.text, output: context.response.text, - timeout: 15000, }; try { @@ -39,6 +38,7 @@ export const handler: PluginHandler = async ( evaluator, parameters.credentials, evaluationBody, + parameters.timeout || 15000, criteria ); diff --git a/plugins/patronus/globals.ts b/plugins/patronus/globals.ts index 65cee32bc..d4c7de9bd 100644 --- a/plugins/patronus/globals.ts +++ b/plugins/patronus/globals.ts @@ -6,6 +6,7 @@ export const postPatronus = async ( evaluator: string, credentials: any, data: any, + timeout?: number, criteria: string | null = null ) => { const options = { @@ -27,8 +28,6 @@ export const postPatronus = async ( // "evaluated_model_retrieved_context": ["I am John."] }; - const timeout = data.timeout || 5000; - return post(BASE_URL, body, options, timeout); }; diff --git a/plugins/patronus/isConcise.ts b/plugins/patronus/isConcise.ts index e98cc7594..057a09775 100644 --- a/plugins/patronus/isConcise.ts +++ b/plugins/patronus/isConcise.ts @@ -31,7 +31,6 @@ export const handler: PluginHandler = async ( const evaluationBody: any = { input: context.request.text, output: context.response.text, - timeout: 15000, }; try { @@ -39,6 +38,7 @@ export const handler: PluginHandler = async ( evaluator, parameters.credentials, evaluationBody, + parameters.timeout || 15000, criteria ); diff --git a/plugins/patronus/isHelpful.ts b/plugins/patronus/isHelpful.ts index 19df1f824..f0978fdd7 100644 --- a/plugins/patronus/isHelpful.ts +++ b/plugins/patronus/isHelpful.ts @@ -31,7 +31,6 @@ export const handler: PluginHandler = async ( const evaluationBody: any = { input: context.request.text, output: context.response.text, - timeout: 15000, }; try { @@ -39,6 +38,7 @@ export const handler: PluginHandler = async ( evaluator, parameters.credentials, evaluationBody, + parameters.timeout || 15000, criteria ); diff --git a/plugins/patronus/isPolite.ts b/plugins/patronus/isPolite.ts index a149381ff..36ff627ae 100644 --- a/plugins/patronus/isPolite.ts +++ b/plugins/patronus/isPolite.ts @@ -31,7 +31,6 @@ export const handler: PluginHandler = async ( const evaluationBody: any = { input: context.request.text, output: context.response.text, - timeout: 15000, }; try { @@ -39,6 +38,7 @@ export const handler: PluginHandler = async ( evaluator, parameters.credentials, evaluationBody, + parameters.timeout || 15000, criteria ); diff --git a/plugins/patronus/noApologies.ts b/plugins/patronus/noApologies.ts index 99f8d2a14..c0d20e343 100644 --- a/plugins/patronus/noApologies.ts +++ b/plugins/patronus/noApologies.ts @@ -31,7 +31,6 @@ export const handler: PluginHandler = async ( const evaluationBody: any = { input: context.request.text, output: context.response.text, - timeout: 15000, }; try { @@ -39,6 +38,7 @@ export const handler: PluginHandler = async ( evaluator, parameters.credentials, evaluationBody, + parameters.timeout || 15000, criteria ); diff --git a/plugins/patronus/noGenderBias.ts b/plugins/patronus/noGenderBias.ts index 3d07bf60f..14c4882d5 100644 --- a/plugins/patronus/noGenderBias.ts +++ b/plugins/patronus/noGenderBias.ts @@ -31,7 +31,6 @@ export const handler: PluginHandler = async ( const evaluationBody: any = { input: context.request.text, output: context.response.text, - timeout: 15000, }; try { @@ -39,6 +38,7 @@ export const handler: PluginHandler = async ( evaluator, parameters.credentials, evaluationBody, + parameters.timeout || 15000, criteria ); diff --git a/plugins/patronus/noRacialBias.ts b/plugins/patronus/noRacialBias.ts index b9125fed7..750ff19f3 100644 --- a/plugins/patronus/noRacialBias.ts +++ b/plugins/patronus/noRacialBias.ts @@ -31,7 +31,6 @@ export const handler: PluginHandler = async ( const evaluationBody: any = { input: context.request.text, output: context.response.text, - timeout: 15000, }; try { @@ -39,6 +38,7 @@ export const handler: PluginHandler = async ( evaluator, parameters.credentials, evaluationBody, + parameters.timeout || 15000, criteria ); diff --git a/plugins/patronus/phi.ts b/plugins/patronus/phi.ts index 135b0e937..b3c9a10aa 100644 --- a/plugins/patronus/phi.ts +++ b/plugins/patronus/phi.ts @@ -8,7 +8,7 @@ import { getCurrentContentPart, setCurrentContentPart } from '../utils'; import { findAllLongestPositions, postPatronus } from './globals'; import { maskEntities } from './pii'; -const redactPhi = async (text: string, credentials: any) => { +const redactPhi = async (text: string, credentials: any, timeout?: number) => { if (!text) return { maskedText: null, data: null }; const evaluator = 'phi'; @@ -19,7 +19,8 @@ const redactPhi = async (text: string, credentials: any) => { const result: any = await postPatronus( evaluator, credentials, - evaluationBody + evaluationBody, + timeout ); const evalResult = result.results[0]; @@ -79,7 +80,9 @@ export const handler: PluginHandler = async ( } const results = await Promise.all( - textArray.map((text) => redactPhi(text, parameters.credentials)) + textArray.map((text) => + redactPhi(text, parameters.credentials, parameters.timeout) + ) ); const hasPHI = results.some( diff --git a/plugins/patronus/pii.ts b/plugins/patronus/pii.ts index 687139c97..89c50efe6 100644 --- a/plugins/patronus/pii.ts +++ b/plugins/patronus/pii.ts @@ -44,7 +44,7 @@ export function maskEntities( return result; } -const redactPii = async (text: string, credentials: any) => { +const redactPii = async (text: string, credentials: any, timeout?: number) => { if (!text) return { maskedText: null, data: null }; const evaluator = 'pii'; const evaluationBody: any = { @@ -54,7 +54,8 @@ const redactPii = async (text: string, credentials: any) => { const result: any = await postPatronus( evaluator, credentials, - evaluationBody + evaluationBody, + timeout ); const evalResult = result.results[0]; @@ -115,7 +116,9 @@ export const handler: PluginHandler = async ( } const results = await Promise.all( - textArray.map((text) => redactPii(text, parameters.credentials)) + textArray.map((text) => + redactPii(text, parameters.credentials, parameters.timeout) + ) ); const hasPII = results.some( diff --git a/plugins/patronus/retrievalAnswerRelevance.ts b/plugins/patronus/retrievalAnswerRelevance.ts index b5148f31b..d8767359b 100644 --- a/plugins/patronus/retrievalAnswerRelevance.ts +++ b/plugins/patronus/retrievalAnswerRelevance.ts @@ -30,14 +30,14 @@ export const handler: PluginHandler = async ( const evaluationBody: any = { input: context.request.text, output: context.response.text, - timeout: 15000, }; try { const result: any = await postPatronus( evaluator, parameters.credentials, - evaluationBody + evaluationBody, + parameters.timeout || 15000 ); const evalResult = result.results[0]; diff --git a/plugins/patronus/toxicity.ts b/plugins/patronus/toxicity.ts index ab3f8331c..ee7e439c4 100644 --- a/plugins/patronus/toxicity.ts +++ b/plugins/patronus/toxicity.ts @@ -36,7 +36,8 @@ export const handler: PluginHandler = async ( const result: any = await postPatronus( evaluator, parameters.credentials, - evaluationBody + evaluationBody, + parameters.timeout ); const evalResult = result.results[0]; diff --git a/plugins/pillar/globals.ts b/plugins/pillar/globals.ts index 523b5172c..a4c101c0f 100644 --- a/plugins/pillar/globals.ts +++ b/plugins/pillar/globals.ts @@ -5,7 +5,8 @@ export const PILLAR_BASE_URL = 'https://api.pillarseclabs.com/api/v1'; export const postPillar = async ( endpoint: string, credentials: any, - data: any + data: any, + timeout?: number ) => { const options = { headers: { @@ -15,9 +16,9 @@ export const postPillar = async ( switch (endpoint) { case 'scanPrompt': - return post(`${PILLAR_BASE_URL}/scan/prompt`, data, options); + return post(`${PILLAR_BASE_URL}/scan/prompt`, data, options, timeout); case 'scanResponse': - return post(`${PILLAR_BASE_URL}/scan/response`, data, options); + return post(`${PILLAR_BASE_URL}/scan/response`, data, options, timeout); default: throw new Error(`Unknown Pillar endpoint: ${endpoint}`); } diff --git a/plugins/pillar/scanPrompt.ts b/plugins/pillar/scanPrompt.ts index f2924c628..e6eab690d 100644 --- a/plugins/pillar/scanPrompt.ts +++ b/plugins/pillar/scanPrompt.ts @@ -34,7 +34,8 @@ export const handler: PluginHandler = async ( const result: any = await postPillar( 'scanPrompt', parameters.credentials, - scanPromptObject + scanPromptObject, + parameters.timeout ); // result is an object with the following structure: diff --git a/plugins/pillar/scanResponse.ts b/plugins/pillar/scanResponse.ts index 9cd20b567..3ecc296a9 100644 --- a/plugins/pillar/scanResponse.ts +++ b/plugins/pillar/scanResponse.ts @@ -34,7 +34,8 @@ export const handler: PluginHandler = async ( const result: any = await postPillar( 'scanResponse', parameters.credentials, - scanResponseObject + scanResponseObject, + parameters.timeout ); // if any of the scanners found something, we will return a verdict of false diff --git a/plugins/portkey/gibberish.ts b/plugins/portkey/gibberish.ts index 5fccc1c9c..81553fc69 100644 --- a/plugins/portkey/gibberish.ts +++ b/plugins/portkey/gibberish.ts @@ -25,7 +25,8 @@ export const handler: PluginHandler = async ( options?.env || {}, PORTKEY_ENDPOINTS.GIBBERISH, parameters.credentials, - { input: text } + { input: text }, + parameters.timeout ); const isClean = response[0][0].label === 'clean'; diff --git a/plugins/portkey/globals.ts b/plugins/portkey/globals.ts index 8641d5d1c..e4064563f 100644 --- a/plugins/portkey/globals.ts +++ b/plugins/portkey/globals.ts @@ -38,7 +38,8 @@ export const fetchPortkey = async ( env: Record, endpoint: string, credentials: any, - data: any + data: any, + timeout?: number ) => { const options = { headers: { @@ -51,9 +52,10 @@ export const fetchPortkey = async ( `${BASE_URL}${endpoint}`, data, env.portkeyGuardrails, - options + options, + timeout ); } - return post(`${BASE_URL}${endpoint}`, data, options); + return post(`${BASE_URL}${endpoint}`, data, options, timeout); }; diff --git a/plugins/portkey/language.ts b/plugins/portkey/language.ts index 459dfe989..218ba5131 100644 --- a/plugins/portkey/language.ts +++ b/plugins/portkey/language.ts @@ -26,7 +26,8 @@ export const handler: PluginHandler = async ( options?.env || {}, PORTKEY_ENDPOINTS.LANGUAGE, parameters.credentials, - { input: text } + { input: text }, + parameters.timeout ); const predictedLanguage = result[0][0].label; diff --git a/plugins/portkey/moderateContent.ts b/plugins/portkey/moderateContent.ts index c56b22279..67f59b76a 100644 --- a/plugins/portkey/moderateContent.ts +++ b/plugins/portkey/moderateContent.ts @@ -26,7 +26,8 @@ export const handler: PluginHandler = async ( options?.env || {}, PORTKEY_ENDPOINTS.MODERATIONS, parameters.credentials, - { input: text } + { input: text }, + parameters.timeout ); const categoriesFlagged = Object.keys(result.results[0].categories).filter( diff --git a/plugins/portkey/pii.ts b/plugins/portkey/pii.ts index c683c69eb..e563633c9 100644 --- a/plugins/portkey/pii.ts +++ b/plugins/portkey/pii.ts @@ -28,7 +28,8 @@ export async function detectPII( { input: textArray, ...(parameters.categories && { categories: parameters.categories }), - } + }, + parameters.timeout ); return result.map((item) => ({ diff --git a/plugins/promptfoo/globals.ts b/plugins/promptfoo/globals.ts index cbccf4752..edf008e5f 100644 --- a/plugins/promptfoo/globals.ts +++ b/plugins/promptfoo/globals.ts @@ -7,7 +7,8 @@ export const postPromptfoo = async < T extends GuardResult | PIIResult | HarmResult, >( endpoint: string, - data: any + data: any, + timeout?: number ): Promise> => { const options = { headers: { @@ -17,17 +18,26 @@ export const postPromptfoo = async < switch (endpoint) { case 'guard': - return post(`${PROMPTFOO_BASE_URL}/guard`, data, options) as Promise< - PromptfooResult - >; + return post( + `${PROMPTFOO_BASE_URL}/guard`, + data, + options, + timeout + ) as Promise>; case 'pii': - return post(`${PROMPTFOO_BASE_URL}/pii`, data, options) as Promise< - PromptfooResult - >; + return post( + `${PROMPTFOO_BASE_URL}/pii`, + data, + options, + timeout + ) as Promise>; case 'harm': - return post(`${PROMPTFOO_BASE_URL}/harm`, data, options) as Promise< - PromptfooResult - >; + return post( + `${PROMPTFOO_BASE_URL}/harm`, + data, + options, + timeout + ) as Promise>; default: throw new Error(`Unknown Promptfoo endpoint: ${endpoint}`); } diff --git a/plugins/promptfoo/guard.ts b/plugins/promptfoo/guard.ts index e849125cc..4f50432c1 100644 --- a/plugins/promptfoo/guard.ts +++ b/plugins/promptfoo/guard.ts @@ -22,7 +22,11 @@ export const handler: PluginHandler = async ( input: getText(context, eventType), }; - const result = await postPromptfoo('guard', guardObject); + const result = await postPromptfoo( + 'guard', + guardObject, + parameters.timeout + ); // For now, we only check for jailbreak if (result.results[0].categories.jailbreak) { diff --git a/plugins/promptfoo/harm.ts b/plugins/promptfoo/harm.ts index d7ac3e118..714e11202 100644 --- a/plugins/promptfoo/harm.ts +++ b/plugins/promptfoo/harm.ts @@ -22,7 +22,11 @@ export const handler: PluginHandler = async ( input: getText(context, eventType), }; - const result = await postPromptfoo('harm', harmObject); + const result = await postPromptfoo( + 'harm', + harmObject, + parameters.timeout + ); // If any harm category is flagged, set verdict to false if (result.results[0].flagged) { diff --git a/plugins/promptfoo/pii.ts b/plugins/promptfoo/pii.ts index a6da95830..bf0c69b85 100644 --- a/plugins/promptfoo/pii.ts +++ b/plugins/promptfoo/pii.ts @@ -19,7 +19,7 @@ const maskPiiEntries = (text: string, piiEntries: PIIEntity[]): string => { }, text); }; -export const redactPii = async (text: string) => { +export const redactPii = async (text: string, timeout?: number) => { if (!text) { return { maskedText: null, data: null }; } @@ -27,7 +27,7 @@ export const redactPii = async (text: string) => { input: text, }; - const result = await postPromptfoo('pii', piiObject); + const result = await postPromptfoo('pii', piiObject, timeout); const piiResult = result.results[0]; if (piiResult.flagged) { @@ -84,7 +84,9 @@ export const handler: PluginHandler = async ( } const redact = parameters.redact || false; - const results = await Promise.all(textArray.map(redactPii)); + const results = await Promise.all( + textArray.map((text) => redactPii(text, parameters.timeout)) + ); const hasPII = results.some((result) => result?.data?.flagged); let shouldBlock = hasPII; diff --git a/plugins/sydelabs/sydeguard.ts b/plugins/sydelabs/sydeguard.ts index 8a358f36f..705ff851e 100644 --- a/plugins/sydelabs/sydeguard.ts +++ b/plugins/sydelabs/sydeguard.ts @@ -9,13 +9,17 @@ import { getText, post } from '../utils'; export const SYDEGUARD_URL = 'https://guard.sydelabs.ai/api/v1/guard/generate-score'; -export const fetchSydeGuard = async (credentials: any, data: any) => { +export const fetchSydeGuard = async ( + credentials: any, + data: any, + timeout?: number +) => { const options = { headers: { 'x-api-key': credentials.apiKey, }, }; - return post(SYDEGUARD_URL, data, options); + return post(SYDEGUARD_URL, data, options, timeout); }; export const handler: PluginHandler = async ( @@ -32,9 +36,13 @@ export const handler: PluginHandler = async ( const text = getText(context, eventType); // Get data from the relevant tool - const result: any = await fetchSydeGuard(parameters.credentials, { - prompt: text, - }); + const result: any = await fetchSydeGuard( + parameters.credentials, + { + prompt: text, + }, + parameters.timeout + ); // Result example: // { From 7d002454a47a52701b0116065c75d064d1baaa27 Mon Sep 17 00:00:00 2001 From: visargD Date: Fri, 14 Feb 2025 03:23:52 +0530 Subject: [PATCH 3/4] chore: add stream options param mapping for azure --- src/providers/azure-openai/chatComplete.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/providers/azure-openai/chatComplete.ts b/src/providers/azure-openai/chatComplete.ts index 79a00b399..3fd312011 100644 --- a/src/providers/azure-openai/chatComplete.ts +++ b/src/providers/azure-openai/chatComplete.ts @@ -108,6 +108,9 @@ export const AzureOpenAIChatCompleteConfig: ProviderConfig = { reasoning_effort: { param: 'reasoning_effort', }, + stream_options: { + param: 'stream_options', + }, }; interface AzureOpenAIChatCompleteResponse extends ChatCompletionResponse {} From 064e84ec164c637f6a393c32d26e4799fad7eb77 Mon Sep 17 00:00:00 2001 From: visargD Date: Fri, 14 Feb 2025 03:41:56 +0530 Subject: [PATCH 4/4] 1.9.7 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 069b98107..409855b86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@portkey-ai/gateway", - "version": "1.9.6", + "version": "1.9.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@portkey-ai/gateway", - "version": "1.9.6", + "version": "1.9.7", "license": "MIT", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", diff --git a/package.json b/package.json index 7109674ba..67547ded3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@portkey-ai/gateway", - "version": "1.9.6", + "version": "1.9.7", "description": "A fast AI gateway by Portkey", "repository": { "type": "git",