Add response header

This commit is contained in:
Dongri Jin
2024-03-18 06:32:02 +09:00
parent 45a6af4a3a
commit 6a9d8dec7d
15 changed files with 235 additions and 49 deletions

View File

@ -16,7 +16,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
);
let result = client.chat_completion(req)?;
println!("{:?}", result.choices[0].message.content);
println!("Content: {:?}", result.choices[0].message.content);
println!("Response Headers: {:?}", result.headers);
Ok(())
}

View File

@ -175,7 +175,10 @@ impl Client {
let res = self.post("/completions", &req)?;
let r = res.json::<CompletionResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -184,7 +187,10 @@ impl Client {
let res = self.post("/edits", &req)?;
let r = res.json::<EditResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -196,7 +202,10 @@ impl Client {
let res = self.post("/images/generations", &req)?;
let r = res.json::<ImageGenerationResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -205,7 +214,10 @@ impl Client {
let res = self.post("/images/edits", &req)?;
let r = res.json::<ImageEditResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -217,7 +229,10 @@ impl Client {
let res = self.post("/images/variations", &req)?;
let r = res.json::<ImageVariationResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -226,7 +241,10 @@ impl Client {
let res = self.post("/embeddings", &req)?;
let r = res.json::<EmbeddingResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -235,7 +253,10 @@ impl Client {
let res = self.get("/files")?;
let r = res.json::<FileListResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -244,7 +265,10 @@ impl Client {
let res = self.post("/files", &req)?;
let r = res.json::<FileUploadResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -253,7 +277,10 @@ impl Client {
let res = self.delete(&format!("{}/{}", "/files", req.file_id))?;
let r = res.json::<FileDeleteResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -265,7 +292,10 @@ impl Client {
let res = self.get(&format!("{}/{}", "/files", req.file_id))?;
let r = res.json::<FileRetrieveResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -277,7 +307,10 @@ impl Client {
let res = self.get(&format!("{}/{}/content", "/files", req.file_id))?;
let r = res.json::<FileRetrieveContentResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -289,7 +322,10 @@ impl Client {
let res = self.post("/chat/completions", &req)?;
let r = res.json::<ChatCompletionResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -301,7 +337,10 @@ impl Client {
let res = self.post("/audio/transcriptions", &req)?;
let r = res.json::<AudioTranscriptionResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -313,7 +352,10 @@ impl Client {
let res = self.post("/audio/translations", &req)?;
let r = res.json::<AudioTranslationResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -348,7 +390,10 @@ impl Client {
})
}
}
Ok(AudioSpeechResponse { result: true })
Ok(AudioSpeechResponse {
result: true,
headers: Some(res.headers),
})
}
pub fn create_fine_tuning_job(
@ -358,7 +403,10 @@ impl Client {
let res = self.post("/fine_tuning/jobs", &req)?;
let r = res.json::<FineTuningJobObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -369,7 +417,10 @@ impl Client {
let res = self.get("/fine_tuning/jobs")?;
let r = res.json::<FineTuningPagination<FineTuningJobObject>>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -384,7 +435,10 @@ impl Client {
))?;
let r = res.json::<FineTuningPagination<FineTuningJobEvent>>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -396,7 +450,10 @@ impl Client {
let res = self.get(&format!("/fine_tuning/jobs/{}", req.fine_tuning_job_id))?;
let r = res.json::<FineTuningJobObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -411,7 +468,10 @@ impl Client {
)?;
let r = res.json::<FineTuningJobObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -423,7 +483,10 @@ impl Client {
let res = self.post("/moderations", &req)?;
let r = res.json::<CreateModerationResponse>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -432,7 +495,10 @@ impl Client {
let res = self.post("/assistants", &req)?;
let r = res.json::<AssistantObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -441,7 +507,10 @@ impl Client {
let res = self.get(&format!("/assistants/{}", assistant_id))?;
let r = res.json::<AssistantObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -454,7 +523,10 @@ impl Client {
let res = self.post(&format!("/assistants/{}", assistant_id), &req)?;
let r = res.json::<AssistantObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -463,7 +535,10 @@ impl Client {
let res = self.delete(&format!("/assistants/{}", assistant_id))?;
let r = res.json::<DeletionStatus>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -480,7 +555,10 @@ impl Client {
let res = self.get(&url)?;
let r = res.json::<ListAssistant>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -493,7 +571,10 @@ impl Client {
let res = self.post(&format!("/assistants/{}/files", assistant_id), &req)?;
let r = res.json::<AssistantFileObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -506,7 +587,10 @@ impl Client {
let res = self.get(&format!("/assistants/{}/files/{}", assistant_id, file_id))?;
let r = res.json::<AssistantFileObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -519,7 +603,10 @@ impl Client {
let res = self.delete(&format!("/assistants/{}/files/{}", assistant_id, file_id))?;
let r = res.json::<DeletionStatus>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -537,7 +624,10 @@ impl Client {
let res = self.get(&url)?;
let r = res.json::<ListAssistantFile>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -546,7 +636,10 @@ impl Client {
let res = self.post("/threads", &req)?;
let r = res.json::<ThreadObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -555,7 +648,10 @@ impl Client {
let res = self.get(&format!("/threads/{}", thread_id))?;
let r = res.json::<ThreadObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -568,7 +664,10 @@ impl Client {
let res = self.post(&format!("/threads/{}", thread_id), &req)?;
let r = res.json::<ThreadObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -577,7 +676,10 @@ impl Client {
let res = self.delete(&format!("/threads/{}", thread_id))?;
let r = res.json::<DeletionStatus>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -590,7 +692,10 @@ impl Client {
let res = self.post(&format!("/threads/{}/messages", thread_id), &req)?;
let r = res.json::<MessageObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -603,7 +708,10 @@ impl Client {
let res = self.get(&format!("/threads/{}/messages/{}", thread_id, message_id))?;
let r = res.json::<MessageObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -620,7 +728,10 @@ impl Client {
)?;
let r = res.json::<MessageObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -629,7 +740,10 @@ impl Client {
let res = self.get(&format!("/threads/{}/messages", thread_id))?;
let r = res.json::<ListMessage>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -646,7 +760,10 @@ impl Client {
))?;
let r = res.json::<MessageFileObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -665,7 +782,10 @@ impl Client {
let res = self.get(&url)?;
let r = res.json::<ListMessageFile>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -678,7 +798,10 @@ impl Client {
let res = self.post(&format!("/threads/{}/runs", thread_id), &req)?;
let r = res.json::<RunObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -687,7 +810,10 @@ impl Client {
let res = self.get(&format!("/threads/{}/runs/{}", thread_id, run_id))?;
let r = res.json::<RunObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -701,7 +827,10 @@ impl Client {
let res = self.post(&format!("/threads/{}/runs/{}", thread_id, run_id), &req)?;
let r = res.json::<RunObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -719,7 +848,10 @@ impl Client {
let res = self.get(&url)?;
let r = res.json::<ListRun>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -732,7 +864,10 @@ impl Client {
)?;
let r = res.json::<RunObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -744,7 +879,10 @@ impl Client {
let res = self.post("/threads/runs", &req)?;
let r = res.json::<RunObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -761,7 +899,10 @@ impl Client {
))?;
let r = res.json::<RunStepObject>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}
@ -780,7 +921,10 @@ impl Client {
let res = self.get(&url)?;
let r = res.json::<ListRunStep>();
match r {
Ok(r) => Ok(r),
Ok(mut r) => {
r.headers = Some(res.headers);
Ok(r)
}
Err(e) => Err(self.new_error(e)),
}
}

View File

@ -59,6 +59,7 @@ pub struct AssistantObject {
pub tools: Vec<HashMap<String, String>>,
pub file_ids: Vec<String>,
pub metadata: HashMap<String, String>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]
@ -66,12 +67,14 @@ pub struct DeletionStatus {
pub id: String,
pub object: String,
pub deleted: bool,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ListAssistant {
pub object: String,
pub data: Vec<AssistantObject>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize, Clone)]
@ -85,10 +88,12 @@ pub struct AssistantFileObject {
pub object: String,
pub created_at: i64,
pub assistant_id: String,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ListAssistantFile {
pub object: String,
pub data: Vec<AssistantFileObject>,
pub headers: Option<HashMap<String, String>>,
}

View File

@ -1,3 +1,5 @@
use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::impl_builder_methods;
@ -42,6 +44,7 @@ impl_builder_methods!(
#[derive(Debug, Deserialize, Serialize)]
pub struct AudioTranscriptionResponse {
pub text: String,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize, Clone)]
@ -78,6 +81,7 @@ impl_builder_methods!(
#[derive(Debug, Deserialize, Serialize)]
pub struct AudioTranslationResponse {
pub text: String,
pub headers: Option<HashMap<String, String>>,
}
pub const TTS_1: &str = "tts-1";
@ -114,4 +118,5 @@ impl_builder_methods!(AudioSpeechRequest,);
#[derive(Debug, Deserialize, Serialize)]
pub struct AudioSpeechResponse {
pub result: bool,
pub headers: Option<HashMap<String, String>>,
}

View File

@ -175,6 +175,7 @@ pub struct ChatCompletionResponse {
pub choices: Vec<ChatCompletionChoice>,
pub usage: common::Usage,
pub system_fingerprint: Option<String>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]

View File

@ -117,4 +117,5 @@ pub struct CompletionResponse {
pub model: String,
pub choices: Vec<CompletionChoice>,
pub usage: common::Usage,
pub headers: Option<HashMap<String, String>>,
}

View File

@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::option::Option;
use crate::impl_builder_methods;
@ -51,4 +52,5 @@ pub struct EditResponse {
pub created: i64,
pub usage: common::Usage,
pub choices: Vec<EditChoice>,
pub headers: Option<HashMap<String, String>>,
}

View File

@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::option::Option;
use crate::impl_builder_methods;
@ -42,6 +43,7 @@ pub struct EmbeddingResponse {
pub data: Vec<EmbeddingData>,
pub model: String,
pub usage: Usage,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]

View File

@ -1,3 +1,5 @@
use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
@ -14,6 +16,7 @@ pub struct FileData {
pub struct FileListResponse {
pub object: String,
pub data: Vec<FileData>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize)]
@ -36,6 +39,7 @@ pub struct FileUploadResponse {
pub created_at: i64,
pub filename: String,
pub purpose: String,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize)]
@ -54,6 +58,7 @@ pub struct FileDeleteResponse {
pub id: String,
pub oejct: String,
pub delete: bool,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize)]
@ -75,6 +80,7 @@ pub struct FileRetrieveResponse {
pub created_at: i64,
pub filename: String,
pub purpose: String,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize)]
@ -96,4 +102,5 @@ pub struct FileRetrieveContentResponse {
pub created_at: i64,
pub filename: String,
pub purpose: String,
pub headers: Option<HashMap<String, String>>,
}

View File

@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use crate::impl_builder_methods;
@ -98,6 +99,7 @@ pub struct FineTuningPagination<T> {
pub object: String,
pub data: Vec<T>,
pub has_more: bool,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]
@ -116,6 +118,7 @@ pub struct FineTuningJobObject {
pub trained_tokens: Option<i64>,
pub training_file: String,
pub validation_file: Option<String>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]

View File

@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::option::Option;
use crate::impl_builder_methods;
@ -49,6 +50,7 @@ impl_builder_methods!(
pub struct ImageGenerationResponse {
pub created: i64,
pub data: Vec<ImageData>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize, Clone)]
@ -98,6 +100,7 @@ impl_builder_methods!(
pub struct ImageEditResponse {
pub created: i64,
pub data: Vec<ImageData>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize, Clone)]
@ -141,4 +144,5 @@ impl_builder_methods!(
pub struct ImageVariationResponse {
pub created: i64,
pub data: Vec<ImageData>,
pub headers: Option<HashMap<String, String>>,
}

View File

@ -67,6 +67,7 @@ pub struct MessageObject {
pub run_id: Option<String>,
pub file_ids: Vec<String>,
pub metadata: HashMap<String, String>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
@ -98,6 +99,7 @@ pub struct ListMessage {
pub first_id: String,
pub last_id: String,
pub has_more: bool,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]
@ -106,6 +108,7 @@ pub struct MessageFileObject {
pub object: String,
pub created_at: i64,
pub message_id: String,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]
@ -115,4 +118,5 @@ pub struct ListMessageFile {
pub first_id: String,
pub last_id: String,
pub has_more: bool,
pub headers: Option<HashMap<String, String>>,
}

View File

@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use crate::impl_builder_methods;
@ -25,6 +26,7 @@ pub struct CreateModerationResponse {
pub id: String,
pub model: String,
pub results: Vec<ModerationResult>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]

View File

@ -87,6 +87,7 @@ pub struct RunObject {
pub tools: Vec<HashMap<String, String>>,
pub file_ids: Vec<String>,
pub metadata: HashMap<String, String>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize)]
@ -96,6 +97,7 @@ pub struct ListRun {
pub first_id: String,
pub last_id: String,
pub has_more: bool,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Serialize, Clone)]
@ -138,6 +140,7 @@ pub struct RunStepObject {
#[serde(skip_serializing_if = "Option::is_none")]
pub completed_at: Option<i64>,
pub metadata: HashMap<String, String>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
@ -147,4 +150,5 @@ pub struct ListRunStep {
pub first_id: String,
pub last_id: String,
pub has_more: bool,
pub headers: Option<HashMap<String, String>>,
}

View File

@ -38,6 +38,7 @@ pub struct ThreadObject {
pub object: String,
pub created_at: i64,
pub metadata: HashMap<String, String>,
pub headers: Option<HashMap<String, String>>,
}
#[derive(Debug, Deserialize, Serialize, Clone)]