95 lines
3.5 KiB
Python
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)
|