Spaces:
Paused
Paused
| # run_rag_tests.py - RAG ν μ€νΈ μ€ν μ€ν¬λ¦½νΈ (νκΉ νμ΄μ€ μ€νμ΄μ€ μ΅μ ν) | |
| """ | |
| RAG μμ€ν ν μ€νΈ λ° νλμ μν ν΅ν© μ€ν μ€ν¬λ¦½νΈ | |
| μ¬μ©λ²: | |
| python run_rag_tests.py # κΈ°λ³Έ ν μ€νΈ | |
| python run_rag_tests.py --rebuild # RAG μμ€ν μ¬κ΅¬μΆ ν ν μ€νΈ | |
| python run_rag_tests.py --tune # μ€μ νλ | |
| python run_rag_tests.py --benchmark # μ±λ₯ λ²€μΉλ§ν¬λ§ | |
| python run_rag_tests.py --quick # λΉ λ₯Έ ν μ€νΈ | |
| """ | |
| import os | |
| import sys | |
| import argparse | |
| import subprocess | |
| from datetime import datetime | |
| def print_banner(): | |
| """λ°°λ μΆλ ₯""" | |
| print("="*80) | |
| print("RAG μμ€ν ν μ€νΈ λ° νλ λꡬ") | |
| print("μ€ν μκ°:", datetime.now().strftime("%Y-%m-%d %H:%M:%S")) | |
| print("μμ λλ ν 리:", os.getcwd()) | |
| print("="*80) | |
| def check_dependencies(): | |
| """μ’ μμ± νμΈ""" | |
| print("μ’ μμ± νμΈ μ€...") | |
| required_files = [ | |
| 'rag_system.py', | |
| 'config.py', | |
| 'law_fetcher.py', | |
| 'test_rag.py', | |
| 'tune_rag_config.py' | |
| ] | |
| missing_files = [] | |
| for file in required_files: | |
| if not os.path.exists(file): | |
| missing_files.append(file) | |
| if missing_files: | |
| print(f"λλ½λ νμΌ: {', '.join(missing_files)}") | |
| return False | |
| print("λͺ¨λ νμ νμΌ νμΈ μλ£") | |
| return True | |
| def run_basic_tests(rebuild=False): | |
| """κΈ°λ³Έ ν μ€νΈ μ€ν""" | |
| print("\nπ§ͺ κΈ°λ³Έ RAG ν μ€νΈ μ€ν") | |
| print("-" * 40) | |
| cmd = [sys.executable, 'test_rag.py'] | |
| if rebuild: | |
| cmd.append('--rebuild') | |
| try: | |
| result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='replace') | |
| print("π€ ν μ€νΈ μΆλ ₯:") | |
| if result.stdout: | |
| print(result.stdout) | |
| if result.stderr: | |
| print("β οΈ κ²½κ³ /μ€λ₯:") | |
| print(result.stderr) | |
| if result.returncode == 0: | |
| print("β κΈ°λ³Έ ν μ€νΈ μ±κ³΅") | |
| return True | |
| else: | |
| print(f"β κΈ°λ³Έ ν μ€νΈ μ€ν¨ (exit code: {result.returncode})") | |
| return False | |
| except Exception as e: | |
| print(f"π₯ ν μ€νΈ μ€ν μ€λ₯: {e}") | |
| return False | |
| def run_config_tuning(): | |
| """μ€μ νλ μ€ν""" | |
| print("\nποΈ RAG μ€μ νλ μ€ν") | |
| print("-" * 40) | |
| # λ²‘ν° DB μ‘΄μ¬ νμΈ | |
| required_files = ['vector_db.faiss', 'documents.pkl', 'metadata.json'] | |
| missing_files = [f for f in required_files if not os.path.exists(f)] | |
| if missing_files: | |
| print(f"β λ²‘ν° DB νμΌ λλ½: {', '.join(missing_files)}") | |
| print("π λ¨Όμ RAG μμ€ν μ ꡬμΆν΄μ£ΌμΈμ:") | |
| print(" python run_rag_tests.py --rebuild") | |
| return False | |
| try: | |
| result = subprocess.run([sys.executable, 'tune_rag_config.py'], | |
| capture_output=True, text=True, encoding='utf-8', errors='replace') | |
| print("π€ νλ μΆλ ₯:") | |
| if result.stdout: | |
| print(result.stdout) | |
| if result.stderr: | |
| print("β οΈ κ²½κ³ /μ€λ₯:") | |
| print(result.stderr) | |
| if result.returncode == 0: | |
| print("β μ€μ νλ μ±κ³΅") | |
| # μ΅μ νλ μ€μ νμΌ νμΈ | |
| if os.path.exists('optimized_config.py'): | |
| print("π μ΅μ νλ μ€μ νμΌ μμ±: optimized_config.py") | |
| return True | |
| else: | |
| print(f"β μ€μ νλ μ€ν¨ (exit code: {result.returncode})") | |
| return False | |
| except Exception as e: | |
| print(f"π₯ νλ μ€ν μ€λ₯: {e}") | |
| return False | |
| def run_benchmark_only(): | |
| """λ²€μΉλ§ν¬λ§ μ€ν""" | |
| print("\nπ μ±λ₯ λ²€μΉλ§ν¬ μ€ν") | |
| print("-" * 40) | |
| try: | |
| # test_rag.pyμμ λ²€μΉλ§ν¬ λΆλΆλ§ μ€ννλλ‘ λ³λ μ€ν¬λ¦½νΈ μμ± | |
| benchmark_code = ''' | |
| import sys | |
| sys.path.append('.') | |
| from test_rag import RAGTester | |
| tester = RAGTester() | |
| if tester.initialize_rag(): | |
| tester.performance_benchmark(iterations=10) | |
| else: | |
| print("β RAG μμ€ν μ΄κΈ°ν μ€ν¨") | |
| ''' | |
| result = subprocess.run([sys.executable, '-c', benchmark_code], | |
| capture_output=True, text=True, encoding='utf-8', errors='replace') | |
| print("π€ λ²€μΉλ§ν¬ κ²°κ³Ό:") | |
| if result.stdout: | |
| print(result.stdout) | |
| if result.stderr: | |
| print("β οΈ κ²½κ³ /μ€λ₯:") | |
| print(result.stderr) | |
| return result.returncode == 0 | |
| except Exception as e: | |
| print(f"π₯ λ²€μΉλ§ν¬ μ€ν μ€λ₯: {e}") | |
| return False | |
| def run_quick_test(): | |
| """λΉ λ₯Έ ν μ€νΈ μ€ν""" | |
| print("\nβ‘ λΉ λ₯Έ RAG ν μ€νΈ μ€ν") | |
| print("-" * 40) | |
| try: | |
| quick_test_code = ''' | |
| import sys | |
| sys.path.append('.') | |
| from test_rag import RAGTester | |
| tester = RAGTester() | |
| if tester.initialize_rag(): | |
| # 3κ° μΏΌλ¦¬λ§ ν μ€νΈ | |
| tester.test_queries = tester.test_queries[:3] | |
| success = tester.run_basic_tests() | |
| print(f"\\nλΉ λ₯Έ ν μ€νΈ κ²°κ³Ό: {'μ±κ³΅' if success else 'μ€ν¨'}") | |
| else: | |
| print("β RAG μμ€ν μ΄κΈ°ν μ€ν¨") | |
| ''' | |
| result = subprocess.run([sys.executable, '-c', quick_test_code], | |
| capture_output=True, text=True, encoding='utf-8') | |
| print("π€ λΉ λ₯Έ ν μ€νΈ κ²°κ³Ό:") | |
| print(result.stdout) | |
| if result.stderr: | |
| print("β οΈ κ²½κ³ /μ€λ₯:") | |
| print(result.stderr) | |
| return result.returncode == 0 | |
| except Exception as e: | |
| print(f"π₯ λΉ λ₯Έ ν μ€νΈ μ€ν μ€λ₯: {e}") | |
| return False | |
| def show_system_info(): | |
| """μμ€ν μ 보 νμ""" | |
| print("\nπ» μμ€ν μ 보") | |
| print("-" * 40) | |
| print(f"π Python λ²μ : {sys.version}") | |
| print(f"π νμ¬ λλ ν 리: {os.getcwd()}") | |
| # λ²‘ν° DB μν νμΈ | |
| vector_files = ['vector_db.faiss', 'documents.pkl', 'metadata.json'] | |
| vector_status = [] | |
| for file in vector_files: | |
| if os.path.exists(file): | |
| size = os.path.getsize(file) / 1024 # KB | |
| vector_status.append(f"β {file} ({size:.1f}KB)") | |
| else: | |
| vector_status.append(f"β {file} (μμ)") | |
| print("π λ²‘ν° DB μν:") | |
| for status in vector_status: | |
| print(f" {status}") | |
| # μΊμ μν νμΈ | |
| cache_dir = './law_cache' | |
| if os.path.exists(cache_dir): | |
| cache_files = len([f for f in os.listdir(cache_dir) if f.endswith('.json')]) | |
| print(f"πΎ λ²λ Ή μΊμ: {cache_files}κ° νμΌ") | |
| else: | |
| print("πΎ λ²λ Ή μΊμ: μμ") | |
| def main(): | |
| """λ©μΈ ν¨μ""" | |
| parser = argparse.ArgumentParser(description='RAG μμ€ν ν μ€νΈ λ° νλ λꡬ') | |
| parser.add_argument('--rebuild', action='store_true', help='RAG μμ€ν μ¬κ΅¬μΆ') | |
| parser.add_argument('--tune', action='store_true', help='μ€μ νλ μ€ν') | |
| parser.add_argument('--benchmark', action='store_true', help='μ±λ₯ λ²€μΉλ§ν¬λ§ μ€ν') | |
| parser.add_argument('--quick', action='store_true', help='λΉ λ₯Έ ν μ€νΈ μ€ν') | |
| parser.add_argument('--info', action='store_true', help='μμ€ν μ λ³΄λ§ νμ') | |
| args = parser.parse_args() | |
| print_banner() | |
| # μμ€ν μ λ³΄λ§ νμνκ³ μ’ λ£ | |
| if args.info: | |
| show_system_info() | |
| return | |
| # μ’ μμ± νμΈ | |
| if not check_dependencies(): | |
| print("β μ’ μμ± νμΈ μ€ν¨") | |
| sys.exit(1) | |
| show_system_info() | |
| # μ€νν μμ κ²°μ | |
| tasks = [] | |
| if args.quick: | |
| tasks.append(('λΉ λ₯Έ ν μ€νΈ', run_quick_test)) | |
| elif args.benchmark: | |
| tasks.append(('λ²€μΉλ§ν¬', run_benchmark_only)) | |
| elif args.tune: | |
| tasks.append(('μ€μ νλ', run_config_tuning)) | |
| else: | |
| # κΈ°λ³Έ ν μ€νΈ | |
| tasks.append(('κΈ°λ³Έ ν μ€νΈ', lambda: run_basic_tests(args.rebuild))) | |
| # νλλ ν¨κ» μ€ν (λ²‘ν° DBκ° μλ κ²½μ°) | |
| if all(os.path.exists(f) for f in ['vector_db.faiss', 'documents.pkl', 'metadata.json']): | |
| print("\nπ λ²‘ν° DBκ° μ‘΄μ¬νλ―λ‘ μ€μ νλλ μ€νν©λλ€.") | |
| tasks.append(('μ€μ νλ', run_config_tuning)) | |
| # μμ μ€ν | |
| success_count = 0 | |
| for task_name, task_func in tasks: | |
| print(f"\nπ {task_name} μμ...") | |
| try: | |
| if task_func(): | |
| success_count += 1 | |
| print(f"β {task_name} μλ£") | |
| else: | |
| print(f"β {task_name} μ€ν¨") | |
| except KeyboardInterrupt: | |
| print(f"\nπ μ¬μ©μμ μν΄ {task_name}μ΄ μ€λ¨λμμ΅λλ€.") | |
| break | |
| except Exception as e: | |
| print(f"π₯ {task_name} μ€ μ€λ₯: {e}") | |
| # κ²°κ³Ό μμ½ | |
| print("\n" + "="*80) | |
| print("π μ€ν κ²°κ³Ό μμ½") | |
| print("="*80) | |
| print(f"β μ±κ³΅ν μμ : {success_count}/{len(tasks)}") | |
| if success_count == len(tasks): | |
| print("π λͺ¨λ μμ μ΄ μ±κ³΅μ μΌλ‘ μλ£λμμ΅λλ€!") | |
| # μμ±λ νμΌλ€ μλ΄ | |
| result_files = [] | |
| for pattern in ['test_results_*.json', 'rag_tuning_results_*.json', 'optimized_config.py']: | |
| import glob | |
| result_files.extend(glob.glob(pattern)) | |
| if result_files: | |
| print(f"π μμ±λ κ²°κ³Ό νμΌ: {', '.join(result_files)}") | |
| sys.exit(0) | |
| else: | |
| print("β οΈ μΌλΆ μμ μμ λ¬Έμ κ° λ°μνμ΅λλ€.") | |
| sys.exit(1) | |
| if __name__ == "__main__": | |
| main() |