Spaces:
Sleeping
Sleeping
File size: 3,222 Bytes
3e8c06e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
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 |