| """ |
| 应用配置管理 |
| """ |
| from pathlib import Path |
| from typing import Optional |
| from pydantic_settings import BaseSettings |
| from pydantic import Field, model_validator |
|
|
|
|
| |
| _BASE_DIR = Path(__file__).resolve().parent.parent.parent |
|
|
|
|
| class Settings(BaseSettings): |
| """应用配置""" |
| |
| |
| APP_NAME: str = "NeuroScan AI" |
| APP_VERSION: str = "1.0.0" |
| DEBUG: bool = True |
| |
| |
| BASE_DIR: Path = _BASE_DIR |
| DATA_DIR: Path = _BASE_DIR / "data" |
| RAW_DATA_DIR: Path = _BASE_DIR / "data" / "raw" |
| PROCESSED_DATA_DIR: Path = _BASE_DIR / "data" / "processed" |
| CACHE_DIR: Path = _BASE_DIR / "data" / "cache" |
| MODELS_DIR: Path = _BASE_DIR / "models" |
| STATIC_DIR: Path = _BASE_DIR / "static" |
| |
| |
| TARGET_SPACING: tuple = (1.0, 1.0, 1.0) |
| ORIENTATION: str = "RAS" |
| |
| |
| SEGMENTATION_MODEL: str = "wholeBody_ct_segmentation" |
| SLIDING_WINDOW_SIZE: tuple = (96, 96, 96) |
| SLIDING_WINDOW_OVERLAP: float = 0.25 |
| |
| |
| REGISTRATION_ITERATIONS: int = 1000 |
| REGISTRATION_SAMPLING_RATE: float = 0.1 |
| |
| |
| DIFF_THRESHOLD_HU: float = 30.0 |
| GAUSSIAN_SIGMA: float = 1.0 |
| |
| |
| LLM_MODEL: str = "llama3-70b-instruct" |
| LLM_BASE_URL: str = "http://localhost:8000/v1" |
| LLM_API_KEY: str = "local-key" |
| LLM_TEMPERATURE: float = 0.1 |
| LLM_MAX_TOKENS: int = 4096 |
| |
| |
| DATABASE_URL: str = "sqlite:///./neuroscan.db" |
| |
| |
| CHROMA_PERSIST_DIR: str = "./chroma_db" |
| |
| |
| API_PREFIX: str = "/api/v1" |
| |
| model_config = { |
| "env_file": ".env", |
| "env_file_encoding": "utf-8", |
| "extra": "ignore" |
| } |
| |
| @model_validator(mode='after') |
| def create_directories(self): |
| """确保所有目录存在""" |
| for dir_path in [self.DATA_DIR, self.RAW_DATA_DIR, self.PROCESSED_DATA_DIR, |
| self.CACHE_DIR, self.MODELS_DIR, self.STATIC_DIR]: |
| dir_path.mkdir(parents=True, exist_ok=True) |
| return self |
|
|
|
|
| settings = Settings() |
|
|
|
|
|
|