openai_req/embeddings/
mod.rs

1
2use crate::{Input, JsonRequest};
3use serde::{Serialize,Deserialize};
4
5///embedding request as defiled by https://platform.openai.com/docs/api-reference/embeddings
6/// # Usage example
7///```
8/// use openai_req::embeddings::EmbeddingRequest;
9/// use openai_req::JsonRequest;
10///
11/// let embedding_request =
12///     EmbeddingRequest::new("The food was delicious and the waiter...".into());
13/// let response = embedding_request.run(&client).await?;
14/// ```
15#[derive(Serialize, Deserialize, Debug, Clone)]
16pub struct EmbeddingRequest{
17    pub model:String,
18    pub input:Input,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub user: Option<String>
21}
22
23impl JsonRequest<EmbeddingResponse> for EmbeddingRequest{
24    const ENDPOINT: &'static str = "/embeddings";
25}
26
27impl EmbeddingRequest {
28    pub fn new(input: Input) -> Self {
29        EmbeddingRequest {
30            model: "text-embedding-ada-002".to_string(),
31            input,
32            user: None,
33        }
34    }
35
36
37    pub fn with_model(model: String, input: Input) -> Self {
38        EmbeddingRequest {
39            model,
40            input,
41            user: None,
42        }
43    }
44
45    pub fn user(mut self, user: String) -> Self {
46        self.user = Some(user);
47        self
48    }
49}
50
51
52#[derive(Serialize, Deserialize, Debug, Clone)]
53pub struct Usage {
54    pub prompt_tokens: i64,
55    pub total_tokens: i64,
56}
57
58#[derive(Serialize, Deserialize, Debug, Clone)]
59pub struct Struct {
60    pub object: String,
61    pub embedding: Vec<f64>,
62    pub index: i64,
63}
64
65#[derive(Serialize, Deserialize, Debug, Clone)]
66pub struct EmbeddingResponse {
67    pub object: String,
68    pub data: Vec<Struct>,
69    pub model: String,
70    pub usage: Usage,
71}