Files
SillyTavern_replica/test_sillytavern_compat.py
2026-05-01 15:44:14 +08:00

95 lines
3.5 KiB
Python

"""
测试世界书 SillyTavern 格式兼容性
"""
import json
from pathlib import Path
# 项目根目录
PROJECT_ROOT = Path(r'D:\progarm\python\llm_workflow_engine')
DATA_PATH = PROJECT_ROOT / 'data'
WORLDBOOKS_PATH = DATA_PATH / 'worldbooks'
print("=" * 60)
print("世界书 SillyTavern 格式兼容性测试")
print("=" * 60)
# 列出所有JSON文件
json_files = list(WORLDBOOKS_PATH.glob("*.json"))
print(f"\n找到 {len(json_files)} 个世界书文件")
for file_path in json_files:
print(f"\n{'='*60}")
print(f"测试文件: {file_path.name}")
print(f"{'='*60}")
try:
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
entries_raw = data.get("entries", [])
print(f"\n1. 格式检测:")
if isinstance(entries_raw, dict):
print(f" 类型: SillyTavern 格式 (字典)")
print(f" 条目数量: {len(entries_raw)}")
print(f" 键示例: {list(entries_raw.keys())[:5]}")
# 模拟转换为列表
all_entries = []
for key in sorted(entries_raw.keys(), key=lambda x: int(x) if x.isdigit() else 0):
entry = entries_raw[key]
if 'uid' not in entry:
entry['uid'] = key
all_entries.append(entry)
print(f"\n2. 转换后:")
print(f" 列表长度: {len(all_entries)}")
if all_entries:
print(f" 第一条目 UID: {all_entries[0].get('uid')}")
print(f" 第一条目键: {all_entries[0].get('key', 'N/A')}")
# 测试分页
print(f"\n3. 分页测试 (page=1, page_size=3):")
page = 1
page_size = 3
start_idx = (page - 1) * page_size
end_idx = start_idx + page_size
paginated = all_entries[start_idx:end_idx]
total_pages = (len(all_entries) + page_size - 1) // page_size
print(f" 总条目数: {len(all_entries)}")
print(f" 总页数: {total_pages}")
print(f" 当前页返回: {len(paginated)}")
for i, entry in enumerate(paginated, start=1):
print(f" {i}. UID={entry.get('uid')}, 内容长度={len(entry.get('content', ''))}")
elif isinstance(entries_raw, list):
print(f" 类型: 内部格式 (列表)")
print(f" 条目数量: {len(entries_raw)}")
# 测试分页
print(f"\n2. 分页测试 (page=1, page_size=3):")
page = 1
page_size = 3
start_idx = (page - 1) * page_size
end_idx = start_idx + page_size
paginated = entries_raw[start_idx:end_idx]
total_pages = (len(entries_raw) + page_size - 1) // page_size
print(f" 总条目数: {len(entries_raw)}")
print(f" 总页数: {total_pages}")
print(f" 当前页返回: {len(paginated)}")
for i, entry in enumerate(paginated, start=1):
print(f" {i}. UID={entry.get('uid')}, 内容长度={len(entry.get('content', ''))}")
else:
print(f" ⚠️ 未知格式: {type(entries_raw)}")
except Exception as e:
print(f" ❌ 错误: {e}")
import traceback
traceback.print_exc()
print("\n" + "=" * 60)
print("测试完成")
print("=" * 60)