scouter_types/genai/
utils.rs

1use crate::error::TypeError;
2use crate::genai::{AssertionTask, LLMJudgeTask};
3use pyo3::prelude::*;
4use pyo3::types::PyList;
5
6/// Helper function to extract AssertionTask and LLMJudgeTask from a PyList
7pub fn extract_assertion_tasks_from_pylist(
8    list: &Bound<'_, PyList>,
9) -> Result<(Vec<AssertionTask>, Vec<LLMJudgeTask>), TypeError> {
10    let mut assertion_tasks = Vec::new();
11    let mut llm_judge_tasks = Vec::new();
12
13    for item in list.iter() {
14        if item.is_instance_of::<AssertionTask>() {
15            let task = item.extract::<AssertionTask>()?;
16            assertion_tasks.push(task);
17        } else if item.is_instance_of::<LLMJudgeTask>() {
18            let task = item.extract::<LLMJudgeTask>()?;
19            llm_judge_tasks.push(task);
20        } else {
21            return Err(TypeError::InvalidAssertionTaskType);
22        }
23    }
24    Ok((assertion_tasks, llm_judge_tasks))
25}