diff --git a/server-rs/crates/api-server/src/state.rs b/server-rs/crates/api-server/src/state.rs index 2fe39f32e..8496a5a94 100644 --- a/server-rs/crates/api-server/src/state.rs +++ b/server-rs/crates/api-server/src/state.rs @@ -2518,6 +2518,7 @@ fn build_required_image_provider_client( api_key: Option, request_timeout_ms: u64, ) -> Result { + let (base_url_env, api_key_env) = required_image_provider_env_vars(provider); #[cfg(test)] let (base_url, api_key) = ( if base_url.trim().is_empty() { @@ -2532,8 +2533,9 @@ fn build_required_image_provider_client( let base_url = base_url.trim().trim_end_matches('/'); if base_url.is_empty() { return Err(AppStateInitError::DependencyUnavailable(format!( - "{} 图片 provider 缺少 BASE_URL 配置", - provider.as_str() + "{} 图片 provider 缺少 BASE_URL 配置:请设置 {}。两个图片 provider 都在启动时构造,缺失即阻止 api-server 启动,不做 provider 回退。", + provider.as_str(), + base_url_env ))); } let api_key = api_key @@ -2542,18 +2544,36 @@ fn build_required_image_provider_client( .filter(|value| !value.is_empty()) .ok_or_else(|| { AppStateInitError::DependencyUnavailable(format!( - "{} 图片 provider 缺少 API_KEY 配置", - provider.as_str() + "{} 图片 provider 缺少 API_KEY 配置:请设置 {}。两个图片 provider 都在启动时构造,缺失即阻止 api-server 启动,不做 provider 回退。", + provider.as_str(), + api_key_env )) })?; - build_image_provider_client(ImageProviderSettings { + let client = build_image_provider_client(ImageProviderSettings { provider, base_url: base_url.to_string(), api_key: api_key.to_string(), request_timeout_ms: request_timeout_ms.max(1), request_deadline: None, }) - .map_err(|error| AppStateInitError::DependencyUnavailable(error.to_string())) + .map_err(|error| AppStateInitError::DependencyUnavailable(error.to_string()))?; + info!( + provider = provider.as_str(), + base_url = %base_url, + request_timeout_ms = request_timeout_ms.max(1), + env = base_url_env, + api_key_env, + "图片 provider client 已启用" + ); + Ok(client) +} + +/// 图片 provider 在启动期必须齐备的环境变量名,用于给出可直接执行的报错与启动日志。 +fn required_image_provider_env_vars(provider: ImageProvider) -> (&'static str, &'static str) { + match provider { + ImageProvider::VectorEngine => ("VECTOR_ENGINE_BASE_URL", "VECTOR_ENGINE_API_KEY"), + ImageProvider::Tiantoken => ("TIANTOKEN_BASE_URL", "TIANTOKEN_API_KEY"), + } } fn build_oss_client(config: &AppConfig) -> Result, AppStateInitError> {