Skip to main content

cerebras_rs/apis/
default_api.rs

1/*
2 * Cerebras Inference API
3 *
4 * The Cerebras Inference API offers developers a low-latency solution for AI model inference  powered by Cerebras Wafer-Scale Engines and CS-3 systems. The API provides access to  high-performance language models with unprecedented speed for AI inference workloads. 
5 *
6 * The version of the OpenAPI document: 1.0.0
7 * Contact: support@cerebras.ai
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17
18/// struct for typed successes of method [`create_chat_completion`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum CreateChatCompletionSuccess {
22    Status200(models::CreateChatCompletion200Response),
23    UnknownValue(serde_json::Value),
24}
25
26/// struct for typed successes of method [`create_completion`]
27#[derive(Debug, Clone, Serialize, Deserialize)]
28#[serde(untagged)]
29pub enum CreateCompletionSuccess {
30    Status200(models::CreateCompletion200Response),
31    UnknownValue(serde_json::Value),
32}
33
34/// struct for typed successes of method [`list_models`]
35#[derive(Debug, Clone, Serialize, Deserialize)]
36#[serde(untagged)]
37pub enum ListModelsSuccess {
38    Status200(models::ModelList),
39    UnknownValue(serde_json::Value),
40}
41
42/// struct for typed successes of method [`retrieve_model`]
43#[derive(Debug, Clone, Serialize, Deserialize)]
44#[serde(untagged)]
45pub enum RetrieveModelSuccess {
46    Status200(models::Model),
47    UnknownValue(serde_json::Value),
48}
49
50/// struct for typed errors of method [`create_chat_completion`]
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(untagged)]
53pub enum CreateChatCompletionError {
54    Status400(models::ErrorDetail),
55    Status401(models::ErrorDetail),
56    Status422(models::ErrorDetail),
57    Status429(models::ErrorDetail),
58    Status500(models::ErrorDetail),
59    UnknownValue(serde_json::Value),
60}
61
62/// struct for typed errors of method [`create_completion`]
63#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(untagged)]
65pub enum CreateCompletionError {
66    Status400(models::ErrorDetail),
67    Status401(models::ErrorDetail),
68    Status422(models::ErrorDetail),
69    Status429(models::ErrorDetail),
70    Status500(models::ErrorDetail),
71    UnknownValue(serde_json::Value),
72}
73
74/// struct for typed errors of method [`list_models`]
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(untagged)]
77pub enum ListModelsError {
78    Status401(models::ErrorDetail),
79    Status429(models::ErrorDetail),
80    Status500(models::ErrorDetail),
81    UnknownValue(serde_json::Value),
82}
83
84/// struct for typed errors of method [`retrieve_model`]
85#[derive(Debug, Clone, Serialize, Deserialize)]
86#[serde(untagged)]
87pub enum RetrieveModelError {
88    Status401(models::ErrorDetail),
89    Status404(models::ErrorDetail),
90    Status429(models::ErrorDetail),
91    Status500(models::ErrorDetail),
92    UnknownValue(serde_json::Value),
93}
94
95
96/// Creates a completion for the chat message
97pub async fn create_chat_completion(configuration: &configuration::Configuration, chat_completion_request: models::ChatCompletionRequest) -> Result<ResponseContent<CreateChatCompletionSuccess>, Error<CreateChatCompletionError>> {
98    // add a prefix to parameters to efficiently prevent name collisions
99    let p_chat_completion_request = chat_completion_request;
100
101    let uri_str = format!("{}/chat/completions", configuration.base_path);
102    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
103
104    if let Some(ref user_agent) = configuration.user_agent {
105        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
106    }
107    if let Some(ref token) = configuration.bearer_access_token {
108        req_builder = req_builder.bearer_auth(token.to_owned());
109    };
110    req_builder = req_builder.json(&p_chat_completion_request);
111
112    let req = req_builder.build()?;
113    let resp = configuration.client.execute(req).await?;
114
115    let status = resp.status();
116
117    if !status.is_client_error() && !status.is_server_error() {
118        let content = resp.text().await?;
119        let entity: Option<CreateChatCompletionSuccess> = serde_json::from_str(&content).ok();
120        Ok(ResponseContent { status, content, entity })
121    } else {
122        let content = resp.text().await?;
123        let entity: Option<CreateChatCompletionError> = serde_json::from_str(&content).ok();
124        Err(Error::ResponseError(ResponseContent { status, content, entity }))
125    }
126}
127
128/// Creates a completion for the provided prompt and parameters
129pub async fn create_completion(configuration: &configuration::Configuration, completion_request: models::CompletionRequest) -> Result<ResponseContent<CreateCompletionSuccess>, Error<CreateCompletionError>> {
130    // add a prefix to parameters to efficiently prevent name collisions
131    let p_completion_request = completion_request;
132
133    let uri_str = format!("{}/completions", configuration.base_path);
134    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
135
136    if let Some(ref user_agent) = configuration.user_agent {
137        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
138    }
139    if let Some(ref token) = configuration.bearer_access_token {
140        req_builder = req_builder.bearer_auth(token.to_owned());
141    };
142    req_builder = req_builder.json(&p_completion_request);
143
144    let req = req_builder.build()?;
145    let resp = configuration.client.execute(req).await?;
146
147    let status = resp.status();
148
149    if !status.is_client_error() && !status.is_server_error() {
150        let content = resp.text().await?;
151        let entity: Option<CreateCompletionSuccess> = serde_json::from_str(&content).ok();
152        Ok(ResponseContent { status, content, entity })
153    } else {
154        let content = resp.text().await?;
155        let entity: Option<CreateCompletionError> = serde_json::from_str(&content).ok();
156        Err(Error::ResponseError(ResponseContent { status, content, entity }))
157    }
158}
159
160/// Lists the currently available models and provides essential details about each, including the owner and availability.
161pub async fn list_models(configuration: &configuration::Configuration, ) -> Result<ResponseContent<ListModelsSuccess>, Error<ListModelsError>> {
162
163    let uri_str = format!("{}/models", configuration.base_path);
164    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
165
166    if let Some(ref user_agent) = configuration.user_agent {
167        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
168    }
169    if let Some(ref token) = configuration.bearer_access_token {
170        req_builder = req_builder.bearer_auth(token.to_owned());
171    };
172
173    let req = req_builder.build()?;
174    let resp = configuration.client.execute(req).await?;
175
176    let status = resp.status();
177
178    if !status.is_client_error() && !status.is_server_error() {
179        let content = resp.text().await?;
180        let entity: Option<ListModelsSuccess> = serde_json::from_str(&content).ok();
181        Ok(ResponseContent { status, content, entity })
182    } else {
183        let content = resp.text().await?;
184        let entity: Option<ListModelsError> = serde_json::from_str(&content).ok();
185        Err(Error::ResponseError(ResponseContent { status, content, entity }))
186    }
187}
188
189/// Fetches a model instance, offering key details about the model, including its owner and permissions.
190pub async fn retrieve_model(configuration: &configuration::Configuration, model: models::ModelIdentifier) -> Result<ResponseContent<RetrieveModelSuccess>, Error<RetrieveModelError>> {
191    // add a prefix to parameters to efficiently prevent name collisions
192    let p_model = model;
193
194    let uri_str = format!("{}/models/{model}", configuration.base_path, model=p_model.to_string());
195    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
196
197    if let Some(ref user_agent) = configuration.user_agent {
198        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
199    }
200    if let Some(ref token) = configuration.bearer_access_token {
201        req_builder = req_builder.bearer_auth(token.to_owned());
202    };
203
204    let req = req_builder.build()?;
205    let resp = configuration.client.execute(req).await?;
206
207    let status = resp.status();
208
209    if !status.is_client_error() && !status.is_server_error() {
210        let content = resp.text().await?;
211        let entity: Option<RetrieveModelSuccess> = serde_json::from_str(&content).ok();
212        Ok(ResponseContent { status, content, entity })
213    } else {
214        let content = resp.text().await?;
215        let entity: Option<RetrieveModelError> = serde_json::from_str(&content).ok();
216        Err(Error::ResponseError(ResponseContent { status, content, entity }))
217    }
218}
219