use std::sync::Arc;
use crate::core::exceptions::OperonError;
use crate::providers::auth::KeycloakTokenProvider;
use crate::providers::embeddings::BaseEmbedder;
use crate::providers::llms::BaseLLM;
use crate::providers::onnx::OnnxInferenceBackend;
use crate::providers::rerankers::BaseReranker;
pub mod auth_plugin;
pub mod embedding_plugin;
pub mod llm_plugin;
pub mod onnx_plugin;
pub mod rerank_plugin;
pub struct LlmResource(pub Arc<dyn BaseLLM>);
pub struct EmbeddingResource(pub Arc<dyn BaseEmbedder>);
pub struct RerankerResource(pub Arc<dyn BaseReranker>);
pub struct OnnxResource(pub Arc<dyn OnnxInferenceBackend>);
pub struct KeycloakResource(pub Arc<KeycloakTokenProvider>);
pub fn register_all() -> Result<(), OperonError> {
llm_plugin::register()?;
embedding_plugin::register()?;
rerank_plugin::register()?;
auth_plugin::register()?;
onnx_plugin::register()?;
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use crate::core::registry::registry;
#[test]
fn register_all_installs_every_category() {
register_all().unwrap();
for cat in ["llm", "embedding", "reranking", "keycloak", "onnx"] {
assert!(
registry().get_factory(cat).is_some(),
"plugin '{}' not registered",
cat
);
}
}
}