cake_core/models/llama3/
history.rs1use crate::models::chat::Message;
2
3pub struct History(Vec<Message>);
5
6impl History {
8 fn encode_header(message: &Message) -> String {
9 format!("<|start_header_id|>{}<|end_header_id|>\n\n", message.role)
10 }
11
12 fn encode_message(message: &Message) -> String {
13 Self::encode_header(message) + message.content.trim() + "<|eot_id|>"
14 }
15
16 pub fn new() -> Self {
18 Self(vec![])
19 }
20
21 pub fn encode_dialog_to_prompt(&self) -> String {
23 let mut encoded = "<|begin_of_text|>".to_string();
24
25 for message in self.iter() {
26 encoded += &Self::encode_message(message);
27 }
28
29 encoded += &Self::encode_header(&Message::assistant("".to_string()));
31
32 encoded
33 }
34}
35
36impl std::ops::Deref for History {
37 type Target = Vec<Message>;
38 fn deref(&self) -> &Vec<Message> {
39 &self.0
40 }
41}
42
43impl std::ops::DerefMut for History {
44 fn deref_mut(&mut self) -> &mut Self::Target {
45 &mut self.0
46 }
47}