Spaces:
Sleeping
Sleeping
from pydantic import BaseModel, Field | |
from aworld.output import Output | |
import asyncio | |
from aworld.output.base import OutputPart | |
class DebateSpeech(Output, BaseModel): | |
name: str = Field(default="", description="name of the speaker") | |
type: str = Field(default="", description="speech type") | |
stance: str = Field(default="", description="stance of the speech") | |
content: str = Field(default="", description="content of the speech") | |
round: int = Field(default=0, description="round of the speech") | |
finished: bool = Field(default=False, description="round of the speech") | |
metadata: dict = Field(default_factory=dict, description="metadata of the speech") | |
async def wait_until_finished(self): | |
""" | |
Wait until the speech is finished. | |
""" | |
while not self.finished: | |
await asyncio.sleep(1) | |
async def convert_to_parts(self, message_output, after_call): | |
async def __convert_to_parts__(): | |
async for item in message_output.response_generator: | |
if item: | |
self.content += item | |
yield OutputPart(content=item) | |
if message_output.finished: | |
await after_call(message_output.response) | |
self.parts = __convert_to_parts__() | |
def from_dict(cls, data: dict) -> "DebateSpeech": | |
return cls( | |
name=data.get("name", ""), | |
type=data.get("type", ""), | |
stance=data.get("stance", ""), | |
content=data.get("content", ""), | |
round=data.get("round", 0), | |
metadata=data.get("metadata", {}) | |
) | |