Spaces:
Sleeping
Sleeping
| import os | |
| from typing import AsyncGenerator, Generator, Callable, Any | |
| from aworld.output.workspace import WorkSpace | |
| from aworld.output.base import OutputPart, MessageOutput, Output | |
| async def consume_output(__output__, callback): | |
| if isinstance(__output__, Output): | |
| ## parts | |
| if __output__.parts: | |
| for part in __output__.parts: | |
| await consume_part(part, callback) | |
| ## MessageOutput | |
| if isinstance(__output__, MessageOutput): | |
| if __output__.reason_generator or __output__.response_generator: | |
| if __output__.reason_generator: | |
| await consume_content(__output__.reason_generator, callback) | |
| if __output__.reason_generator: | |
| await consume_content(__output__.response_generator, callback) | |
| else: | |
| await consume_content(__output__.reasoning, callback) | |
| await consume_content(__output__.response, callback) | |
| if __output__.tool_calls: | |
| await consume_content(__output__.tool_calls, callback) | |
| else: | |
| await consume_content(__output__.data, callback) | |
| async def consume_part(part, callback): | |
| if isinstance(part.content, Output): | |
| await consume_output(__output__=part.content, callback=callback) | |
| else: | |
| await consume_content(__content__=part.content, callback=callback) | |
| async def consume_content(__content__, callback: Callable[..., Any]): | |
| if not __content__: | |
| return | |
| if isinstance(__content__, AsyncGenerator): | |
| async for sub_content in __content__: | |
| if isinstance(sub_content, OutputPart): | |
| await consume_part(sub_content, callback) | |
| elif isinstance(sub_content, Output): | |
| await consume_output(sub_content, callback) | |
| else: | |
| await callback(sub_content) | |
| elif isinstance(__content__, Generator) or isinstance(__content__, list): | |
| for sub_content in __content__: | |
| if isinstance(sub_content, OutputPart): | |
| await consume_part(sub_content, callback) | |
| elif isinstance(sub_content, Output): | |
| await consume_output(sub_content, callback) | |
| else: | |
| await callback(sub_content) | |
| elif isinstance(__content__, str): | |
| await callback(__content__) | |
| else: | |
| await callback(__content__) | |
| async def load_workspace(workspace_id: str, workspace_type: str, workspace_parent_path: str): | |
| """ | |
| This function is used to get the workspace by its id. | |
| It first checks the workspace type and then creates the workspace accordingly. | |
| If the workspace type is not valid, it raises an HTTPException. | |
| """ | |
| if workspace_id is None: | |
| raise RuntimeError("workspace_id is None") | |
| if workspace_type == "local": | |
| workspace = WorkSpace.from_local_storages(workspace_id, storage_path=os.path.join(workspace_parent_path, workspace_id)) | |
| elif workspace_type == "oss": | |
| workspace = WorkSpace.from_oss_storages(workspace_id, storage_path=os.path.join(workspace_parent_path, workspace_id)) | |
| else: | |
| raise RuntimeError("Invalid workspace type") | |
| return workspace |