|
9 | 9 | from astrbot.api.star import StarTools |
10 | 10 |
|
11 | 11 | from ...utils.logger import logger |
| 12 | +from ..utils.template_utils import upgrade_str_format_template |
12 | 13 |
|
13 | 14 |
|
14 | 15 | class ConfigManager: |
@@ -332,6 +333,80 @@ def set_quality_analysis_prompt(self, prompt: str): |
332 | 333 | prompts["quality_analysis_prompts"]["quality_v2_prompt"] = prompt |
333 | 334 | self.config.save_config() |
334 | 335 |
|
| 336 | + def _upgrade_config_item(self, group: str, key: str, setter_func): |
| 337 | + """升级指定配置项的值(从 str.format -> string.Template),并回写。""" |
| 338 | + # 如果是 prompts,则先取 prompts 分组,再取子分组 (group) |
| 339 | + if group in ( |
| 340 | + "quality_analysis_prompts", |
| 341 | + "topic_analysis_prompts", |
| 342 | + "user_title_analysis_prompts", |
| 343 | + "golden_quote_analysis_prompts", |
| 344 | + ): |
| 345 | + target_group = self._get_group("prompts").get(group, {}) |
| 346 | + else: |
| 347 | + target_group = self._get_group(group) |
| 348 | + |
| 349 | + val = target_group.get(key, "") |
| 350 | + if not val or not isinstance(val, str): |
| 351 | + return False |
| 352 | + |
| 353 | + upgraded_val, upgraded = upgrade_str_format_template(val) |
| 354 | + if upgraded and upgraded_val != val: |
| 355 | + setter_func(upgraded_val) |
| 356 | + logger.info( |
| 357 | + f"配置项 {group}.{key} 发现旧版语法并已自动升级为 string.Template 格式。" |
| 358 | + ) |
| 359 | + return True |
| 360 | + return False |
| 361 | + |
| 362 | + def upgrade_prompt_templates(self): |
| 363 | + """启动时调用,扫描并升级所有可配置的模板(含 prompt 和文件名)。""" |
| 364 | + modified = False |
| 365 | + # 1. 提示词模板升级 |
| 366 | + modified |= self._upgrade_config_item( |
| 367 | + "quality_analysis_prompts", |
| 368 | + "quality_v2_prompt", |
| 369 | + self.set_quality_analysis_prompt, |
| 370 | + ) |
| 371 | + modified |= self._upgrade_config_item( |
| 372 | + "quality_analysis_prompts", |
| 373 | + "quality_summary_prompt", |
| 374 | + self.set_quality_summary_prompt, |
| 375 | + ) |
| 376 | + modified |= self._upgrade_config_item( |
| 377 | + "topic_analysis_prompts", |
| 378 | + "topic_prompt", |
| 379 | + self.set_topic_analysis_prompt, |
| 380 | + ) |
| 381 | + modified |= self._upgrade_config_item( |
| 382 | + "user_title_analysis_prompts", |
| 383 | + "user_title_prompt", |
| 384 | + self.set_user_title_analysis_prompt, |
| 385 | + ) |
| 386 | + modified |= self._upgrade_config_item( |
| 387 | + "golden_quote_analysis_prompts", |
| 388 | + "golden_quote_v2_prompt", |
| 389 | + self.set_golden_quote_analysis_prompt, |
| 390 | + ) |
| 391 | + |
| 392 | + # 2. 文件名格式升级 |
| 393 | + modified |= self._upgrade_config_item( |
| 394 | + "pdf", |
| 395 | + "pdf_filename_format", |
| 396 | + self.set_pdf_filename_format, |
| 397 | + ) |
| 398 | + modified |= self._upgrade_config_item( |
| 399 | + "html", |
| 400 | + "html_filename_format", |
| 401 | + self.set_html_filename_format, |
| 402 | + ) |
| 403 | + |
| 404 | + if modified: |
| 405 | + logger.info( |
| 406 | + "已完成所有配置模板从 str.format 到 string.Template 的安全迁移。(已自动回写配置)" |
| 407 | + ) |
| 408 | + return modified |
| 409 | + |
335 | 410 | def get_quality_summary_prompt(self, style: str = "quality_summary_prompt") -> str: |
336 | 411 | """获取聊天质量汇总分析提示词模板""" |
337 | 412 | prompts_config = self._get_group("prompts").get("quality_analysis_prompts", {}) |
@@ -542,6 +617,11 @@ def set_pdf_filename_format(self, format_str: str): |
542 | 617 | self._ensure_group("pdf")["pdf_filename_format"] = format_str |
543 | 618 | self.config.save_config() |
544 | 619 |
|
| 620 | + def set_html_filename_format(self, format_str: str): |
| 621 | + """设置HTML文件名格式""" |
| 622 | + self._ensure_group("html")["html_filename_format"] = format_str |
| 623 | + self.config.save_config() |
| 624 | + |
545 | 625 | def get_report_template(self) -> str: |
546 | 626 | """获取报告模板名称""" |
547 | 627 | return self._get_group("basic").get("report_template", "scrapbook") |
|
0 commit comments