Skip to main content

langfuse/datasets/
types.rs

1//! Data types for Langfuse dataset management.
2
3use serde::{Deserialize, Serialize};
4
5/// A Langfuse dataset.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct Dataset {
9    /// Unique dataset identifier.
10    pub id: String,
11    /// Dataset name.
12    pub name: String,
13    /// Optional description.
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub description: Option<String>,
16    /// Optional metadata.
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub metadata: Option<serde_json::Value>,
19}
20
21/// A dataset item.
22#[derive(Debug, Clone, Serialize, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct DatasetItem {
25    /// Unique item identifier.
26    pub id: String,
27    /// ID of the parent dataset.
28    pub dataset_id: String,
29    /// Input data for this item.
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub input: Option<serde_json::Value>,
32    /// Expected output for evaluation.
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub expected_output: Option<serde_json::Value>,
35    /// Optional metadata.
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub metadata: Option<serde_json::Value>,
38    /// Trace ID this item was sourced from.
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub source_trace_id: Option<String>,
41    /// Observation ID this item was sourced from.
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub source_observation_id: Option<String>,
44    /// Item status (e.g. "ACTIVE").
45    pub status: String,
46}
47
48/// A dataset run.
49#[derive(Debug, Clone, Serialize, Deserialize)]
50#[serde(rename_all = "camelCase")]
51pub struct DatasetRun {
52    /// Unique run identifier.
53    pub id: String,
54    /// Run name.
55    pub name: String,
56    /// ID of the parent dataset.
57    pub dataset_id: String,
58    /// Optional metadata.
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub metadata: Option<serde_json::Value>,
61}
62
63/// Body for creating a dataset.
64#[derive(Debug, Clone, Serialize, Deserialize)]
65#[serde(rename_all = "camelCase")]
66pub struct CreateDatasetBody {
67    /// Dataset name.
68    pub name: String,
69    /// Optional description.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub description: Option<String>,
72    /// Optional metadata.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub metadata: Option<serde_json::Value>,
75}
76
77/// Body for creating a dataset item.
78#[derive(Debug, Clone, Serialize, Deserialize)]
79#[serde(rename_all = "camelCase")]
80pub struct CreateDatasetItemBody {
81    /// Name of the dataset to add the item to.
82    pub dataset_name: String,
83    /// Input data.
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub input: Option<serde_json::Value>,
86    /// Expected output for evaluation.
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub expected_output: Option<serde_json::Value>,
89    /// Optional metadata.
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub metadata: Option<serde_json::Value>,
92    /// Optional explicit item ID.
93    #[serde(skip_serializing_if = "Option::is_none")]
94    pub id: Option<String>,
95}