File size: 2,613 Bytes
b3f878b 4c341cd b3f878b 4c341cd b3f878b 4c341cd b3f878b 4c341cd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | """应用启动时的数据库初始化辅助函数"""
from pathlib import Path
from qa_annotate.config import settings
from qa_annotate.database.base import SessionLocal
from qa_annotate.database.crud import LlmAnalysisCacheCRUD, SystemConfigCRUD
from qa_annotate.database.models import ProjectModel
_LLM_CONFIG_SPECS = (
("llm_base_url", "LLM_BASE_URL", "LLM API Base URL"),
("llm_model_name", "LLM_MODEL_NAME", "LLM Model Name"),
)
_SEED_DIR = Path(__file__).resolve().parent.parent / "seed"
_DEMO_ANALYSIS_FILES = {
"zh": _SEED_DIR / "llm-analysis-2026-06-15_zh.md",
"en": _SEED_DIR / "llm-analysis-2026-06-15_en.md",
}
_DEMO_ANALYSIS_NOTES_COUNT = 4
def ensure_llm_config() -> None:
"""写入 LLM 默认配置;API Key 优先从环境变量同步。"""
db = SessionLocal()
try:
for key, setting_name, description in _LLM_CONFIG_SPECS:
if SystemConfigCRUD.get_by_key(db, key=key):
continue
value = getattr(settings, setting_name)
SystemConfigCRUD.set_value(db, key=key, value=value, description=description)
print(f"已初始化 LLM 配置: {key}={value}")
if settings.LLM_API_KEY:
SystemConfigCRUD.set_value(
db,
key="llm_api_key",
value=settings.LLM_API_KEY,
description="LLM API Key",
)
print("已从环境变量同步 LLM API Key")
finally:
db.close()
def seed_demo_llm_analysis() -> None:
"""从 seed 目录下的示例 Markdown 预置中英文 LLM 分析报告。"""
db = SessionLocal()
try:
project = db.query(ProjectModel).order_by(ProjectModel.id).first()
if not project:
print("无项目数据,跳过 Demo LLM 分析报告导入")
return
for language, path in _DEMO_ANALYSIS_FILES.items():
if not path.exists():
print(f"未找到 {path.name},跳过")
continue
if LlmAnalysisCacheCRUD.get_by_project(
db, project_id=project.id, language=language
):
continue
LlmAnalysisCacheCRUD.save(
db=db,
project_id=project.id,
analysis_text=path.read_text(encoding="utf-8"),
model_name=settings.LLM_MODEL_NAME,
notes_count=_DEMO_ANALYSIS_NOTES_COUNT,
language=language,
)
print(f"已导入 Demo LLM 分析报告: project={project.id} lang={language}")
finally:
db.close()
|