31 lines
803 B
Python
31 lines
803 B
Python
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
|