| import json | import json | ||||
| import logging | import logging | ||||
| from copy import deepcopy | from copy import deepcopy | ||||
| from typing import Any, Optional, Union | |||||
| from typing import Any, Optional, Union, cast | |||||
| from core.file import FILE_MODEL_IDENTITY, File, FileTransferMethod | from core.file import FILE_MODEL_IDENTITY, File, FileTransferMethod | ||||
| from core.tools.entities.tool_entities import ToolInvokeMessage, ToolParameter, ToolProviderType | from core.tools.entities.tool_entities import ToolInvokeMessage, ToolParameter, ToolProviderType | ||||
| from core.tools.tool.tool import Tool | from core.tools.tool.tool import Tool | ||||
| from extensions.ext_database import db | from extensions.ext_database import db | ||||
| from factories.file_factory import build_from_mapping | |||||
| from models.account import Account | from models.account import Account | ||||
| from models.model import App, EndUser | from models.model import App, EndUser | ||||
| from models.workflow import Workflow | from models.workflow import Workflow | ||||
| if isinstance(value, list): | if isinstance(value, list): | ||||
| for item in value: | for item in value: | ||||
| if isinstance(item, dict) and item.get("dify_model_identity") == FILE_MODEL_IDENTITY: | if isinstance(item, dict) and item.get("dify_model_identity") == FILE_MODEL_IDENTITY: | ||||
| file = File.model_validate(item) | |||||
| item["tool_file_id"] = item.get("related_id") | |||||
| file = build_from_mapping( | |||||
| mapping=item, | |||||
| tenant_id=str(cast(Tool.Runtime, self.runtime).tenant_id), | |||||
| ) | |||||
| files.append(file) | files.append(file) | ||||
| elif isinstance(value, dict) and value.get("dify_model_identity") == FILE_MODEL_IDENTITY: | elif isinstance(value, dict) and value.get("dify_model_identity") == FILE_MODEL_IDENTITY: | ||||
| file = File.model_validate(value) | |||||
| value["tool_file_id"] = value.get("related_id") | |||||
| file = build_from_mapping( | |||||
| mapping=value, | |||||
| tenant_id=str(cast(Tool.Runtime, self.runtime).tenant_id), | |||||
| ) | |||||
| files.append(file) | files.append(file) | ||||
| result[key] = value | result[key] = value |