replicate_rust/
version.rs

1//! Used to interact with the [Model Versions Endpoints](https://replicate.com/docs/reference/http#models.versions.get).
2//!
3//!
4//! # Example
5//!
6//! ```
7//! use replicate_rust::{Replicate, config::Config};
8//!
9//! let config = Config::default();
10//! let replicate = Replicate::new(config);
11//!
12//! let versions = replicate.models.versions.list("replicate", "hello-world")?;
13//! println!("Versions : {:?}", versions);
14//!
15//!
16//! // Get the details of a model version.
17//! let version = replicate.models.versions.get(
18//!         "kvfrans",
19//!         "clipdraw",
20//!         "5797a99edc939ea0e9242d5e8c9cb3bc7d125b1eac21bda852e5cb79ede2cd9b",
21//!    )?;
22//! println!("Version : {:?}", version);
23//!
24//! # Ok::<(), replicate_rust::errors::ReplicateError>(())
25//! ```
26//!
27
28use crate::{
29    api_definitions::{GetModelVersion, ListModelVersions},
30    errors::ReplicateError,
31};
32
33/// Used to interact with the [Model Versions Endpoints](https://replicate.com/docs/refer   ence/http#models.versions.get).
34#[derive(Clone, Debug)]
35pub struct Version {
36    /// Holds a reference to a Configuration struct, which contains the base url,  auth token among other settings.
37    pub parent: crate::config::Config,
38}
39
40/// The Version struct is used to interact with the [Model Versions Endpoints](https://replicate.com/docs/reference/http#models.versions.get).
41impl Version {
42    /// Create a new Version struct.
43    pub fn new(rep: crate::config::Config) -> Self {
44        Self { parent: rep }
45    }
46
47    /// Get the details of a model version.
48    /// ```
49    /// use replicate_rust::{Replicate, config::Config};
50    ///
51    /// let config = Config::default();
52    /// let replicate = Replicate::new(config);
53    ///
54    /// // Get the details of a model version.
55    /// let version = replicate.models.versions.get(
56    ///         "kvfrans",
57    ///         "clipdraw",
58    ///         "5797a99edc939ea0e9242d5e8c9cb3bc7d125b1eac21bda852e5cb79ede2cd9b",
59    ///     )?;
60    /// println!("Version : {:?}", version);
61    ///
62    /// # Ok::<(), replicate_rust::errors::ReplicateError>(())
63    /// ```
64    pub fn get(
65        &self,
66        model_owner: &str,
67        model_name: &str,
68        version_id: &str,
69    ) -> Result<GetModelVersion, ReplicateError> {
70        let client = reqwest::blocking::Client::new();
71
72        let response = client
73            .get(format!(
74                "{}/models/{}/{}/versions/{}",
75                self.parent.base_url, model_owner, model_name, version_id
76            ))
77            .header("Authorization", format!("Token {}", self.parent.auth))
78            .header("User-Agent", &self.parent.user_agent)
79            .send()?;
80
81        if !response.status().is_success() {
82            return Err(ReplicateError::ResponseError(response.text()?));
83        }
84
85        let response_string = response.text()?;
86        let response_struct: GetModelVersion = serde_json::from_str(&response_string)?;
87
88        Ok(response_struct)
89    }
90
91    /// List the versions of a model.
92    /// ```
93    /// use replicate_rust::{Replicate, config::Config};
94    ///
95    /// let config = Config::default();
96    /// let replicate = Replicate::new(config);
97    ///
98    /// let versions = replicate.models.versions.list("replicate", "hello-world")?;
99    /// println!("Versions : {:?}", versions);
100    ///
101    /// # Ok::<(), replicate_rust::errors::ReplicateError>(())
102    /// ```
103    pub fn list(
104        &self,
105        model_owner: &str,
106        model_name: &str,
107    ) -> Result<ListModelVersions, ReplicateError> {
108        let client = reqwest::blocking::Client::new();
109
110        let response = client
111            .get(format!(
112                "{}/models/{}/{}/versions",
113                self.parent.base_url, model_owner, model_name
114            ))
115            .header("Authorization", format!("Token {}", self.parent.auth))
116            .header("User-Agent", &self.parent.user_agent)
117            .send()?;
118
119        if !response.status().is_success() {
120            return Err(ReplicateError::ResponseError(response.text()?));
121        }
122
123        let response_string = response.text()?;
124        let response_struct: ListModelVersions = serde_json::from_str(&response_string)?;
125
126        Ok(response_struct)
127    }
128}