Upload app\core\config.py with huggingface_hub
Browse files- app//core//config.py +75 -0
app//core//config.py
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
์ค์ ๊ด๋ฆฌ ๋ชจ๋
|
| 3 |
+
ํ๊ฒฝ ๋ณ์ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ค์ ์ ๊ด๋ฆฌํฉ๋๋ค.
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import os
|
| 7 |
+
from pathlib import Path
|
| 8 |
+
from typing import Optional
|
| 9 |
+
from dotenv import load_dotenv
|
| 10 |
+
|
| 11 |
+
# .env ํ์ผ ๋ก๋
|
| 12 |
+
load_dotenv()
|
| 13 |
+
|
| 14 |
+
# ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ
|
| 15 |
+
PROJECT_ROOT = Path(__file__).parent.parent.parent
|
| 16 |
+
|
| 17 |
+
class Config:
|
| 18 |
+
"""์ ํ๋ฆฌ์ผ์ด์
์ค์ ํด๋์ค"""
|
| 19 |
+
|
| 20 |
+
# Flask ์ค์
|
| 21 |
+
SECRET_KEY: str = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')
|
| 22 |
+
|
| 23 |
+
# ๋ฐ์ดํฐ๋ฒ ์ด์ค URI ์ค์
|
| 24 |
+
# PostgreSQL: postgresql://user:password@host:port/database
|
| 25 |
+
# SQLite (๊ธฐ๋ณธ๊ฐ): sqlite:///instance/finance_analysis.db
|
| 26 |
+
_database_url = os.getenv('DATABASE_URL', '')
|
| 27 |
+
if _database_url and (_database_url.startswith('postgresql://') or _database_url.startswith('postgres://')):
|
| 28 |
+
# PostgreSQL URL์ด ์ ๊ณต๋๋ฉด ์ฌ์ฉ
|
| 29 |
+
SQLALCHEMY_DATABASE_URI: str = _database_url
|
| 30 |
+
else:
|
| 31 |
+
# ๊ธฐ๋ณธ๊ฐ: SQLite ์ฌ์ฉ
|
| 32 |
+
if _database_url:
|
| 33 |
+
# DATABASE_URL์ด ์ค์ ๋์์ง๋ง PostgreSQL ํ์์ด ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ
|
| 34 |
+
import warnings
|
| 35 |
+
warnings.warn(f"DATABASE_URL์ด ์ค์ ๋์์ง๋ง PostgreSQL ํ์์ด ์๋๋๋ค. SQLite๋ฅผ ์ฌ์ฉํฉ๋๋ค: {_database_url[:50]}...")
|
| 36 |
+
SQLALCHEMY_DATABASE_URI: str = f'sqlite:///{PROJECT_ROOT / "instance" / "finance_analysis.db"}'
|
| 37 |
+
SQLALCHEMY_TRACK_MODIFICATIONS: bool = False
|
| 38 |
+
MAX_CONTENT_LENGTH: int = 100 * 1024 * 1024 # 100MB
|
| 39 |
+
|
| 40 |
+
# Ollama ์ค์
|
| 41 |
+
OLLAMA_BASE_URL: str = os.getenv('OLLAMA_BASE_URL', 'http://localhost:11434')
|
| 42 |
+
|
| 43 |
+
# ๊ฒฝ๋ก ์ค์
|
| 44 |
+
UPLOAD_FOLDER: Path = PROJECT_ROOT / 'uploads'
|
| 45 |
+
VECTOR_DB_PATH: Path = PROJECT_ROOT / 'vector_db'
|
| 46 |
+
KNOWLEDGE_GRAPH_PATH: Path = PROJECT_ROOT / 'knowledge_graphs'
|
| 47 |
+
TEMPLATES_FOLDER: Path = PROJECT_ROOT / 'templates'
|
| 48 |
+
STATIC_FOLDER: Path = PROJECT_ROOT / 'static'
|
| 49 |
+
INSTANCE_FOLDER: Path = PROJECT_ROOT / 'instance'
|
| 50 |
+
|
| 51 |
+
# ํ์ผ ํ์ฅ์ ์ค์
|
| 52 |
+
ALLOWED_EXTENSIONS: set[str] = {'txt', 'md', 'pdf', 'docx', 'epub'}
|
| 53 |
+
|
| 54 |
+
# ์๋ฒ ๋ฉ ๋ชจ๋ธ ์ค์
|
| 55 |
+
EMBEDDING_MODEL_NAME: str = os.getenv('EMBEDDING_MODEL_NAME', 'sentence-transformers/all-MiniLM-L6-v2')
|
| 56 |
+
RERANKER_MODEL_NAME: str = os.getenv('RERANKER_MODEL_NAME', 'BAAI/bge-reranker-base')
|
| 57 |
+
|
| 58 |
+
# Gemini API ์ค์
|
| 59 |
+
GEMINI_API_KEY: Optional[str] = os.getenv('GEMINI_API_KEY', None)
|
| 60 |
+
|
| 61 |
+
@classmethod
|
| 62 |
+
def ensure_directories(cls) -> None:
|
| 63 |
+
"""ํ์ ๋๋ ํ ๋ฆฌ ์์ฑ"""
|
| 64 |
+
cls.UPLOAD_FOLDER.mkdir(parents=True, exist_ok=True)
|
| 65 |
+
cls.VECTOR_DB_PATH.mkdir(parents=True, exist_ok=True)
|
| 66 |
+
cls.KNOWLEDGE_GRAPH_PATH.mkdir(parents=True, exist_ok=True)
|
| 67 |
+
cls.STATIC_FOLDER.mkdir(parents=True, exist_ok=True)
|
| 68 |
+
cls.INSTANCE_FOLDER.mkdir(parents=True, exist_ok=True)
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
def get_config() -> Config:
|
| 72 |
+
"""์ค์ ์ธ์คํด์ค ๋ฐํ"""
|
| 73 |
+
return Config
|
| 74 |
+
|
| 75 |
+
|