aboutsummaryrefslogtreecommitdiff
path: root/src/app/init.rs
diff options
context:
space:
mode:
authorOxbian <oxbian@mailbox.org>2025-02-20 13:55:52 -0500
committerOxbian <oxbian@mailbox.org>2025-02-20 13:55:52 -0500
commit3dfa9363d2ef0eb217fb534c30317930a72b519e (patch)
tree0bef672952a40b24a5dd3a1cf08913b5b34ba498 /src/app/init.rs
parent0d4bbf7a60012b459be5dfe3077055c8e25bba02 (diff)
downloadNAI-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.rs74
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(())
+ }
+}
ArKa projects. All rights to me, and your next child right arm.