feat: Phase 2.6 edges migration to Qdrant (TKG-only architecture)
Phase 2.6.1: co_occurrence_edges migration - build_co_occurrence_edges_from_qdrant() - Qdrant embeddings → frame grouping → YOLO objects - Result: 6679 edges (vs 6701 PostgreSQL) Phase 2.6.2: face_face_edges migration - build_face_face_edges_from_qdrant() - Qdrant embeddings → frame grouping → face pairs - mutual_gaze detection preserved - Result: 6 edges (exact match) Phase 2.6.3: speaker_face_edges migration - build_speaker_face_edges_from_qdrant() - Qdrant embeddings → trace_id frame ranges - SPEAKS_AS edge creation Architecture: - All edges use Qdrant payload (no face_detections queries) - PostgreSQL fallback for empty Qdrant - Estimated 3.6x performance improvement Testing: - Playground (3003): ✓ All Phase 2.6 logs verified - Edge counts: ✓ Close match with PostgreSQL - Fallback: ✓ Working Docs: - docs_v1.0/DESIGN/TKG_PHASE2_6_EDGES_MIGRATION.md - docs_v1.0/M4_workspace/2026-06-21_phase2_6_test.md
This commit is contained in:
116
v1.1/scripts/update_terminology_v1.11.py
Normal file
116
v1.1/scripts/update_terminology_v1.11.py
Normal file
@@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
架構文檔術語更新工具
|
||||
用於將設計文檔中的術語更新為實際代碼實現的術語
|
||||
"""
|
||||
|
||||
import os
|
||||
import re
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Tuple
|
||||
|
||||
# 術語對照表
|
||||
TERMINOLOGY_MAPPING: Dict[str, Tuple[str, str, str]] = {
|
||||
# (設計值, 實際值, 狀態標記)
|
||||
"sentence": ("sentence", "ChunkType::Sentence", "✅ 完整實現"),
|
||||
"visual": ("visual", "未實現 (設計值: visual)", "❌ 未實現"),
|
||||
"scene": ("scene", "ChunkType::Cut (設計值: scene)", "⚠️ 部分實現"),
|
||||
"summary": ("summary", "ChunkType::Story (設計值: summary)", "⚠️ 概念調整"),
|
||||
"time": ("time", "ChunkType::TimeBased", "✅ 完整實現"),
|
||||
"trace": ("trace", "ChunkType::Trace", "✅ 完整實現"),
|
||||
}
|
||||
|
||||
# 需要更新的目錄
|
||||
ARCHITECTURE_DIR = Path("docs_v1.0/ARCHITECTURE")
|
||||
|
||||
|
||||
def update_file(file_path: Path):
|
||||
"""更新單個文件中的術語"""
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
|
||||
original_content = content
|
||||
|
||||
# 進行術語替換
|
||||
for design_term, (_, actual_term, _) in TERMINOLOGY_MAPPING.items():
|
||||
# 替換 chunk_type 值
|
||||
content = re.sub(
|
||||
r"chunk_type\s*['\"]" + re.escape(design_term) + r"['\"]",
|
||||
f'chunk_type "{actual_term}"',
|
||||
content,
|
||||
flags=re.IGNORECASE,
|
||||
)
|
||||
|
||||
# 替換表格中的術語
|
||||
content = re.sub(
|
||||
r"\|\s*" + re.escape(design_term) + r"\s*\|",
|
||||
f"| {actual_term} |",
|
||||
content,
|
||||
flags=re.IGNORECASE,
|
||||
)
|
||||
|
||||
if content != original_content:
|
||||
# 創建備份
|
||||
backup_path = file_path.with_suffix(file_path.suffix + ".bak")
|
||||
with open(backup_path, "w", encoding="utf-8") as f:
|
||||
f.write(original_content)
|
||||
|
||||
# 寫入更新後的文件
|
||||
with open(file_path, "w", encoding="utf-8") as f:
|
||||
f.write(content)
|
||||
|
||||
print(f"✓ 已更新: {file_path}")
|
||||
return True
|
||||
else:
|
||||
print(f"○ 無需更新: {file_path}")
|
||||
return False
|
||||
|
||||
|
||||
def generate_report(updated_files: List[Path], skipped_files: List[Path]):
|
||||
"""生成更新報告"""
|
||||
print("\n" + "=" * 80)
|
||||
print("術語更新報告")
|
||||
print("=" * 80)
|
||||
|
||||
print(f"\n已更新文件 ({len(updated_files)}):")
|
||||
for file in updated_files:
|
||||
print(f" - {file.relative_to(Path.cwd())}")
|
||||
|
||||
print(f"\n跳過文件 ({len(skipped_files)}):")
|
||||
for file in skipped_files:
|
||||
print(f" - {file.relative_to(Path.cwd())}")
|
||||
|
||||
print("\n術語對照表:")
|
||||
for design_term, (_, actual_term, status) in TERMINOLOGY_MAPPING.items():
|
||||
print(f" {design_term:10} → {actual_term:30} [{status}]")
|
||||
|
||||
print("\n下一步建議:")
|
||||
print("1. 手動檢查更新的文件,確保語義正確")
|
||||
print("2. 運行 cargo test 確保代碼編譯正常")
|
||||
print("3. 更新代碼註釋中的術語")
|
||||
print("4. 運行一致性檢查工具")
|
||||
|
||||
|
||||
def main():
|
||||
"""主函數"""
|
||||
print("開始術語標準化更新...")
|
||||
|
||||
updated_files = []
|
||||
skipped_files = []
|
||||
|
||||
# 遞歸遍歷架構目錄
|
||||
for root, dirs, files in os.walk(ARCHITECTURE_DIR):
|
||||
for file in files:
|
||||
if file.endswith(".md"):
|
||||
file_path = Path(root) / file
|
||||
if update_file(file_path):
|
||||
updated_files.append(file_path)
|
||||
else:
|
||||
skipped_files.append(file_path)
|
||||
|
||||
# 生成報告
|
||||
generate_report(updated_files, skipped_files)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user