Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Debug test script for Smart Auto-Complete | |
| Tests context integration and other functionality | |
| """ | |
| import sys | |
| import os | |
| # Add current directory to Python path | |
| script_dir = os.path.dirname(os.path.abspath(__file__)) | |
| sys.path.insert(0, script_dir) | |
| def test_context_integration(): | |
| """Test that user context is properly integrated""" | |
| print("π§ͺ Testing Context Integration...") | |
| try: | |
| from src.autocomplete import SmartAutoComplete | |
| from config.settings import AppSettings | |
| # Create mock settings | |
| class MockSettings: | |
| def __init__(self): | |
| self.OPENAI_API_KEY = "test-key" | |
| self.ANTHROPIC_API_KEY = "" | |
| self.DEFAULT_PROVIDER = "openai" | |
| self.CACHE_TTL = 3600 | |
| self.CACHE_MAX_SIZE = 100 | |
| # Create mock API client that returns the prompt for inspection | |
| class MockAPIClient: | |
| def __init__(self, settings=None): | |
| self.last_messages = None | |
| def get_completion(self, messages, temperature=0.7, max_tokens=150, provider=None): | |
| self.last_messages = messages | |
| return "Mock completion response" | |
| # Create mock cache | |
| class MockCacheManager: | |
| def __init__(self, settings=None): | |
| pass | |
| def get(self, key): | |
| return None | |
| def set(self, key, value): | |
| pass | |
| # Test setup | |
| settings = MockSettings() | |
| autocomplete = SmartAutoComplete(settings) | |
| autocomplete.api_client = MockAPIClient(settings) | |
| autocomplete.cache_manager = MockCacheManager(settings) | |
| # Test without context | |
| print("π Testing without user context...") | |
| suggestions = autocomplete.get_suggestions( | |
| text="Dear Mr. Johnson,", | |
| context="email", | |
| max_tokens=150, | |
| user_context="" | |
| ) | |
| messages_without_context = autocomplete.api_client.last_messages | |
| print(f"β System prompt (no context): {messages_without_context[0]['content'][:100]}...") | |
| print(f"β User message (no context): {messages_without_context[1]['content']}") | |
| # Test with context | |
| print("\nπ Testing with user context...") | |
| user_context = "Meeting scheduled for next Tuesday to discuss quarterly budget review" | |
| suggestions = autocomplete.get_suggestions( | |
| text="Dear Mr. Johnson,", | |
| context="email", | |
| max_tokens=150, | |
| user_context=user_context | |
| ) | |
| messages_with_context = autocomplete.api_client.last_messages | |
| print(f"β System prompt (with context): {messages_with_context[0]['content'][:150]}...") | |
| print(f"β User message (with context): {messages_with_context[1]['content']}") | |
| # Verify context is included | |
| system_prompt = messages_with_context[0]['content'] | |
| user_message = messages_with_context[1]['content'] | |
| context_in_system = user_context in system_prompt | |
| context_in_user = user_context in user_message | |
| print(f"\nπ Context Analysis:") | |
| print(f" Context in system prompt: {context_in_system}") | |
| print(f" Context in user message: {context_in_user}") | |
| print(f" Context properly integrated: {context_in_system or context_in_user}") | |
| if context_in_system or context_in_user: | |
| print("β Context integration working correctly!") | |
| return True | |
| else: | |
| print("β Context integration failed!") | |
| return False | |
| except Exception as e: | |
| print(f"β Context integration test failed: {str(e)}") | |
| import traceback | |
| traceback.print_exc() | |
| return False | |
| def test_copy_html_generation(): | |
| """Test HTML generation for copy functionality""" | |
| print("\nπ§ͺ Testing Copy HTML Generation...") | |
| try: | |
| # Mock suggestion | |
| suggestions = ["This is a test suggestion that should be copyable."] | |
| # Generate HTML (simplified version of the app logic) | |
| html_suggestions = "<div style='space-y: 10px;'>" | |
| for i, suggestion in enumerate(suggestions, 1): | |
| suggestion_id = f"suggestion-{i}" | |
| html_suggestions += f""" | |
| <div style='background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
| border-radius: 10px; padding: 15px; margin: 10px 0; color: white;'> | |
| <div style='margin-bottom: 10px;'> | |
| <strong>π‘ Suggestion {i}:</strong> | |
| </div> | |
| <div id='{suggestion_id}' style='background: rgba(255,255,255,0.1); padding: 10px; border-radius: 5px; | |
| margin: 10px 0; font-style: italic; line-height: 1.4; user-select: text;'> | |
| {suggestion} | |
| </div> | |
| <div style='margin-top: 10px;'> | |
| <button onclick=' | |
| const text = document.getElementById("{suggestion_id}").innerText; | |
| navigator.clipboard.writeText(text).then(() => {{ | |
| this.innerHTML = "β Copied!"; | |
| this.style.backgroundColor = "#10b981"; | |
| setTimeout(() => {{ | |
| this.innerHTML = "π Copy to Clipboard"; | |
| this.style.backgroundColor = "rgba(255,255,255,0.2)"; | |
| }}, 2000); | |
| }}).catch(() => {{ | |
| alert("Failed to copy to clipboard"); | |
| }}); | |
| ' | |
| style='background: rgba(255,255,255,0.2); border: none; color: white; | |
| padding: 8px 16px; border-radius: 5px; cursor: pointer; | |
| font-size: 14px; transition: all 0.2s;'> | |
| π Copy to Clipboard | |
| </button> | |
| </div> | |
| </div> | |
| """ | |
| html_suggestions += "</div>" | |
| print("β HTML generation successful") | |
| print(f"π Generated HTML length: {len(html_suggestions)} characters") | |
| # Check for key elements | |
| has_suggestion_id = "suggestion-1" in html_suggestions | |
| has_onclick = "onclick=" in html_suggestions | |
| has_clipboard_api = "navigator.clipboard" in html_suggestions | |
| print(f"π HTML Analysis:") | |
| print(f" Has suggestion ID: {has_suggestion_id}") | |
| print(f" Has onclick handler: {has_onclick}") | |
| print(f" Uses clipboard API: {has_clipboard_api}") | |
| if has_suggestion_id and has_onclick and has_clipboard_api: | |
| print("β Copy HTML generation working correctly!") | |
| return True | |
| else: | |
| print("β Copy HTML generation has issues!") | |
| return False | |
| except Exception as e: | |
| print(f"β Copy HTML test failed: {str(e)}") | |
| return False | |
| def main(): | |
| """Main test function""" | |
| print("π Smart Auto-Complete Debug Tests") | |
| print("=" * 50) | |
| tests = [ | |
| ("Context Integration", test_context_integration), | |
| ("Copy HTML Generation", test_copy_html_generation), | |
| ] | |
| passed = 0 | |
| total = len(tests) | |
| for test_name, test_func in tests: | |
| print(f"\nπ Running: {test_name}") | |
| if test_func(): | |
| passed += 1 | |
| print("-" * 30) | |
| print(f"\n{'='*50}") | |
| print(f"Debug Test Results: {passed}/{total} tests passed") | |
| if passed == total: | |
| print("π All debug tests passed!") | |
| print("\nπ‘ If issues persist:") | |
| print("1. Check browser console for JavaScript errors") | |
| print("2. Ensure you're using HTTPS or localhost") | |
| print("3. Test the copy functionality with test_copy.html") | |
| print("4. Check that API keys are properly configured") | |
| else: | |
| print("β Some debug tests failed.") | |
| print("Please check the error messages above.") | |
| return 0 if passed == total else 1 | |
| if __name__ == "__main__": | |
| sys.exit(main()) | |