File size: 3,203 Bytes
31a1da0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b386020
 
 
 
31a1da0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""
Hugging Face Spaces용 Lily LLM API μ„œλ²„ μ§„μž…μ 
"""

import os
import sys
import logging
import asyncio
import uvicorn
from pathlib import Path

# ν”„λ‘œμ νŠΈ 루트λ₯Ό Python path에 μΆ”κ°€
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

# ν™˜κ²½ λ³€μˆ˜ μ„€μ •
os.environ.setdefault("PYTHONPATH", str(project_root))
os.environ.setdefault("HOST", "0.0.0.0")
os.environ.setdefault("PORT", "7860")

# λ‘œκΉ… μ„€μ •
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

def setup_huggingface_environment():
    """Hugging Face Spaces ν™˜κ²½ μ„€μ •"""
    
    # ν•„μš”ν•œ 디렉토리 생성
    directories = [
        "data", "logs", "models", "uploads", 
        "vector_stores", "temp", "cache",
        "cache/transformers", "cache/huggingface", 
        "cache/easyocr", "cache/ocr_models"
    ]
    
    for dir_name in directories:
        dir_path = project_root / dir_name
        dir_path.mkdir(exist_ok=True, parents=True)
        logger.info(f"πŸ“ 디렉토리 생성: {dir_path}")
    
    # ν™˜κ²½ λ³€μˆ˜ μ„€μ •
    env_vars = {
        "TRANSFORMERS_CACHE": str(project_root / "cache" / "transformers"),
        "HF_HOME": str(project_root / "cache" / "huggingface"),
        "TORCH_HOME": str(project_root / "cache" / "torch"),
        "EASYOCR_MODULE_PATH": str(project_root / "cache" / "easyocr"),
        "OCR_MODELS_PATH": str(project_root / "cache" / "ocr_models"),
        "TOKENIZERS_PARALLELISM": "false",
        "OMP_NUM_THREADS": "2",
        "MKL_NUM_THREADS": "2",
        "NUMEXPR_NUM_THREADS": "2",
        "CPU_THREADS": "2",
    }
    
    for key, value in env_vars.items():
        os.environ[key] = value
        logger.info(f"πŸ”§ ν™˜κ²½λ³€μˆ˜ μ„€μ •: {key}={value}")

async def main():
    """메인 μ‹€ν–‰ ν•¨μˆ˜"""
    
    logger.info("πŸš€ Hugging Face Spaces용 Lily LLM API μ„œλ²„ μ‹œμž‘")
    
    # ν™˜κ²½ μ„€μ •
    setup_huggingface_environment()
    
    try:
        # FastAPI μ•± import
        from lily_llm_api.app_v2 import app
        
        # μ„œλ²„ μ„€μ •
        host = os.getenv("HOST", "0.0.0.0")
        port = int(os.getenv("PORT", "7860"))
        
        logger.info(f"🌐 μ„œλ²„ μ‹œμž‘: {host}:{port}")
        
        # Uvicorn μ„œλ²„ μ‹€ν–‰
        config = uvicorn.Config(
            app=app,
            host=host,
            port=port,
            log_level="info",
            access_log=True,
            loop="asyncio"
        )
        
        server = uvicorn.Server(config)
        await server.serve()
        
    except Exception as e:
        logger.error(f"❌ μ„œλ²„ μ‹œμž‘ 였λ₯˜: {e}")
        import traceback
        logger.error(f"πŸ” 상세 였λ₯˜:\n{traceback.format_exc()}")
        sys.exit(1)

if __name__ == "__main__":
    # Python 3.7+ ν˜Έν™˜μ„±μ„ μœ„ν•œ asyncio μ‹€ν–‰
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        logger.info("πŸ‘‹ μ„œλ²„ μ’…λ£Œ")
    except Exception as e:
        logger.error(f"❌ μ‹€ν–‰ 였λ₯˜: {e}")
        sys.exit(1)
        logger.error(f"❌ μ‹€ν–‰ 였λ₯˜: {e}")
        sys.exit(1)