From c89eccf8fe25c039ac93011fc15ca312b8ef7e0c Mon Sep 17 00:00:00 2001 From: Timebomb2018 <18868801967@163.com> Date: Mon, 30 Mar 2026 14:55:04 +0800 Subject: [PATCH 1/2] fix(public_share_chat): History conversation message returns audio status --- api/app/controllers/public_share_controller.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/api/app/controllers/public_share_controller.py b/api/app/controllers/public_share_controller.py index f5284b46..134379fb 100644 --- a/api/app/controllers/public_share_controller.py +++ b/api/app/controllers/public_share_controller.py @@ -27,6 +27,7 @@ from app.services.conversation_service import ConversationService from app.services.release_share_service import ReleaseShareService from app.services.shared_chat_service import SharedChatService from app.services.workflow_service import WorkflowService +from app.models.file_metadata_model import FileMetadata from app.utils.app_config_utils import workflow_config_4_app_release, \ agent_config_4_app_release, multi_agent_config_4_app_release @@ -259,8 +260,19 @@ def get_conversation( conv_service = ConversationService(db) messages = conv_service.get_messages(conversation_id) - # 构建响应 - conv_dict = conversation_schema.Conversation.model_validate(conversation).model_dump() + # 为 assistant 消息查询 audio_url 状态 + for m in messages: + if m.role == "assistant" and m.meta_data: + audio_url = m.meta_data.get("audio_url") + if audio_url: + try: + file_id = uuid.UUID(audio_url.rstrip("/").split("/")[-1]) + file_meta = db.get(FileMetadata, file_id) + m.meta_data["audio_status"] = file_meta.status if file_meta else "unknown" + except (ValueError, IndexError): + m.meta_data["audio_status"] = "unknown" + + conv_dict = conversation_schema.Conversation.model_validate(conversation).model_dump(mode="json") conv_dict["messages"] = [ conversation_schema.Message.model_validate(m) for m in messages ] From 8285250096c6bcda083522a8cfedf018e714c0fc Mon Sep 17 00:00:00 2001 From: Timebomb2018 <18868801967@163.com> Date: Mon, 30 Mar 2026 15:06:35 +0800 Subject: [PATCH 2/2] fix(public_share_chat): History conversation message returns audio status --- .../controllers/public_share_controller.py | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/api/app/controllers/public_share_controller.py b/api/app/controllers/public_share_controller.py index 134379fb..2b224e28 100644 --- a/api/app/controllers/public_share_controller.py +++ b/api/app/controllers/public_share_controller.py @@ -260,17 +260,39 @@ def get_conversation( conv_service = ConversationService(db) messages = conv_service.get_messages(conversation_id) - # 为 assistant 消息查询 audio_url 状态 - for m in messages: + file_ids = [] + message_file_id_map = {} + + # 第一次遍历:解析 audio_url,收集所有有效的 file_id + for idx, m in enumerate(messages): if m.role == "assistant" and m.meta_data: audio_url = m.meta_data.get("audio_url") - if audio_url: - try: - file_id = uuid.UUID(audio_url.rstrip("/").split("/")[-1]) - file_meta = db.get(FileMetadata, file_id) - m.meta_data["audio_status"] = file_meta.status if file_meta else "unknown" - except (ValueError, IndexError): - m.meta_data["audio_status"] = "unknown" + if not audio_url: + continue + try: + file_id = uuid.UUID(audio_url.rstrip("/").split("/")[-1]) + except (ValueError, IndexError): + # audio_url 无法解析为 UUID,标记为 unknown + m.meta_data["audio_status"] = "unknown" + continue + + file_ids.append(file_id) + message_file_id_map[idx] = file_id + + # 批量查询所有相关的 FileMetadata + file_status_map = {} + if file_ids: + file_metas = ( + db.query(FileMetadata) + .filter(FileMetadata.id.in_(set(file_ids))) + .all() + ) + file_status_map = {fm.id: fm.status for fm in file_metas} + + # 第二次遍历:将查询结果映射回消息 + for idx, file_id in message_file_id_map.items(): + m = messages[idx] + m.meta_data["audio_status"] = file_status_map.get(file_id, "unknown") conv_dict = conversation_schema.Conversation.model_validate(conversation).model_dump(mode="json") conv_dict["messages"] = [