- Applied Black formatter and isort across entire codebase for professional consistency - Moved implementation scripts (rag-mini.py, rag-tui.py) to bin/ directory for cleaner root - Updated shell scripts to reference new bin/ locations maintaining user compatibility - Added comprehensive linting configuration (.flake8, pyproject.toml) with dedicated .venv-linting - Removed development artifacts (commit_message.txt, GET_STARTED.md duplicate) from root - Consolidated documentation and fixed script references across all guides - Relocated test_fixes.py to proper tests/ directory - Enhanced project structure following Python packaging standards All user commands work identically while improving code organization and beginner accessibility.
122 lines
4.0 KiB
Python
122 lines
4.0 KiB
Python
"""
|
|
System Context Collection for Enhanced RAG Grounding
|
|
|
|
Collects minimal system information to help the LLM provide better,
|
|
context-aware assistance without compromising privacy.
|
|
"""
|
|
|
|
import platform
|
|
import sys
|
|
from pathlib import Path
|
|
from typing import Dict, Optional
|
|
|
|
|
|
class SystemContextCollector:
|
|
"""Collects system context information for enhanced LLM grounding."""
|
|
|
|
@staticmethod
|
|
def get_system_context(project_path: Optional[Path] = None) -> str:
|
|
"""
|
|
Get concise system context for LLM grounding.
|
|
|
|
Args:
|
|
project_path: Current project directory
|
|
|
|
Returns:
|
|
Formatted system context string (max 200 chars for privacy)
|
|
"""
|
|
try:
|
|
# Basic system info
|
|
os_name = platform.system()
|
|
python_ver = f"{sys.version_info.major}.{sys.version_info.minor}"
|
|
|
|
# Simplified OS names
|
|
os_short = {"Windows": "Win", "Linux": "Linux", "Darwin": "macOS"}.get(
|
|
os_name, os_name
|
|
)
|
|
|
|
# Working directory info
|
|
if project_path:
|
|
# Use relative or shortened path for privacy
|
|
try:
|
|
rel_path = project_path.relative_to(Path.home())
|
|
path_info = f"~/{rel_path}"
|
|
except ValueError:
|
|
# If not relative to home, just use folder name
|
|
path_info = project_path.name
|
|
else:
|
|
path_info = Path.cwd().name
|
|
|
|
# Trim path if too long for our 200-char limit
|
|
if len(path_info) > 50:
|
|
path_info = f".../{path_info[-45:]}"
|
|
|
|
# Command style hints
|
|
cmd_style = "rag.bat" if os_name == "Windows" else "./rag-mini"
|
|
|
|
# Format concise context
|
|
context = f"[{os_short} {python_ver}, {path_info}, use {cmd_style}]"
|
|
|
|
# Ensure we stay under 200 chars
|
|
if len(context) > 200:
|
|
context = context[:197] + "...]"
|
|
|
|
return context
|
|
|
|
except Exception:
|
|
# Fallback to minimal info if anything fails
|
|
return f"[{platform.system()}, Python {sys.version_info.major}.{sys.version_info.minor}]"
|
|
|
|
@staticmethod
|
|
def get_command_context(os_name: Optional[str] = None) -> Dict[str, str]:
|
|
"""
|
|
Get OS-appropriate command examples.
|
|
|
|
Returns:
|
|
Dictionary with command patterns for the current OS
|
|
"""
|
|
if os_name is None:
|
|
os_name = platform.system()
|
|
|
|
if os_name == "Windows":
|
|
return {
|
|
"launcher": "rag.bat",
|
|
"index": "rag.bat index C:\\path\\to\\project",
|
|
"search": 'rag.bat search C:\\path\\to\\project "query"',
|
|
"explore": "rag.bat explore C:\\path\\to\\project",
|
|
"path_sep": "\\",
|
|
"example_path": "C:\\Users\\username\\Documents\\myproject",
|
|
}
|
|
else:
|
|
return {
|
|
"launcher": "./rag-mini",
|
|
"index": "./rag-mini index /path/to/project",
|
|
"search": './rag-mini search /path/to/project "query"',
|
|
"explore": "./rag-mini explore /path/to/project",
|
|
"path_sep": "/",
|
|
"example_path": "~/Documents/myproject",
|
|
}
|
|
|
|
|
|
def get_system_context(project_path: Optional[Path] = None) -> str:
|
|
"""Convenience function to get system context."""
|
|
return SystemContextCollector.get_system_context(project_path)
|
|
|
|
|
|
def get_command_context() -> Dict[str, str]:
|
|
"""Convenience function to get command context."""
|
|
return SystemContextCollector.get_command_context()
|
|
|
|
|
|
# Test function
|
|
|
|
if __name__ == "__main__":
|
|
print("System Context Test:")
|
|
print(f"Context: {get_system_context()}")
|
|
print(f"Context with path: {get_system_context(Path('/tmp/test'))}")
|
|
print()
|
|
print("Command Context:")
|
|
cmds = get_command_context()
|
|
for key, value in cmds.items():
|
|
print(f" {key}: {value}")
|