From 443a7498414bef75bce3147c16de8170cc220557 Mon Sep 17 00:00:00 2001 From: morti86 Date: Thu, 10 Apr 2025 21:54:02 +0200 Subject: [PATCH 1/3] Improving streaming example --- examples/chat_stream_cli.rs | 54 +++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/examples/chat_stream_cli.rs b/examples/chat_stream_cli.rs index 4cd854c..f61ef5e 100644 --- a/examples/chat_stream_cli.rs +++ b/examples/chat_stream_cli.rs @@ -5,7 +5,10 @@ use openai::{ Credentials, }; use std::io::{stdin, stdout, Write}; -use tokio::sync::mpsc::Receiver; +use tokio::sync::mpsc::{ + Receiver, + error::TryRecvError, +}; #[tokio::main] async fn main() { @@ -47,26 +50,37 @@ async fn main() { async fn listen_for_tokens(mut chat_stream: Receiver) -> ChatCompletion { let mut merged: Option = None; - while let Some(delta) = chat_stream.recv().await { - let choice = &delta.choices[0]; - if let Some(role) = &choice.delta.role { - print!("{:#?}: ", role); - } - if let Some(content) = &choice.delta.content { - print!("{}", content); - } - if let Some(_) = &choice.finish_reason { - // The message being streamed has been fully received. - print!("\n"); - } - stdout().flush().unwrap(); - // Merge completion into accrued. - match merged.as_mut() { - Some(c) => { - c.merge(delta).unwrap(); - } - None => merged = Some(delta), + + let mut d = true; + while d { + match chat_stream.try_recv() { + Ok(delta) => { + let choice = &delta.choices[0]; + if let Some(role) = &choice.delta.role { + print!("{:#?}: ", role); + } + if let Some(content) = &choice.delta.content { + print!("{}", content); + } + stdout().flush().unwrap(); + + // Merge completion into accrued. + match merged.as_mut() { + Some(c) => { + c.merge(delta).unwrap(); + } + None => merged = Some(delta), + }; + }, + Err(TryRecvError::Empty) => { + let d = std::time::Duration::from_millis(100); + std::thread::sleep(d); + }, + Err(TryRecvError::Disconnected) => { + d = false; + }, }; + } merged.unwrap().into() } From 6df15eb718677b8e05a272b53acc80c95f85a811 Mon Sep 17 00:00:00 2001 From: morti86 Date: Thu, 10 Apr 2025 22:04:12 +0200 Subject: [PATCH 2/3] Improving streaming example --- examples/chat_stream_cli.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/chat_stream_cli.rs b/examples/chat_stream_cli.rs index f61ef5e..d41ed54 100644 --- a/examples/chat_stream_cli.rs +++ b/examples/chat_stream_cli.rs @@ -50,7 +50,7 @@ async fn main() { async fn listen_for_tokens(mut chat_stream: Receiver) -> ChatCompletion { let mut merged: Option = None; - + let mut d = true; while d { match chat_stream.try_recv() { @@ -68,7 +68,7 @@ async fn listen_for_tokens(mut chat_stream: Receiver) -> Ch match merged.as_mut() { Some(c) => { c.merge(delta).unwrap(); - } + }, None => merged = Some(delta), }; }, From 2fe4a06b85803a4d4cc36ba53d6fe9bc1b0235ee Mon Sep 17 00:00:00 2001 From: morti86 Date: Thu, 10 Apr 2025 22:09:33 +0200 Subject: [PATCH 3/3] Improving streaming example --- examples/chat_stream_cli.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/examples/chat_stream_cli.rs b/examples/chat_stream_cli.rs index d41ed54..6ca4e90 100644 --- a/examples/chat_stream_cli.rs +++ b/examples/chat_stream_cli.rs @@ -5,10 +5,7 @@ use openai::{ Credentials, }; use std::io::{stdin, stdout, Write}; -use tokio::sync::mpsc::{ - Receiver, - error::TryRecvError, -}; +use tokio::sync::mpsc::{error::TryRecvError, Receiver}; #[tokio::main] async fn main() { @@ -68,19 +65,18 @@ async fn listen_for_tokens(mut chat_stream: Receiver) -> Ch match merged.as_mut() { Some(c) => { c.merge(delta).unwrap(); - }, + } None => merged = Some(delta), }; - }, + } Err(TryRecvError::Empty) => { let d = std::time::Duration::from_millis(100); std::thread::sleep(d); - }, + } Err(TryRecvError::Disconnected) => { d = false; - }, + } }; - } merged.unwrap().into() }