1
This commit is contained in:
@@ -72,6 +72,24 @@ 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(
|
||||
@@ -112,7 +130,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,
|
||||
@@ -161,16 +179,23 @@ 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 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,
|
||||
}
|
||||
"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,
|
||||
},
|
||||
}
|
||||
except httpx.TimeoutException:
|
||||
error_msg = "图片生成超时,请稍后重试"
|
||||
@@ -184,12 +209,12 @@ def submit_image_task(
|
||||
raise
|
||||
finally:
|
||||
client.close()
|
||||
|
||||
|
||||
return {
|
||||
"image_url": image_url,
|
||||
"image_tokens": getattr(result.usage, "total_tokens", 0),
|
||||
"image_tokens": getattr(getattr(result, "usage", None), "total_tokens", 0),
|
||||
"response_data": json.dumps(response_data, ensure_ascii=False, default=str),
|
||||
"error": str(result.error) if result.error else "",
|
||||
"error": str(getattr(result, "error", "") or ""),
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user