1.18.11 (2026-11-03)
Features Added
CoherenceEvaluator,FluencyEvaluator,GroundednessEvaluator,IntentResolutionEvaluator,RelevanceEvaluator,ResponseCompletenessEvaluator,RetrievalEvaluator,SimilarityEvaluator,ToolCallAccuracyEvaluator,TaskAdherenceEvaluator,_TaskCompletionEvaluator,_ToolCallSuccessEvaluator,_ToolInputAccuracyEvaluator,_ToolOutputUtilizationEvaluatorand_ToolSelectionEvaluatoraccept a Decision model configuration (type="decision") and use the same rubrics as their Microsoft Foundry catalog versions. Chat model behavior is unchanged. With a Decision model,GroundednessEvaluatorreports a plain text response without context as not applicable rather than grounding the response in itself, andTaskAdherenceEvaluatorreports the requestedthreshold(default 0) and_TaskCompletionEvaluatora default threshold of 1, as their catalog versions do. The tool evaluators prepare tool calls as their chat versions do, which can differ from the catalog versions.QAEvaluatoraccepts a Decision model configuration and passescredentialand the Decision execution controls to its model-based evaluators, which run on separate threads, so the credential must be synchronous. With a chat model they are not passed, as before.- The binary evaluators (task adherence, task completion, tool call success, tool input accuracy, tool output utilization and tool selection) accept a
probability_thresholdkeyword. For Decision models it sets the probability at or above which the score is 1 (default 0.75) and overrides the value inmodel_config; chat models ignore it with a warning. - Conversation inputs are handled as before with a Decision model: evaluators that accept them score each user and assistant turn separately and aggregate the results. The catalog's whole-conversation rubrics are not included.
- A failed Decision request names a recognized reason in
decision_model.error_kindof the error's properties, which is kept on failed result rows, and in the error message, for exampleThe decision model returned HTTP 422 (context_window_exceeded).The provider states these reasons for an HTTP 422 only in text, which is never exposed:context_window_exceededwhen the evidence and one question exceed the model's context window,request_token_limit_exceededwhen the evidence and all questions exceed the model's request limit,question_limit_exceededandinvalid_question. A request overmax_request_bytesormax_state_question_bytes, which is not sent, has the kindrequest_bytes_exceeded.
Bugs Fixed
_ToolCallSuccessEvaluatorno longer scores successful tool calls 0 when a chat judge model, such as gpt-4.1 or gpt-4o, putsscoreandstatusinsideproperties. The example outputs in its prompt are now valid JSON, andscore,statusandreasonare read frompropertieswhen the output has none at the top level. A missing score is no longer reported as 0, and any score other than 0 or 1 raises a system-classifiedEvaluationException, as_ToolInputAccuracyEvaluatordoes._ToolCallSuccessEvaluatorreports a list of messages that holds no tool calls, such as one that contains only text or only MCP approval messages, as not applicable without calling the chat or Decision judge model. Atool_calls,function_callortool_call_idfield that is None or empty, as in OpenAI'smodel_dump()of a reply without tool calls, does not count as a tool call. Strings, text that contains[TOOL_CALL]or[TOOL_RESULT], and messages with any other content are still sent to the judge model.evaluate()computes<evaluator>.binary_aggregateover the rows whose result ispassorfail. Other rows, such as not applicable or errored rows, used to count as failures, although the mean score leaves them out. An evaluator withoutpassorfailrows, including a custom evaluator whose results have other values, has nobinary_aggregate, as one without scores has no mean.- An evaluator's inputs keep the order in which its
__call__overloads declare them, instead of the order of a Pythonset, which varies with the process's hash seed. An evaluator that sends these inputs to a Decision model unchanged, as several Microsoft Foundry catalog evaluators do, could list the same fields in a different order in each process, and the Decision model could answer the same input differently. The built-in evaluators in this package already send their Decision inputs in a fixed order.