From 3eb6af8829e9258c4bed313b1e1571c70b82b37f Mon Sep 17 00:00:00 2001 From: Adil Hafeez Date: Tue, 16 Sep 2025 12:48:07 -0700 Subject: [PATCH] add default implementation for common openai types (#568) --- crates/hermesllm/src/apis/openai.rs | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/crates/hermesllm/src/apis/openai.rs b/crates/hermesllm/src/apis/openai.rs index 9d20273e..ead6e7d2 100644 --- a/crates/hermesllm/src/apis/openai.rs +++ b/crates/hermesllm/src/apis/openai.rs @@ -162,6 +162,20 @@ pub struct ResponseMessage { pub tool_calls: Option>, } +impl Default for ResponseMessage { + fn default() -> Self { + ResponseMessage { + role: Role::Assistant, + content: None, + refusal: None, + annotations: None, + audio: None, + function_call: None, + tool_calls: None, + } + } +} + impl ResponseMessage { /// Convert ResponseMessage to Message for internal processing /// This is useful for transformations that need to work with the request Message type @@ -367,6 +381,21 @@ pub struct ChatCompletionsResponse { pub service_tier: Option, } +impl Default for ChatCompletionsResponse { + fn default() -> Self { + ChatCompletionsResponse { + id: String::new(), + object: String::new(), + created: 0, + model: String::new(), + choices: vec![], + usage: Usage::default(), + system_fingerprint: None, + service_tier: None, + } + } +} + /// Finish reason for completion #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "snake_case")] @@ -389,6 +418,18 @@ pub struct Usage { pub completion_tokens_details: Option, } +impl Default for Usage { + fn default() -> Self { + Usage { + prompt_tokens: 0, + completion_tokens: 0, + total_tokens: 0, + prompt_tokens_details: None, + completion_tokens_details: None, + } + } +} + /// Detailed breakdown of prompt tokens #[skip_serializing_none] #[derive(Serialize, Deserialize, Debug, Clone)] @@ -417,6 +458,16 @@ pub struct Choice { pub logprobs: Option, } +impl Default for Choice { + fn default() -> Self { + Choice { + index: 0, + message: ResponseMessage::default(), + finish_reason: None, + logprobs: None, + } + } +} // ============================================================================ // STREAMING API TYPES