use crate::error::Error;
use async_trait::async_trait;
use super::ClassifierConfig;
#[async_trait]
pub trait ClassificationProvider: Send + Sync {
async fn classify_raw(
&self,
system_prompt: &str,
user_prompt: &str,
schema: &serde_json::Value,
config: &ClassifierConfig,
) -> Result<serde_json::Value, Error>;
}
#[cfg(test)]
mod tests {
use super::*;
use std::sync::Arc;
struct EchoProvider {
response: serde_json::Value,
}
#[async_trait]
impl ClassificationProvider for EchoProvider {
async fn classify_raw(
&self,
_system_prompt: &str,
_user_prompt: &str,
_schema: &serde_json::Value,
_config: &ClassifierConfig,
) -> Result<serde_json::Value, Error> {
Ok(self.response.clone())
}
}
#[test]
fn test_classification_provider_is_object_safe() {
let provider = EchoProvider {
response: serde_json::json!({"result": "ok"}),
};
let _: Arc<dyn ClassificationProvider> = Arc::new(provider);
}
}