Spaces:
Running
Running
Upload main.py
Browse files
main.py
CHANGED
|
@@ -1761,7 +1761,7 @@ def parse_images_from_response(data_list: list) -> tuple[list, str]:
|
|
| 1761 |
if not sar:
|
| 1762 |
continue
|
| 1763 |
|
| 1764 |
-
# 获取session
|
| 1765 |
session_info = sar.get("sessionInfo", {})
|
| 1766 |
if session_info.get("session"):
|
| 1767 |
session_name = session_info["session"]
|
|
@@ -1775,13 +1775,11 @@ def parse_images_from_response(data_list: list) -> tuple[list, str]:
|
|
| 1775 |
|
| 1776 |
# 检查file字段(图片生成的关键)
|
| 1777 |
file_info = content.get("file")
|
| 1778 |
-
if file_info:
|
| 1779 |
-
|
| 1780 |
-
|
| 1781 |
-
|
| 1782 |
-
|
| 1783 |
-
"mimeType": file_info.get("mimeType", "image/png")
|
| 1784 |
-
})
|
| 1785 |
|
| 1786 |
return file_ids, session_name
|
| 1787 |
|
|
@@ -1991,59 +1989,39 @@ async def stream_chat_generator(session: str, text_content: str, file_ids: List[
|
|
| 1991 |
|
| 1992 |
# 处理图片生成
|
| 1993 |
if json_objects:
|
| 1994 |
-
logger.info(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 开始解析图片,共{len(json_objects)}个响应对象")
|
| 1995 |
file_ids, session_name = parse_images_from_response(json_objects)
|
| 1996 |
-
logger.info(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 解析结果: {len(file_ids)}张图片")
|
| 1997 |
-
logger.info(f"[IMAGE] [DEBUG] 响应中的session路径: {session_name}")
|
| 1998 |
|
| 1999 |
if file_ids and session_name:
|
| 2000 |
logger.info(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 检测到{len(file_ids)}张生成图片")
|
| 2001 |
|
| 2002 |
try:
|
| 2003 |
-
# 获取base_url
|
| 2004 |
base_url = get_base_url(request) if request else ""
|
| 2005 |
-
logger.info(f"[IMAGE] [DEBUG] 使用base_url: {base_url}")
|
| 2006 |
-
|
| 2007 |
-
# 获取文件元数据,找到正确的session路径
|
| 2008 |
file_metadata = await get_session_file_metadata(account_manager, session_name, request_id)
|
| 2009 |
-
logger.info(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 获取到{len(file_metadata)}个文件元数据")
|
| 2010 |
|
| 2011 |
-
#
|
| 2012 |
download_tasks = []
|
| 2013 |
for file_info in file_ids:
|
| 2014 |
fid = file_info["fileId"]
|
| 2015 |
mime = file_info["mimeType"]
|
| 2016 |
-
|
| 2017 |
-
# 从元数据中获取正确的session路径
|
| 2018 |
meta = file_metadata.get(fid, {})
|
| 2019 |
correct_session = meta.get("session") or session_name
|
| 2020 |
-
|
| 2021 |
-
# 创建下载任务
|
| 2022 |
task = download_image_with_jwt(account_manager, correct_session, fid, request_id)
|
| 2023 |
download_tasks.append((fid, mime, task))
|
| 2024 |
|
| 2025 |
-
# 并行执行所有下载任务
|
| 2026 |
results = await asyncio.gather(*[task for _, _, task in download_tasks], return_exceptions=True)
|
| 2027 |
|
| 2028 |
# 处理下载结果
|
| 2029 |
for idx, ((fid, mime, _), result) in enumerate(zip(download_tasks, results), 1):
|
| 2030 |
-
|
| 2031 |
-
|
| 2032 |
-
|
| 2033 |
-
|
| 2034 |
-
|
| 2035 |
-
|
| 2036 |
-
image_data = result
|
| 2037 |
-
image_url = save_image_to_hf(image_data, chat_id, fid, mime, base_url)
|
| 2038 |
-
logger.info(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 图片{idx}已保存: {image_url}")
|
| 2039 |
-
|
| 2040 |
-
# 返回Markdown格式图片
|
| 2041 |
-
markdown = f"\n\n\n\n"
|
| 2042 |
-
chunk = create_chunk(chat_id, created_time, model_name, {"content": markdown}, None)
|
| 2043 |
-
yield f"data: {chunk}\n\n"
|
| 2044 |
-
except Exception as e:
|
| 2045 |
-
logger.error(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 图片{idx}处理失败: {str(e)}")
|
| 2046 |
|
|
|
|
|
|
|
|
|
|
| 2047 |
|
| 2048 |
except Exception as e:
|
| 2049 |
logger.error(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 图片处理失败: {str(e)}")
|
|
|
|
| 1761 |
if not sar:
|
| 1762 |
continue
|
| 1763 |
|
| 1764 |
+
# 获取session信息(优先使用最新的)
|
| 1765 |
session_info = sar.get("sessionInfo", {})
|
| 1766 |
if session_info.get("session"):
|
| 1767 |
session_name = session_info["session"]
|
|
|
|
| 1775 |
|
| 1776 |
# 检查file字段(图片生成的关键)
|
| 1777 |
file_info = content.get("file")
|
| 1778 |
+
if file_info and file_info.get("fileId"):
|
| 1779 |
+
file_ids.append({
|
| 1780 |
+
"fileId": file_info["fileId"],
|
| 1781 |
+
"mimeType": file_info.get("mimeType", "image/png")
|
| 1782 |
+
})
|
|
|
|
|
|
|
| 1783 |
|
| 1784 |
return file_ids, session_name
|
| 1785 |
|
|
|
|
| 1989 |
|
| 1990 |
# 处理图片生成
|
| 1991 |
if json_objects:
|
|
|
|
| 1992 |
file_ids, session_name = parse_images_from_response(json_objects)
|
|
|
|
|
|
|
| 1993 |
|
| 1994 |
if file_ids and session_name:
|
| 1995 |
logger.info(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 检测到{len(file_ids)}张生成图片")
|
| 1996 |
|
| 1997 |
try:
|
|
|
|
| 1998 |
base_url = get_base_url(request) if request else ""
|
|
|
|
|
|
|
|
|
|
| 1999 |
file_metadata = await get_session_file_metadata(account_manager, session_name, request_id)
|
|
|
|
| 2000 |
|
| 2001 |
+
# 并行下载所有图片
|
| 2002 |
download_tasks = []
|
| 2003 |
for file_info in file_ids:
|
| 2004 |
fid = file_info["fileId"]
|
| 2005 |
mime = file_info["mimeType"]
|
|
|
|
|
|
|
| 2006 |
meta = file_metadata.get(fid, {})
|
| 2007 |
correct_session = meta.get("session") or session_name
|
|
|
|
|
|
|
| 2008 |
task = download_image_with_jwt(account_manager, correct_session, fid, request_id)
|
| 2009 |
download_tasks.append((fid, mime, task))
|
| 2010 |
|
|
|
|
| 2011 |
results = await asyncio.gather(*[task for _, _, task in download_tasks], return_exceptions=True)
|
| 2012 |
|
| 2013 |
# 处理下载结果
|
| 2014 |
for idx, ((fid, mime, _), result) in enumerate(zip(download_tasks, results), 1):
|
| 2015 |
+
if isinstance(result, Exception):
|
| 2016 |
+
logger.error(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 图片{idx}下载失败: {type(result).__name__}")
|
| 2017 |
+
continue
|
| 2018 |
+
|
| 2019 |
+
image_url = save_image_to_hf(result, chat_id, fid, mime, base_url)
|
| 2020 |
+
logger.info(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 图片{idx}已保存: {image_url}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2021 |
|
| 2022 |
+
markdown = f"\n\n\n\n"
|
| 2023 |
+
chunk = create_chunk(chat_id, created_time, model_name, {"content": markdown}, None)
|
| 2024 |
+
yield f"data: {chunk}\n\n"
|
| 2025 |
|
| 2026 |
except Exception as e:
|
| 2027 |
logger.error(f"[IMAGE] [{account_manager.config.account_id}] [req_{request_id}] 图片处理失败: {str(e)}")
|