import asyncio from typing import Awaitable from pydantic import BaseModel, Field async def wrap_done(fn: Awaitable, event: asyncio.Event): """Wrap an awaitable with a event to signal when it's done or an exception is raised.""" try: await fn except Exception as e: # TODO: handle exception print(f"Caught exception: {e}") finally: # Signal the aiter to stop. event.set() class History(BaseModel): """ 对话历史 可从dict生成,如 h = History(**{"role":"user","content":"你好"}) 也可转换为tuple,如 h.to_msy_tuple = ("human", "你好") """ role: str = Field(...) content: str = Field(...) def to_msg_tuple(self): return "ai" if self.role=="assistant" else "human", self.content