File size: 3,241 Bytes
36e49b4
dda982a
 
 
fed6d4a
a773878
dda982a
a773878
dda982a
a773878
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dbdd7c8
 
a773878
dbdd7c8
a773878
 
c0c51c2
 
 
 
 
 
 
575f1c7
 
 
 
21c909d
575f1c7
 
 
 
 
 
 
 
 
21c909d
575f1c7
21c909d
 
575f1c7
 
 
dda982a
a773878
dda982a
 
 
 
a773878
dda982a
 
 
a773878
dda982a
 
 
a773878
dda982a
 
 
 
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
import spaces  # Must be imported before any CUDA initialization
import sys
import os
from pathlib import Path

# Get the current directory and setup Python path
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(current_dir)

# Import environment manager after setting up path
try:
    from src.core.environment import environment_manager
    
    # Perform complete environment setup
    print("Setting up environment...")
    setup_results = environment_manager.full_environment_setup()
    
    # Report setup status
    print(f"Environment setup completed with results: {len([k for k, v in setup_results.items() if v])} successful, {len([k for k, v in setup_results.items() if not v])} failed")
    
except ImportError as e:
    print(f"Warning: Could not import environment manager: {e}")
    print("Falling back to basic setup...")
    
    # Fallback to basic setup if environment manager fails
    import subprocess
    
    # Basic dependency checks
    try:
        import torch
        print(f"PyTorch version: {torch.__version__}")
    except ImportError:
        print("Installing PyTorch...")
        subprocess.run([sys.executable, "-m", "pip", "install", "-q", "torch", "torchvision"], check=False)
    
    try:
        from markitdown import MarkItDown
        print("MarkItDown is available")
    except ImportError:
        print("Installing MarkItDown...")
        subprocess.run([sys.executable, "-m", "pip", "install", "-q", "markitdown[all]"], check=False)
    
    try:
        import docling
        print("Docling is available")
    except ImportError:
        print("Installing Docling...")
        subprocess.run([sys.executable, "-m", "pip", "install", "-q", "docling"], check=False)
    
    # Check RAG dependencies as fallback
    try:
        from langchain_openai import OpenAIEmbeddings
        from langchain_community.retrievers import BM25Retriever
        print("RAG dependencies are available")
    except ImportError:
        print("Installing RAG dependencies...")
        rag_packages = [
            "langchain>=0.3.0",
            "langchain-openai>=0.2.0", 
            "langchain-google-genai>=2.0.0",
            "langchain-chroma>=0.1.0",
            "langchain-text-splitters>=0.3.0",
            "langchain-community>=0.3.0",  # For BM25Retriever and EnsembleRetriever
            "chromadb>=0.5.0",
            "sentence-transformers>=3.0.0",
            "rank-bm25>=0.2.0"  # Required for BM25Retriever
        ]
        for package in rag_packages:
            subprocess.run([sys.executable, "-m", "pip", "install", "-q", package], check=False)

# Import main function with fallback strategies (HF Spaces compatibility)
try:
    from src.main import main
except ModuleNotFoundError:
    try:
        # Fallback: adjust path and try again
        sys.path.append(os.path.join(current_dir, "src"))
        from src.main import main
    except ModuleNotFoundError:
        # Last resort: create __init__.py if missing
        init_path = os.path.join(current_dir, "src", "__init__.py")
        if not os.path.exists(init_path):
            with open(init_path, "w") as f:
                pass
        from src.main import main

if __name__ == "__main__":
    main()