frontend auto-update for pip-based installs

This commit is contained in:
Daulet Amirkhanov 2025-09-11 15:14:17 +01:00
parent 527db2abdf
commit d93f31ad30

View file

@ -16,10 +16,22 @@ from cognee.version import get_cognee_version
logger = get_logger() logger = get_logger()
def normalize_version_for_comparison(version: str) -> str:
"""
Normalize version string for comparison.
Handles development versions and edge cases.
"""
# Remove common development suffixes for comparison
normalized = version.replace("-local", "").replace("-dev", "").replace("-alpha", "").replace("-beta", "")
return normalized.strip()
def get_frontend_cache_dir() -> Path: def get_frontend_cache_dir() -> Path:
""" """
Get the directory where downloaded frontend assets are cached. Get the directory where downloaded frontend assets are cached.
Uses user's home directory to persist across package updates. Uses user's home directory to persist across package updates.
Each cached frontend is version-specific and will be re-downloaded
when the cognee package version changes.
""" """
cache_dir = Path.home() / ".cognee" / "ui-cache" cache_dir = Path.home() / ".cognee" / "ui-cache"
cache_dir.mkdir(parents=True, exist_ok=True) cache_dir.mkdir(parents=True, exist_ok=True)
@ -61,16 +73,34 @@ def download_frontend_assets(force: bool = False) -> bool:
try: try:
cached_version = version_file.read_text().strip() cached_version = version_file.read_text().strip()
current_version = get_cognee_version() current_version = get_cognee_version()
if cached_version == current_version:
# Compare normalized versions to handle development versions
cached_normalized = normalize_version_for_comparison(cached_version)
current_normalized = normalize_version_for_comparison(current_version)
if cached_normalized == current_normalized:
logger.debug(f"Frontend assets already cached for version {current_version}") logger.debug(f"Frontend assets already cached for version {current_version}")
return True return True
else:
logger.info(f"Version mismatch detected: cached={cached_version}, current={current_version}")
logger.info("Updating frontend cache to match current cognee version...")
# Clear the old cached version
if frontend_dir.exists():
shutil.rmtree(frontend_dir)
if version_file.exists():
version_file.unlink()
except Exception as e: except Exception as e:
logger.debug(f"Error checking cached version: {e}") logger.debug(f"Error checking cached version: {e}")
# Clear potentially corrupted cache
if frontend_dir.exists():
shutil.rmtree(frontend_dir)
if version_file.exists():
version_file.unlink()
download_url, version = get_frontend_download_info() download_url, version = get_frontend_download_info()
logger.info("Downloading cognee frontend assets...") logger.info(f"Downloading cognee frontend assets for version {version}...")
logger.info("This is a one-time download and will be cached for future use.") logger.info("This will be cached and reused until the cognee version changes.")
try: try:
# Create a temporary directory for download # Create a temporary directory for download
@ -118,8 +148,9 @@ def download_frontend_assets(force: bool = False) -> bool:
shutil.copytree(cognee_frontend_source, frontend_dir) shutil.copytree(cognee_frontend_source, frontend_dir)
logger.debug(f"Frontend extracted to: {frontend_dir}") logger.debug(f"Frontend extracted to: {frontend_dir}")
# Write version info # Write version info for future cache validation
version_file.write_text(version) version_file.write_text(version)
logger.debug(f"Cached frontend for cognee version: {version}")
logger.info( logger.info(
f"✓ Cognee frontend v{version.replace('-local', '')} downloaded and cached successfully!" f"✓ Cognee frontend v{version.replace('-local', '')} downloaded and cached successfully!"