mirror of https://github.com/sigoden/aichat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.0 KiB
Rust
39 lines
1.0 KiB
Rust
mod markdown;
|
|
mod stream;
|
|
|
|
pub use self::markdown::{MarkdownRender, RenderOptions};
|
|
use self::stream::{markdown_stream, raw_stream};
|
|
|
|
use crate::utils::AbortSignal;
|
|
use crate::{client::SseEvent, config::GlobalConfig};
|
|
|
|
use anyhow::Result;
|
|
use is_terminal::IsTerminal;
|
|
use nu_ansi_term::{Color, Style};
|
|
use std::io::stdout;
|
|
use tokio::sync::mpsc::UnboundedReceiver;
|
|
|
|
pub async fn render_stream(
|
|
rx: UnboundedReceiver<SseEvent>,
|
|
config: &GlobalConfig,
|
|
abort: AbortSignal,
|
|
) -> Result<()> {
|
|
if stdout().is_terminal() {
|
|
let render_options = config.read().get_render_options()?;
|
|
let mut render = MarkdownRender::init(render_options)?;
|
|
markdown_stream(rx, &mut render, &abort).await
|
|
} else {
|
|
raw_stream(rx, &abort).await
|
|
}
|
|
}
|
|
|
|
pub fn render_error(err: anyhow::Error, highlight: bool) {
|
|
let err = format!("{err:?}");
|
|
if highlight {
|
|
let style = Style::new().fg(Color::Red);
|
|
eprintln!("{}", style.paint(err));
|
|
} else {
|
|
eprintln!("{err}");
|
|
}
|
|
}
|