Skip to content

Commit b174f9a

Browse files
committed
add example to retrive a response with streaming
1 parent cbdf6c6 commit b174f9a

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[package]
2+
name = "responses-retrive-stream"
3+
version = "0.1.0"
4+
edition = "2021"
5+
publish = false
6+
7+
[dependencies]
8+
async-openai = { path = "../../async-openai" }
9+
tokio = { version = "1.0", features = ["full"] }
10+
futures = "0.3"
11+
serde_json = "1.0"
12+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
use async_openai::{
2+
types::responses::{CreateResponseArgs, ResponseStreamEvent},
3+
Client,
4+
};
5+
use futures::StreamExt;
6+
use std::error::Error;
7+
use std::io::{stdout, Write};
8+
9+
#[tokio::main]
10+
async fn main() -> Result<(), Box<dyn Error>> {
11+
let client = Client::new();
12+
13+
// First, create a response with background=true and stream=true
14+
println!("Creating a respose with background=true and stream=true ...");
15+
let create_request = CreateResponseArgs::default()
16+
.model("gpt-4.1")
17+
.background(true)
18+
.stream(true)
19+
.input("Write a function in Rust that adds two u32 and returns u64'")
20+
.build()?;
21+
22+
let mut response = client.responses().create_stream(create_request).await?;
23+
let mut response_id = None;
24+
let mut lock = stdout().lock();
25+
26+
while let Some(result) = response.next().await {
27+
if let Ok(ResponseStreamEvent::ResponseCreated(event)) = result {
28+
writeln!(lock, "Response created with ID: {}", event.response.id).unwrap();
29+
response_id = Some(event.response.id.clone());
30+
break;
31+
}
32+
}
33+
34+
if let Some(response_id) = response_id {
35+
writeln!(lock, "\nRetrieving {} with streaming...\n", &response_id).unwrap();
36+
let mut retrieve_stream = client.responses().retrieve_stream(&response_id).await?;
37+
while let Some(result) = retrieve_stream.next().await {
38+
if let Ok(ResponseStreamEvent::ResponseOutputTextDelta(delta)) = result {
39+
write!(lock, "{}", delta.delta).unwrap();
40+
}
41+
}
42+
}
43+
44+
Ok(())
45+
}

0 commit comments

Comments
 (0)