- Include detailed architecture overview in `docs/architecture.md`. - Add `docs/configuration.md`, detailing configuration file structure and settings. - Provide a step-by-step provider implementation guide in `docs/provider-implementation.md`. - Add frequently asked questions (FAQ) document in `docs/faq.md`. - Create `docs/migration-guide.md` for future breaking changes and version upgrades. - Introduce new examples in `examples/` showcasing basic chat, custom providers, and theming. - Add a changelog (`CHANGELOG.md`) for tracking significant changes. - Provide contribution guidelines (`CONTRIBUTING.md`) and a Code of Conduct (`CODE_OF_CONDUCT.md`).
40 lines
1.2 KiB
Rust
40 lines
1.2 KiB
Rust
// This example demonstrates how to implement a custom provider.
|
|
|
|
use async_trait::async_trait;
|
|
use owlen_core::model::Model;
|
|
use owlen_core::provider::Provider;
|
|
use owlen_core::session::Session;
|
|
|
|
// Define a struct for your custom provider.
|
|
pub struct MyCustomProvider;
|
|
|
|
// Implement the `Provider` trait for your struct.
|
|
#[async_trait]
|
|
impl Provider for MyCustomProvider {
|
|
fn name(&self) -> &str {
|
|
"custom-provider"
|
|
}
|
|
|
|
async fn chat(&self, session: &Session, model: &Model) -> Result<String, anyhow::Error> {
|
|
println!("Custom provider received chat request for model: {}", model.name);
|
|
// In a real implementation, you would send the session data to an API.
|
|
let message_count = session.get_messages().len();
|
|
Ok(format!("This is a custom response. You have {} messages in your session.", message_count))
|
|
}
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), anyhow::Error> {
|
|
let provider = MyCustomProvider;
|
|
let model = Model::new("custom-model");
|
|
let mut session = Session::new("custom-session");
|
|
|
|
session.add_message("user", "Hello, custom provider!");
|
|
|
|
let response = provider.chat(&session, &model).await?;
|
|
|
|
println!("Provider response: {}", response);
|
|
|
|
Ok(())
|
|
}
|