File size: 5,103 Bytes
4b63357
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/env python3
"""
Setup script for Inclusive World Curriculum Assistant
"""

import os
import sys
import subprocess
import platform
from pathlib import Path

def check_python_version():
    """Check if Python version is compatible"""
    if sys.version_info < (3, 8):
        print("❌ Error: Python 3.8 or higher is required")
        print(f"Current version: {sys.version}")
        return False
    print(f"βœ… Python version: {sys.version}")
    return True

def check_system_requirements():
    """Check system requirements"""
    print("\nπŸ” Checking system requirements...")
    
    # Check available memory (rough estimate)
    try:
        import psutil
        memory_gb = psutil.virtual_memory().total / (1024**3)
        print(f"πŸ“Š Available RAM: {memory_gb:.1f} GB")
        if memory_gb < 8:
            print("⚠️  Warning: Less than 8GB RAM detected. Model loading may be slow.")
        else:
            print("βœ… Sufficient RAM detected")
    except ImportError:
        print("⚠️  psutil not available - cannot check RAM")
    
    # Check disk space
    try:
        disk_usage = psutil.disk_usage('.')
        free_gb = disk_usage.free / (1024**3)
        print(f"πŸ’Ύ Available disk space: {free_gb:.1f} GB")
        if free_gb < 5:
            print("⚠️  Warning: Less than 5GB free space. Consider freeing up space.")
        else:
            print("βœ… Sufficient disk space")
    except:
        print("⚠️  Could not check disk space")

def install_dependencies():
    """Install required dependencies"""
    print("\nπŸ“¦ Installing dependencies...")
    
    try:
        # Upgrade pip first
        subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "pip"])
        
        # Install requirements
        subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
        print("βœ… Dependencies installed successfully")
        return True
    except subprocess.CalledProcessError as e:
        print(f"❌ Error installing dependencies: {e}")
        return False

def create_directories():
    """Create necessary directories"""
    print("\nπŸ“ Creating directories...")
    
    directories = ["Slides", "chroma_db"]
    for directory in directories:
        Path(directory).mkdir(exist_ok=True)
        print(f"βœ… Created directory: {directory}")

def check_curriculum_files():
    """Check if curriculum files exist"""
    print("\nπŸ“š Checking curriculum files...")
    
    slides_dir = Path("Slides")
    if not slides_dir.exists():
        print("⚠️  Slides directory not found. Creating...")
        slides_dir.mkdir(exist_ok=True)
    
    pdf_files = list(slides_dir.glob("*.pdf"))
    if pdf_files:
        print(f"βœ… Found {len(pdf_files)} curriculum PDF files:")
        for pdf in pdf_files:
            print(f"   πŸ“„ {pdf.name}")
    else:
        print("⚠️  No PDF files found in Slides directory")
        print("   Please add your curriculum PDF files to the Slides/ directory")

def create_sample_config():
    """Create a sample configuration if needed"""
    print("\nβš™οΈ  Checking configuration...")
    
    if not Path("config.py").exists():
        print("❌ config.py not found. Please ensure it exists.")
        return False
    
    print("βœ… Configuration file found")
    return True

def test_imports():
    """Test if key modules can be imported"""
    print("\nπŸ§ͺ Testing imports...")
    
    required_modules = [
        "streamlit",
        "langchain",
        "chromadb", 
        "transformers",
        "torch",
        "fitz"
    ]
    
    failed_imports = []
    for module in required_modules:
        try:
            __import__(module)
            print(f"βœ… {module}")
        except ImportError:
            print(f"❌ {module}")
            failed_imports.append(module)
    
    if failed_imports:
        print(f"\n❌ Failed to import: {', '.join(failed_imports)}")
        return False
    
    print("βœ… All required modules imported successfully")
    return True

def main():
    """Main setup function"""
    print("πŸŽ“ Inclusive World Curriculum Assistant Setup")
    print("=" * 50)
    
    # Check Python version
    if not check_python_version():
        sys.exit(1)
    
    # Check system requirements
    check_system_requirements()
    
    # Create directories
    create_directories()
    
    # Check curriculum files
    check_curriculum_files()
    
    # Check configuration
    if not create_sample_config():
        sys.exit(1)
    
    # Install dependencies
    if not install_dependencies():
        print("\n❌ Setup failed. Please check the error messages above.")
        sys.exit(1)
    
    # Test imports
    if not test_imports():
        print("\n❌ Some modules failed to import. Please reinstall dependencies.")
        sys.exit(1)
    
    print("\nπŸŽ‰ Setup completed successfully!")
    print("\nπŸš€ To start the application:")
    print("   streamlit run app.py")
    print("\nπŸ“– For more information, see README.md")

if __name__ == "__main__":
    main()