use std::collections::HashMap;
use serde::{Deserialize, Serialize};
pub mod llm;
pub mod options;
mod error;
pub use error::*;
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct GenerateResult {
pub tokens: Option<TokenUsage>,
pub generation: String,
}
impl GenerateResult {
pub fn to_hashmap(&self) -> HashMap<String, String> {
let mut map = HashMap::new();
map.insert("generation".to_string(), self.generation.clone());
if let Some(ref tokens) = self.tokens {
map.insert(
"prompt_tokens".to_string(),
tokens.prompt_tokens.to_string(),
);
map.insert(
"completion_tokens".to_string(),
tokens.completion_tokens.to_string(),
);
map.insert("total_tokens".to_string(), tokens.total_tokens.to_string());
}
map
}
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct TokenUsage {
pub prompt_tokens: u32,
pub completion_tokens: u32,
pub total_tokens: u32,
}
impl TokenUsage {
pub fn sum(&self, other: &TokenUsage) -> TokenUsage {
TokenUsage {
prompt_tokens: self.prompt_tokens + other.prompt_tokens,
completion_tokens: self.completion_tokens + other.completion_tokens,
total_tokens: self.total_tokens + other.total_tokens,
}
}
pub fn add(&mut self, other: &TokenUsage) {
self.prompt_tokens += other.prompt_tokens;
self.completion_tokens += other.completion_tokens;
self.total_tokens += other.total_tokens;
}
}
impl Default for TokenUsage {
fn default() -> Self {
Self {
prompt_tokens: 0,
completion_tokens: 0,
total_tokens: 0,
}
}
}
impl TokenUsage {
pub fn new(prompt_tokens: u32, completion_tokens: u32) -> Self {
Self {
prompt_tokens,
completion_tokens,
total_tokens: prompt_tokens + completion_tokens,
}
}
}
impl Default for GenerateResult {
fn default() -> Self {
Self {
tokens: Default::default(),
generation: Default::default(),
}
}
}