Auto-commit: OCR workflow improvements, performance optimizations, and bug fixes

This commit is contained in:
2026-01-11 18:21:16 +08:00
parent 642dd0ea5f
commit 1ddd49f913
97 changed files with 5909 additions and 451 deletions

305
check_workspace_ui.py Normal file
View File

@@ -0,0 +1,305 @@
#!/usr/bin/env python3
"""
Check workspace selections in LightRAG UI using Selenium.
"""
import os
import sys
import time
import subprocess
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
SERVER_URL = "http://localhost:3015"
USERNAME = "jleu3482"
PASSWORD = "jleu1212"
def start_server():
"""Start LightRAG server"""
print("Starting server...")
# Kill any existing server
try:
subprocess.run(["taskkill", "/F", "/IM", "python.exe"], capture_output=True)
except:
pass
# Start server
cmd = [sys.executable, "start_server_fixed.py"]
process = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
encoding='utf-8'
)
# Wait for server to start
for i in range(30):
try:
requests.get(f"{SERVER_URL}/health", timeout=2)
print(f"Server started (attempt {i+1})")
return process
except:
time.sleep(1)
print("Server failed to start")
if process:
process.terminate()
return None
def check_workspace_ui():
"""Check workspace selections in UI using Selenium"""
print("Setting up Selenium...")
# Setup Chrome options
options = webdriver.ChromeOptions()
options.add_argument('--headless') # Run in headless mode
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
try:
driver = webdriver.Chrome(options=options)
except Exception as e:
print(f"Chrome WebDriver failed: {e}")
# Try Firefox
try:
options = webdriver.FirefoxOptions()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)
except Exception as e2:
print(f"Firefox WebDriver failed: {e2}")
return False, "Could not start WebDriver"
try:
# Go to web UI
print("Navigating to web UI...")
driver.get(f"{SERVER_URL}/webui")
time.sleep(3)
# Take screenshot of initial page
driver.save_screenshot("workspace_ui_initial.png")
print("Screenshot saved: workspace_ui_initial.png")
# Get page source for analysis
page_source = driver.page_source
with open("workspace_ui_page.html", "w", encoding="utf-8") as f:
f.write(page_source)
print("Page source saved: workspace_ui_page.html")
# Look for workspace-related elements
print("\nSearching for workspace UI elements...")
# Check for workspace dropdown/selector
workspace_selectors = [
"workspace", "Workspace", "workspace-select", "workspace-selector",
"select-workspace", "workspace-dropdown", "dropdown-workspace"
]
found_elements = []
# Search by various methods
for selector in workspace_selectors:
# By ID
try:
elements = driver.find_elements(By.ID, selector)
if elements:
found_elements.append(f"ID: {selector} - Found {len(elements)} elements")
except:
pass
# By class name
try:
elements = driver.find_elements(By.CLASS_NAME, selector)
if elements:
found_elements.append(f"Class: {selector} - Found {len(elements)} elements")
except:
pass
# By CSS selector
try:
elements = driver.find_elements(By.CSS_SELECTOR, f'[class*="{selector}"]')
if elements:
found_elements.append(f"CSS class*={selector} - Found {len(elements)} elements")
except:
pass
# By XPath containing text
try:
elements = driver.find_elements(By.XPATH, f'//*[contains(text(), "{selector}")]')
if elements:
for elem in elements:
text = elem.text[:50] if elem.text else "no text"
found_elements.append(f"Text contains '{selector}': {text}")
except:
pass
# Also check for common UI patterns
common_patterns = [
("dropdown", "//select", "Select dropdown"),
("button with workspace", "//button[contains(text(), 'Workspace')]", "Workspace button"),
("menu item", "//*[contains(@class, 'menu')]//*[contains(text(), 'Workspace')]", "Workspace menu"),
("tab", "//*[contains(@class, 'tab')]//*[contains(text(), 'Workspace')]", "Workspace tab"),
]
for pattern_name, xpath, description in common_patterns:
try:
elements = driver.find_elements(By.XPATH, xpath)
if elements:
found_elements.append(f"{description}: Found {len(elements)} elements")
except:
pass
# Check API for workspaces
print("\nChecking workspace API...")
try:
response = requests.get(f"{SERVER_URL}/api/workspaces", timeout=10)
if response.status_code == 200:
workspaces = response.json()
print(f"API returned {len(workspaces)} workspaces: {workspaces}")
# If workspaces exist but UI doesn't show them, there might be a UI issue
if workspaces and len(workspaces) > 0 and not found_elements:
print("WARNING: Workspaces exist in API but not visible in UI")
else:
print(f"Workspace API returned {response.status_code}")
except Exception as e:
print(f"Error checking workspace API: {e}")
# Also check the workspace manager endpoint
try:
response = requests.get(f"{SERVER_URL}/api/workspace-manager", timeout=10)
print(f"Workspace manager endpoint: {response.status_code}")
except:
print("Workspace manager endpoint not accessible")
# Print findings
print("\n" + "="*60)
print("WORKSPACE UI CHECK RESULTS")
print("="*60)
if found_elements:
print("Found workspace-related UI elements:")
for elem in found_elements:
print(f" - {elem}")
# Take screenshot of found elements
for i, elem_desc in enumerate(found_elements[:5]): # Limit to first 5
try:
# Extract selector type and try to highlight
if "ID:" in elem_desc:
selector = elem_desc.split("ID: ")[1].split(" -")[0]
elements = driver.find_elements(By.ID, selector)
elif "Class:" in elem_desc:
selector = elem_desc.split("Class: ")[1].split(" -")[0]
elements = driver.find_elements(By.CLASS_NAME, selector)
if elements and len(elements) > 0:
# Highlight element with JavaScript
driver.execute_script("arguments[0].style.border='3px solid red'", elements[0])
time.sleep(0.5)
except:
pass
driver.save_screenshot("workspace_ui_highlighted.png")
print("\nHighlighted screenshot saved: workspace_ui_highlighted.png")
result = True
message = f"Found {len(found_elements)} workspace UI elements"
else:
print("NO workspace UI elements found!")
print("\nPossible issues:")
print("1. Workspace feature might be disabled in configuration")
print("2. UI might need recompilation/rebuild")
print("3. Workspace elements might have different CSS classes/IDs")
print("4. JavaScript might not be loading properly")
# Check if JavaScript is working
js_check = driver.execute_script("return typeof window !== 'undefined'")
print(f"\nJavaScript loaded: {js_check}")
# Check console errors
logs = driver.get_log('browser')
if logs:
print(f"\nBrowser console errors ({len(logs)}):")
for log in logs[:10]: # Show first 10
print(f" {log.get('level', 'UNKNOWN')}: {log.get('message', '')[:200]}")
result = False
message = "No workspace UI elements found"
# Check page title and structure
print(f"\nPage title: {driver.title}")
print(f"Current URL: {driver.current_url}")
# Look for any React/Vue/Angular indicators
body_html = driver.find_element(By.TAG_NAME, "body").get_attribute("innerHTML")
if "react" in body_html.lower():
print("React detected in page")
if "vue" in body_html.lower():
print("Vue detected in page")
if "angular" in body_html.lower():
print("Angular detected in page")
driver.quit()
return result, message
except Exception as e:
print(f"Error during Selenium test: {e}")
import traceback
traceback.print_exc()
try:
driver.quit()
except:
pass
return False, f"Selenium error: {str(e)}"
def main():
"""Main function"""
print("="*60)
print("LightRAG Workspace UI Check")
print("="*60)
# Start server
server_process = start_server()
if not server_process:
print("Failed to start server")
return False
time.sleep(3) # Give server time to initialize
# Check workspace UI
success, message = check_workspace_ui()
# Cleanup
print("\nCleaning up...")
if server_process:
server_process.terminate()
try:
server_process.wait(timeout=5)
except:
pass
print("\n" + "="*60)
print("SUMMARY")
print("="*60)
print(f"Result: {'SUCCESS' if success else 'FAILURE'}")
print(f"Message: {message}")
if not success:
print("\nRECOMMENDED ACTIONS:")
print("1. Check if workspace feature is enabled in server configuration")
print("2. Verify the web UI has been built with workspace support")
print("3. Check browser console for JavaScript errors")
print("4. Inspect the saved HTML file: workspace_ui_page.html")
print("5. Check screenshots: workspace_ui_initial.png, workspace_ui_highlighted.png")
return success
if __name__ == "__main__":
result = main()
sys.exit(0 if result else 1)