- 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.
44 lines
1.4 KiB
Rust
44 lines
1.4 KiB
Rust
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"
|
|
);
|
|
}
|