From fd77c3b81825bb1cae13d747f89b1bc40303c4ba Mon Sep 17 00:00:00 2001 From: ThinkerWen <296854007@qq.com> Date: Wed, 8 Apr 2026 00:47:52 +0800 Subject: [PATCH] fix(api): convert grok assets url to base64 in image response --- app/api/v1/image.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/app/api/v1/image.py b/app/api/v1/image.py index 044fb0bbe..f7ce3d350 100644 --- a/app/api/v1/image.py +++ b/app/api/v1/image.py @@ -14,6 +14,7 @@ from app.services.grok.services.image import ImageGenerationService from app.services.grok.services.image_edit import ImageEditService from app.services.grok.services.model import ModelService +from app.services.grok.utils.download import DownloadService from app.services.token import get_token_manager from app.core.exceptions import ValidationException, AppException, ErrorType from app.core.config import get_config @@ -304,6 +305,28 @@ async def create_image(request: ImageGenerationRequest): ) data = [{response_field: img} for img in result.data] + # 如果返回的是受保护的 assets.grok.com URL,则用生成请求使用的 token 下载并转换为 base64 + if len(data) > 0 and response_field in ["b64_json", "base64"] and any("assets.grok.com" in item[response_field] for item in data): + dl = DownloadService() + try: + new_data = [] + any_converted = False + for item in data: + url = item.get("url") + if isinstance(url, str) and "assets.grok.com" in url: + try: + data_uri = await dl.parse_b64(url, token, "image") + b64 = data_uri.split(",", 1)[1] if "," in data_uri else data_uri + new_data.append({"b64_json": b64}) + any_converted = True + except Exception: + new_data.append({"url": url}) + else: + new_data.append(item) + if any_converted: + data = new_data + finally: + await dl.close() usage = result.usage_override or { "total_tokens": 0, "input_tokens": 0,