aboutsummaryrefslogtreecommitdiff
path: root/src/app.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.rs')
-rw-r--r--src/app.rs68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/app.rs b/src/app.rs
new file mode 100644
index 0000000..efc90ca
--- /dev/null
+++ b/src/app.rs
@@ -0,0 +1,68 @@
+use reqwest;
+use serde_json::{Value};
+use color_eyre::Result;
+use std::{fmt, collections::HashMap};
+
+#[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 {
+ write!(f, "{}", 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.