use crate::requests::{
res_components::{GenerationSettings, InferenceProbabilities, TimingUsage, TokenUsage},
stop_sequence::StoppingSequence,
};
pub struct CompletionResponse {
pub id: String,
pub index: Option<u32>,
pub content: String,
pub finish_reason: CompletionFinishReason,
pub completion_probabilities: Option<Vec<InferenceProbabilities>>,
pub truncated: bool,
pub generation_settings: GenerationSettings,
pub timing_usage: TimingUsage,
pub token_usage: TokenUsage,
}
impl std::fmt::Display for CompletionResponse {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f)?;
writeln!(f, "CompletionResponse:")?;
writeln!(f, " content: {:?}", self.content)?;
writeln!(f, " finish_reason: {}", self.finish_reason)?;
write!(f, " generation_settings: {}", self.generation_settings)?;
write!(f, " timing_usage: {}", self.timing_usage)?;
write!(f, " token_usage: {}", self.token_usage)
}
}
#[derive(PartialEq)]
pub enum CompletionFinishReason {
Eos,
MatchingStoppingSequence(StoppingSequence),
NonMatchingStoppingSequence(Option<String>),
StopLimit,
}
impl std::fmt::Display for CompletionFinishReason {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
CompletionFinishReason::Eos => write!(f, "Eos"),
CompletionFinishReason::MatchingStoppingSequence(seq) => {
write!(f, "MatchingStoppingSequence({})", seq.as_str())
}
CompletionFinishReason::NonMatchingStoppingSequence(seq) => {
write!(f, "NonMatchingStoppingSequence({:?})", seq)
}
CompletionFinishReason::StopLimit => write!(f, "StopLimit"),
}
}
}