diff --git a/src/lib.rs b/src/lib.rs index 9a1ae87..8e2db4e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -47,13 +47,14 @@ fn main() { Ok(data) => { let raw_text = String::from_utf8_lossy(&data); let mut lines = raw_text.lines(); + let mut assistant_response = String::new(); while let Some(line) = lines.next() { match serde_json::from_str::<serde_json::Value>(line) { Ok(json_response) => { if let Some(message) = json_response.get("message") { if let Some(content) = message.get("content") { if let Some(s) = content.as_str() { - print!("{}", s); + assistant_response.push_str(s); } } } else { @@ -65,6 +66,10 @@ fn main() { } } } + messages.push(json!({ + "role": "assistant", + "content": assistant_response + })); } Err(e) => { eprintln!("Error reading response: {:?}", e); @@ -78,4 +83,4 @@ fn main() { } } } -} +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index d9e880c..ad01058 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,46 +2,14 @@ use wasm_bindgen::prelude::wasm_bindgen; use reqwest::blocking::Client; use serde_json::json; -use std::env; -use std::fs; use std::io; -// Author: retoor@molodetz.nl - - -// Simple file description / purpose - - -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// ... (full license text) - - #[wasm_bindgen] pub fn your_cool_function(input: &str) -> String { - // Your logic here format!("Processed: {}", input) } fn main() { - let args: Vec<String> = env::args().collect(); - let file_content = if args.len() > 1 { - let file_path = &args[1]; - fs::read_to_string(file_path).unwrap_or_else(|_| { - eprintln!("Failed to read file: {}", file_path); - String::new() - }) - } else { - String::new() - }; - let client = Client::builder() .timeout(std::time::Duration::from_secs(600)) .build() @@ -49,6 +17,8 @@ fn main() { println!("AI Chat! Type your message below (or type 'exit' to quit):"); + let mut messages = Vec::new(); + loop { let mut prompt = String::new(); io::stdin().read_line(&mut prompt).expect("Failed to read line"); @@ -58,22 +28,16 @@ fn main() { break; } - let message = if !file_content.is_empty() { - format!("{}\n{}", file_content, prompt) - } else { - prompt.to_string() - }; + messages.push(json!({ + "role": "user", + "content": prompt + })); let response = client.post("https://ollama.molodetz.nl/api/chat") .header("Content-Type", "application/json") .body(json!({ "model": "qwen2.5:1.5b", - "messages": [ - { - "role": "user", - "content": message - } - ] + "messages": messages }).to_string()) .send(); @@ -82,18 +46,16 @@ fn main() { match resp.bytes() { Ok(data) => { let raw_text = String::from_utf8_lossy(&data); - //println!("Raw response: {}", raw_text); let mut lines = raw_text.lines(); + let mut assistant_response = String::new(); while let Some(line) = lines.next() { match serde_json::from_str::<serde_json::Value>(line) { Ok(json_response) => { if let Some(message) = json_response.get("message") { if let Some(content) = message.get("content") { if let Some(s) = content.as_str() { - - print!("{}", s); + assistant_response.push_str(s); } - } } else { println!("No message found."); @@ -104,13 +66,17 @@ fn main() { } } } + messages.push(json!({ + "role": "assistant", + "content": assistant_response + })); + println!("{}", assistant_response); } Err(e) => { eprintln!("Error reading response: {:?}", e); } } - - println!(""); + println!(""); } Err(e) => {