{
"event": "PreToolUse",
"tool_name": "Grep",
"tool_input": {
"pattern": "def store_entities",
"path": "\/var\/www\/scripts\/pipeline",
"output_mode": "content",
"-A": 50
}
}
{
"tool_response": {
"mode": "content",
"numFiles": 0,
"filenames": [],
"content": "\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py:331:def store_entities(document_id: int, entities: list[dict]) -> int:\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-332- \"\"\"Store extracted entities in database with deduplication via canonical_name.\"\"\"\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-333- stored = 0\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-334-\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-335- for entity in entities:\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-336- try:\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-337- description = entity.get(\"description\") or entity.get(\"context\") or None\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-338- canonical = normalize_name(entity[\"name\"])\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-339-\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-340- # Check for existing entity by canonical_name first (deduplication)\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-341- cursor = db.execute(\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-342- \"SELECT id, description FROM entities WHERE canonical_name = %s AND type = %s\",\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-343- (canonical, entity[\"type\"]),\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-344- )\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-345- existing = cursor.fetchone()\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-346- cursor.close()\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-347-\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-348- # Fallback: check by exact name\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-349- if not existing:\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-350- cursor = db.execute(\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-351- \"SELECT id, description FROM entities WHERE name = %s AND type = %s\",\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-352- (entity[\"name\"], entity[\"type\"]),\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-353- )\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-354- existing = cursor.fetchone()\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-355- cursor.close()\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-356-\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-357- if existing:\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-358- entity_id = existing[\"id\"]\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-359- # Update description and canonical_name if missing\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-360- if description and not existing[\"description\"]:\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-361- cursor = db.execute(\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-362- \"UPDATE entities SET description = %s, canonical_name = %s WHERE id = %s\",\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-363- (description, canonical, entity_id),\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-364- )\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-365- db.commit()\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-366- cursor.close()\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-367- else:\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-368- # Ensure canonical_name is set\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-369- cursor = db.execute(\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-370- \"UPDATE entities SET canonical_name = %s WHERE id = %s AND canonical_name IS NULL\",\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-371- (canonical, entity_id),\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-372- )\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-373- db.commit()\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-374- cursor.close()\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-375- else:\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-376- # Insert new entity with canonical_name and status='normalized'\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-377- cursor = db.execute(\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-378- \"\"\"INSERT INTO entities (name, type, description, canonical_name, status, created_at)\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-379- VALUES (%s, %s, %s, %s, 'normalized', NOW())\"\"\",\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-380- (entity[\"name\"], entity[\"type\"], description, canonical),\n\/var\/www\/scripts\/pipeline\/analyzers\/entity_extractor.py-381- )",
"numLines": 51
}
}