Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions app/api/v1/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down