初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,92 @@
|
||||
"""
|
||||
元炁配置管理。
|
||||
|
||||
从环境变量加载配置,遵循魂镜统一配置规范(所有配置通过环境变量注入,不使用 .env 文件)。
|
||||
模型文件统一存放在项目根目录 models/ 下,各引擎从对应子目录加载。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
_PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
|
||||
_DEFAULT_MODELS_DIR = _PROJECT_ROOT / "models"
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
"""元炁应用配置。"""
|
||||
|
||||
# 服务
|
||||
host: str = "0.0.0.0"
|
||||
port: int = 11434
|
||||
|
||||
# ── 模型文件路径 ────────────────────────────────────
|
||||
models_dir: str = str(_DEFAULT_MODELS_DIR)
|
||||
|
||||
# 下载源:auto / huggingface / modelscope
|
||||
# auto 表示优先 ModelScope(国内快),失败后切 HuggingFace。
|
||||
model_source: str = "auto"
|
||||
|
||||
# LLM:GGUF 模型文件路径。默认扫描 $models_dir/gguf/ 下第一个 .gguf
|
||||
llm_model_path: str = ""
|
||||
|
||||
# Embedding:HuggingFace 模型名称。首次调用自动下载到 models/FlagModel/<模型名>。
|
||||
embedding_model: str = "BAAI/bge-m3"
|
||||
|
||||
# Reranker:HuggingFace 模型名称。首次调用自动下载到 models/transformers/<模型名>。
|
||||
reranker_model: str = "BAAI/bge-reranker-v2-m3"
|
||||
|
||||
# Vision(多模态):GGUF 多模态模型路径。默认扫描含 vision / multimodal / llava 的 .gguf
|
||||
vision_model_path: str = ""
|
||||
|
||||
# ASR(语音识别):FunASR 模型名称。自动下载到 models/funasr/<模型名>。
|
||||
asr_model: str = "iic/SenseVoiceSmall"
|
||||
|
||||
# 推理设备:auto / cuda / mps / cpu。
|
||||
# auto 表示自动检测最优可用加速器(CUDA > MPS > CPU)。
|
||||
device: str = "auto"
|
||||
|
||||
# LLM 默认参数
|
||||
llm_max_tokens: int = 2048
|
||||
llm_temperature: float = 0.7
|
||||
llm_ctx_size: int = 4096
|
||||
|
||||
# 日志级别
|
||||
log_level: str = "info"
|
||||
|
||||
@property
|
||||
def models_dir_resolved(self) -> Path:
|
||||
return Path(self.models_dir).resolve()
|
||||
|
||||
@property
|
||||
def llm_model_path_resolved(self) -> str:
|
||||
if self.llm_model_path:
|
||||
return str(Path(self.llm_model_path).resolve())
|
||||
gguf_dir = self.models_dir_resolved / "gguf"
|
||||
if gguf_dir.exists():
|
||||
files = list(gguf_dir.glob("*.gguf"))
|
||||
if files:
|
||||
return str(files[0])
|
||||
return ""
|
||||
|
||||
@property
|
||||
def vision_model_path_resolved(self) -> str:
|
||||
if self.vision_model_path:
|
||||
return str(Path(self.vision_model_path).resolve())
|
||||
gguf_dir = self.models_dir_resolved / "gguf"
|
||||
if gguf_dir.exists():
|
||||
for pat in ("*vision*", "*multimodal*", "*llava*", "*mmproj*"):
|
||||
matches = list(gguf_dir.glob(pat))
|
||||
if matches:
|
||||
return str(matches[0])
|
||||
return ""
|
||||
|
||||
model_config = SettingsConfigDict(
|
||||
env_prefix="yuanqi_",
|
||||
env_file=None,
|
||||
)
|
||||
|
||||
|
||||
settings = Settings()
|
||||
Reference in new issue
Block a user