lily_fast_api / app_huggingface.py
gbrabbit's picture
Auto commit at 09-2025-08 1:55:36
34d0a60
raw
history blame
3.14 kB
#!/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": "1",
"MKL_NUM_THREADS": "1"
}
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)