diff options
author | Oxbian <oxbian@mailbox.org> | 2025-02-20 13:55:52 -0500 |
---|---|---|
committer | Oxbian <oxbian@mailbox.org> | 2025-02-20 13:55:52 -0500 |
commit | 3dfa9363d2ef0eb217fb534c30317930a72b519e (patch) | |
tree | 0bef672952a40b24a5dd3a1cf08913b5b34ba498 /src/app/init.rs | |
parent | 0d4bbf7a60012b459be5dfe3077055c8e25bba02 (diff) | |
download | NAI-3dfa9363d2ef0eb217fb534c30317930a72b519e.tar.gz NAI-3dfa9363d2ef0eb217fb534c30317930a72b519e.zip |
feat: input scrollbar + structuring the project
Diffstat (limited to 'src/app/init.rs')
-rw-r--r-- | src/app/init.rs | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/app/init.rs b/src/app/init.rs new file mode 100644 index 0000000..ff9f130 --- /dev/null +++ b/src/app/init.rs @@ -0,0 +1,74 @@ +use color_eyre::Result; +use reqwest; +use serde_json::Value; +use std::{collections::HashMap, fmt}; + +#[derive(Debug)] +pub struct App { + pub messages: Vec<Message>, // History of recorded messages +} + +#[derive(Debug)] +pub struct Message { + content: String, + msg_type: MessageType, +} + +impl fmt::Display for Message { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self.msg_type { + MessageType::Human => return write!(f, "You: {}", self.content), + MessageType::LLM => return write!(f, "Néo AI: {}", self.content), + } + } +} + +#[derive(Debug)] +pub enum MessageType { + Human, + LLM, +} + +impl App { + pub fn new() -> App { + App { + messages: Vec::new(), + } + } + + pub fn send_message(&mut self, content: String) -> Result<()> { + // POST: http://localhost:8080/completion {"prompt": "lorem ipsum"} + self.messages.push(Message { + content: content.clone(), + msg_type: MessageType::Human, + }); + + let client = reqwest::blocking::Client::new(); + let response = client + .post("http://localhost:8080/completion") + .json(&serde_json::json!({ + "prompt": &content, + "n_predict": 128, + })) + .send()?; + + if response.status().is_success() { + // Désérialiser la réponse JSON + let json_response: Value = response.json()?; + + // Accéder à la partie spécifique du JSON + if let Some(msg) = json_response["content"].as_str() { + self.messages.push(Message { + content: msg.to_string().clone(), + msg_type: MessageType::LLM, + }); + } else { + println!("Le champ 'data.id' est absent ou mal formaté."); + } + } else { + eprintln!("La requête a échoué avec le statut : {}", response.status()); + } + + Ok(()) + } +} |