plano/crates/hermesllm/src/lib.rs

63 lines
2.2 KiB
Rust

//! hermesllm: A library for translating LLM API requests and responses
//! between Mistral, Grok, Gemini, and OpenAI-compliant formats.
pub mod providers;
pub mod apis;
pub mod clients;
// Re-export important types and traits
pub use providers::{
ProviderId, Provider, ConversionMode,
ProviderInterface, ProviderRequest, ProviderResponse,
TokenUsage, StreamChunk, StreamingResponse,
OpenAIProvider
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_provider_id_conversion() {
assert_eq!(ProviderId::from("openai"), ProviderId::OpenAI);
assert_eq!(ProviderId::from("mistral"), ProviderId::Mistral);
assert_eq!(ProviderId::from("groq"), ProviderId::Groq);
assert_eq!(ProviderId::from("arch"), ProviderId::Arch);
}
#[test]
fn test_provider_api_paths() {
assert_eq!(ProviderId::OpenAI.api_path(), "/v1/chat/completions");
assert_eq!(ProviderId::Groq.api_path(), "/openai/v1/chat/completions");
assert_eq!(ProviderId::Mistral.api_path(), "/v1/chat/completions");
assert_eq!(ProviderId::Arch.api_path(), "/v1/chat/completions");
}
#[test]
fn test_provider_openai_format_support() {
assert!(ProviderId::OpenAI.supports_openai_format());
assert!(ProviderId::Groq.supports_openai_format());
assert!(ProviderId::Mistral.supports_openai_format());
assert!(ProviderId::Arch.supports_openai_format());
assert!(!ProviderId::Gemini.supports_openai_format());
assert!(!ProviderId::Claude.supports_openai_format());
}
#[test]
fn test_provider_instance_creation() {
let provider = Provider::new(ProviderId::OpenAI);
assert!(provider.has_compatible_api("/v1/chat/completions"));
assert!(!provider.has_compatible_api("/v1/embeddings"));
}
#[test]
fn test_conversion_mode() {
let provider = Provider::new(ProviderId::OpenAI);
let compatible_mode = provider.get_interface(false);
assert!(matches!(compatible_mode, ConversionMode::Compatible));
let passthrough_mode = provider.get_interface(true);
assert!(matches!(passthrough_mode, ConversionMode::Passthrough));
}
}