37 lines
1.4 KiB
Rust
37 lines
1.4 KiB
Rust
//! df-ai: AI 编排 — LLM Provider、Agent 协调、上下文管理、流式处理、工具注册
|
||
|
||
pub mod ai_tools;
|
||
pub mod anthropic_compat;
|
||
pub mod context;
|
||
pub mod coordinator;
|
||
pub mod openai_compat;
|
||
pub mod provider;
|
||
// CR-30-1: 流前重试退避对外复用。complete() 的 retry_with_backoff 仍 crate 内用,
|
||
// stream_recv/agentic 流前重试需复用 backoff_delay(jitter)+is_status_retryable(Fatal 分类)
|
||
// 避免重写退避/分类逻辑(对齐决策 F-260616-07 a1)。改 pub mod 后对外仅暴露纯函数 + 常量。
|
||
pub mod retry;
|
||
|
||
use provider::LlmProvider;
|
||
|
||
/// 按 provider_type 构建 LLM Provider 实例(统一选择逻辑,消除调用方重复 match)
|
||
///
|
||
/// `anthropic` 协议走 AnthropicCompatProvider(GLM 订阅端点 / Claude 官方),
|
||
/// 其余(openai / glm / deepseek 等 OpenAI 兼容)走 OpenAICompatProvider。
|
||
/// 调用方(AI Chat 的 run_agentic_loop、df-nodes 的 AiNode)统一引用此工厂,
|
||
/// 新增 provider 只改这一处。
|
||
pub fn build_provider(
|
||
provider_type: &str,
|
||
base_url: &str,
|
||
api_key: &str,
|
||
model: &str,
|
||
) -> Box<dyn LlmProvider> {
|
||
match provider_type {
|
||
"anthropic" => Box::new(anthropic_compat::AnthropicCompatProvider::new(
|
||
base_url, api_key, model,
|
||
)),
|
||
_ => Box::new(openai_compat::OpenAICompatProvider::new(
|
||
base_url, api_key, model,
|
||
)),
|
||
}
|
||
}
|