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
9pub 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 pub fn runs(&self, eval_id: &str) -> EvalRuns<'_, C> {
26 EvalRuns::new(self.client, eval_id)
27 }
28
29 #[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 #[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 #[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 #[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 #[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}