2025-08-20 12:55:29 -07:00
|
|
|
use hermesllm::apis::openai::{ChatCompletionsRequest, Message};
|
2026-03-27 12:37:38 -07:00
|
|
|
use serde::{Deserialize, Serialize};
|
2025-05-19 09:59:22 -07:00
|
|
|
use thiserror::Error;
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Error)]
|
|
|
|
|
pub enum RoutingModelError {
|
|
|
|
|
#[error("Failed to parse JSON: {0}")]
|
|
|
|
|
JsonError(#[from] serde_json::Error),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub type Result<T> = std::result::Result<T, RoutingModelError>;
|
|
|
|
|
|
2026-03-27 12:37:38 -07:00
|
|
|
/// Internal route descriptor passed to the router model to build its prompt.
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
|
pub struct RoutingPreference {
|
|
|
|
|
pub name: String,
|
|
|
|
|
pub description: String,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Groups a model with its routing preferences (used internally by RouterModelV1).
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
|
pub struct ModelUsagePreference {
|
|
|
|
|
pub model: String,
|
|
|
|
|
pub routing_preferences: Vec<RoutingPreference>,
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-19 09:59:22 -07:00
|
|
|
pub trait RouterModel: Send + Sync {
|
2025-07-02 14:08:19 -07:00
|
|
|
fn generate_request(
|
|
|
|
|
&self,
|
|
|
|
|
messages: &[Message],
|
|
|
|
|
usage_preferences: &Option<Vec<ModelUsagePreference>>,
|
|
|
|
|
) -> ChatCompletionsRequest;
|
2025-07-17 13:41:58 -07:00
|
|
|
fn parse_response(
|
|
|
|
|
&self,
|
|
|
|
|
content: &str,
|
|
|
|
|
usage_preferences: &Option<Vec<ModelUsagePreference>>,
|
|
|
|
|
) -> Result<Option<(String, String)>>;
|
2025-05-23 00:51:53 -07:00
|
|
|
fn get_model_name(&self) -> String;
|
2025-05-19 09:59:22 -07:00
|
|
|
}
|