llm_service.rs — Multi-Provider Inference & Routing
The llm_service.rs module powers Oxyde’s dynamic routing across multiple LLMs. It supports OpenAI, Groq, Anthropic, xAI, Perplexity, and more — with a uniform trait interface.
🌐 Core Trait
trait LLMProvider {
fn generate(&self, prompt: &str, stream: bool) -> Result<String>;
fn name(&self) -> &'static str;
}Each provider implements this trait with their own:
HTTP client
Token limits
Streaming options
🧭 Provider Selection Logic
Oxyde includes a router that picks a provider based on:
Prompt length
Short prompts → low-latency models (Groq)
Emotion state
Aggressive tone → model with higher creativity
API availability
Fall back if 429 errors occur
Config weights
You can hard-prefer OpenAI, etc.
🔁 Routing Example
let model = router.select_provider(&agent.emotion, &prompt);
let result = model.generate(&prompt, stream = false)?;🔒 Rate Limiting & Failover
If a provider returns:
HTTP 429 → retry with exponential backoff
HTTP 5xx → fallback to next preferred model
You can also implement caching or queueing middleware here.
🔊 Streaming Support
If stream = true, providers return output token-by-token:
"Y... You shouldn't have come here..."This is handled via futures::Stream in async Rust.
🧩 Adding a New Provider
Just implement the LLMProvider trait:
pub struct MyCustomLLM { /* ... */ }
impl LLMProvider for MyCustomLLM {
fn generate(&self, prompt: &str, stream: bool) -> Result<String> {
// call your API here
}
fn name(&self) -> &'static str { "MyLLM" }
}Then add to the router map in llm_service.rs.
