Skip to main content

history/
history.rs

1mod common;
2
3use common::run_cli_loop;
4use tiny_loop::{Agent, history::History, llm::OpenAIProvider, types::Message};
5
6pub struct CustomHistory {
7    max: usize,
8    messages: Vec<Message>,
9}
10
11impl CustomHistory {
12    pub fn new(max: usize) -> Self {
13        Self {
14            max,
15            messages: Vec::new(),
16        }
17    }
18}
19
20impl History for CustomHistory {
21    fn add(&mut self, message: Message) {
22        self.messages.push(message);
23        if self.messages.len() > self.max {
24            self.messages.remove(0);
25        }
26    }
27
28    fn get_all(&self) -> &[Message] {
29        &self.messages
30    }
31}
32
33#[tokio::main]
34async fn main() {
35    let api_key = std::env::var("LLM_API_KEY").expect("LLM_API_KEY not set");
36
37    let llm = OpenAIProvider::new()
38        .api_key(api_key)
39        .base_url("https://openrouter.ai/api/v1")
40        .model("google/gemini-3-flash-preview");
41
42    let agent = Agent::new(llm)
43        .system("You are a helpful assistant")
44        .history(CustomHistory::new(3));
45
46    run_cli_loop(agent).await
47}