- 新增 StreamDelta 和 StreamEnd 类型,支持流式数据增量传输 - 扩展 LLMProvider trait,添加带回调的 chat_with_streaming 接口 - 修改 OpenAI Provider 实现,支持流式聊天回调传输增量数据 - Agent 流处理改为异步消费增量消息并传递给前端 - 保证流式增量和最终消息使用相同消息 ID 以便前端替换 - 修改消息总线和协议层,支持携带和识别流式消息的消息 ID - 客户端 CLI 通过增量输出实现交互式流式响应显示 - Web 前端接收流式增量消息,追加到对应消息,实现实时显示 - 各通道(飞书、微信)支持转发流式增量和结束消息 - 任务工具运行时添加消息 ID 支持,保持消息一致性 - 统一消息构造函数新增流式增量和结束信号的构建方法
59 lines
1.7 KiB
Rust
59 lines
1.7 KiB
Rust
pub mod anthropic;
|
|
pub mod openai;
|
|
pub mod traits;
|
|
|
|
pub use self::anthropic::AnthropicProvider;
|
|
pub use self::openai::OpenAIProvider;
|
|
|
|
pub use crate::domain::messages::ToolCall;
|
|
pub use crate::domain::tools::{Tool, ToolFunction};
|
|
pub use traits::{
|
|
ChatCompletionRequest, ChatCompletionResponse, LLMProvider, Message, ProviderRuntimeConfig,
|
|
StreamCallback, StreamDelta, Usage,
|
|
};
|
|
|
|
pub fn create_provider(
|
|
config: ProviderRuntimeConfig,
|
|
) -> Result<Box<dyn LLMProvider>, ProviderError> {
|
|
match config.provider_type.as_str() {
|
|
"openai" => Ok(Box::new(OpenAIProvider::new(
|
|
config.name,
|
|
config.api_key,
|
|
config.base_url,
|
|
config.extra_headers,
|
|
config.llm_timeout_secs,
|
|
config.model_id,
|
|
config.temperature,
|
|
config.max_tokens,
|
|
config.model_extra,
|
|
))),
|
|
"anthropic" => Ok(Box::new(AnthropicProvider::new(
|
|
config.name,
|
|
config.api_key,
|
|
config.base_url,
|
|
config.extra_headers,
|
|
config.llm_timeout_secs,
|
|
config.model_id,
|
|
config.temperature,
|
|
config.max_tokens,
|
|
config.model_extra,
|
|
))),
|
|
_ => Err(ProviderError::UnknownProviderType(config.provider_type)),
|
|
}
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub enum ProviderError {
|
|
UnknownProviderType(String),
|
|
}
|
|
|
|
impl std::fmt::Display for ProviderError {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
match self {
|
|
ProviderError::UnknownProviderType(t) => write!(f, "Unknown provider type: {}", t),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl std::error::Error for ProviderError {}
|