@twilio-alpha/assistants-eval
Version:
promptfoo extension for writing AI evaluations for Twilio AI Assistants
70 lines (60 loc) • 1.75 kB
text/typescript
import {
CallApiContextParams,
CallApiOptionsParams,
ProviderOptions,
} from 'promptfoo';
import type { MergeDeep } from 'type-fest';
import { AgentProvider } from './agent';
import TwilioProvider, { TwilioProviderOptions } from './twilio';
export type TwilioAgentProviderOptions = MergeDeep<
TwilioProviderOptions,
{
config: {
userProvider?: ProviderOptions;
};
}
>;
export class TwilioAgentProvider extends AgentProvider {
constructor(options: TwilioAgentProviderOptions) {
const { userProvider, ...agentProvider } = options.config ?? {};
super({
id: options.id,
label: options.label,
config: {
userProvider: userProvider ?? 'openai:chat:gpt-4o-mini',
agentProvider: {
id: 'package:@twilio-alpha/assistants-eval:TwilioProvider',
config: { ...agentProvider },
},
maxTurns: undefined,
},
env: options.env,
});
}
get agentProviderInstance(): TwilioProvider {
return this.agentProvider as TwilioProvider;
}
async callApi(
prompt: string,
context?: CallApiContextParams,
callApiOptions?: CallApiOptionsParams,
) {
await this.ensureProviders();
if (!this.userProvider || !this.agentProvider) {
throw new Error('Providers not loaded');
}
if (
typeof context?.vars.maxTurns === 'number' &&
context?.vars.maxTurns > 0
) {
if (!context?.vars?.sessionId) {
throw new Error(
'sessionId variable is required when using maxTurns variable',
);
}
return super.callApi(prompt, context, callApiOptions);
}
return this.agentProvider.callApi(prompt, context, callApiOptions);
}
}
export default TwilioAgentProvider;