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
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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user