plano/crates/hermesllm/src/lib.rs

73 lines
2.1 KiB
Rust
Raw Normal View History

2025-05-29 13:33:41 -07:00
//! hermesllm: A library for translating LLM API requests and responses
//! between Mistral, Grok, Gemini, and OpenAI-compliant formats.
2025-06-05 16:14:40 -07:00
use std::fmt::Display;
2025-06-02 23:57:03 -07:00
pub mod providers;
2025-05-29 13:33:41 -07:00
2025-06-05 16:14:40 -07:00
pub enum Provider {
Mistral,
Groq,
Gemini,
OpenAI,
Claude,
Github
}
impl From<&str> for Provider {
fn from(value: &str) -> Self {
match value.to_lowercase().as_str() {
"mistral" => Provider::Mistral,
"groq" => Provider::Groq,
"gemini" => Provider::Gemini,
"openai" => Provider::OpenAI,
"claude" => Provider::Claude,
"github" => Provider::Github,
_ => panic!("Unknown provider: {}", value),
}
}
}
impl Display for Provider {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Provider::Mistral => write!(f, "Mistral"),
Provider::Groq => write!(f, "Groq"),
Provider::Gemini => write!(f, "Gemini"),
Provider::OpenAI => write!(f, "OpenAI"),
Provider::Claude => write!(f, "Claude"),
Provider::Github => write!(f, "Github"),
}
}
}
2025-05-29 13:33:41 -07:00
#[cfg(test)]
mod tests {
2025-06-03 15:00:57 -07:00
use crate::providers::openai::types::ChatCompletionsRequest;
2025-05-29 13:33:41 -07:00
#[test]
2025-06-02 23:57:03 -07:00
fn openai_builder() {
2025-06-03 15:00:57 -07:00
let request = ChatCompletionsRequest::builder("gpt-3.5-turbo", vec![])
2025-06-02 23:57:03 -07:00
.temperature(0.7)
.top_p(0.9)
.n(1)
.max_tokens(100)
.stream(false)
.stop(vec!["\n".to_string()])
.presence_penalty(0.0)
.frequency_penalty(0.0)
2025-06-03 00:17:22 -07:00
.build()
.expect("Failed to build OpenAIRequest");
2025-06-02 23:57:03 -07:00
2025-06-03 15:00:57 -07:00
assert_eq!(request.model, "gpt-3.5-turbo");
assert_eq!(request.temperature, Some(0.7));
assert_eq!(request.top_p, Some(0.9));
assert_eq!(request.n, Some(1));
assert_eq!(request.max_tokens, Some(100));
assert_eq!(request.stream, Some(false));
assert_eq!(request.stop, Some(vec!["\n".to_string()]));
assert_eq!(request.presence_penalty, Some(0.0));
assert_eq!(request.frequency_penalty, Some(0.0));
2025-05-29 13:33:41 -07:00
}
}