chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Implement entity-based connections from Link Suggestions Report."""
|
||||
|
||||
import re
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# Priority entities to focus on
|
||||
PRIORITY_ENTITIES = {
|
||||
'langchain', 'langgraph', 'llm', 'rag', 'embedding', 'vector',
|
||||
'mcp', 'model context protocol', 'api integration', 'function calling',
|
||||
'anthropic', 'openai', 'google', 'claude', 'gpt',
|
||||
'autonomous agent', 'ai agent', 'chain of thought', 'prompt engineering',
|
||||
'retrieval augmented', 'graphrag', 'multimodal', 'tool use'
|
||||
}
|
||||
|
||||
def read_file(file_path):
|
||||
"""Read file content."""
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
return f.read()
|
||||
except:
|
||||
return None
|
||||
|
||||
def write_file(file_path, content):
|
||||
"""Write content to file."""
|
||||
try:
|
||||
with open(file_path, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
def find_file(filename, search_dirs):
|
||||
"""Find a file in the vault."""
|
||||
for dir_path in search_dirs:
|
||||
for root, dirs, files in os.walk(dir_path):
|
||||
for file in files:
|
||||
if file == filename or file == filename + '.md':
|
||||
return os.path.join(root, file)
|
||||
return None
|
||||
|
||||
def add_link_to_file(file_path, link_to_add, link_text=None):
|
||||
"""Add a link to a file if it doesn't already exist."""
|
||||
content = read_file(file_path)
|
||||
if not content:
|
||||
return False
|
||||
|
||||
# Check if link already exists
|
||||
if f'[[{link_to_add}]]' in content:
|
||||
return False
|
||||
|
||||
# Find a good place to add the link
|
||||
# Look for existing "Related:" or "See also:" sections
|
||||
related_patterns = [
|
||||
r'^#+\s*Related.*?$',
|
||||
r'^#+\s*See also.*?$',
|
||||
r'^#+\s*Links.*?$',
|
||||
r'^#+\s*References.*?$'
|
||||
]
|
||||
|
||||
insert_pos = None
|
||||
for pattern in related_patterns:
|
||||
match = re.search(pattern, content, re.MULTILINE | re.IGNORECASE)
|
||||
if match:
|
||||
# Find the end of this section
|
||||
insert_pos = match.end()
|
||||
# Skip to next line
|
||||
next_line = content.find('\n', insert_pos)
|
||||
if next_line != -1:
|
||||
insert_pos = next_line + 1
|
||||
break
|
||||
|
||||
# If no related section found, add at the end of frontmatter
|
||||
if insert_pos is None:
|
||||
# Find end of frontmatter
|
||||
frontmatter_end = content.find('---', 3)
|
||||
if frontmatter_end != -1:
|
||||
insert_pos = content.find('\n', frontmatter_end + 3) + 1
|
||||
else:
|
||||
# No frontmatter, add at beginning
|
||||
insert_pos = 0
|
||||
|
||||
# Create the link line
|
||||
if link_text:
|
||||
link_line = f"- [[{link_to_add}]] - {link_text}\n"
|
||||
else:
|
||||
link_line = f"- [[{link_to_add}]]\n"
|
||||
|
||||
# If we're not in a list section, create one
|
||||
if insert_pos is None or (insert_pos > 0 and content[insert_pos-2:insert_pos] != '\n\n'):
|
||||
# Check if we need to add a Related section
|
||||
needs_section = True
|
||||
for pattern in related_patterns:
|
||||
if re.search(pattern, content, re.MULTILINE | re.IGNORECASE):
|
||||
needs_section = False
|
||||
break
|
||||
|
||||
if needs_section:
|
||||
# Add at end of file with new Related section
|
||||
if not content.endswith('\n'):
|
||||
content += '\n'
|
||||
content += '\n## Related\n'
|
||||
content += link_line
|
||||
else:
|
||||
# Insert in existing section
|
||||
new_content = content[:insert_pos] + link_line + content[insert_pos:]
|
||||
content = new_content
|
||||
else:
|
||||
# Insert at found position
|
||||
new_content = content[:insert_pos] + link_line + content[insert_pos:]
|
||||
content = new_content
|
||||
|
||||
return write_file(file_path, content)
|
||||
|
||||
def implement_connections():
|
||||
"""Implement priority entity connections."""
|
||||
vault_root = Path("/Users/cam/VAULT01")
|
||||
search_dirs = [
|
||||
vault_root / "AI Development",
|
||||
vault_root / "AI Articles and Research",
|
||||
vault_root / "AI IDEAS",
|
||||
vault_root / "AI Courses",
|
||||
vault_root / "CamRohn LLC",
|
||||
vault_root / "Clippings"
|
||||
]
|
||||
|
||||
# Read the report
|
||||
report_path = vault_root / "System_Files" / "Link_Suggestions_Report.md"
|
||||
report_content = read_file(report_path)
|
||||
|
||||
if not report_content:
|
||||
print("Could not read report")
|
||||
return
|
||||
|
||||
# Parse entity connections
|
||||
connections_made = 0
|
||||
connections_by_entity = {}
|
||||
|
||||
# Find entity sections
|
||||
entity_pattern = r'^### (.+)$'
|
||||
connection_pattern = r'- \[\[([^\]]+)\]\] ↔ \[\[([^\]]+)\]\]'
|
||||
|
||||
current_entity = None
|
||||
for line in report_content.split('\n'):
|
||||
# Check for entity header
|
||||
entity_match = re.match(entity_pattern, line)
|
||||
if entity_match:
|
||||
current_entity = entity_match.group(1).strip().lower()
|
||||
continue
|
||||
|
||||
# Check for connection
|
||||
if current_entity and current_entity in [e.lower() for e in PRIORITY_ENTITIES]:
|
||||
conn_match = re.match(connection_pattern, line)
|
||||
if conn_match:
|
||||
file1 = conn_match.group(1).strip()
|
||||
file2 = conn_match.group(2).strip()
|
||||
|
||||
# Skip self-connections
|
||||
if file1 == file2:
|
||||
continue
|
||||
|
||||
# Find actual file paths
|
||||
file1_path = find_file(file1 + '.md', search_dirs)
|
||||
file2_path = find_file(file2 + '.md', search_dirs)
|
||||
|
||||
if file1_path and file2_path:
|
||||
# Add bidirectional links
|
||||
if add_link_to_file(file1_path, file2, f"Related to {current_entity}"):
|
||||
connections_made += 1
|
||||
if current_entity not in connections_by_entity:
|
||||
connections_by_entity[current_entity] = 0
|
||||
connections_by_entity[current_entity] += 1
|
||||
print(f"Added link from {file1} to {file2}")
|
||||
|
||||
if add_link_to_file(file2_path, file1, f"Related to {current_entity}"):
|
||||
connections_made += 1
|
||||
if current_entity not in connections_by_entity:
|
||||
connections_by_entity[current_entity] = 0
|
||||
connections_by_entity[current_entity] += 1
|
||||
print(f"Added link from {file2} to {file1}")
|
||||
|
||||
# Generate report
|
||||
print("\n=== Connection Implementation Report ===")
|
||||
print(f"Total connections made: {connections_made}")
|
||||
print("\nConnections by entity:")
|
||||
for entity, count in sorted(connections_by_entity.items(), key=lambda x: x[1], reverse=True):
|
||||
print(f" {entity}: {count} connections")
|
||||
|
||||
# Find cross-domain connections
|
||||
print("\nCross-domain connections created:")
|
||||
# This would require more complex analysis of file paths
|
||||
|
||||
if __name__ == "__main__":
|
||||
implement_connections()
|
||||
Reference in New Issue
Block a user