Merge pull request #727 from SuanmoSuanyangTechnology/fix/Timebomb_029
fix(public_share_chat)
This commit is contained in:
@@ -27,6 +27,7 @@ from app.services.conversation_service import ConversationService
|
|||||||
from app.services.release_share_service import ReleaseShareService
|
from app.services.release_share_service import ReleaseShareService
|
||||||
from app.services.shared_chat_service import SharedChatService
|
from app.services.shared_chat_service import SharedChatService
|
||||||
from app.services.workflow_service import WorkflowService
|
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, \
|
from app.utils.app_config_utils import workflow_config_4_app_release, \
|
||||||
agent_config_4_app_release, multi_agent_config_4_app_release
|
agent_config_4_app_release, multi_agent_config_4_app_release
|
||||||
|
|
||||||
@@ -259,8 +260,41 @@ def get_conversation(
|
|||||||
conv_service = ConversationService(db)
|
conv_service = ConversationService(db)
|
||||||
messages = conv_service.get_messages(conversation_id)
|
messages = conv_service.get_messages(conversation_id)
|
||||||
|
|
||||||
# 构建响应
|
file_ids = []
|
||||||
conv_dict = conversation_schema.Conversation.model_validate(conversation).model_dump()
|
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 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"] = [
|
conv_dict["messages"] = [
|
||||||
conversation_schema.Message.model_validate(m) for m in messages
|
conversation_schema.Message.model_validate(m) for m in messages
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user