Accusys
d791d138f2
fix: API endpoints for file_uuid filtering of pending identities
...
- get_file_identities: UNION face_detections + file_identities
- list_identities: add file_bindings from file_identities table
- Add back /api/v1/traces/unassigned route
- Total count query now includes file_identities
Frontend can now:
- Filter pending identities by file_uuid
- Filter pending faces (unassigned traces) by file_uuid
2026-06-26 14:26:36 +08:00
Accusys
bd7d8c77bf
feat: add migrate_manual_file_identities.py
...
Migrate identities.file_uuid to file_identities table for consistent structure
2026-06-26 13:55:10 +08:00
Accusys
6f1a560d06
fix: add script_dir() method to PythonExecutor
2026-06-26 13:46:23 +08:00
Accusys
67caf09732
feat: tmdb_agent now inserts identities and file_identities to DB
...
- tmdb_agent.py: INSERT identities with status='pending'
- tmdb_agent.py: INSERT file_identities (file_uuid → identity_id)
- identity.json: file_bindings includes file_uuid, movie_id, character
- backfill_file_identities.py: migrate existing TMDb identities
- Tested: 27 Charade cast identities linked to file
2026-06-26 13:39:08 +08:00
Accusys
6cbc11efda
feat: add confirm_identity API endpoint
...
- Add POST /api/v1/agents/identity/confirm endpoint
- Calls confirm_identity.py to bind trace to identity
- Updates TKG, Qdrant _faces, PG face_detections, _seeds
- Optional Round 2 propagation after confirmation
- Fix trace_id=0 check in confirm_identity.py (use 'is not None')
- Document API endpoint in 08_identity_agent.md
2026-06-26 08:30:03 +08:00
Accusys
615f9da2df
fix: identity status - TMDb and user_defined identities start as 'pending' (確認制)
2026-06-26 02:16:46 +08:00
Accusys
a2f2b7918a
fix: add trace_id and status to face_track nodes, force update properties on rebuild
2026-06-26 00:19:00 +08:00
Accusys
0c3f385b1f
remove: skin_tone_trace node type
...
- skin_tone is a person attribute (like height), not trace attribute
- Remove build_skin_tone_trace_nodes function
- Remove skin_tone_trace_nodes from TkgResult and API response
- Remove skin_tone_trace from documentation tables
2026-06-25 19:21:05 +08:00
Accusys
fd2edd5736
fix: TKG rebuild type mismatch and face_track nodes
...
- Fix trace_id type mismatch (INT4 vs i64) with explicit ::bigint cast
- Change build_face_track_nodes to use from_pg version
- Add skin_tone_trace_nodes to API response
- Add #[derive(Serialize)] to TkgResult
- Fix Unicode panic in text label truncation
- Add push_existing_embeddings.py script
2026-06-25 11:23:53 +08:00
Accusys
ecb0e9c7d0
feat: add /api/v1/health public endpoint
...
- Add public health routes at /api/v1/health, /api/v1/health/detailed, /api/v1/health/consistency
- Make health functions and response types public
- Public routes bypass auth middleware (unlike protected /api/v1/* routes)
2026-06-25 10:05:33 +08:00
Accusys
4273576612
feat: implement skin_tone_trace node builder and standardize TKG node naming
...
- Add build_skin_tone_trace_nodes() to tkg.rs (Fitzpatrick I-VI classification)
- Add skin_tone_trace_nodes field to TkgResult
- Standardize node naming: _trace -> _track (text uses _region)
- Add external_id format column to Node Types table
- Add storage names to Edge Types table
- Create TKG_FORMATION_V1.0.md with Phase 0-4 definition, flow diagram, queries
- Add cross-reference from identity_agent_v4.0.md to TKG Formation
- Update Python scripts to executable mode
2026-06-25 03:09:16 +08:00
Accusys
406b2d5524
docs: update TKG documentation for Identity Agent V4.0
...
- Add new file: 2026-06-25_identity_agent_v4.0.md (M4 workspace)
- Complete architecture overview
- All phases completed
- Thresholds, components, test results
- Update: API_WORKSPACE/modules/15_tkg.md
- Correct node type: face_trace → face_track
- Add text_region (replaces text_trace)
- Add Identity Agent integration section
- face_track status values (pending/suggested/confirmed/stranger)
- Example face_track node with identity properties
2026-06-25 02:27:34 +08:00
Accusys
4b4d37b332
fix: qdrant_request empty body handling (use 'is not None' check)
...
Fix qdrant_request() to properly handle empty dict {} as body.
Python's 'if body' evaluates to False for empty dict, causing EOF error.
Changed:
- data = json.dumps(body).encode() if body is not None else None
Also cleaned up count_seeds() to use consistent body passing.
2026-06-25 02:19:07 +08:00
Accusys
b19b1a8c46
fix: count_seeds empty body handling
...
Fix count_seeds() to always pass valid JSON body to Qdrant count API.
Empty dict {} was causing EOF error when no source filter provided.
2026-06-25 02:02:17 +08:00
Accusys
d20819b03b
feat: add manual_seed.py for user-selected face trace seed creation
...
Implements:
- create_identity(): Create PG identity (source='manual')
- create_manual_seed(): Full flow from trace → seed → confirm
- Get trace centroid embedding from Qdrant _faces
- Create identity in PG
- Push to Qdrant _seeds
- Confirm trace binding (TKG + Qdrant + PG)
- Auto-trigger Round 2 propagation
- list_pending_traces(): List traces for user selection
- run_propagation(): Auto propagation trigger
Usage:
# List pending traces
python manual_seed.py --file-uuid <uuid> --list
# Create seed from trace
python manual_seed.py --file-uuid <uuid> --trace-id 1 --name 'John Doe'
# Custom UUID
python manual_seed.py --file-uuid <uuid> --trace-id 1 --name 'John Doe' --identity-uuid xxx
# No propagation
python manual_seed.py --file-uuid <uuid> --trace-id 1 --name 'John Doe' --no-propagate
Flow: select trace → label → create identity → push seed → auto-bind → propagate
2026-06-25 01:49:53 +08:00
Accusys
b5e3adf5de
feat: add generate_seed_embeddings.py for TMDb profile extraction
...
Implements:
- get_tmdb_identities(): Query PG for TMDb identities with profile photos
- download_tmdb_image(): Download profile image from TMDb (handles full URL or path)
- extract_face_embedding(): CoreML FaceNet 512D embedding extraction
- generate_seed_embeddings(): Full flow: download → extract → push to _seeds
TMDb image handling:
- Supports both full URL (https://...) and path (/xxx.jpg)
- Uses 'original' size for better quality (replaces /w185)
Usage:
python generate_seed_embeddings.py # All TMDb identities
python generate_seed_embeddings.py --limit 10 # Limit to 10
python generate_seed_embeddings.py --dry-run # Don't push to Qdrant
Tested: 3 seeds successfully pushed (Cary Grant, Audrey Hepburn, Walter Matthau)
2026-06-25 01:45:48 +08:00
Accusys
4198a74002
feat: add confirm_identity.py for identity binding confirmation
...
Implements:
- confirm_single_trace(): Confirm identity binding for one trace
- Update TKG face_track node: status='confirmed'
- Update Qdrant _faces: identity_uuid for all points
- Update PG face_detections: identity_id
- Add trace centroid to _seeds (source='propagation')
- Auto-trigger Round 2 matching
- batch_confirm_from_json(): Batch confirm from suggestions file
- Confirm multiple suggestions from identity_matcher output
- Final propagation after all confirmations
- run_round_2_propagation(): Auto propagation trigger
- Get confirmed traces from TKG nodes
- Build identity_map for propagation
- Run identity_matcher.py Round 2
Usage:
python confirm_identity.py --file-uuid <uuid> --trace-id 1 --identity-id 1 --identity-uuid xxx --name 'Tom Hanks'
python confirm_identity.py --file-uuid <uuid> --json suggestions.json
python confirm_identity.py --file-uuid <uuid> --json suggestions.json --no-propagate
2026-06-25 01:38:00 +08:00
Accusys
21b9f500d9
feat: add TKG node marking for Identity Agent suggestions
...
TKG Helper (scripts/utils/tkg_helper.py):
- mark_face_track_suggested(): Mark node as 'suggested' with pending identity info
- mark_face_track_confirmed(): Mark node as 'confirmed' with identity_ref
- mark_face_track_stranger(): Mark node as 'stranger' with stranger_ref
- batch_mark_suggestions(): Batch mark multiple traces
- batch_mark_strangers(): Batch mark stranger clusters
- get_face_track_nodes(): Get all face_track nodes for a file
- get_pending_face_tracks(): Get nodes with status='pending'
- get_suggested_face_tracks(): Get nodes with status='suggested'
Identity Matcher updates:
- Add --mark-tkg flag to update TKG nodes after matching
- Integrates with tkg_helper for batch operations
Node properties schema:
- status: pending | suggested | confirmed | stranger
- pending_identity_name/uuid/id: suggested identity info
- suggested_by: tmdb | propagation | manual
- confidence: matching score
- identity_ref: confirmed identity reference
2026-06-25 01:11:05 +08:00
Accusys
6851cb4734
feat: add identity_matcher.py for multi-angle face matching
...
Implements:
- match_faces_round_1: TMDb seeds → traces (TH=0.55)
- match_faces_round_2: Confirmed traces → pending (TH=0.55)
- match_faces_round_3_plus: Propagation (TH=0.50)
- cluster_strangers: Greedy merge unmatched traces (TH=0.40)
- multi_angle_match: max(cosine(seed, rep)) across 3 representatives
- cosine_similarity: Vector similarity calculation
Usage:
python identity_matcher.py --file-uuid <uuid> --round 1
python identity_matcher.py --file-uuid <uuid> --round 2 --confirmed-traces 1,2,3
python identity_matcher.py --file-uuid <uuid> --round 1 --stranger
Output: JSON with suggestions {trace_id: {identity_id, uuid, name, score, suggested_by}}
2026-06-25 00:57:22 +08:00
Accusys
580c4b4017
feat: add _seeds collection helper functions for Identity Agent
...
- Add ensure_seeds_collection(): create _seeds collection (512D, Cosine)
- Add push_seed_embedding(): push identity seed with payload {identity_id, uuid, name, source, file_uuid, trace_id, tmdb_id}
- Add get_seeds(): get all seeds (optional source filter)
- Add search_seeds(): cosine search against seeds
- Add delete_seed(): delete seed by identity_id
- Add count_seeds(): count seeds (optional source filter)
- Add get_trace_representatives(): get 3 representatives per trace for multi-angle matching
- Add get_trace_centroid(): get centroid embedding for a trace
- Add update_identity_in_faces(): update identity_id/uuid for all face points with trace_id
Point ID strategy: identity_id directly as point_id for _seeds collection
All functions tested successfully
2026-06-25 00:47:25 +08:00
Accusys
9fbb4f9b48
feat: add Qdrant _faces collection embedding push
...
- Add qdrant_faces.py utility module for _faces collection operations
- Modify face_processor.py to push embeddings to Qdrant (CoreML extraction re-enabled)
- Modify store_traced_faces.py to update trace_id in Qdrant after face tracking
- Collection schema: 512D vectors, Cosine distance, fixed name '_faces'
- Payload: file_uuid, frame, trace_id, bbox, confidence, identity_id/uuid, stranger_id
- Batch size: 100 (default), configurable via QDRANT_BATCH_SIZE env var
- Error handling: face_processor.py exits with error if Qdrant push fails
2026-06-25 00:23:20 +08:00
Accusys
074cdcdbed
refactor: remove face embedding architecture - single Qdrant _faces collection
...
- Delete FaceEmbeddingDb module (face_embedding_db.rs)
- Stub match_faces_iterative, generate_seed_embeddings, tmdb_match_handler
- Remove sync_trace_embeddings, populate_face_embeddings_to_qdrant
- Remove embedding from face.json output (face_processor.py)
- Remove embedding from PG UPDATE (store_traced_faces.py)
- Remove workspace traces staging (checkin.rs, qdrant_workspace.rs)
- Fix tests: add pose_angle to Face, hand_nodes to TkgResult
Disabled functions (need reimplement with _faces):
- match_faces_iterative (identity agent)
- generate_seed_embeddings (TMDb seeds)
- tmdb_match_handler (TMDb matching)
- cluster_face_embeddings, search_similar_faces
- merge_traces_within_cuts
2026-06-24 22:27:09 +08:00
Accusys
360cb991e1
feat: add queued status + FIFO queue ordering
...
- Add Queued variant to VideoStatus enum
- Trigger sets videos.status='queued' instead of staying 'pending'
- Worker sets videos.status='processing' on pickup
- list_monitor_jobs_by_status ORDER BY created_at ASC (FIFO)
- queue_position counts both 'pending' and 'queued' jobs
2026-06-24 05:18:40 +08:00
Accusys
14e886cc08
feat: progressive multi-round face matching + pending person API
...
- Identity agent: per-face max matching, multi-round with derived
seeds from high-confidence faces, angle diversity filter (cosine sim < 0.90)
- Pending person API: POST /file/:file_uuid/pending-person
+ GET /file/:file_uuid/pending-persons with status=pending, source=manual
- Update API docs (07_identity.md)
2026-06-24 03:42:04 +08:00
Accusys
766a1d9a6d
feat: Swift Face Pose integration + TKG 方案 B
...
Major Changes:
- swift_face_pose: output pose angles (yaw/pitch/roll) in face.json
- face_processor.py: call swift_face_pose (dual output: face.json + pose.json)
- Face struct: add pose_angle field
- TKG 方案 B: gaze/lip_track nodes from face.json (no face_detections dependency)
- Chunk cleanup: delete old data before rebuild (avoid duplicate key)
- Hand nodes: classify by hand_type + gesture (15 combinations)
- HAND_OBJECT edges: bbox spatial matching (174 matches)
Test Results:
- Blake Jones: 8 faces, pose_angle ✓, 66 nodes, 174 edges
- FilmRiot: 394 faces, pose_angle ✓, 35 nodes, 39 edges
- Left hands: 132, Right hands: 2
Architecture:
- All TKG nodes built from JSON files (face.json, hand.json, yolo.json)
- Swift processors: sample_interval=3 (Face/Pose/Hand sync)
- Cleanup functions: delete_tkg_nodes_by_uuid, delete_tkg_edges_by_uuid
2026-06-23 05:47:24 +08:00
Accusys
e1e2da2140
fix: processor-counts API + ASRX field name conversion
...
- Fix processor-counts API to correctly read JSON counts:
- YOLO: use frames.length (was returning null)
- CUT: prioritize scenes.length over frame_count
- Result: YOLO 1963 frames, CUT 25 scenes (correct)
- Fix ASRX field name conversion:
- Convert start_time/end_time → start/end for ASRX compatibility
- Prefer frame-based positioning over time-based
- Document issues in issues_2026-06-21.md:
- Issue 6: ASRX field name mismatch
- Issue 7: processor-counts API null values
2026-06-22 23:33:39 +08:00
Accusys
db8bb8fa95
fix(tkg): handle null identity_id + remove skin_tone nodes
...
- Fix Phase 2.5 null handling in build_gaze/lip_track_nodes
- Use query_scalar::<_, Option<i64>> + flatten() for nullable fields
- Prevents 'unexpected null' decoding errors
- Remove skin_tone_trace_nodes from TKG build
- Delete build_skin_tone_trace_nodes function (110 lines)
- Remove from TkgResult struct and API response
- Skin tone should be independent function, not in TKG
Result: TKG rebuild now completes successfully
- Nodes: 40 (face_track, gaze_track, text_region, appearance)
- Edges: 2967 (co_occurrence edges increased from 21 → 2964)
2026-06-22 16:39:47 +08:00
Accusys
70e849d3ae
refactor: remove Rule 3, Story, and Caption processors
...
- Remove Rule 3 (Scene Chunking) from worker auto-trigger
- Remove rule3_ingest.rs and related imports
- Remove Story/Caption from playground module parsing
- Clean up scan.rs Rule 3 display
- Fix ASRX field name conversion (start_time -> start)
Reason: Story/5W1H/Scene accuracy too poor - will redesign later
2026-06-22 15:34:02 +08:00
Accusys
22f13eca4b
fix(cut): change ffprobe output format to default=nk=0
...
- Problem: compact=p=0:nk=1 outputs pipe-delimited format without pts_time=
- Fix: default=nk=0 outputs pts_time=XXX format that parser can match
- Result: Charade scene detection from 1 scene -> 833 scenes (correct)
2026-06-22 13:25:16 +08:00
Accusys
30b252ac95
fix: pre_chunks schema + TMDb movie name extraction
...
- pre_chunks: add chunk_type, text_content columns; drop NOT NULL on
coordinate_type/coordinate_index (INSERT statements reference these
columns but CREATE TABLE was missing them)
- run_migrations: add ALTER TABLE for existing databases
- extract_movie_name: filter noise words (youtube, fps, 24fps, 1080p,
pure digits) so 'Charade_YouTube_24fps' → 'Charade'
- run-server-3002.sh: add companion worker startup (matching 3003 script)
2026-06-22 11:55:12 +08:00
Accusys
f4de741d5b
fix: add appearance back to processor list, keep mediapipe/story filtered out
2026-06-22 09:20:16 +08:00
Accusys
c93b54efeb
fix: filter deprecated processors from trigger API requests
2026-06-22 09:15:02 +08:00
Accusys
4ba248513e
fix: correct processor list - remove deprecated mediapipe/appearance/story, fix auto-pipeline order
...
- ProcessorType::all(): remove MediaPipe, Appearance, Story (mediapipe replaced by Swift)
- files.rs auto-pipeline: fix order to cut,asr,asrx,yolo,ocr,face,pose (was missing asr)
- postgres_db.rs run_migrations(): rewrite to auto-create all 38 tables idempotently
2026-06-22 08:49:41 +08:00
Accusys
7e548f8b08
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
v1.3.0
2026-06-22 07:18:21 +08:00
Accusys
bce9435823
feat: add Level 2/3 dynamic feature extraction CLI
...
- test_level2_level3.py: on-demand extraction script
- Level 2: face, torso, leg, arm regions (medium)
- Level 3: glasses, earrings, watch (fine details)
- Demonstrates dynamic calculation from keypoints
2026-06-22 03:26:12 +08:00
Accusys
d0858f288a
docs: add CLI usage for TKG Level 1 builder
...
- Add Usage section with CLI commands
- TKG Level 1 builder: python scripts/tkg_level1_builder.py
- Query example for person_trace nodes
2026-06-22 03:24:04 +08:00
Accusys
9e0a0227ea
docs: update Appearance_Feature_System with shot type detection
...
- Add reference units table (eye/head/shoulder width)
- Add BODY_PROPORTIONS constants for validation
- Add shot type detection section (full_body/medium_shot/close_up)
- Add height estimation strategies per shot type
- Update code examples with head_width and proportion_ratios
2026-06-22 02:50:45 +08:00
Accusys
d94b96d884
feat: add shot type detection and proportion-based height estimation
...
- detect_shot_type(): classify full_body/medium_shot/close_up
- estimate height using shoulder_width × 3.8 (~171cm) for close-up
- add BODY_PROPORTIONS constants for validation
- head position ratio + bbox aspect ratio → shot type
- enables filtering full-body shots in video search
2026-06-22 02:47:01 +08:00
Accusys
606f31f13c
feat: add appearance feature system with coordinate/scale fixes
...
- Add Appearance_Feature_System_V1.0.md design doc
- Add proportion_calculator.py for body proportions (height, body shape)
- Add feature_extractor.py for hierarchical feature extraction
- Add tkg_level1_builder.py for TKG person_trace nodes
- Fix mediapipe_holistic_processor.py to output Top-Left pixels
- Add MediaPipe format conversion in proportion_calculator
Coordinate system alignment:
- Swift Pose: Top-Left pixels (Y-flip done in swift_pose.swift)
- MediaPipe: Top-Left pixels (norm→pixel conversion added)
2026-06-22 02:27:03 +08:00
Accusys
97180aa7cd
fix: add environment variable exports to startup scripts
...
- Added MOMENTRY_OUTPUT_DIR, DATABASE_SCHEMA, MOMENTRY_REDIS_PREFIX exports
- Created run-worker-3002.sh for standalone worker
- Created config/ directory with environment-specific files
- Updated AGENTS.md with critical variables section and release checklist
This fixes Python subprocess environment variable inheritance issue
where store_traced_faces.py was using wrong output directory.
2026-06-21 21:21:32 +08:00
Accusys
e949ac793d
docs: face_detections deprecation plan - analysis and future migration
...
Analysis Results:
- 12 PostgreSQL fallback functions (TKG builders)
- 11 API modules with direct queries
- Identity binding: critical dependency
Current Status:
- Cannot deprecate now (Production stability)
- PostgreSQL fallback necessary
- Qdrant collection empty (0 points)
Recommendations:
- Keep PostgreSQL fallback for safety
- Document migration path
- New features use Qdrant/TKG
- Gradual migration in future (6+ months)
Migration Priority:
- P1: identity_binding.rs (TKG-based)
- P2: identity_agent_api.rs
- P3: identity_api.rs
- P4: Other APIs
Conclusion: face_detections cannot be deprecated yet due to:
- Production Qdrant empty
- API dependencies (identity binding)
- Stability requirements
Status: Draft (no immediate deprecation)
2026-06-21 05:24:12 +08:00
Accusys
01dae66285
test: Production (3002) Phase 2.6-2.7 release test
...
Test Results:
- Health check: 20 identities ✅
- File info: Success ✅
- Rule2 chunks: 75 ✅
- TKG rebuild: Failed (face.json missing)
Status:
- Phase 2.6-2.7 code: Implemented ✅
- PostgreSQL fallback: Active (Qdrant empty)
- Rule2 identity resolution: Working ✅
- Qdrant collection: Green, 0 points
Recommendations:
- Keep Production running with PostgreSQL fallback
- New videos will auto-fill Qdrant collection
- Production performance: ~1.85s (PG fallback)
2026-06-21 05:20:39 +08:00
Accusys
6ede2a443c
release: Phase 2.6-2.7 to production (3002) - edges migration and identity resolution
...
Release: 2026-06-21 05:15
Binary: Jun 21 05:14 (34MB)
PID: 95567
Features:
- Phase 2.6: All edges from Qdrant (co_occurrence, face_face, speaker_face)
- Phase 2.7: Identity resolution for gaze_trace/lip_trace nodes
- Rule2: Extended for face_trace/gaze_trace/lip_trace node types
Architecture:
- Complete TKG-only identity resolution
- PostgreSQL fallback for empty Qdrant
- Estimated 3.6x edges performance improvement
Backup: momentry_backup_20260621_phase25
Commits:
- e214106d : Phase 2.7 identity resolution
- Phase 2.6 commits: edges migration to Qdrant
Status: ✅ Release successful
2026-06-21 05:17:34 +08:00
Accusys
e214106d48
feat: Phase 2.7 identity resolution for gaze/lip trace nodes
...
Implementation:
- gaze_trace nodes: Query face_trace identity_id, add to properties
- lip_trace nodes: Query face_trace identity_id, add to properties
- Rule2: Extend identity resolution to support gaze_trace/lip_trace node types
Architecture:
- All face-related nodes now have identity_id in TKG properties
- Rule2 unified identity resolution for face_trace/gaze_trace/lip_trace
- TKG-only approach (no face_detections dependency for identity)
Code Changes:
- src/core/processor/tkg.rs: Add identity_id query in gaze/lip builders
- src/core/chunk/rule2_ingest.rs: Extend node_type condition
Docs:
- docs_v1.0/DESIGN/TKG_PHASE2_7_IDENTITY_RESOLUTION.md
Status: Implementation complete, pending test with valid file
2026-06-21 05:12:13 +08:00
Accusys
2cfcfdd1af
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
2026-06-21 04:47:49 +08:00
Accusys
0afc70fc5b
test: Production (3002) Phase 2.5 release verification
...
Test results:
- TKG rebuild: 1.75s (2.4x faster than Playground)
- gaze_trace_nodes: 21 (PostgreSQL fallback)
- lip_trace_nodes: 21 (PostgreSQL fallback)
- Rule2 chunks: 75 ✓
Findings:
- Production faster than Playground (1.75s vs 4.2s)
- Qdrant collection empty (0 points)
- Using PostgreSQL fallback for Phase 2.5
- New videos will auto-populate Qdrant
Status: ✅ Release successful
2026-06-21 04:31:52 +08:00
Accusys
721c343486
release: Phase 2.5 to production (3002) - gaze_trace and lip_trace Qdrant migration
...
Release: 2026-06-21 02:35
Binary: Jun 21 02:33
PID: 16386
Features:
- Phase 2.5.1: gaze_trace_nodes from Qdrant
- Phase 2.5.2: lip_trace_nodes from Qdrant + face.json
- Qdrant collection: momentry_face_embeddings (dim=512)
Verification:
- gaze_trace_nodes: 21 ✓
- lip_trace_nodes: 21 ✓
- Rule2 chunks: 75 ✓
- Performance: TKG rebuild 1.85s ✓
Backup: momentry_backup_20260619
2026-06-21 03:12:38 +08:00
Accusys
c39805bb8e
feat: Phase 2.5 gaze_trace and lip_trace Qdrant migration + Charade Q&A test
...
Phase 2.5.1: gaze_trace_nodes from Qdrant
- build_gaze_trace_nodes_from_qdrant()
- Read trace_id, frame, bbox from Qdrant payload
- Compute gaze stats (yaw, pitch, roll, gaze direction, blink)
- No PostgreSQL face_detections dependency
Phase 2.5.2: lip_trace_nodes from Qdrant + face.json
- build_lip_trace_nodes_from_qdrant()
- Match trace_id using Qdrant embeddings + face.json bbox
- Compute lip stats (openness, variance, speaking frames)
- Fixed face.json bbox structure (x,y,width,height not bbox object)
Test results:
- 23 gaze_trace nodes from Qdrant
- 23 lip_trace nodes from Qdrant + face.json
- 51 lip_sync edges created
- Charade Q&A: 20 identities, 75 relationship chunks
Docs:
- TKG_PHASE2_NONFACE_MIGRATION_V1.0.md (migration plan)
- 2026-06-21_charade_qa_test.md (Q&A test report)
2026-06-21 02:17:08 +08:00
Accusys
23c440104b
feat: Phase 2-3 TKG-only architecture
...
Phase 2.1: build_face_trace_nodes_from_qdrant()
- Read trace_id, frame, bbox directly from Qdrant payload
- No dependency on face_detections table
Phase 2.3: Rule2 queries TKG nodes
- identity resolution from tkg_nodes.properties.identity_id
- TKG-only architecture (Phase 2.3)
Phase 3: Identity Agent updates TKG nodes
- match_faces_iterative() updates tkg_nodes.properties
- bind_identity_trace() syncs identity_id to TKG
- unbind_identity() removes identity_id from TKG
Test results:
- 23 face_trace nodes from Qdrant (Phase 2.1)
- 75 relationship chunks (Rule2)
- TKG rebuild: Phase0 → Phase1 → Phase2
2026-06-21 01:30:04 +08:00
Accusys
2f2ccc94f7
feat: Identity Agent query Qdrant for face embeddings
...
Phase 1.4: Modify match_faces_iterative to use Qdrant
Changes:
- match_faces_iterative() now queries FaceEmbeddingDb
- Fallback to PostgreSQL if Qdrant is empty
- Group embeddings by trace_id from Qdrant payload
- Sample 3-angle embeddings (front, mid, back)
- Match against TMDb seeds (threshold=0.50)
- Propagate to unmatched traces
- Update face_detections.identity_id in PostgreSQL
New functions:
- match_faces_iterative() - Qdrant-based matching
- match_faces_iterative_pg() - PostgreSQL fallback
Flow:
1. Load TMDb identities with face_embedding
2. Query Qdrant for file embeddings
3. Sample 3 embeddings per trace
4. Match against TMDb seeds
5. Propagate matches iteratively
6. Update identity_id in PostgreSQL
2026-06-21 00:31:25 +08:00