use crate::vector::completions::response;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct VectorCompletion {
pub id: String,
pub completions: Vec<super::ChatCompletion>,
pub votes: Vec<response::Vote>,
pub scores: Vec<rust_decimal::Decimal>,
pub weights: Vec<rust_decimal::Decimal>,
pub created: u64,
pub ensemble: String,
pub object: super::Object,
pub usage: response::Usage,
}
impl VectorCompletion {
pub fn default_from_request_responses_len(
request_responses_len: usize,
) -> Self {
let weights = vec![rust_decimal::Decimal::ZERO; request_responses_len];
let scores =
vec![
rust_decimal::Decimal::ONE
/ rust_decimal::Decimal::from(request_responses_len);
request_responses_len
];
Self {
id: String::new(),
completions: Vec::new(),
votes: Vec::new(),
scores,
weights,
created: 0,
ensemble: String::new(),
object: super::Object::default(),
usage: response::Usage::default(),
}
}
}
impl From<response::streaming::VectorCompletionChunk> for VectorCompletion {
fn from(
response::streaming::VectorCompletionChunk {
id,
completions,
votes,
scores,
weights,
created,
ensemble,
object,
usage,
}: response::streaming::VectorCompletionChunk,
) -> Self {
Self {
id,
completions: completions
.into_iter()
.map(super::ChatCompletion::from)
.collect(),
votes,
scores,
weights,
created,
ensemble,
object: object.into(),
usage: usage.unwrap_or_default(),
}
}
}