Spaces:
Running
Running
| """ | |
| System utilities for Lily LLM API | |
| """ | |
| import os | |
| import torch | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| def configure_cpu_threads(): | |
| """CPU μ€λ λ νκ²½ μ΅μ ν (vCPU μμ λ§κ² μ‘°μ ).""" | |
| print(f"π [DEBUG] configure_cpu_threads μμ") | |
| try: | |
| # κΈ°λ³Έκ°: νκ²½λ³μ λλ μμ€ν CPU μλ₯Ό μ¬μ©νλ κ³Όλν μ€λ λ λ°©μ§ | |
| env_threads = os.getenv("CPU_THREADS") | |
| if env_threads is not None: | |
| threads = max(1, int(env_threads)) | |
| else: | |
| detected = os.cpu_count() or 2 | |
| # 컨ν μ΄λ/μλ²μ vCPU μλ₯Ό κ·Έλλ‘ μ¬μ©νλ μν 16 μ μ© | |
| threads = max(1, min(detected, 16)) | |
| # OpenMP/MKL/numexpr | |
| os.environ["OMP_NUM_THREADS"] = str(threads) | |
| os.environ["MKL_NUM_THREADS"] = str(threads) | |
| os.environ.setdefault("NUMEXPR_NUM_THREADS", str(threads)) | |
| os.environ.setdefault("TOKENIZERS_PARALLELISM", "false") | |
| # PyTorch λ΄λΆ μ€λ λ μ€μ | |
| try: | |
| torch.set_num_threads(threads) | |
| except Exception: | |
| pass | |
| try: | |
| # μ°μ° κ° μ€λ λ νμ 1~2 κΆμ₯(컨ν μ€νΈ μ€μμΉ λΉμ© μ κ°) | |
| torch.set_num_interop_threads(1 if threads <= 4 else 2) | |
| except Exception: | |
| pass | |
| logger.info(f"π§΅ CPU thread config -> OMP/MKL/numexpr={threads}, torch_threads={threads}") | |
| except Exception as e: | |
| logger.warning(f"β οΈ CPU μ€λ λ μ€μ μ€ν¨: {e}") | |
| print(f"π [DEBUG] configure_cpu_threads μ’ λ£") | |
| def select_model_interactive(): | |
| """μΈν°λν°λΈ λͺ¨λΈ μ ν""" | |
| from ..models import list_available_models | |
| available_models = list_available_models() | |
| print("\n" + "="*60 + "\nπ€ Lily LLM API v2 - λͺ¨λΈ μ ν\n" + "="*60) | |
| for i, model_info in enumerate(available_models, 1): | |
| print(f"{i:2d}. {model_info['name']} ({model_info['model_id']})") | |
| while True: | |
| try: | |
| # choice = input(f"\nπ μ¬μ©ν λͺ¨λΈ λ²νΈλ₯Ό μ ννμΈμ (1-{len(available_models)}): ") | |
| # selected_model = available_models[int(choice) - 1] | |
| selected_model = available_models[1] | |
| print(f"\nβ '{selected_model['name']}' λͺ¨λΈμ μ ννμ΅λλ€.") | |
| return selected_model['model_id'] | |
| except (ValueError, IndexError): | |
| print(f"β 1μμ {len(available_models)} μ¬μ΄μ μ«μλ₯Ό μ λ ₯ν΄μ£ΌμΈμ.") | |
| except KeyboardInterrupt: | |
| import sys | |
| sys.exit("\n\nπ νλ‘κ·Έλ¨μ μ’ λ£ν©λλ€.") | |