Spaces:
Sleeping
Sleeping
| # coding: utf-8 | |
| # Copyright (c) 2025 inclusionAI. | |
| import asyncio | |
| from typing import List, Dict, Union | |
| from aworld.config import RunConfig | |
| from aworld.config.conf import TaskConfig | |
| from aworld.agents.llm_agent import Agent | |
| from aworld.core.agent.swarm import Swarm | |
| from aworld.core.common import Config | |
| from aworld.core.task import Task, TaskResponse, Runner | |
| from aworld.output import StreamingOutputs | |
| from aworld.runners.utils import choose_runners, execute_runner | |
| from aworld.utils.common import sync_exec | |
| class Runners: | |
| """Unified entrance to the utility class of the runnable task of execution.""" | |
| def streamed_run_task(task: Task) -> StreamingOutputs: | |
| """Run the task in stream output.""" | |
| if not task.conf: | |
| task.conf = TaskConfig() | |
| streamed_result = StreamingOutputs( | |
| input=task.input, | |
| usage={}, | |
| is_complete=False | |
| ) | |
| task.outputs = streamed_result | |
| streamed_result._run_impl_task = asyncio.create_task( | |
| Runners.run_task(task) | |
| ) | |
| return streamed_result | |
| async def run_task(task: Union[Task, List[Task]], run_conf: RunConfig = None) -> Dict[str, TaskResponse]: | |
| """Run tasks for some complex scenarios where agents cannot be directly used. | |
| Args: | |
| task: User task define. | |
| run_conf: | |
| """ | |
| if isinstance(task, Task): | |
| task = [task] | |
| runners: List[Runner] = await choose_runners(task) | |
| return await execute_runner(runners, run_conf) | |
| def sync_run_task(task: Union[Task, List[Task]], run_conf: Config = None) -> Dict[str, TaskResponse]: | |
| return sync_exec(Runners.run_task, task=task, run_conf=run_conf) | |
| def sync_run( | |
| input: str, | |
| agent: Agent = None, | |
| swarm: Swarm = None, | |
| tool_names: List[str] = [], | |
| session_id: str = None | |
| ) -> TaskResponse: | |
| return sync_exec( | |
| Runners.run, | |
| input=input, | |
| agent=agent, | |
| swarm=swarm, | |
| tool_names=tool_names, | |
| session_id=session_id | |
| ) | |
| async def run( | |
| input: str, | |
| agent: Agent = None, | |
| swarm: Swarm = None, | |
| tool_names: List[str] = [], | |
| session_id: str = None | |
| ) -> TaskResponse: | |
| """Run agent directly with input and tool names. | |
| Args: | |
| input: User query. | |
| agent: An agent with AI model configured, prompts, tools, mcp servers and other agents. | |
| swarm: Multi-agent topo. | |
| tool_names: Tool name list. | |
| session_id: Session id. | |
| Returns: | |
| TaskResponse: Task response. | |
| """ | |
| if agent and swarm: | |
| raise ValueError("`agent` and `swarm` only choose one.") | |
| if not input: | |
| raise ValueError('`input` is empty.') | |
| if agent: | |
| agent.task = input | |
| swarm = Swarm(agent) | |
| task = Task(input=input, swarm=swarm, tool_names=tool_names, | |
| event_driven=swarm.event_driven, session_id=session_id) | |
| res = await Runners.run_task(task) | |
| return res.get(task.id) | |