q_table_demo/app/core/config.py

63 lines
2.1 KiB
Python

"""
애플리케이션 설정 관리
"""
import os
from typing import List
from pydantic import BaseSettings
from dotenv import load_dotenv
# .env 파일 로드
load_dotenv()
class Settings(BaseSettings):
"""애플리케이션 설정"""
# API 서버 설정
api_host: str = "localhost"
api_port: int = 8000
# 프론트엔드 설정
frontend_host: str = "localhost"
frontend_port: int = 8501
# 강화학습 하이퍼파라미터
default_learning_rate: float = 0.1
default_discount_factor: float = 0.9
default_epsilon: float = 0.1
# 협상 환경 설정
default_anchor_price: int = 100
max_episodes: int = 1000
max_steps_per_episode: int = 10
# 로깅 설정
log_level: str = "INFO"
log_file: str = "app.log"
# CORS 설정
allowed_origins: List[str] = ["http://localhost:8501", "http://127.0.0.1:8501"]
def __init__(self, **kwargs):
super().__init__(**kwargs)
# 환경 변수로부터 값 로드
self.api_host = os.getenv("API_HOST", self.api_host)
self.api_port = int(os.getenv("API_PORT", str(self.api_port)))
self.frontend_host = os.getenv("FRONTEND_HOST", self.frontend_host)
self.frontend_port = int(os.getenv("FRONTEND_PORT", str(self.frontend_port)))
self.default_learning_rate = float(os.getenv("DEFAULT_LEARNING_RATE", str(self.default_learning_rate)))
self.default_discount_factor = float(os.getenv("DEFAULT_DISCOUNT_FACTOR", str(self.default_discount_factor)))
self.default_epsilon = float(os.getenv("DEFAULT_EPSILON", str(self.default_epsilon)))
self.default_anchor_price = int(os.getenv("DEFAULT_ANCHOR_PRICE", str(self.default_anchor_price)))
self.max_episodes = int(os.getenv("MAX_EPISODES", str(self.max_episodes)))
self.max_steps_per_episode = int(os.getenv("MAX_STEPS_PER_EPISODE", str(self.max_steps_per_episode)))
self.log_level = os.getenv("LOG_LEVEL", self.log_level)
self.log_file = os.getenv("LOG_FILE", self.log_file)
class Config:
env_file = ".env"
# 전역 설정 인스턴스
settings = Settings()