openai_interface/evals/runs/
mod.rs1pub mod cancel;
12pub mod create;
13pub mod delete;
14pub mod output_items;
15pub mod retrieve;
16
17use url::Url;
18
19use crate::{
20 errors::OapiError,
21 pagination::PaginationQuery,
22 rest::get::{Get, GetNoStream},
23};
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
27#[serde(rename_all = "snake_case")]
28pub enum EvalRunStatus {
29 Queued,
31 InProgress,
33 Failed,
35 Canceled,
37 Completed,
39}
40
41#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
43pub struct EvalRunCounts {
44 #[serde(default)]
46 pub passed: u64,
47 #[serde(default)]
49 pub failed: u64,
50 #[serde(default)]
52 pub errored: u64,
53 #[serde(default)]
55 pub total: u64,
56}
57
58#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
60pub struct EvalRunPerTestingCriteriaResult {
61 #[serde(default)]
63 pub testing_criteria: Option<String>,
64 #[serde(default)]
66 pub passed: u64,
67 #[serde(default)]
69 pub failed: u64,
70}
71
72#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
74pub struct EvalRunError {
75 #[serde(default)]
77 pub code: Option<String>,
78 #[serde(default)]
80 pub message: Option<String>,
81}
82
83#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
85pub struct EvalRun {
86 pub id: String,
88 #[serde(default)]
90 pub object: Option<String>,
91 #[serde(default)]
93 pub created_at: Option<u64>,
94 pub eval_id: String,
96 pub status: EvalRunStatus,
98 #[serde(default)]
100 pub data_source: Option<serde_json::Value>,
101 #[serde(default)]
103 pub result_counts: Option<EvalRunCounts>,
104 #[serde(default)]
106 pub per_testing_criteria_results: Option<Vec<EvalRunPerTestingCriteriaResult>>,
107 #[serde(default)]
109 pub error: Option<EvalRunError>,
110 #[serde(default)]
112 pub metadata: Option<std::collections::HashMap<String, String>>,
113 #[serde(default)]
115 pub name: Option<String>,
116 #[serde(default)]
118 pub model: Option<String>,
119}
120
121crate::impl_from_str!(EvalRun);
122
123#[derive(Debug, Clone, Default)]
125pub struct ListEvalRunsRequest<'a> {
126 pub eval_id: &'a str,
128 pub pagination: PaginationQuery<'a>,
131 pub extra_query: Option<std::collections::HashMap<String, String>>,
133}
134
135impl Get for ListEvalRunsRequest<'_> {
136 fn build_url(&self, base_url: &str) -> Result<String, OapiError> {
140 let mut url = Url::parse(base_url.trim_end_matches('/')).map_err(OapiError::UrlError)?;
141 url.path_segments_mut()
142 .map_err(|_| OapiError::UrlCannotBeBase(base_url.to_string()))?
143 .push("evals")
144 .push(self.eval_id)
145 .push("runs");
146
147 let mut touched = false;
148 {
149 let mut pairs = url.query_pairs_mut();
150 if self.pagination.any_set() {
151 self.pagination.append_to(&mut pairs);
152 touched = true;
153 }
154 if let Some(extra_query) = &self.extra_query {
155 for (key, value) in extra_query {
156 pairs.append_pair(key, value);
157 }
158 touched = true;
159 }
160 }
161 if !touched {
162 url.set_query(None);
163 }
164
165 Ok(url.to_string())
166 }
167}
168
169impl GetNoStream for ListEvalRunsRequest<'_> {
170 type Response = ListEvalRunsResponse;
171}
172
173#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
175pub struct ListEvalRunsResponse {
176 #[serde(default)]
178 pub data: Vec<EvalRun>,
179 #[serde(default)]
181 pub has_more: Option<bool>,
182 #[serde(default)]
184 pub first_id: Option<String>,
185 #[serde(default)]
187 pub last_id: Option<String>,
188 #[serde(default)]
190 pub object: Option<String>,
191}
192
193crate::impl_from_str!(ListEvalRunsResponse);