A local-first private AI assistant for everyday use. Runs on-device models with encrypted P2P sync, and supports sharing chats publicly on ATProto.
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

tests: Added tests for sessions

madclaws c4056575 dc2ac540

+102 -4
+102 -4
tiles/src/core/chats.rs
··· 80 80 }, 81 81 } 82 82 83 - #[derive(serde::Serialize, serde::Deserialize, Clone)] 83 + #[derive(serde::Serialize, serde::Deserialize, Clone, Debug)] 84 84 pub struct DeltaChat { 85 85 pub chats: Vec<Chats>, 86 86 pub sessions: Vec<Session>, ··· 148 148 let updated_at: f64 = row.get(7)?; 149 149 let resp_id: Option<String> = row.get(3)?; 150 150 let ctx_id = row.get(5)?; 151 - let session_id: String = row.get(9)?; 151 + 152 + // This is to handle older versions which can have null session_id in DB 153 + let session_id_db: Option<String> = row.get(9)?; 154 + 155 + let session_id: String = session_id_db.unwrap_or("".to_owned()); 152 156 153 157 if session_id.len() > 0 && !session_map.contains_key(&session_id) { 154 158 // lets fetch the session details 155 159 match fetch_session(conn, &session_id) { 156 160 Ok(session) => { 157 - // lets add to the map 158 161 session_map.insert(session_id.clone(), session); 159 162 } 160 163 Err(err) => { ··· 389 392 }, 390 393 }, 391 394 runtime::mlx::ChatResponse, 392 - utils::test_logger, 395 + utils::{get_unix_time_now, test_logger}, 393 396 }; 394 397 395 398 #[test] ··· 560 563 let _ = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 561 564 562 565 let delta = get_delta(&conn, &user.user_id, chat_1.row_counter).unwrap(); 566 + assert_eq!(delta.sessions.len(), 0); 563 567 assert_eq!(delta.chats.len(), 3); 564 568 } 565 569 566 570 #[test] 571 + fn test_get_delta_diff_chat_without_sessions() { 572 + let conn = setup_db_schema(); 573 + let user = create_user(); 574 + let input = "2+2"; 575 + let chat_response = ChatResponse { 576 + input: input.to_owned(), 577 + session_id: String::from("session_abc"), 578 + role: Role::User, 579 + code: None, 580 + prev_response_id: None, 581 + parent_chat_id: None, 582 + metrics: None, 583 + }; 584 + 585 + conn.execute("insert into chats(id, user_id, content, resp_id, role, context_id, created_at, updated_at, row_counter, session_id) values (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10)", (Uuid::now_v7().to_string(), &user.user_id, &chat_response.input, None::<String>, Into::<String>::into(chat_response.role), &chat_response.parent_chat_id, get_unix_time_now().to_string(), get_unix_time_now().to_string(), 1, None::<String>)).unwrap(); 586 + 587 + let delta = get_delta(&conn, &user.user_id, 0).unwrap(); 588 + assert_eq!(delta.sessions.len(), 0); 589 + assert_eq!(delta.chats.len(), 1); 590 + } 591 + 592 + #[test] 567 593 fn test_get_delta_diff_empty_last_entry_id() { 568 594 let conn = setup_db_schema(); 569 595 let user = create_user(); ··· 587 613 } 588 614 589 615 #[test] 616 + fn test_get_delta_diff_w_same_sessions() { 617 + let conn = setup_db_schema(); 618 + let user = create_user(); 619 + let input = "2+2"; 620 + let chat_response = ChatResponse { 621 + input: input.to_owned(), 622 + session_id: String::from("session_abc"), 623 + role: Role::User, 624 + code: None, 625 + prev_response_id: None, 626 + parent_chat_id: None, 627 + metrics: None, 628 + }; 629 + create_session(&conn, "session_abc", "sesh", &user.user_id).unwrap(); 630 + let _chat_1 = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 631 + let _ = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 632 + let _ = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 633 + let _ = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 634 + 635 + let rows = get_delta(&conn, &user.user_id, 0).unwrap(); 636 + assert_eq!(rows.sessions.len(), 1); 637 + assert_eq!(rows.chats.len(), 4); 638 + } 639 + 640 + #[test] 641 + fn test_get_delta_diff_w_diff_sessions() { 642 + let conn = setup_db_schema(); 643 + let user = create_user(); 644 + let input = "2+2"; 645 + let chat_response = ChatResponse { 646 + input: input.to_owned(), 647 + session_id: String::from("session_abc"), 648 + role: Role::User, 649 + code: None, 650 + prev_response_id: None, 651 + parent_chat_id: None, 652 + metrics: None, 653 + }; 654 + create_session(&conn, "session_abc", "sesh", &user.user_id).unwrap(); 655 + let _chat_1 = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 656 + let _ = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 657 + let _ = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 658 + let _ = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 659 + 660 + create_session(&conn, "session_def", "sesh-2", &user.user_id).unwrap(); 661 + let input = "4+4"; 662 + let chat_response = ChatResponse { 663 + input: input.to_owned(), 664 + session_id: String::from("session_def"), 665 + role: Role::User, 666 + code: None, 667 + prev_response_id: None, 668 + parent_chat_id: None, 669 + metrics: None, 670 + }; 671 + let _chat_1 = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 672 + let _ = save_chat(&conn, &user, chat_response.clone()).expect("chat should be saved"); 673 + 674 + let rows = get_delta(&conn, &user.user_id, 0).unwrap(); 675 + assert_eq!(rows.sessions.len(), 2); 676 + assert_eq!(rows.chats.len(), 6); 677 + } 678 + #[test] 590 679 fn test_get_delta_diff_empty_wrong_user_id() { 591 680 let conn = setup_db_schema(); 592 681 let user = create_user(); ··· 758 847 let user_a = create_user_by_id("user_a"); 759 848 let user_b = create_user_by_id("user_b"); 760 849 850 + create_session(&conn, "session_abc", "sesh", &user_a.user_id).unwrap(); 761 851 // Node user A adds stuff 762 852 let input = "2+2"; 763 853 let chat_response = ChatResponse { ··· 858 948 .unwrap(); 859 949 860 950 assert_eq!(user_a_rows, user_b_rows); 951 + 952 + let user_b_sessions = conn_2 953 + .query_row("select count(*) from sessions", [], |row| { 954 + row.get::<usize, i64>(0) 955 + }) 956 + .unwrap(); 957 + 958 + assert_eq!(user_b_sessions, 1); 861 959 } 862 960 863 961 #[test]