Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| """NiceGUI 前端共享常量,避免入口文件承载配置定义。""" | |
| import os | |
| from core.ui_text import load_ui_text | |
| from core.workspace import ( | |
| ARTIST_SELECTION_ORIGINS, | |
| FAVORITES_STORAGE_KEY, | |
| HISTORY_STORAGE_KEY, | |
| LEGACY_STAGED_STORAGE_KEY, | |
| WORKSPACE_STORAGE_KEY, | |
| ) | |
| TABLE_COLUMNS = [ | |
| {'name': 'tag', 'label': '匹配标签', 'field': 'tag', 'align': 'left', 'sortable': True}, | |
| {'name': 'cn_name', 'label': '含义', 'field': 'cn_name', 'align': 'left'}, | |
| {'name': 'nsfw', 'label': '分级', 'field': 'nsfw', 'align': 'center', 'sortable': True}, | |
| {'name': 'final_score', 'label': '综合分', 'field': 'final_score', 'sortable': True}, | |
| {'name': 'count', 'label': '热度', 'field': 'count', 'sortable': True}, | |
| {'name': 'reason', 'label': '推荐原因', 'field': 'reason', 'align': 'left'}, | |
| ] | |
| OPTIONAL_COLS = { | |
| 'semantic': {'name': 'semantic_score', 'label': '语义分', 'field': 'semantic_score', 'sortable': True}, | |
| 'layer': {'name': 'layer', 'label': '匹配层', 'field': 'layer'}, | |
| 'source': {'name': 'source', 'label': '匹配来源', 'field': 'source'}, | |
| } | |
| CONFIG_LS_KEY = 'danbooru_search_config' | |
| CONFIG_VERSION = 7 | |
| ANNOUNCEMENT_VERSION = 'p0-workspace-2026-07' | |
| LOCAL_STORAGE_READ_CHUNK_CHARS = 200_000 | |
| LOCAL_STORAGE_MAX_READ_CHARS = 4_000_000 | |
| HISTORY_PRE_COMPACTION_BACKUP_KEY = f'{HISTORY_STORAGE_KEY}_pre_compaction_backup' | |
| LOCAL_STORAGE_RESTORE_CACHE = '__danbooruLocalStorageRestoreV2' | |
| LOCAL_STORAGE_RESTORE_RETRY_DELAYS = (0.0, 1.0, 3.0) | |
| LOCAL_STORAGE_NAMES = ('config', 'workspace', 'history', 'favorites', 'legacy') | |
| SPONSOR_IMAGE_URL = 'https://akizukipic.oss-cn-beijing.aliyuncs.com/img/202501120027592.png' | |
| SPONSOR_TOOLCHAIN_URL = 'http://intro.sakizuki.site/index.html' | |
| SPONSOR_NOTICE_TEXT = '喜欢的话,可以请作者喝杯咖啡' | |
| SPONSOR_TITLE = '谢谢你愿意支持' | |
| UI_TEXT = load_ui_text() | |
| def resolve_group_render_limit(default: int = 80) -> int: | |
| raw = os.environ.get('DANBOORU_GROUP_RENDER_LIMIT') | |
| if raw is None: | |
| return default | |
| try: | |
| return int(raw) | |
| except ValueError: | |
| return default | |
| GROUP_RENDER_TAG_LIMIT = resolve_group_render_limit() | |
| ARTIST_REC_LIMIT = 64 | |
| ARTIST_REC_PAGE_SIZE = 8 | |
| RELATED_REC_PAGE_SIZE = 10 | |
| RECOMMENDATION_DEBOUNCE_SECONDS = 0.1 | |
| WORKSPACE_SAVE_DEBOUNCE_SECONDS = 0.3 | |
| SEARCH_MODE_PRESETS: dict[str, dict] = { | |
| '精确查词': {'top_k': 20, 'limit': 10, 'popularity_weight': 0.15, 'use_segmentation': False, 'group_mode': 'off', 'max_per_group': 2}, | |
| '概念扩展': {'top_k': 80, 'limit': 80, 'popularity_weight': 0.15, 'use_segmentation': True, 'group_mode': 'expand', 'max_per_group': 2}, | |
| '描述查词': {'top_k': 20, 'limit': 20, 'popularity_weight': 0.15, 'use_segmentation': False, 'group_mode': 'off', 'max_per_group': 2}, | |
| '完整场景': {'top_k': 5, 'limit': 80, 'popularity_weight': 0.15, 'use_segmentation': True, 'group_mode': 'diverse', 'max_per_group': 2}, | |
| } | |
| SEARCH_MODE_OPTIONS = ['自定义'] + list(SEARCH_MODE_PRESETS) | |
| ARTIST_ORIGINS = set(ARTIST_SELECTION_ORIGINS) | |