refactor(core)!: rename Provider to LLMProvider and update implementations
- Export `LLMProvider` from `owlen-core` and replace public `Provider` re-exports. - Convert `OllamaProvider` to implement the new `LLMProvider` trait with associated future types. - Adjust imports and trait bounds in `remote_client.rs` to use the updated types. - Add comprehensive provider interface tests (`provider_interface.rs`) verifying router routing and provider registry model listing with `MockProvider`. - Align dependency versions across workspace crates by switching to workspace-managed versions. - Extend CI (`.woodpecker.yml`) with a dedicated test step and generate coverage reports. - Update architecture documentation to reflect the new provider abstraction.
This commit is contained in:
43
crates/owlen-core/tests/provider_interface.rs
Normal file
43
crates/owlen-core/tests/provider_interface.rs
Normal file
@@ -0,0 +1,43 @@
|
||||
use futures::StreamExt;
|
||||
use owlen_core::provider::test_utils::MockProvider;
|
||||
use owlen_core::{provider::ProviderRegistry, types::*, Router};
|
||||
use std::sync::Arc;
|
||||
|
||||
fn request(message: &str) -> ChatRequest {
|
||||
ChatRequest {
|
||||
model: "mock-model".to_string(),
|
||||
messages: vec![Message::new(Role::User, message.to_string())],
|
||||
parameters: ChatParameters::default(),
|
||||
tools: None,
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn router_routes_to_registered_provider() {
|
||||
let mut router = Router::new();
|
||||
router.register_provider(MockProvider::default());
|
||||
router.set_default_provider("mock".to_string());
|
||||
|
||||
let resp = router.chat(request("ping")).await.expect("chat succeeded");
|
||||
assert_eq!(resp.message.content, "Mock response to: ping");
|
||||
|
||||
let mut stream = router
|
||||
.chat_stream(request("pong"))
|
||||
.await
|
||||
.expect("stream returned");
|
||||
let first = stream.next().await.expect("stream item").expect("ok item");
|
||||
assert_eq!(first.message.content, "Mock response to: pong");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn registry_lists_models_from_all_providers() {
|
||||
let mut registry = ProviderRegistry::new();
|
||||
registry.register(MockProvider::default());
|
||||
registry.register_arc(Arc::new(MockProvider::default()));
|
||||
|
||||
let models = registry.list_all_models().await.expect("listed");
|
||||
assert!(
|
||||
models.iter().any(|m| m.name == "mock-model"),
|
||||
"expected mock-model in model list"
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user