async_openai/
eval_runs.rs

1use serde::Serialize;
2
3use crate::{
4    config::Config,
5    error::OpenAIError,
6    eval_run_output_items::EvalRunOutputItems,
7    types::evals::{CreateEvalRunRequest, DeleteEvalRunResponse, EvalRun, EvalRunList},
8    Client,
9};
10
11pub struct EvalRuns<'c, C: Config> {
12    client: &'c Client<C>,
13    pub eval_id: String,
14}
15
16impl<'c, C: Config> EvalRuns<'c, C> {
17    pub fn new(client: &'c Client<C>, eval_id: &str) -> Self {
18        Self {
19            client,
20            eval_id: eval_id.into(),
21        }
22    }
23
24    /// [EvalRunOutputItems] API group
25    pub fn output_items(&self, run_id: &str) -> EvalRunOutputItems<'_, C> {
26        EvalRunOutputItems::new(self.client, &self.eval_id, run_id)
27    }
28
29    /// Get a list of runs for an evaluation.
30    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
31    pub async fn list<Q>(&self, query: &Q) -> Result<EvalRunList, OpenAIError>
32    where
33        Q: Serialize + ?Sized,
34    {
35        self.client
36            .get_with_query(&format!("/evals/{}/runs", self.eval_id), &query)
37            .await
38    }
39
40    /// Kicks off a new run for a given evaluation.
41    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
42    pub async fn create(&self, request: CreateEvalRunRequest) -> Result<EvalRun, OpenAIError> {
43        self.client
44            .post(&format!("/evals/{}/runs", self.eval_id), request)
45            .await
46    }
47
48    /// Get an evaluation run by ID.
49    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
50    pub async fn retrieve(&self, run_id: &str) -> Result<EvalRun, OpenAIError> {
51        self.client
52            .get(&format!("/evals/{}/runs/{}", self.eval_id, run_id))
53            .await
54    }
55
56    /// Cancel an ongoing evaluation run.
57    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
58    pub async fn cancel(&self, run_id: &str) -> Result<EvalRun, OpenAIError> {
59        self.client
60            .post(
61                &format!("/evals/{}/runs/{}", self.eval_id, run_id),
62                serde_json::json!({}),
63            )
64            .await
65    }
66
67    /// Delete an eval run.
68    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
69    pub async fn delete(&self, run_id: &str) -> Result<DeleteEvalRunResponse, OpenAIError> {
70        self.client
71            .delete(&format!("/evals/{}/runs/{}", self.eval_id, run_id))
72            .await
73    }
74}