async_openai/
evals.rs

1use crate::{
2    config::Config,
3    error::OpenAIError,
4    eval_runs::EvalRuns,
5    types::evals::{CreateEvalRequest, DeleteEvalResponse, Eval, EvalList, UpdateEvalRequest},
6    Client, RequestOptions,
7};
8
9/// Create, manage, and run evals in the OpenAI platform. Related guide:
10/// [Evals](https://platform.openai.com/docs/guides/evals)
11pub struct Evals<'c, C: Config> {
12    client: &'c Client<C>,
13    pub(crate) request_options: RequestOptions,
14}
15
16impl<'c, C: Config> Evals<'c, C> {
17    pub fn new(client: &'c Client<C>) -> Self {
18        Self {
19            client,
20            request_options: RequestOptions::new(),
21        }
22    }
23
24    /// [EvalRuns] API group
25    pub fn runs(&self, eval_id: &str) -> EvalRuns<'_, C> {
26        EvalRuns::new(self.client, eval_id)
27    }
28
29    /// List evaluations for a project.
30    #[crate::byot(R = serde::de::DeserializeOwned)]
31    pub async fn list(&self) -> Result<EvalList, OpenAIError> {
32        self.client.get("/evals", &self.request_options).await
33    }
34
35    /// Create the structure of an evaluation that can be used to test a model's performance.
36    /// An evaluation is a set of testing criteria and the config for a data source, which dictates
37    /// the schema of the data used in the evaluation. After creating an evaluation, you can run it
38    /// on different models and model parameters. We support several types of graders and
39    /// datasources. For more information, see the [Evals guide](https://platform.openai.com/docs/guides/evals).
40    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
41    pub async fn create(&self, request: CreateEvalRequest) -> Result<Eval, OpenAIError> {
42        self.client
43            .post("/evals", request, &self.request_options)
44            .await
45    }
46
47    /// Get an evaluation by ID.
48    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
49    pub async fn retrieve(&self, eval_id: &str) -> Result<Eval, OpenAIError> {
50        self.client
51            .get(&format!("/evals/{eval_id}"), &self.request_options)
52            .await
53    }
54
55    /// Update certain properties of an evaluation.
56    #[crate::byot(T0 = std::fmt::Display, T1 = serde::Serialize, R = serde::de::DeserializeOwned)]
57    pub async fn update(
58        &self,
59        eval_id: &str,
60        request: UpdateEvalRequest,
61    ) -> Result<Eval, OpenAIError> {
62        self.client
63            .post(&format!("/evals/{eval_id}"), request, &self.request_options)
64            .await
65    }
66
67    /// Delete an evaluation.
68    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
69    pub async fn delete(&self, eval_id: &str) -> Result<DeleteEvalResponse, OpenAIError> {
70        self.client
71            .delete(&format!("/evals/{eval_id}"), &self.request_options)
72            .await
73    }
74}