langfuse_client_base/models/
experiment.rs1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize, bon::Builder)]
15pub struct Experiment {
16 #[serde(rename = "id")]
17 pub id: String,
18 #[serde(rename = "name")]
19 pub name: String,
20 #[serde(rename = "description", deserialize_with = "Option::deserialize")]
21 pub description: Option<String>,
22 #[serde(rename = "startTime")]
24 pub start_time: chrono::DateTime<chrono::FixedOffset>,
25 #[serde(rename = "endTime")]
27 pub end_time: chrono::DateTime<chrono::FixedOffset>,
28 #[serde(rename = "itemCount")]
30 pub item_count: i32,
31 #[serde(rename = "datasetId", deserialize_with = "Option::deserialize")]
33 pub dataset_id: Option<String>,
34 #[serde(
36 rename = "metadata",
37 default,
38 with = "::serde_with::rust::double_option",
39 skip_serializing_if = "Option::is_none"
40 )]
41 pub metadata: Option<Option<std::collections::HashMap<String, serde_json::Value>>>,
42 #[serde(
44 rename = "scores",
45 default,
46 with = "::serde_with::rust::double_option",
47 skip_serializing_if = "Option::is_none"
48 )]
49 pub scores: Option<Option<Vec<models::ScoreV3>>>,
50}
51
52impl Experiment {
53 pub fn new(
54 id: String,
55 name: String,
56 description: Option<String>,
57 start_time: chrono::DateTime<chrono::FixedOffset>,
58 end_time: chrono::DateTime<chrono::FixedOffset>,
59 item_count: i32,
60 dataset_id: Option<String>,
61 ) -> Experiment {
62 Experiment {
63 id,
64 name,
65 description,
66 start_time,
67 end_time,
68 item_count,
69 dataset_id,
70 metadata: None,
71 scores: None,
72 }
73 }
74}