//! 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 { 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, )), } }