UNPKG

@arizeai/phoenix-evals

Version:
163 lines 4.53 kB
/** * Binds an evaluator to a specific data structure using input mapping. * * This function creates a new evaluator instance that automatically transforms * your data structure to match what the evaluator expects. This is particularly * useful when your data schema doesn't match the evaluator's expected input format. * * @param evaluator - The evaluator to bind (e.g., a hallucination evaluator) * @param context - The binding context containing the input mapping configuration * @returns A new evaluator instance with the input mapping applied * * @example * **Basic usage with simple field mapping:** * ```typescript * import { bindEvaluator, createHallucinationEvaluator } from "@arizeai/phoenix-evals"; * import { openai } from "@ai-sdk/openai"; * * type MyData = { * question: string; * context: string; * answer: string; * }; * * const evaluator = bindEvaluator<MyData>( * createHallucinationEvaluator({ model: openai("gpt-4") }), * { * inputMapping: { * input: "question", // Evaluator expects "input", map from "question" * reference: "context", // Evaluator expects "reference", map from "context" * output: "answer", // Evaluator expects "output", map from "answer" * }, * } * ); * * // Now you can evaluate with your data structure * const result = await evaluator.evaluate({ * question: "What is AI?", * context: "AI is artificial intelligence...", * answer: "AI stands for artificial intelligence", * }); * ``` * * @example * **Using nested property access:** * ```typescript * type ApiResponse = { * request: { * body: { * query: string; * context: string; * }; * }; * response: { * data: { * text: string; * }; * }; * }; * * const evaluator = bindEvaluator<ApiResponse>( * createHallucinationEvaluator({ model: openai("gpt-4") }), * { * inputMapping: { * input: "request.body.query", * reference: "request.body.context", * output: "response.data.text", * }, * } * ); * ``` * * @example * **Using function-based mapping for data transformation:** * ```typescript * type RawData = { * question: string; * contexts: string[]; // Array of context strings * answer: string; * }; * * const evaluator = bindEvaluator<RawData>( * createHallucinationEvaluator({ model: openai("gpt-4") }), * { * inputMapping: { * input: "question", * // Transform array to single string * reference: (data) => data.contexts.join("\n\n"), * output: "answer", * }, * } * ); * ``` * * @example * **Using JSONPath for complex queries:** * ```typescript * type ComplexData = { * conversation: { * messages: Array<{ role: string; content: string }>; * }; * metadata: { * sources: string[]; * }; * }; * * const evaluator = bindEvaluator<ComplexData>( * createHallucinationEvaluator({ model: openai("gpt-4") }), * { * inputMapping: { * // Extract last user message * input: "$.conversation.messages[?(@.role=='user')].content[-1]", * // Extract all sources * reference: "$.metadata.sources[*]", * // Extract last assistant message * output: "$.conversation.messages[?(@.role=='assistant')].content[-1]", * }, * } * ); * ``` * * @example * **Binding multiple evaluators with different mappings:** * ```typescript * type EvaluationData = { * userQuery: string; * systemContext: string; * modelOutput: string; * expectedOutput?: string; * }; * * // Hallucination evaluator * const hallucinationEvaluator = bindEvaluator<EvaluationData>( * createHallucinationEvaluator({ model: openai("gpt-4") }), * { * inputMapping: { * input: "userQuery", * reference: "systemContext", * output: "modelOutput", * }, * } * ); * * // Document relevancy evaluator (if it exists) * const relevancyEvaluator = bindEvaluator<EvaluationData>( * createDocumentRelevanceEvaluator({ model: openai("gpt-4") }), * { * inputMapping: { * query: "userQuery", * document: "systemContext", * output: "modelOutput", * }, * } * ); * ``` */ export function bindEvaluator(evaluator, context) { let boundEvaluator = evaluator; if (context.inputMapping) { boundEvaluator = boundEvaluator.bindInputMapping(context.inputMapping); } return boundEvaluator; } //# sourceMappingURL=bindEvaluator.js.map