Select chat provider for the event.
(
event: AstrMessageEvent, plugin_context: Context
)
| 216 | |
| 217 | |
| 218 | def _select_provider( |
| 219 | event: AstrMessageEvent, plugin_context: Context |
| 220 | ) -> Provider | None: |
| 221 | """Select chat provider for the event.""" |
| 222 | sel_provider = event.get_extra("selected_provider") |
| 223 | if sel_provider and isinstance(sel_provider, str): |
| 224 | provider = plugin_context.get_provider_by_id(sel_provider) |
| 225 | if provider is None: |
| 226 | logger.error("未找到指定的提供商: %s。", sel_provider) |
| 227 | _set_llm_error_message( |
| 228 | event, |
| 229 | f"LLM 请求失败:未找到指定的提供商 `{sel_provider}`。请检查提供商配置或重新选择可用模型。", |
| 230 | ) |
| 231 | return None |
| 232 | if not isinstance(provider, Provider): |
| 233 | logger.error( |
| 234 | "选择的提供商类型无效(%s),跳过 LLM 请求处理。", type(provider) |
| 235 | ) |
| 236 | _set_llm_error_message( |
| 237 | event, |
| 238 | f"LLM 请求失败:选择的提供商类型无效({type(provider).__name__}),已跳过本次请求。", |
| 239 | ) |
| 240 | return None |
| 241 | return provider |
| 242 | try: |
| 243 | return plugin_context.get_using_provider(umo=event.unified_msg_origin) |
| 244 | except ValueError as exc: |
| 245 | logger.error("Error occurred while selecting provider: %s", exc) |
| 246 | _set_llm_error_message(event, f"LLM 请求失败:{exc}") |
| 247 | return None |
| 248 | |
| 249 | |
| 250 | async def _get_session_conv( |
no test coverage detected