use serde::{Deserialize, Serialize};
use strum_macros::AsRefStr;
use crate::{Content, Model};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct ContentEmbedding {
pub values: Vec<f32>, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContentEmbeddingResponse {
pub embedding: ContentEmbedding,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchContentEmbeddingResponse {
pub embeddings: Vec<ContentEmbedding>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EmbedContentRequest {
pub model: Model,
pub content: Content,
#[serde(skip_serializing_if = "Option::is_none")]
pub task_type: Option<TaskType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_dimensionality: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchEmbedContentsRequest {
pub requests: Vec<EmbedContentRequest>,
}
#[derive(Debug, Clone, Serialize, Deserialize, AsRefStr)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
pub enum TaskType {
SemanticSimilarity,
Classification,
Clustering,
RetrievalDocument,
RetrievalQuery,
QuestionAnswering,
FactVerification,
CodeRetrievalQuery,
}