1#![allow(unused_imports, clippy::too_many_arguments)]
6
7use reqwest::Method;
8use serde::{Deserialize, Serialize};
9
10use crate::client::{Client, Request, NO_BODY, NO_QUERY};
11use crate::error::Result;
12use crate::generated::models;
13use crate::multipart::{field_text, FilePart};
14use crate::util::encode_path;
15
16#[derive(Debug, Clone)]
18pub struct EvaluationsApi {
19 pub(crate) client: Client,
20}
21
22impl Client {
23 pub fn evaluations(&self) -> EvaluationsApi {
25 EvaluationsApi { client: self.clone() }
26 }
27}
28
29impl EvaluationsApi {
30 pub async fn create_agent_scorer(&self, agent_id: &str, body: &serde_json::Map<String, serde_json::Value>) -> Result<serde_json::Map<String, serde_json::Value>> {
36 self.client
37 .request_json(Request {
38 method: Method::POST,
39 path: format!("/api/v1/agents/{}/scorers", encode_path(agent_id)),
40 query: NO_QUERY,
41 body: Some(body),
42 headers: Vec::new(),
43 idempotent: true,
44 })
45 .await
46 }
47
48 pub async fn create_dataset(&self, agent_id: &str, body: &models::CreateDatasetRequest) -> Result<serde_json::Value> {
54 self.client
55 .request_json(Request {
56 method: Method::POST,
57 path: format!("/api/v1/agents/{}/datasets", encode_path(agent_id)),
58 query: NO_QUERY,
59 body: Some(body),
60 headers: Vec::new(),
61 idempotent: true,
62 })
63 .await
64 }
65
66 pub async fn create_experiment(&self, agent_id: &str, body: &models::CreateExperimentRequest) -> Result<models::Experiment> {
74 self.client
75 .request_json(Request {
76 method: Method::POST,
77 path: format!("/api/v1/agents/{}/experiments", encode_path(agent_id)),
78 query: NO_QUERY,
79 body: Some(body),
80 headers: Vec::new(),
81 idempotent: true,
82 })
83 .await
84 }
85
86 pub async fn get_dataset(&self, agent_id: &str, dataset_id: &str) -> Result<serde_json::Value> {
92 self.client
93 .request_json(Request {
94 method: Method::GET,
95 path: format!("/api/v1/agents/{}/datasets/{}", encode_path(agent_id), encode_path(dataset_id)),
96 query: NO_QUERY,
97 body: NO_BODY,
98 headers: Vec::new(),
99 idempotent: false,
100 })
101 .await
102 }
103
104 pub async fn get_eval_run(&self, agent_id: &str, eval_run_id: &str) -> Result<serde_json::Value> {
110 self.client
111 .request_json(Request {
112 method: Method::GET,
113 path: format!("/api/v1/agents/{}/evaluations/{}", encode_path(agent_id), encode_path(eval_run_id)),
114 query: NO_QUERY,
115 body: NO_BODY,
116 headers: Vec::new(),
117 idempotent: false,
118 })
119 .await
120 }
121
122 pub async fn get_experiment(&self, agent_id: &str, experiment_id: &str) -> Result<models::Experiment> {
128 self.client
129 .request_json(Request {
130 method: Method::GET,
131 path: format!("/api/v1/agents/{}/experiments/{}", encode_path(agent_id), encode_path(experiment_id)),
132 query: NO_QUERY,
133 body: NO_BODY,
134 headers: Vec::new(),
135 idempotent: false,
136 })
137 .await
138 }
139
140 pub async fn list_agent_scorers(&self, agent_id: &str) -> Result<models::ListAgentScorersResponse> {
146 self.client
147 .request_json(Request {
148 method: Method::GET,
149 path: format!("/api/v1/agents/{}/scorers", encode_path(agent_id)),
150 query: NO_QUERY,
151 body: NO_BODY,
152 headers: Vec::new(),
153 idempotent: false,
154 })
155 .await
156 }
157
158 pub async fn list_datasets(&self, agent_id: &str) -> Result<models::ListDatasetsResponse> {
164 self.client
165 .request_json(Request {
166 method: Method::GET,
167 path: format!("/api/v1/agents/{}/datasets", encode_path(agent_id)),
168 query: NO_QUERY,
169 body: NO_BODY,
170 headers: Vec::new(),
171 idempotent: false,
172 })
173 .await
174 }
175
176 pub async fn list_eval_runs(&self, agent_id: &str) -> Result<models::ListEvalRunsResponse> {
182 self.client
183 .request_json(Request {
184 method: Method::GET,
185 path: format!("/api/v1/agents/{}/evaluations", encode_path(agent_id)),
186 query: NO_QUERY,
187 body: NO_BODY,
188 headers: Vec::new(),
189 idempotent: false,
190 })
191 .await
192 }
193
194 pub async fn run(&self, agent_id: &str, body: &models::RunEvaluationRequest) -> Result<serde_json::Value> {
200 self.client
201 .request_json(Request {
202 method: Method::POST,
203 path: format!("/api/v1/agents/{}/evaluations", encode_path(agent_id)),
204 query: NO_QUERY,
205 body: Some(body),
206 headers: Vec::new(),
207 idempotent: true,
208 })
209 .await
210 }
211}