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}