open_routerer/api/
request.rs

1use crate::{Message, Model};
2use serde::Serialize;
3
4#[derive(Debug, Clone, Serialize)]
5#[serde(rename_all = "camelCase")]
6pub struct RequestPayload {
7    /// The model ID to use.
8    pub model: Model,
9    /// The list of chat messages.
10    pub messages: Vec<Message>,
11
12    /// Max tokens of messages.
13    pub max_tokens: Option<u32>,
14}
15
16pub struct RequestBuilder {
17    model: String,
18    messages: Vec<Message>,
19    max_tokens: Option<u32>,
20    /// Whether to perform JSON Schema validation on the response.
21    pub validate_structured: bool,
22    /// If true, fallback to an unstructured response on validation failure.
23    pub fallback_on_failure: bool,
24}
25
26impl RequestBuilder {
27    /// Creates a new request builder.
28    ///
29    /// # Parameters
30    ///
31    /// - `model`: The model ID to be used for the request.
32    /// - `messages`: A vector of [Message] objects representing the conversation.
33    /// - `extra_params`: Any additional parameters to include in the payload.
34    pub fn new(model: impl Into<String>, messages: Vec<Message>, max_tokens: Option<u32>) -> Self {
35        Self {
36            model: model.into(),
37            messages,
38            max_tokens,
39            validate_structured: true,
40            fallback_on_failure: false,
41        }
42    }
43
44    pub fn build(self) -> RequestPayload {
45        RequestPayload {
46            model: Model::from(self.model),
47            messages: self.messages,
48            max_tokens: self.max_tokens,
49        }
50    }
51}