all tools

This commit is contained in:
leookun
2026-08-16 17:29:29 +08:00
parent eafede22e3
commit 4db2061611
95 changed files with 19023 additions and 5637 deletions
+39
View File
@@ -0,0 +1,39 @@
mod anthropic;
mod event;
mod openai_chat;
mod openai_responses;
use std::{pin::Pin, sync::Arc};
use futures_util::Stream;
use tokio_util::sync::CancellationToken;
use crate::{
config::{ProviderConfig, ProviderKind},
prompting::ModelRequest,
Result,
};
pub use anthropic::AnthropicProvider;
pub use event::*;
pub use openai_chat::OpenAiChatProvider;
pub use openai_responses::OpenAiResponsesProvider;
pub type ProviderStream = Pin<Box<dyn Stream<Item = Result<ResponseEvent>> + Send>>;
pub trait Provider: Send + Sync {
fn stream(&self, request: ModelRequest, cancellation: CancellationToken) -> ProviderStream;
}
pub fn build_provider(config: &ProviderConfig) -> Result<Arc<dyn Provider>> {
let client = reqwest::Client::builder()
.timeout(config.request_timeout)
.build()?;
Ok(match config.kind {
ProviderKind::OpenAiChat => Arc::new(OpenAiChatProvider::new(client, config.clone())),
ProviderKind::OpenAiResponses => {
Arc::new(OpenAiResponsesProvider::new(client, config.clone()))
}
ProviderKind::Anthropic => Arc::new(AnthropicProvider::new(client, config.clone())),
})
}