openai_ergonomic/builders/
models.rs

1//! Models API builders.
2//!
3//! Provides high-level builders for working with `OpenAI` models, including
4//! listing available models, retrieving model details, and deleting fine-tuned models.
5
6/// Builder for retrieving a specific model by ID.
7///
8/// # Examples
9///
10/// ```rust
11/// use openai_ergonomic::builders::models::ModelRetrievalBuilder;
12///
13/// let builder = ModelRetrievalBuilder::new("gpt-4");
14/// assert_eq!(builder.model_id(), "gpt-4");
15/// ```
16#[derive(Debug, Clone)]
17pub struct ModelRetrievalBuilder {
18    model_id: String,
19}
20
21impl ModelRetrievalBuilder {
22    /// Create a new model retrieval builder for the specified model ID.
23    #[must_use]
24    pub fn new(model_id: impl Into<String>) -> Self {
25        Self {
26            model_id: model_id.into(),
27        }
28    }
29
30    /// Get the model ID.
31    #[must_use]
32    pub fn model_id(&self) -> &str {
33        &self.model_id
34    }
35}
36
37/// Builder for deleting a fine-tuned model.
38///
39/// # Examples
40///
41/// ```rust
42/// use openai_ergonomic::builders::models::ModelDeleteBuilder;
43///
44/// let builder = ModelDeleteBuilder::new("ft:gpt-3.5-turbo:my-org:custom-suffix:id");
45/// assert_eq!(builder.model_id(), "ft:gpt-3.5-turbo:my-org:custom-suffix:id");
46/// ```
47#[derive(Debug, Clone)]
48pub struct ModelDeleteBuilder {
49    model_id: String,
50}
51
52impl ModelDeleteBuilder {
53    /// Create a new model delete builder for the specified model ID.
54    ///
55    /// Note: You must have the Owner role in your organization to delete a model.
56    #[must_use]
57    pub fn new(model_id: impl Into<String>) -> Self {
58        Self {
59            model_id: model_id.into(),
60        }
61    }
62
63    /// Get the model ID.
64    #[must_use]
65    pub fn model_id(&self) -> &str {
66        &self.model_id
67    }
68}
69
70#[cfg(test)]
71mod tests {
72    use super::*;
73
74    #[test]
75    fn test_model_retrieval_builder() {
76        let builder = ModelRetrievalBuilder::new("gpt-4");
77        assert_eq!(builder.model_id(), "gpt-4");
78    }
79
80    #[test]
81    fn test_model_retrieval_builder_with_string() {
82        let model = "gpt-3.5-turbo".to_string();
83        let builder = ModelRetrievalBuilder::new(model);
84        assert_eq!(builder.model_id(), "gpt-3.5-turbo");
85    }
86
87    #[test]
88    fn test_model_delete_builder() {
89        let builder = ModelDeleteBuilder::new("ft:gpt-3.5-turbo:my-org:custom:id");
90        assert_eq!(builder.model_id(), "ft:gpt-3.5-turbo:my-org:custom:id");
91    }
92
93    #[test]
94    fn test_model_delete_builder_with_string() {
95        let model = "ft:gpt-4:org:suffix:123".to_string();
96        let builder = ModelDeleteBuilder::new(model);
97        assert_eq!(builder.model_id(), "ft:gpt-4:org:suffix:123");
98    }
99}