Files
JARVIS/backend/app/config.py

88 lines
2.5 KiB
Python
Raw Normal View History

from pathlib import Path
2026-03-21 10:13:29 +08:00
from pydantic_settings import BaseSettings, SettingsConfigDict
from typing import Literal
BASE_DIR = Path(__file__).resolve().parent.parent
ENV_FILE = BASE_DIR / ".env"
def _resolve_path(value: str) -> str:
path = Path(value)
if path.is_absolute():
return str(path)
return str((BASE_DIR / path).resolve())
2026-03-21 10:13:29 +08:00
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=str(ENV_FILE), env_file_encoding="utf-8", extra="ignore")
2026-03-21 10:13:29 +08:00
# === 应用基础 ===
APP_NAME: str = "Jarvis"
APP_VERSION: str = "0.1.0"
DEBUG: bool = False
HOST: str = "127.0.0.1"
PORT: int = 9527
2026-03-21 10:13:29 +08:00
# === 安全 ===
SECRET_KEY: str = "change-me-in-production"
ALGORITHM: str = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 7
# === 数据库 ===
DATABASE_URL: str = "sqlite+aiosqlite:///./data/jarvis.db"
DATA_DIR: str = "./data"
# === ChromaDB ===
CHROMA_PERSIST_DIR: str = "./data/chroma"
# === LLM 配置 ===
# 支持: openai / claude / ollama / deepseek / custom
LLM_PROVIDER: Literal["openai", "claude", "ollama", "deepseek", "custom"] = "openai"
# OpenAI (默认)
OPENAI_API_KEY: str = ""
OPENAI_MODEL: str = "gpt-4o"
OPENAI_BASE_URL: str = "https://api.openai.com/v1"
# Claude
ANTHROPIC_API_KEY: str = ""
CLAUDE_MODEL: str = "claude-sonnet-4-20250514"
CLAUDE_MAX_TOKENS: int = 8192
# Ollama (本地模型)
OLLAMA_BASE_URL: str = "http://localhost:11434"
OLLAMA_MODEL: str = "llama3"
# === 定时任务 ===
SCHEDULER_ENABLED: bool = True
DAILY_PLAN_TIME: str = "00:00"
FORUM_SCAN_INTERVAL_MINUTES: int = 30
# === CORS ===
CORS_ORIGINS: list[str] = ["http://localhost:5173", "http://localhost:3000"]
# === 文件上传 ===
UPLOAD_DIR: str = "./data/uploads"
MAX_UPLOAD_SIZE: int = 50 * 1024 * 1024
# === 向量化 ===
EMBEDDING_MODEL: str = "text-embedding-3-small"
CHUNK_SIZE: int = 500
CHUNK_OVERLAP: int = 50
# === LangSmith 可观测性 ===
LANGSMITH_TRACING: bool = False
LANGSMITH_API_KEY: str = ""
LANGSMITH_PROJECT: str = "jarvis-agent"
# === NAS 部署 ===
NAS_DATA_ROOT: str = "/data/jarvis"
settings = Settings()
settings.DATABASE_URL = settings.DATABASE_URL.replace("./data", _resolve_path("./data"), 1)
settings.DATA_DIR = _resolve_path(settings.DATA_DIR)
settings.CHROMA_PERSIST_DIR = _resolve_path(settings.CHROMA_PERSIST_DIR)
settings.UPLOAD_DIR = _resolve_path(settings.UPLOAD_DIR)