This commit is contained in:
2026-07-11 13:00:06 +08:00
parent 6cc1655c69
commit 344fb789a4
82 changed files with 2594 additions and 7930 deletions
+9 -34
View File
@@ -72,24 +72,6 @@ def _log_image_response(record_id: str, response_data: dict, error: str | None =
def is_sync_image_provider_result_uncertain(exc: BaseException) -> bool:
"""Whether replaying the synchronous image request could duplicate provider cost."""
if isinstance(exc, (TimeoutError, httpx.TimeoutException, httpx.TransportError)):
return True
text = str(exc or "").strip().lower()
markers = (
"timeout",
"timed out",
"connection reset",
"connection aborted",
"server disconnected",
"remote protocol",
"read error",
"network is unreachable",
)
return any(marker in text for marker in markers)
async def get_active_image_engine(db: AsyncSession) -> ImageEngine:
"""Get the active image engine with highest priority."""
result = await db.execute(
@@ -130,7 +112,7 @@ def submit_image_task(
) -> dict:
"""Submit an image generation task via Ark SDK. Returns image_url."""
from volcenginesdkarkruntime import Ark
client = Ark(
base_url=engine.api_base,
api_key=engine.api_key,
@@ -179,23 +161,16 @@ def submit_image_task(
image=image_urls if image_urls else None,
)
image_url = result.data[0].url
response_data = {
"model": result.model,
"created": result.created,
"data": [{"url": item.url, "size": item.size} for item in result.data] if result.data else [],
"usage": {
"generated_images": result.usage.generated_images if getattr(result, "usage", None) and hasattr(result.usage, "generated_images") else len(result.data or []),
"input_tokens": result.usage.input_tokens if getattr(result, "usage", None) and hasattr(result.usage, "input_tokens") else 0,
"output_tokens": result.usage.output_tokens if getattr(result, "usage", None) and hasattr(result.usage, "output_tokens") else 0,
"total_tokens": result.usage.total_tokens if getattr(result, "usage", None) and hasattr(result.usage, "total_tokens") else 0,
},
"pricing_meta": {
"provider_input_image_count": len(image_urls),
"requested_output_count": 1,
"requested_size": record.image_px or record.image_size or engine.default_size,
"sync_completed": True,
},
"generated_images": result.usage.generated_images if hasattr(result.usage, 'generated_images') else 0,
"output_tokens": result.usage.output_tokens if hasattr(result.usage, 'output_tokens') else 0,
"total_tokens": result.usage.total_tokens if hasattr(result.usage, 'total_tokens') else 0,
}
}
except httpx.TimeoutException:
error_msg = "图片生成超时,请稍后重试"
@@ -209,12 +184,12 @@ def submit_image_task(
raise
finally:
client.close()
return {
"image_url": image_url,
"image_tokens": getattr(getattr(result, "usage", None), "total_tokens", 0),
"image_tokens": getattr(result.usage, "total_tokens", 0),
"response_data": json.dumps(response_data, ensure_ascii=False, default=str),
"error": str(getattr(result, "error", "") or ""),
"error": str(result.error) if result.error else "",
}