From 219a38509d34358a0892a0d67d58778f2f7bf38c Mon Sep 17 00:00:00 2001 From: railgun19457 Date: Mon, 3 Nov 2025 23:58:17 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=E8=87=AA=E5=8A=A8=E8=B0=83=E7=94=A8=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E8=BD=AC=E8=BF=B0=E7=9A=84Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/astrbot/process_llm_request.py | 52 ++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/packages/astrbot/process_llm_request.py b/packages/astrbot/process_llm_request.py index 6d8c896f4..de63e157e 100644 --- a/packages/astrbot/process_llm_request.py +++ b/packages/astrbot/process_llm_request.py @@ -155,8 +155,58 @@ async def process_llm_request(self, event: AstrMessageEvent, req: ProviderReques self._ensure_persona(req, cfg) # image caption + # 只有当前 provider 不支持图像时才使用图像转述 if img_cap_prov_id and req.image_urls: - await self._ensure_img_caption(req, cfg, img_cap_prov_id) + current_provider = self.ctx.get_using_provider( + umo=event.unified_msg_origin + ) + provider_supports_image = False + + logger.debug(f"[IMG Caption] 当前 provider: {current_provider}") + + if current_provider: + try: + provider_id = current_provider.meta().id + logger.debug(f"[IMG Caption] Provider ID: {provider_id}") + + # 从配置中查找当前 provider 的配置 + full_cfg = self.ctx.get_config(umo=event.unified_msg_origin) + providers_list = full_cfg.get("provider", []) + logger.debug( + f"[IMG Caption] 配置中的 provider 数量: {len(providers_list)}" + ) + logger.debug( + f"[IMG Caption] 所有 provider IDs: {[p.get('id') for p in providers_list]}" + ) + + for provider_cfg in providers_list: + if provider_cfg.get("id") == provider_id: + modalities = provider_cfg.get("modalities", []) + logger.debug( + f"[IMG Caption] 找到 provider 配置,modalities: {modalities}" + ) + if "image" in modalities: + provider_supports_image = True + logger.debug( + "[IMG Caption] Provider 支持图像能力,跳过图像转述" + ) + break + else: + logger.debug( + f"[IMG Caption] 未找到 provider_id={provider_id} 的配置" + ) + except Exception as e: + logger.warning(f"[IMG Caption] 获取 provider 信息失败: {e}") + else: + logger.debug("[IMG Caption] 当前没有 provider") + + if not provider_supports_image: + logger.debug("[IMG Caption] 当前 provider 不支持图像,启用图像转述") + await self._ensure_img_caption(req, cfg, img_cap_prov_id) + else: + logger.debug( + "[IMG Caption] 当前 provider 支持图像,直接传递图片 URL" + ) # quote message processing # 解析引用内容 From f7d2d1e70e37db3ca307d4b81efb7ccf1cc26c5b Mon Sep 17 00:00:00 2001 From: Soulter <37870767+Soulter@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:07:33 +0800 Subject: [PATCH 2/3] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- packages/astrbot/process_llm_request.py | 28 ++++++------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/packages/astrbot/process_llm_request.py b/packages/astrbot/process_llm_request.py index de63e157e..2af8fb216 100644 --- a/packages/astrbot/process_llm_request.py +++ b/packages/astrbot/process_llm_request.py @@ -169,31 +169,15 @@ async def process_llm_request(self, event: AstrMessageEvent, req: ProviderReques provider_id = current_provider.meta().id logger.debug(f"[IMG Caption] Provider ID: {provider_id}") - # 从配置中查找当前 provider 的配置 - full_cfg = self.ctx.get_config(umo=event.unified_msg_origin) - providers_list = full_cfg.get("provider", []) + # 直接从当前 provider 的配置获取 modalities + modalities = current_provider.provider_config.get("modalities", []) logger.debug( - f"[IMG Caption] 配置中的 provider 数量: {len(providers_list)}" + f"[IMG Caption] 当前 provider 配置 modalities: {modalities}" ) - logger.debug( - f"[IMG Caption] 所有 provider IDs: {[p.get('id') for p in providers_list]}" - ) - - for provider_cfg in providers_list: - if provider_cfg.get("id") == provider_id: - modalities = provider_cfg.get("modalities", []) - logger.debug( - f"[IMG Caption] 找到 provider 配置,modalities: {modalities}" - ) - if "image" in modalities: - provider_supports_image = True - logger.debug( - "[IMG Caption] Provider 支持图像能力,跳过图像转述" - ) - break - else: + if "image" in modalities: + provider_supports_image = True logger.debug( - f"[IMG Caption] 未找到 provider_id={provider_id} 的配置" + "[IMG Caption] Provider 支持图像能力,跳过图像转述" ) except Exception as e: logger.warning(f"[IMG Caption] 获取 provider 信息失败: {e}") From cdf66d5aa57195a856368e98ac2807eade13c02e Mon Sep 17 00:00:00 2001 From: railgun19457 Date: Thu, 27 Nov 2025 23:04:59 +0800 Subject: [PATCH 3/3] ruff format --- packages/astrbot/process_llm_request.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/astrbot/process_llm_request.py b/packages/astrbot/process_llm_request.py index 2af8fb216..0c4ea9ac3 100644 --- a/packages/astrbot/process_llm_request.py +++ b/packages/astrbot/process_llm_request.py @@ -170,7 +170,9 @@ async def process_llm_request(self, event: AstrMessageEvent, req: ProviderReques logger.debug(f"[IMG Caption] Provider ID: {provider_id}") # 直接从当前 provider 的配置获取 modalities - modalities = current_provider.provider_config.get("modalities", []) + modalities = current_provider.provider_config.get( + "modalities", [] + ) logger.debug( f"[IMG Caption] 当前 provider 配置 modalities: {modalities}" )