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}