release: v1.3.0 - TKG node type renaming

Changes:
- Rust: face_trace → face_track (45 occurrences in 8 files)
- Rust: gaze_trace → gaze_track, lip_trace → lip_track
- Python: tkg_builder.py unified + pipeline_checklist.py fixed
- Swift: swift_hand.swift hand state detection (empty vs holding)

Node type changes:
  face_trace    → face_track
  person_trace  → body_track
  gaze_trace    → gaze_track
  lip_trace     → lip_track
  hand_trace    → hand_track
  speaker       → speaker_segment
  object        → detected_object
  text_trace    → text_region

Migration:
  PUBLIC schema: 12970 + 892 + 305 rows updated
This commit is contained in:
Accusys
2026-06-22 07:18:21 +08:00
parent bce9435823
commit 7e548f8b08
35 changed files with 2789 additions and 481 deletions
+21 -9
View File
@@ -983,7 +983,10 @@ async fn rebuild_tkg(
+ r.wears_edges;
if total_edges > 0 {
info!("[TKG] {} relationship edges found, triggering Rule 2 ingestion...", total_edges);
info!(
"[TKG] {} relationship edges found, triggering Rule 2 ingestion...",
total_edges
);
match ingest_rule2(state.db.pool(), &file_uuid).await {
Ok(count) => info!("[TKG] Rule 2 created {} relationship chunks", count),
Err(e) => info!("[TKG] Rule 2 ingestion failed: {}", e),
@@ -994,10 +997,10 @@ async fn rebuild_tkg(
success: true,
file_uuid,
result: Some(serde_json::json!({
"face_trace_nodes": r.face_trace_nodes,
"gaze_trace_nodes": r.gaze_trace_nodes,
"lip_trace_nodes": r.lip_trace_nodes,
"text_trace_nodes": r.text_trace_nodes,
"face_track_nodes": r.face_track_nodes,
"gaze_track_nodes": r.gaze_track_nodes,
"lip_track_nodes": r.lip_track_nodes,
"text_region_nodes": r.text_region_nodes,
"appearance_trace_nodes": r.appearance_trace_nodes,
"skin_tone_trace_nodes": r.skin_tone_trace_nodes,
"accessory_nodes": r.accessory_nodes,
@@ -1517,9 +1520,9 @@ async fn ingest_rule2(
Path(file_uuid): Path<String>,
) -> Result<Json<IngestRule2Response>, (StatusCode, Json<serde_json::Value>)> {
use crate::core::chunk::rule2_ingest::ingest_rule2;
use crate::core::embedding::Embedder;
use crate::core::db::schema;
use crate::core::db::qdrant_db::{QdrantDb, VectorPayload};
use crate::core::db::schema;
use crate::core::embedding::Embedder;
use tracing::info;
let result = ingest_rule2(state.db.pool(), &file_uuid).await;
@@ -1559,7 +1562,12 @@ async fn ingest_rule2(
continue;
}
if let Ok(vector) = embedder.embed_document(&text).await {
if state.db.store_vector(&chunk_id, &vector, &file_uuid).await.is_ok() {
if state
.db
.store_vector(&chunk_id, &vector, &file_uuid)
.await
.is_ok()
{
let payload = VectorPayload {
file_uuid: file_uuid.clone(),
chunk_id: chunk_id.clone(),
@@ -1570,7 +1578,11 @@ async fn ingest_rule2(
end_time: *end_time,
text: Some(text.clone()),
};
if qdrant.upsert_vector(&chunk_id, &vector, payload).await.is_ok() {
if qdrant
.upsert_vector(&chunk_id, &vector, payload)
.await
.is_ok()
{
vectorized += 1;
}
}