dynamo_async_openai/
embedding.rs1use crate::{
12 Client,
13 config::Config,
14 error::OpenAIError,
15 types::{CreateBase64EmbeddingResponse, CreateEmbeddingRequest, CreateEmbeddingResponse},
16};
17
18#[cfg(not(feature = "byot"))]
19use crate::types::EncodingFormat;
20
21pub struct Embeddings<'c, C: Config> {
26 client: &'c Client<C>,
27}
28
29impl<'c, C: Config> Embeddings<'c, C> {
30 pub fn new(client: &'c Client<C>) -> Self {
31 Self { client }
32 }
33
34 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
38 pub async fn create(
39 &self,
40 request: CreateEmbeddingRequest,
41 ) -> Result<CreateEmbeddingResponse, OpenAIError> {
42 #[cfg(not(feature = "byot"))]
43 {
44 if matches!(request.encoding_format, Some(EncodingFormat::Base64)) {
45 return Err(OpenAIError::InvalidArgument(
46 "When encoding_format is base64, use Embeddings::create_base64".into(),
47 ));
48 }
49 }
50 self.client.post("/embeddings", request).await
51 }
52
53 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
59 pub async fn create_base64(
60 &self,
61 request: CreateEmbeddingRequest,
62 ) -> Result<CreateBase64EmbeddingResponse, OpenAIError> {
63 #[cfg(not(feature = "byot"))]
64 {
65 if !matches!(request.encoding_format, Some(EncodingFormat::Base64)) {
66 return Err(OpenAIError::InvalidArgument(
67 "When encoding_format is not base64, use Embeddings::create".into(),
68 ));
69 }
70 }
71 self.client.post("/embeddings", request).await
72 }
73}