@@ -47,39 +47,61 @@ def create_quantitative_correctness_evaluators(
4747 instrumentation_profile : InstrumentationProfile = "elastic-inference" ,
4848 log : logging .Logger | None = None ,
4949) -> list [Evaluator ]:
50- return kibana_evaluators (
50+ return create_correctness_evaluators (
51+ client = client ,
52+ connector_id = connector_id ,
53+ instrumentation_profile = instrumentation_profile ,
54+ log = log ,
55+ )[1 :]
56+
57+
58+ def create_correctness_evaluators (
59+ * ,
60+ client : KibanaEvaluatorsClient ,
61+ connector_id : str ,
62+ instrumentation_profile : InstrumentationProfile = "elastic-inference" ,
63+ log : logging .Logger | None = None ,
64+ ) -> list [Evaluator ]:
65+ quantitative = kibana_evaluators (
5166 [_config (connector_id )],
5267 client = client ,
5368 instrumentation_profile = instrumentation_profile ,
5469 log = log ,
5570 )
71+ return [_analysis_evaluator (quantitative [0 ]), * quantitative ]
5672
5773
5874def create_correctness_analysis_evaluator (
5975 * ,
60- inference_client : KibanaInferenceClient ,
76+ inference_client : KibanaInferenceClient | None = None ,
77+ client : KibanaEvaluatorsClient | None = None ,
78+ connector_id : str | None = None ,
6179 log : logging .Logger ,
6280 instrumentation_profile : InstrumentationProfile = "elastic-inference" ,
6381) -> Evaluator :
64- client = KibanaEvaluatorsClient (
65- kibana_url = inference_client .kibana_url ,
66- api_key = inference_client .api_key ,
67- timeout = inference_client .timeout ,
68- )
69- factuality = kibana_evaluators (
70- [
71- KibanaEvaluatorConfig (
72- name = "correctness" ,
73- kind = "LLM" ,
74- connector_id = inference_client .connector_id ,
75- sub_scores = (KibanaSubScore (key = "factuality" , evaluator_name = "correctness" ),),
76- )
77- ],
82+ if client is None :
83+ if inference_client is None :
84+ raise ValueError ("client and connector_id are required" )
85+ client = KibanaEvaluatorsClient (
86+ kibana_url = inference_client .kibana_url ,
87+ api_key = inference_client .api_key ,
88+ timeout = inference_client .timeout ,
89+ )
90+ connector_id = inference_client .connector_id
91+ elif inference_client is not None :
92+ raise ValueError ("Pass either client or inference_client, not both" )
93+ elif not connector_id :
94+ raise ValueError ("connector_id is required" )
95+
96+ return create_correctness_evaluators (
7897 client = client ,
98+ connector_id = connector_id ,
7999 instrumentation_profile = instrumentation_profile ,
80100 log = log ,
81101 )[0 ]
82102
103+
104+ def _analysis_evaluator (factuality : Evaluator ) -> Evaluator :
83105 async def evaluate (params : EvaluatorParams ) -> EvaluationResult :
84106 result = await factuality .evaluate (params )
85107 if result .label in {"error" , "unavailable" }:
@@ -94,7 +116,11 @@ async def evaluate(params: EvaluatorParams) -> EvaluationResult:
94116 metadata = result .metadata ,
95117 )
96118
97- return SimpleEvaluator (name = QUALITATIVE_EVALUATOR_NAME , kind = "LLM" , evaluate = evaluate )
119+ return SimpleEvaluator (
120+ name = QUALITATIVE_EVALUATOR_NAME ,
121+ kind = "LLM" ,
122+ evaluate = evaluate ,
123+ )
98124
99125
100126def _analysis_explanation (summary : Any , fallback : str | None ) -> str | None :
0 commit comments