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 = 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() .unwrap(); println!("AI Chat! Type your message below (or type 'exit' to quit):"); loop { let mut prompt = String::new(); io::stdin().read_line(&mut prompt).expect("Failed to read line"); let prompt = prompt.trim(); if prompt.eq_ignore_ascii_case("exit") { println!("Goodbye!"); break; } let message = if !file_content.is_empty() { format!("{}\n{}", file_content, prompt) } else { prompt.to_string() }; 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 } ] }).to_string()) .send(); match response { Ok(resp) => { match resp.bytes() { Ok(data) => { let raw_text = String::from_utf8_lossy(&data); //println!("Raw response: {}", raw_text); let mut lines = raw_text.lines(); while let Some(line) = lines.next() { match serde_json::from_str::(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); } } } else { println!("No message found."); } } Err(e) => { println!("Failed to parse JSON: {:?}", e); } } } } Err(e) => { eprintln!("Error reading response: {:?}", e); } } println!(""); } Err(e) => { eprintln!("Error: {:?}", e); } } } }