瀏覽代碼

Update session creation to use streaming

Lee Morgan 3 周之前
父節點
當前提交
ba59dd3cca
共有 1 個文件被更改,包括 30 次插入18 次删除
  1. 30 18
      src/controllers/game/session/create.rs

+ 30 - 18
src/controllers/game/session/create.rs

@@ -2,6 +2,7 @@ use actix_web::{HttpResponse, HttpRequest, Responder, web, post};
 use sqlx::PgPool;
 use uuid::Uuid;
 use serde::Serialize;
+use tokio::sync::oneshot::Receiver;
 use crate::{
     http_error::HttpError,
     auth::user_auth,
@@ -31,23 +32,34 @@ pub async fn route(
     let game_id = Uuid::parse_str(&path.into_inner())?;
     let (game, mut characters, sessions) = Game::get_full_game(&db, game_id.clone(), Some(user.id)).await?;
     let session = Session::new(game_id);
-    /*let response = prompt(game, characters.remove(0), sessions, vec![], None, true).await?;
-    let turn = Turn::new(
-        session.id,
-        response.input_tokens,
-        response.output_tokens,
-        "".to_string(),
-        response.message
-    );
-    session.insert(&db).await?;
-    turn.insert(&db).await?;
-    User::add_tokens(&db, user.id, -turn.tokens_used).await?;
+    let response = prompt(
+        game,
+        characters.remove(0),
+        sessions,
+        vec![],
+        None,
+        true
+    ).await?;
+    update_db(response.message, session, "".to_string(), user.id, db);
+    Ok(response.sse)
+}
 
-    let tokens_remaining = user.tokens - turn.tokens_used;
-    Ok(HttpResponse::Ok().json(Response {
-        session: session,
-        turn: turn,
-        tokens_remaining: tokens_remaining
-    }))*/
-    Ok(HttpResponse::Ok().body("ok"))
+fn update_db(
+    message: Receiver<(String, i32, i32)>,
+    session: Session,
+    user_text: String,
+    user_id: Uuid,
+    db: web::Data<PgPool>
+) {
+    tokio::spawn(async move {
+        if let Ok((m, it, ot)) = message.await {
+            let new_turn = Turn::new(session.id, it, ot, user_text, m);
+            session.insert(&db).await;
+            new_turn.insert(&db).await;
+            User::add_tokens(&db, user_id, -new_turn.tokens_used).await;
+            Ok::<(), HttpError>(())
+        } else {
+            Ok::<(), HttpError>(())
+        };
+    });
 }