积分冻结释放
This commit is contained in:
@@ -238,14 +238,14 @@ async def _call_openai_compatible(
|
||||
user_content: str,
|
||||
image_urls: list[str],
|
||||
video_urls: list[str],
|
||||
*,
|
||||
as_base64: bool,
|
||||
) -> tuple[dict, dict | None]:
|
||||
"""构建多模态 user_message。返回 (actual_message, log_message)。"""
|
||||
from app.utils.media import media_to_base64
|
||||
|
||||
content_parts = [{"type": "text", "text": user_content}]
|
||||
|
||||
from app.utils.media import get_llm_media_as_base64
|
||||
as_base64 = await get_llm_media_as_base64(db)
|
||||
for img in image_urls:
|
||||
if as_base64:
|
||||
url = await media_to_base64(img, "image/png")
|
||||
@@ -303,8 +303,18 @@ async def _call_openai_compatible(
|
||||
return f"{base}{path}"
|
||||
|
||||
if image_urls or video_urls:
|
||||
from app.utils.media import get_llm_media_as_base64
|
||||
|
||||
as_base64 = await get_llm_media_as_base64(db)
|
||||
# 配置读取后立即结束事务;后续 URL 下载/Base64 转换属于外部 I/O,
|
||||
# 不能继续占用数据库连接。
|
||||
if db is not None:
|
||||
await db.commit()
|
||||
user_message, log_user_message = await _build_multimodal_content(
|
||||
user_content, image_urls, video_urls
|
||||
user_content,
|
||||
image_urls,
|
||||
video_urls,
|
||||
as_base64=as_base64,
|
||||
)
|
||||
else:
|
||||
user_message = {
|
||||
@@ -313,6 +323,10 @@ async def _call_openai_compatible(
|
||||
}
|
||||
log_user_message = None
|
||||
|
||||
# 防御性结束可能由配置读取开启的只读事务;HTTP 请求期间不占用数据库连接。
|
||||
if db is not None:
|
||||
await db.commit()
|
||||
|
||||
async with httpx.AsyncClient(timeout=120) as client:
|
||||
request_data = {
|
||||
"model": config.model_name,
|
||||
|
||||
Reference in New Issue
Block a user