Spaces:
Runtime error
Runtime error
| """ | |
| PregoPal - 插件基类 | |
| =================== | |
| 定义 LoopPlugin 基类、PluginRegistry、LoopStage、LoopContext。 | |
| """ | |
| from abc import ABC, abstractmethod | |
| from dataclasses import dataclass, field | |
| from enum import Enum | |
| from typing import List | |
| class LoopStage(Enum): | |
| """插件可注册的阶段""" | |
| FAMILY_QUIZ = "family_quiz" | |
| SUMMARIZE = "summarize" | |
| ANALYZE = "analyze" | |
| BRIEF = "brief" | |
| THREE_DAY = "three_day" | |
| CONSOLIDATE = "consolidate" | |
| class LoopContext: | |
| """插件上下文:共享数据容器""" | |
| briefing: dict = field(default_factory=dict) | |
| weight_data: dict = field(default_factory=dict) | |
| diet_records: list = field(default_factory=list) | |
| family_recipes: list = field(default_factory=list) | |
| family_memory: dict = field(default_factory=dict) | |
| analysis_results: dict = field(default_factory=dict) | |
| errors: list = field(default_factory=list) | |
| class PluginResult: | |
| """插件执行结果""" | |
| success: bool = True | |
| data: dict = field(default_factory=dict) | |
| message: str = "" | |
| class LoopPlugin(ABC): | |
| """Loop 扩展插件基类 — 所有插件继承此类""" | |
| def stage(self) -> LoopStage: | |
| """此插件注册到哪个阶段""" | |
| def name(self) -> str: | |
| """插件唯一名称""" | |
| async def run(self, ctx: LoopContext) -> PluginResult: | |
| """执行插件逻辑""" | |
| class PluginRegistry: | |
| """插件注册中心""" | |
| def __init__(self): | |
| self._plugins: List[LoopPlugin] = [] | |
| def register(self, plugin: LoopPlugin): | |
| """注册一个插件""" | |
| self._plugins.append(plugin) | |
| def get_plugins(self, stage: LoopStage) -> List[LoopPlugin]: | |
| """获取指定阶段的所有插件""" | |
| return [p for p in self._plugins if p.stage() == stage] | |
| def get_all(self) -> List[LoopPlugin]: | |
| """获取所有插件""" | |
| return self._plugins.copy() | |
| def unregister(self, name: str): | |
| """根据名称注销插件""" | |
| self._plugins = [p for p in self._plugins if p.name() != name] | |