mistralai_client/v1/
embedding.rs

1use serde::{Deserialize, Serialize};
2
3use crate::v1::{common, constants};
4
5// -----------------------------------------------------------------------------
6// Request
7
8#[derive(Debug)]
9pub struct EmbeddingRequestOptions {
10    pub encoding_format: Option<EmbeddingRequestEncodingFormat>,
11}
12impl Default for EmbeddingRequestOptions {
13    fn default() -> Self {
14        Self {
15            encoding_format: None,
16        }
17    }
18}
19
20#[derive(Debug, Serialize, Deserialize)]
21pub struct EmbeddingRequest {
22    pub model: constants::EmbedModel,
23    pub input: Vec<String>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub encoding_format: Option<EmbeddingRequestEncodingFormat>,
26}
27impl EmbeddingRequest {
28    pub fn new(
29        model: constants::EmbedModel,
30        input: Vec<String>,
31        options: Option<EmbeddingRequestOptions>,
32    ) -> Self {
33        let EmbeddingRequestOptions { encoding_format } = options.unwrap_or_default();
34
35        Self {
36            model,
37            input,
38            encoding_format,
39        }
40    }
41}
42
43#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
44#[allow(non_camel_case_types)]
45pub enum EmbeddingRequestEncodingFormat {
46    float,
47}
48
49// -----------------------------------------------------------------------------
50// Response
51
52#[derive(Clone, Debug, Deserialize, Serialize)]
53pub struct EmbeddingResponse {
54    pub id: String,
55    pub object: String,
56    pub model: constants::EmbedModel,
57    pub data: Vec<EmbeddingResponseDataItem>,
58    pub usage: common::ResponseUsage,
59}
60
61#[derive(Clone, Debug, Deserialize, Serialize)]
62pub struct EmbeddingResponseDataItem {
63    pub index: u32,
64    pub embedding: Vec<f32>,
65    pub object: String,
66}