from __future__ import annotations from enum import Enum # 用户私域人像素材默认上限。users.private_portrait_asset_limit = 0 表示关闭模块;>0 表示启用并限制总素材量。 # 统计口径:真人 + 虚拟;图片 + 视频。音频当前业务暂不开放。 PRIVATE_PORTRAIT_DEFAULT_ASSET_LIMIT = 50 # 火山 Ark 私域素材 ProjectName:火山侧项目空间固定使用 default,并快照到各业务表 remote_project_name。 # 用户/项目隔离依赖本地 project_id 和火山返回的 Asset Group ID,不再动态拼接 ProjectName。 PRIVATE_PORTRAIT_REMOTE_PROJECT_NAME = "default" PRIVATE_PORTRAIT_REAL_PERSON_GROUP_TYPE = "LivenessFace" PRIVATE_PORTRAIT_VIRTUAL_GROUP_TYPE = "AIGC" # 兼容旧代码导入,默认代表真人认证素材组类型。 PRIVATE_PORTRAIT_GROUP_TYPE = PRIVATE_PORTRAIT_REAL_PERSON_GROUP_TYPE PRIVATE_PORTRAIT_VERIFY_TYPE = "real_time" PRIVATE_PORTRAIT_SUCCESS_RESULT_CODE = "10000" PRIVATE_PORTRAIT_ASSET_URI_PREFIX = "asset://" ARK_PRIVATE_PORTRAIT_SERVICE_NAME = "ark" ARK_PRIVATE_PORTRAIT_VERSION = "2024-01-01" ARK_PRIVATE_PORTRAIT_REGION = "cn-beijing" ARK_PRIVATE_PORTRAIT_HOST = "ark.cn-beijing.volcengineapi.com" PRIVATE_PORTRAIT_ASSET_POLL_INTERVAL_SECONDS = 20 PRIVATE_PORTRAIT_VIDEO_ASSET_POLL_INTERVAL_SECONDS = 30 PRIVATE_PORTRAIT_ASSET_POLL_MAX_COUNT = 60 PRIVATE_PORTRAIT_VIDEO_ASSET_POLL_MAX_COUNT = 120 PRIVATE_PORTRAIT_ASSET_POLL_BATCH_SIZE = 50 PRIVATE_PORTRAIT_REMOTE_DELETE_RECOVERY_BATCH_SIZE = 50 PRIVATE_PORTRAIT_VALIDATE_TOKEN_EXPIRE_MINUTES = 30 # 系统侧保守限流;火山文档 GetAsset 是 100 QPS,这里预留余量为 80。 PRIVATE_PORTRAIT_ACTION_QPS_LIMITS: dict[str, int] = { "CreateVisualValidateSession": 3, "GetVisualValidateResult": 3, "CreateAssetGroup": 10, "CreateAsset": 1, "ListAssetGroups": 10, "ListAssets": 10, "GetAsset": 80, "GetAssetGroup": 10, "UpdateAsset": 10, "UpdateAssetGroup": 10, "DeleteAsset": 10, "DeleteAssetGroup": 5, } class ArkPrivatePortraitAction(str, Enum): CREATE_VISUAL_VALIDATE_SESSION = "CreateVisualValidateSession" GET_VISUAL_VALIDATE_RESULT = "GetVisualValidateResult" CREATE_ASSET_GROUP = "CreateAssetGroup" CREATE_ASSET = "CreateAsset" GET_ASSET = "GetAsset" LIST_ASSETS = "ListAssets" LIST_ASSET_GROUPS = "ListAssetGroups" GET_ASSET_GROUP = "GetAssetGroup" UPDATE_ASSET = "UpdateAsset" UPDATE_ASSET_GROUP = "UpdateAssetGroup" DELETE_ASSET = "DeleteAsset" DELETE_ASSET_GROUP = "DeleteAssetGroup" class PrivatePortraitLibraryType(str, Enum): REAL_PERSON = "real_person" AIGC_VIRTUAL = "aigc_virtual" class PrivatePortraitProjectStatus(str, Enum): VALIDATING = "validating" ACTIVE = "active" VALIDATE_FAILED = "validate_failed" CREATING_REMOTE_GROUP = "creating_remote_group" CREATE_GROUP_FAILED = "create_group_failed" DELETING = "deleting" DELETED = "deleted" class PrivatePortraitValidateSessionStatus(str, Enum): CREATED = "created" CALLBACK_SUCCESS = "callback_success" CALLBACK_FAILED = "callback_failed" GROUP_ACTIVE = "group_active" EXPIRED = "expired" FAILED = "failed" class PrivatePortraitAssetGroupStatus(str, Enum): CREATING = "creating" ACTIVE = "active" LOCAL_DELETED = "local_deleted" REMOTE_DELETED = "remote_deleted" DELETE_FAILED = "delete_failed" FAILED = "failed" class PrivatePortraitAssetStatus(str, Enum): CREATING = "creating" PROCESSING = "Processing" ACTIVE = "Active" FAILED = "Failed" LOCAL_DELETED = "local_deleted" DELETING = "deleting" REMOTE_DELETED = "remote_deleted" DELETE_FAILED = "delete_failed" class PrivatePortraitAssetType(str, Enum): IMAGE = "Image" VIDEO = "Video" AUDIO = "Audio" # 火山支持,但当前业务暂不开放。 PRIVATE_PORTRAIT_ENABLED_ASSET_TYPES = { PrivatePortraitAssetType.IMAGE.value, PrivatePortraitAssetType.VIDEO.value, } class PrivatePortraitRemoteDeleteStatus(str, Enum): NONE = "none" PENDING = "pending" SUCCESS = "success" FAILED = "failed" SKIPPED = "skipped" class PrivatePortraitReferenceSource(str, Enum): PRIVATE_PORTRAIT_ASSET = "private_portrait_asset" class PrivatePortraitEventStatus(str, Enum): SUCCESS = "success" FAILED = "failed" PENDING = "pending" SKIPPED = "skipped" WARNING = "warning" class PrivatePortraitEventSource(str, Enum): API = "api" SERVICE = "service" CALLBACK = "callback" CELERY = "celery" ADMIN = "admin" SYSTEM = "system" class PrivatePortraitEventType(str, Enum): QUOTA_CHECK_START = "QUOTA_CHECK_START" QUOTA_CHECK_PASS = "QUOTA_CHECK_PASS" QUOTA_CHECK_DENY = "QUOTA_CHECK_DENY" PROJECT_CREATE = "PROJECT_CREATE" PROJECT_UPDATE = "PROJECT_UPDATE" PROJECT_DELETE = "PROJECT_DELETE" VIRTUAL_PROJECT_CREATE_START = "VIRTUAL_PROJECT_CREATE_START" VIRTUAL_ASSET_GROUP_CREATE_REMOTE_START = "VIRTUAL_ASSET_GROUP_CREATE_REMOTE_START" VIRTUAL_ASSET_GROUP_CREATE_REMOTE_SUCCESS = "VIRTUAL_ASSET_GROUP_CREATE_REMOTE_SUCCESS" VIRTUAL_ASSET_GROUP_CREATE_REMOTE_FAILED = "VIRTUAL_ASSET_GROUP_CREATE_REMOTE_FAILED" VIRTUAL_ASSET_CREATE_REMOTE_START = "VIRTUAL_ASSET_CREATE_REMOTE_START" VIRTUAL_ASSET_CREATE_REMOTE_SUCCESS = "VIRTUAL_ASSET_CREATE_REMOTE_SUCCESS" VIRTUAL_ASSET_CREATE_REMOTE_FAILED = "VIRTUAL_ASSET_CREATE_REMOTE_FAILED" VALIDATE_SESSION_CREATE = "VALIDATE_SESSION_CREATE" VALIDATE_SESSION_CREATE_FAILED = "VALIDATE_SESSION_CREATE_FAILED" VALIDATE_CALLBACK_RECEIVED = "VALIDATE_CALLBACK_RECEIVED" VALIDATE_CALLBACK_SUCCESS = "VALIDATE_CALLBACK_SUCCESS" VALIDATE_CALLBACK_FAILED = "VALIDATE_CALLBACK_FAILED" VALIDATE_GET_RESULT_START = "VALIDATE_GET_RESULT_START" VALIDATE_GET_RESULT_SUCCESS = "VALIDATE_GET_RESULT_SUCCESS" VALIDATE_GET_RESULT_FAILED = "VALIDATE_GET_RESULT_FAILED" ASSET_GROUP_UPDATE_REMOTE_START = "ASSET_GROUP_UPDATE_REMOTE_START" ASSET_GROUP_UPDATE_REMOTE_SUCCESS = "ASSET_GROUP_UPDATE_REMOTE_SUCCESS" ASSET_GROUP_UPDATE_REMOTE_FAILED = "ASSET_GROUP_UPDATE_REMOTE_FAILED" ASSET_CREATE_REJECT_DISABLED = "ASSET_CREATE_REJECT_DISABLED" ASSET_CREATE_REJECT_MAX_LIMIT = "ASSET_CREATE_REJECT_MAX_LIMIT" ASSET_CREATE_START = "ASSET_CREATE_START" ASSET_CREATE_SUCCESS = "ASSET_CREATE_SUCCESS" ASSET_CREATE_FAILED = "ASSET_CREATE_FAILED" ASSET_UPLOAD_START = "ASSET_UPLOAD_START" ASSET_UPLOAD_SUCCESS = "ASSET_UPLOAD_SUCCESS" ASSET_UPLOAD_FAILED = "ASSET_UPLOAD_FAILED" ASSET_UPLOAD_BIND_START = "ASSET_UPLOAD_BIND_START" ASSET_UPLOAD_BIND_SUCCESS = "ASSET_UPLOAD_BIND_SUCCESS" ASSET_UPLOAD_BIND_FAILED = "ASSET_UPLOAD_BIND_FAILED" ASSET_UPLOAD_RELEASE_START = "ASSET_UPLOAD_RELEASE_START" ASSET_UPLOAD_RELEASE_SUCCESS = "ASSET_UPLOAD_RELEASE_SUCCESS" ASSET_UPLOAD_RELEASE_FAILED = "ASSET_UPLOAD_RELEASE_FAILED" ASSET_SYNC_START = "ASSET_SYNC_START" ASSET_SYNC_SUCCESS = "ASSET_SYNC_SUCCESS" ASSET_SYNC_FAILED = "ASSET_SYNC_FAILED" ASSET_POLL_START = "ASSET_POLL_START" ASSET_POLL_SUCCESS = "ASSET_POLL_SUCCESS" ASSET_POLL_FAILED = "ASSET_POLL_FAILED" ASSET_POLL_TIMEOUT = "ASSET_POLL_TIMEOUT" ASSET_DELETE_LOCAL = "ASSET_DELETE_LOCAL" ASSET_DELETE_REMOTE_START = "ASSET_DELETE_REMOTE_START" ASSET_DELETE_REMOTE_SUCCESS = "ASSET_DELETE_REMOTE_SUCCESS" ASSET_DELETE_REMOTE_FAILED = "ASSET_DELETE_REMOTE_FAILED" PROJECT_DELETE_REMOTE_START = "PROJECT_DELETE_REMOTE_START" PROJECT_DELETE_REMOTE_SUCCESS = "PROJECT_DELETE_REMOTE_SUCCESS" PROJECT_DELETE_REMOTE_FAILED = "PROJECT_DELETE_REMOTE_FAILED" TASK_DISPATCH_SUCCESS = "TASK_DISPATCH_SUCCESS" TASK_DISPATCH_FAILED = "TASK_DISPATCH_FAILED" SYNC_DUE_ASSETS_START = "SYNC_DUE_ASSETS_START" SYNC_DUE_ASSETS_DONE = "SYNC_DUE_ASSETS_DONE" SYNC_DUE_ASSETS_FAILED = "SYNC_DUE_ASSETS_FAILED" REMOTE_DELETE_RECOVERY_START = "REMOTE_DELETE_RECOVERY_START" REMOTE_DELETE_RECOVERY_DONE = "REMOTE_DELETE_RECOVERY_DONE" REMOTE_DELETE_RECOVERY_FAILED = "REMOTE_DELETE_RECOVERY_FAILED" REFERENCE_RESOLVE_START = "REFERENCE_RESOLVE_START" REFERENCE_RESOLVE_SUCCESS = "REFERENCE_RESOLVE_SUCCESS" REFERENCE_RESOLVE_FAILED = "REFERENCE_RESOLVE_FAILED" ARK_API_CALL_START = "ARK_API_CALL_START" ARK_API_CALL_SUCCESS = "ARK_API_CALL_SUCCESS" ARK_API_CALL_FAILED = "ARK_API_CALL_FAILED" ARK_API_RATE_LIMIT_WAIT = "ARK_API_RATE_LIMIT_WAIT" ARK_API_RATE_LIMIT_REJECT = "ARK_API_RATE_LIMIT_REJECT"