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
Accusys
3ad6f8740a
feat: Rule2 TKG relationship chunks + Phase0-1 Qdrant integration
...
Phase 0: TKG builder populate face_detections from face.json
- Fix face.json parser for pose_angle format
- Call store_traced_faces.py to set trace_id
- Skip if trace_id already populated
Phase 1: Qdrant face embeddings integration
- Add FaceEmbeddingDb module (src/core/db/face_embedding_db.rs)
- Create dev_face_embeddings collection (dim=512)
- Store 1122 face embeddings with pose metadata
- API: init_collection, batch_upsert, search_similar
Rule2: TKG edges → relationship chunks
- Design: RULE2_TKG_RELATIONSHIP_V1.0.md
- Implementation: rule2_ingest.rs
- ChunkType::Relationship added
- Edge types: SPEAKS_AS, MUTUAL_GAZE, CO_OCCURS_WITH, HAS_APPEARANCE, WEARS
- Auto-trigger on TKG rebuild
API:
- POST /api/v1/file/:file_uuid/rule2 (vectorization)
- POST /api/v1/file/:file_uuid/tkg/rebuild (auto Rule2)
Test: 75 relationship chunks created + vectorized
2026-06-21 00:22:41 +08:00
Accusys
17e4e15860
feat: add Vision LLM integration (CLIP + Qwen3-VL cascade)
...
- Add Qwen3-VL dynamic management (start/stop/status CLI)
- Add CLIP + Qwen3-VL cascade detection strategy
- Add Vision CLI commands (vision start/stop/status, detect)
- Add cascade_vision processor module
- Add clip processor module
- Add qwen_vl_manager module
Changes:
- scripts/start_qwen3vl.sh, stop_qwen3vl.sh: Qwen3-VL management scripts
- src/core/vision/: Qwen3-VL manager module
- src/core/processor/cascade_vision.rs: CLIP + Qwen3-VL cascade logic
- src/core/processor/clip.rs: CLIP classification and detection
- src/api/clip_api.rs: CLIP API endpoints
- src/cli/vision.rs: Vision CLI implementation
- src/cli/args.rs: Add Vision and Detect commands
- src/main.rs: Integrate Vision CLI
- src/core/mod.rs: Add vision module
- src/core/processor/mod.rs: Add cascade_vision module
v1.2.0
2026-06-13 16:25:52 +08:00
Accusys
834b0d4865
feat: score-based search, LLM re-ranking endpoint, video title search, pipeline module
...
Core search changes:
- Replace RRF with score-based merge (max of semantic/keyword/identity)
- Add video title ILIKE search for brand/name queries (score 0.9)
- Add /api/v1/search/llm-smart endpoint with Gemma 4 re-ranking
- Fix LLM JSON parsing (markdown fences, empty responses)
Infrastructure:
- Rebuild Qdrant collection (clear 347K contaminated points)
- Add dotenv loading to main.rs for config parity
- Implement store_pre_chunk in postgres_db.rs
Pipeline module (WordPress):
- store-asrx, rule1, vectorize, phase1, complete endpoints
- CLI commands for pipeline operations
Docs:
- SEARCH_SCORE_IMPROVEMENT.md (score-based merge proposal)
2026-06-04 07:40:41 +08:00
Accusys
e1572907ae
feat: ASRX hybrid pipeline, identity history, worker fixes, checkpoint system
v1.1.0
2026-06-02 07:13:23 +08:00
Accusys
e3066c3f49
Add Charade face matching experience report
...
Documents the journey from Rust pipeline snowball bug through
5 iterations of pgvector-based matching to the final 11-identity
centroid approach with dual-gate and ambiguity cleanup.
2026-06-02 05:01:56 +08:00
Accusys
3731a1230f
docs: add Identity Best-Face API requirement document for frontend team
2026-06-01 21:58:54 +08:00
Accusys
874d688987
feat: deploy hybrid search (semantic+keyword+identity) with RRF fusion
...
- Replace smart_search with hybrid RRF implementation
- Add speaker_detections table for identity-agent binding
- Fix identity queries: direct SQL to avoid type mismatches
- Add debug logs to job_worker for processor debugging
- Deployed to production (3002) successfully
Key changes:
- search.rs: Complete rewrite with 3 strategies + RRF
- postgres_db.rs: speaker_detections table + identity query fixes
- job_worker.rs: Debug logs for output file checks
Tested:
- Hybrid search works with semantic + keyword + identity
- Identity search: 'identity:Charade' returns correct results
- Chinese keyword search: '調光' matches Charade summaries
Bugs found:
- Case mismatch: 'ASRX' vs 'asrx' in processors field
- Missing CUT dependency for ASRX processor
2026-06-01 15:15:17 +08:00
Accusys
0d58a738a1
feat: add processor state machine and alert mechanism
...
- Add ProcessorJobStatus enum (8 states: Idle/Waiting/Ready/Pending/Running/Completed/Failed/Skipped)
- Add processor_alerts table (migrations/034)
- Add emit_processor_alert() to redis_client.rs
- Add ConditionResult enum + check_dependencies() to job_worker.rs
2026-05-30 10:03:49 +08:00
Accusys
08167d73b2
docs: add Processor State Machine V1.0 design
2026-05-30 10:03:48 +08:00
Accusys
3d13d1390e
Merge branch 'main' of http://192.168.110.200:3000/admin/momentry_core
2026-05-29 23:14:14 +08:00
Accusys
04cbb71ca0
docs: save handoff - library page flash & filter fix
2026-05-29 23:12:09 +08:00
Accusys
e96cc8c8de
docs: record WordPress API URL update session progress
2026-05-29 19:06:15 +08:00
M5Max128
f5cf12409b
docs: expand JPEG validation plan to include Python scripts
2026-05-27 15:55:20 +08:00
M5Max128
ea20e27a4d
docs: add JPEG validation implementation plan for M5Max48
2026-05-27 15:40:15 +08:00