fix: 无法传递qq图片的问题

This commit is contained in:
Junyan Qin
2024-12-24 11:26:33 +08:00
parent 243f45c7db
commit 07ca48d652
3 changed files with 9 additions and 14 deletions
@@ -90,8 +90,6 @@ class AnthropicMessages(requester.LLMAPIRequester):
} }
msg_dict["content"][i] = alter_image_ele msg_dict["content"][i] = alter_image_ele
print(msg_dict)
req_messages.append(msg_dict) req_messages.append(msg_dict)
args["messages"] = req_messages args["messages"] = req_messages
+4 -4
View File
@@ -3,6 +3,7 @@ from __future__ import annotations
import typing import typing
import json import json
import uuid import uuid
import base64
from .. import runner from .. import runner
from ...core import entities as core_entities from ...core import entities as core_entities
@@ -52,10 +53,9 @@ class DifyServiceAPIRunner(runner.RequestRunner):
for ce in query.user_message.content: for ce in query.user_message.content:
if ce.type == "text": if ce.type == "text":
plain_text += ce.text plain_text += ce.text
elif ce.type == "image_url": elif ce.type == "image_base64":
file_bytes, image_format = await image.get_qq_image_bytes( image_b64, image_format = await image.extract_b64_and_format(ce.image_base64)
ce.image_url.url file_bytes = base64.b64decode(image_b64)
)
file = ("img.png", file_bytes, f"image/{image_format}") file = ("img.png", file_bytes, f"image/{image_format}")
file_upload_resp = await self.dify_client.upload_file( file_upload_resp = await self.dify_client.upload_file(
file, file,
+5 -8
View File
@@ -15,17 +15,14 @@ def get_qq_image_downloadable_url(image_url: str) -> tuple[str, dict]:
return f"http://{parsed.netloc}{parsed.path}", query return f"http://{parsed.netloc}{parsed.path}", query
async def get_qq_image_bytes(image_url: str) -> tuple[bytes, str]: async def get_qq_image_bytes(image_url: str, query: dict={}) -> tuple[bytes, str]:
"""[弃用]获取QQ图片的bytes""" """[弃用]获取QQ图片的bytes"""
image_url, query = get_qq_image_downloadable_url(image_url) image_url, query_in_url = get_qq_image_downloadable_url(image_url)
headers = { query = {**query, **query_in_url}
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Referer': 'https://multimedia.nt.qq.com.cn/'
}
ssl_context = ssl.create_default_context() ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE ssl_context.verify_mode = ssl.CERT_NONE
async with aiohttp.ClientSession(trust_env=False, headers=headers) as session: async with aiohttp.ClientSession(trust_env=False) as session:
async with session.get(image_url, params=query, ssl=ssl_context) as resp: async with session.get(image_url, params=query, ssl=ssl_context) as resp:
resp.raise_for_status() resp.raise_for_status()
file_bytes = await resp.read() file_bytes = await resp.read()
@@ -56,7 +53,7 @@ async def qq_image_url_to_base64(
# Flatten the query dictionary # Flatten the query dictionary
query = {k: v[0] for k, v in query.items()} query = {k: v[0] for k, v in query.items()}
file_bytes, image_format = await get_qq_image_bytes(image_url) file_bytes, image_format = await get_qq_image_bytes(image_url, query)
base64_str = base64.b64encode(file_bytes).decode() base64_str = base64.b64encode(file_bytes).decode()