From 1ec6abfaee2fdc189b348b7e3a8145bd9a84da74 Mon Sep 17 00:00:00 2001 From: sigoden Date: Wed, 5 Jun 2024 09:02:23 +0800 Subject: feat: support RAG (#560) * feat: support RAG * support more embeddings models and implement concurrent embedding api * show the progress of addings paths * ignore embedding context when saving message * embedding model max_chunk_size => default_chunk_size * support pdf and pandoc formats (docx, epub, ipynb) --- src/render/stream.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/render') diff --git a/src/render/stream.rs b/src/render/stream.rs index f35831c..0c70bce 100644 --- a/src/render/stream.rs +++ b/src/render/stream.rs @@ -14,7 +14,7 @@ use std::{ time::Duration, }; use textwrap::core::display_width; -use tokio::sync::{mpsc::UnboundedReceiver, oneshot}; +use tokio::sync::mpsc::UnboundedReceiver; pub async fn markdown_stream( rx: UnboundedReceiver, @@ -62,17 +62,16 @@ async fn markdown_stream_inner( let columns = terminal::size()?.0; - let (spinner_tx, spinner_rx) = oneshot::channel(); - let mut spinner_tx = Some(spinner_tx); - tokio::spawn(run_spinner(" Generating", spinner_rx)); + let (stop_spinner_tx, _) = run_spinner("Generating").await; + let mut stop_spinner_tx = Some(stop_spinner_tx); 'outer: loop { if abort.aborted() { return Ok(()); } for reply_event in gather_events(&mut rx).await { - if let Some(spinner_tx) = spinner_tx.take() { - let _ = spinner_tx.send(()); + if let Some(stop_spinner_tx) = stop_spinner_tx.take() { + let _ = stop_spinner_tx.send(()); } match reply_event { @@ -150,8 +149,8 @@ async fn markdown_stream_inner( } } - if let Some(spinner_tx) = spinner_tx.take() { - let _ = spinner_tx.send(()); + if let Some(stop_spinner_tx) = stop_spinner_tx.take() { + let _ = stop_spinner_tx.send(()); } Ok(()) } -- cgit v1.2.3