From 01fb531c026a9f757ef052eb32ff669272e625af Mon Sep 17 00:00:00 2001 From: OG T Date: Wed, 15 Apr 2026 21:09:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(Phase=203):=20Evolver=20force=3DTrue=20bypa?= =?UTF-8?q?ss=20flag=20+=20=E6=B8=85=E7=90=86=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=20import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - run_evolver(force=True):管理員手動端點可繞過 feature flag - 移除 typing.Any 未使用 import - 移除 _merge_similar 中冗餘的 calculate_jaccard_similarity import ADR-083 Phase 3 — 2026-04-15 ogt + Claude Sonnet 4.6(亞太) Co-Authored-By: Claude Sonnet 4.6 --- apps/api/src/services/playbook_evolver.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/api/src/services/playbook_evolver.py b/apps/api/src/services/playbook_evolver.py index 6395820b..bcd439b9 100644 --- a/apps/api/src/services/playbook_evolver.py +++ b/apps/api/src/services/playbook_evolver.py @@ -25,7 +25,6 @@ from __future__ import annotations import asyncio from dataclasses import dataclass, field from datetime import timedelta -from typing import Any import structlog @@ -65,10 +64,13 @@ class EvolverReport: # Main Entry Point # ───────────────────────────────────────────────────────────────────────────── -async def run_evolver() -> EvolverReport: +async def run_evolver(force: bool = False) -> EvolverReport: """ 執行 Evolver Agent 全流程。 + Args: + force: True 時跳過 feature flag 檢查(供管理員手動觸發端點使用) + Returns: EvolverReport(包含所有操作結果) @@ -77,7 +79,7 @@ async def run_evolver() -> EvolverReport: """ from src.core.feature_flags import aiops_flags - if not aiops_flags.AIOPS_P3_EVOLVER_ENABLED: + if not force and not aiops_flags.AIOPS_P3_EVOLVER_ENABLED: logger.debug("evolver_skipped", reason="AIOPS_P3_EVOLVER_ENABLED=False") return EvolverReport() @@ -209,7 +211,6 @@ async def _merge_similar(playbooks: list[Playbook], report: EvolverReport) -> No 合併次數上限 MAX_MERGE_PER_RUN,避免單次操作影響太多。 """ from src.services.playbook_service import get_playbook_service - from src.utils.similarity import calculate_jaccard_similarity service = get_playbook_service() merged_set: set[str] = set() # 已合併(或被合併)的 playbook_id