Skip to content

Commit 149dce8

Browse files
authored
Merge pull request #192 from dongri/add-responses
Add response api
2 parents ef09edd + 97700ed commit 149dce8

File tree

5 files changed

+402
-0
lines changed

5 files changed

+402
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ Check out the [full API documentation](https://platform.openai.com/docs/api-refe
166166
- [x] [Assistants](https://platform.openai.com/docs/assistants/overview)
167167
- [x] [Batch](https://platform.openai.com/docs/api-reference/batch)
168168
- [x] [Realtime](https://platform.openai.com/docs/api-reference/realtime)
169+
- [x] [Responses](https://platform.openai.com/docs/api-reference/responses)
169170

170171
## License
171172

examples/responses.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use openai_api_rs::v1::api::OpenAIClient;
2+
use openai_api_rs::v1::common::GPT4_1_MINI;
3+
use openai_api_rs::v1::responses::CreateResponseRequest;
4+
use serde_json::json;
5+
use std::env;
6+
7+
#[tokio::main]
8+
async fn main() -> Result<(), Box<dyn std::error::Error>> {
9+
let api_key = env::var("OPENAI_API_KEY").unwrap();
10+
let mut client = OpenAIClient::builder().with_api_key(api_key).build()?;
11+
12+
let mut req = CreateResponseRequest::new();
13+
req.model = Some(GPT4_1_MINI.to_string());
14+
req.input = Some(json!("Write a haiku about Rust."));
15+
req.extra.insert("temperature".to_string(), json!(0.7));
16+
17+
let resp = client.create_response(req).await?;
18+
println!("response id: {} status: {:?}", resp.id, resp.status);
19+
println!("response output: {:?}", resp.output);
20+
Ok(())
21+
}

src/v1/api.rs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ use crate::v1::message::{
3535
};
3636
use crate::v1::model::{ModelResponse, ModelsResponse};
3737
use crate::v1::moderation::{CreateModerationRequest, CreateModerationResponse};
38+
use crate::v1::responses::{
39+
CountTokensRequest, CountTokensResponse, CreateResponseRequest, ListResponses, ResponseObject,
40+
};
3841
use crate::v1::run::{
3942
CreateRunRequest, CreateThreadAndRunRequest, ListRun, ListRunStep, ModifyRunRequest, RunObject,
4043
RunStepObject,
@@ -819,6 +822,70 @@ impl OpenAIClient {
819822
self.get(&url).await
820823
}
821824

825+
// Responses API
826+
pub async fn create_response(
827+
&mut self,
828+
req: CreateResponseRequest,
829+
) -> Result<ResponseObject, APIError> {
830+
self.post("responses", &req).await
831+
}
832+
833+
pub async fn retrieve_response(
834+
&mut self,
835+
response_id: String,
836+
) -> Result<ResponseObject, APIError> {
837+
self.get(&format!("responses/{response_id}")).await
838+
}
839+
840+
pub async fn delete_response(
841+
&mut self,
842+
response_id: String,
843+
) -> Result<common::DeletionStatus, APIError> {
844+
self.delete(&format!("responses/{response_id}")).await
845+
}
846+
847+
pub async fn cancel_response(
848+
&mut self,
849+
response_id: String,
850+
) -> Result<ResponseObject, APIError> {
851+
self.post(
852+
&format!("responses/{response_id}/cancel"),
853+
&common::EmptyRequestBody {},
854+
)
855+
.await
856+
}
857+
858+
pub async fn list_response_input_items(
859+
&mut self,
860+
response_id: String,
861+
after: Option<String>,
862+
limit: Option<i64>,
863+
order: Option<String>,
864+
) -> Result<ListResponses, APIError> {
865+
let mut url = format!("responses/{}/input_items", response_id);
866+
let mut params = vec![];
867+
if let Some(after) = after {
868+
params.push(format!("after={}", after));
869+
}
870+
if let Some(limit) = limit {
871+
params.push(format!("limit={}", limit));
872+
}
873+
if let Some(order) = order {
874+
params.push(format!("order={}", order));
875+
}
876+
if !params.is_empty() {
877+
url = format!("{}?{}", url, params.join("&"));
878+
}
879+
self.get(&url).await
880+
}
881+
882+
pub async fn count_response_input_tokens(
883+
&mut self,
884+
req: CountTokensRequest,
885+
) -> Result<CountTokensResponse, APIError> {
886+
self.post("responses/input_tokens", &req).await
887+
}
888+
822889
pub async fn list_models(&mut self) -> Result<ModelsResponse, APIError> {
823890
self.get("models").await
824891
}

src/v1/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub mod fine_tuning;
1313
pub mod image;
1414
pub mod model;
1515
pub mod moderation;
16+
pub mod responses;
1617

1718
// beta
1819
pub mod assistant;

0 commit comments

Comments
 (0)