use std::ops::AddAssign;
use crate::config::{Effort, RoleModel};
use crate::dataset::{FinishReason, ReasoningKind};
#[derive(Debug, Clone, PartialEq)]
pub struct CompletionRequest {
pub system: Option<String>,
pub prompt: String,
pub max_tokens: u32,
pub temperature: Option<f64>,
pub reasoning: bool,
pub effort: Option<Effort>,
pub thinking_budget: Option<u32>,
}
impl CompletionRequest {
#[must_use]
pub fn for_role(role: &RoleModel, system: Option<String>, prompt: String) -> Self {
Self {
system,
prompt,
max_tokens: role.max_tokens,
temperature: role.temperature,
reasoning: role.reasoning,
effort: role.reasoning_effort,
thinking_budget: role.thinking_budget,
}
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct Usage {
pub input_tokens: u64,
pub output_tokens: u64,
}
impl AddAssign for Usage {
fn add_assign(&mut self, other: Self) {
self.input_tokens += other.input_tokens;
self.output_tokens += other.output_tokens;
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Reasoning {
pub text: Option<String>,
pub kind: ReasoningKind,
}
impl Reasoning {
#[must_use]
pub fn none() -> Self {
Self {
text: None,
kind: ReasoningKind::None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Completion {
pub content: String,
pub reasoning: Reasoning,
pub usage: Usage,
pub finish: FinishReason,
}