feat(km): add full corpus asset taxonomy readback
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / tests (push) Has been cancelled

This commit is contained in:
Your Name
2026-07-03 16:12:48 +08:00
parent 37dda358a3
commit f99305e481
10 changed files with 312 additions and 17 deletions

View File

@@ -21,6 +21,7 @@ from src.models.knowledge import (
CategoryCount,
EntryStatus,
EntryType,
KnowledgeAssetTaxonomyCount,
KnowledgeEntry,
KnowledgeEntryCreate,
KnowledgeEntryUpdate,
@@ -49,6 +50,8 @@ _DEGRADED_CATEGORY_FALLBACKS = (
"general",
)
_ASSET_TAXONOMY_FALLBACKS = _DEGRADED_CATEGORY_FALLBACKS[:-1]
# =============================================================================
# Singleton
# =============================================================================
@@ -65,6 +68,10 @@ def build_knowledge_list_readback_degraded_response(reason: str) -> KnowledgeLis
CategoryCount(category=category, count=0)
for category in _DEGRADED_CATEGORY_FALLBACKS
],
asset_taxonomy=[
KnowledgeAssetTaxonomyCount(key=key, count=0)
for key in _ASSET_TAXONOMY_FALLBACKS
],
readback_status="degraded",
operator_stage="knowledge_readback_degraded_ai_controlled_repair",
next_step=(
@@ -191,8 +198,16 @@ class KnowledgeService:
categories = [
CategoryCount(category=cat, count=cnt) for cat, cnt in categories_raw
]
asset_taxonomy_raw = await repo.get_asset_taxonomy_counts()
asset_taxonomy = [
KnowledgeAssetTaxonomyCount(key=key, count=count)
for key, count in asset_taxonomy_raw
]
return KnowledgeListResponse(
items=items, total=total, categories=categories
items=items,
total=total,
categories=categories,
asset_taxonomy=asset_taxonomy,
)
except Exception as exc: # noqa: BLE001 - production readback must fail soft
logger.warning(
@@ -207,6 +222,23 @@ class KnowledgeService:
)
return build_knowledge_list_readback_degraded_response(str(exc))
async def get_asset_taxonomy(self) -> list[KnowledgeAssetTaxonomyCount]:
"""取得 AI 自動化資產維度統計。"""
try:
async with get_db_context() as db:
repo: IKnowledgeRepository = KnowledgeDBRepository(db)
rows = await repo.get_asset_taxonomy_counts()
return [
KnowledgeAssetTaxonomyCount(key=key, count=count)
for key, count in rows
]
except Exception as exc: # noqa: BLE001 - taxonomy must not 500 the KM UI
logger.warning("knowledge_asset_taxonomy_readback_degraded", error=str(exc))
return [
KnowledgeAssetTaxonomyCount(key=key, count=0)
for key in _ASSET_TAXONOMY_FALLBACKS
]
async def get_categories(self) -> list[CategoryCount]:
"""取得分類統計(直接呼叫 repo不走 list_entries"""
try: