diff --git a/crates/hermesllm/src/providers/common_types.rs b/crates/hermesllm/src/providers/common_types.rs new file mode 100644 index 00000000..bb222909 --- /dev/null +++ b/crates/hermesllm/src/providers/common_types.rs @@ -0,0 +1,44 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Message { + pub role: String, + pub content: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ChatRequestBase { + pub model: String, + pub messages: Option>, + pub temperature: Option, + pub top_p: Option, + pub n: Option, + pub max_tokens: Option, + pub stream: Option, + pub stop: Option>, + pub presence_penalty: Option, + pub frequency_penalty: Option, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct ChatResponseBase { + pub id: String, + pub object: String, + pub created: u64, + pub choices: Vec, + pub usage: Option, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Choice { + pub index: u32, + pub message: Message, + pub finish_reason: Option, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Usage { + pub prompt_tokens: u32, + pub completion_tokens: u32, + pub total_tokens: u32, +} diff --git a/crates/hermesllm/src/providers/deepseek/mod.rs b/crates/hermesllm/src/providers/deepseek/mod.rs new file mode 100644 index 00000000..31e4045a --- /dev/null +++ b/crates/hermesllm/src/providers/deepseek/mod.rs @@ -0,0 +1,27 @@ +pub mod types; + +use thiserror::Error; + +use crate::providers::deepseek::types::{DeepSeekRequest, DeepSeekResponse}; + +#[derive(Debug, Error)] +pub enum DeepSeekError { + #[error("json error: {0}")] + JsonParseError(#[from] serde_json::Error), +} + +type Result = std::result::Result; + +impl TryFrom<&[u8]> for DeepSeekRequest { + type Error = DeepSeekError; + fn try_from(bytes: &[u8]) -> Result { + serde_json::from_slice(bytes).map_err(DeepSeekError::from) + } +} + +impl TryFrom<&[u8]> for DeepSeekResponse { + type Error = DeepSeekError; + fn try_from(bytes: &[u8]) -> Result { + serde_json::from_slice(bytes).map_err(DeepSeekError::from) + } +} diff --git a/crates/hermesllm/src/providers/deepseek/types.rs b/crates/hermesllm/src/providers/deepseek/types.rs new file mode 100644 index 00000000..62b17388 --- /dev/null +++ b/crates/hermesllm/src/providers/deepseek/types.rs @@ -0,0 +1,17 @@ +use serde::{Deserialize, Serialize}; +use crate::providers::common_types::{ChatRequestBase, ChatResponseBase}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DeepSeekRequest { + #[serde(flatten)] + pub base: ChatRequestBase, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DeepSeekResponse { + #[serde(flatten)] + pub base: ChatResponseBase, +} + +// Re-export for convenience +pub use crate::providers::common_types::{Message, Choice, Usage}; diff --git a/crates/hermesllm/src/providers/groq/types.rs b/crates/hermesllm/src/providers/groq/types.rs new file mode 100644 index 00000000..6f88231a --- /dev/null +++ b/crates/hermesllm/src/providers/groq/types.rs @@ -0,0 +1,16 @@ +use serde::{Deserialize, Serialize}; +use crate::providers::common_types::{ChatRequestBase, ChatResponseBase}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct GroqRequest { + #[serde(flatten)] + pub base: ChatRequestBase, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct GroqResponse { + #[serde(flatten)] + pub base: ChatResponseBase, +} + +pub use crate::providers::common_types::{Message, Choice, Usage};