Coverage for src/lexigram/ai/admin/contributor.py: 0%
21 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
1from __future__ import annotations
3from collections.abc import Sequence
4from typing import TYPE_CHECKING
6from lexigram.contracts.admin.contributor import BaseAdminContributor
7from lexigram.contracts.admin.types import (
8 ManagementPageDefinition,
9 NavigationContribution,
10 PageCategory,
11)
13if TYPE_CHECKING:
14 from lexigram.contracts.core.di import ContainerResolverProtocol
16_NAV_ITEMS: tuple[NavigationContribution, ...] = (
17 NavigationContribution(
18 label="AI Pipeline",
19 url="/admin/ai/pipeline",
20 icon="activity",
21 group="ai",
22 order=55,
23 ),
24)
27class AIPipelineAdminContributor(BaseAdminContributor):
28 """Admin contributor for the AI pipeline overview."""
30 name = "ai-pipeline"
31 display_name = "AI Pipeline"
32 group = "ai"
33 icon = "activity"
34 priority = 55
36 def __init__(self) -> None:
37 self._container: ContainerResolverProtocol | None = None
39 async def on_admin_boot(self, container: ContainerResolverProtocol) -> None:
40 self._container = container
42 def get_navigation_items(self) -> Sequence[NavigationContribution]:
43 return list(_NAV_ITEMS)
45 def get_management_pages(self) -> Sequence[ManagementPageDefinition]:
46 return [
47 ManagementPageDefinition(
48 name="ai_pipeline_overview",
49 title="AI Pipeline",
50 contributor="ai-pipeline",
51 route_path="/ai/pipeline",
52 handler="lexigram.ai.admin.pages.overview:AIPipelineOverviewPage",
53 category=PageCategory.AI,
54 icon="activity",
55 description="AI pipeline overview, subsystem status, and configuration",
56 order=10,
57 ),
58 ]
61__all__ = ["AIPipelineAdminContributor"]