refactor: unify skills+cli runtime and streamline ag-ui flow
This commit is contained in:
@@ -5,7 +5,6 @@ import contextlib
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timezone
|
||||
from typing import TYPE_CHECKING, Any, Awaitable, Callable
|
||||
from uuid import UUID
|
||||
|
||||
from ag_ui.core.types import RunAgentInput
|
||||
from agentscope.formatter import OpenAIChatFormatter
|
||||
@@ -18,7 +17,6 @@ from core.agentscope.schemas.agui_input import extract_latest_user_payload
|
||||
from core.agentscope.runtime.json_react_agent import JsonReActAgent
|
||||
from core.agentscope.runtime.model_tracking import TrackingChatModel
|
||||
from core.agentscope.runtime.stage_emitter import PipelineStageEmitter
|
||||
from core.agentscope.tools.tool_config import AgentTool, resolve_tool_function_names
|
||||
from core.agentscope.tools.toolkit import build_toolkit
|
||||
from core.agentscope.utils import (
|
||||
finalize_json_response,
|
||||
@@ -38,8 +36,8 @@ from schemas.agent.forwarded_props import (
|
||||
from schemas.agent.runtime_models import (
|
||||
RouterAgentOutput,
|
||||
WorkerAgentOutputLite,
|
||||
resolve_worker_output_model,
|
||||
)
|
||||
from schemas.agent.skill_config import SkillName
|
||||
from schemas.agent.system_agent import (
|
||||
AgentType,
|
||||
SystemAgentLLMConfig,
|
||||
@@ -83,7 +81,6 @@ class AgentScopeRunner:
|
||||
work_memory: WorkProfileContent | None = None,
|
||||
cancel_checker: Callable[[], Awaitable[bool]] | None = None,
|
||||
) -> dict[str, Any]:
|
||||
owner_id = UUID(user_context.id)
|
||||
runtime_client_time = self._resolve_runtime_client_time(run_input=run_input)
|
||||
runtime_mode = self._resolve_runtime_mode(run_input=run_input)
|
||||
stop_cancel_watch = asyncio.Event()
|
||||
@@ -110,9 +107,7 @@ class AgentScopeRunner:
|
||||
agent_type=AgentType.WORKER,
|
||||
)
|
||||
worker_toolkit = self._build_toolkit(
|
||||
session=session,
|
||||
owner_id=owner_id,
|
||||
enabled_tools=runtime_config.enabled_tools,
|
||||
enabled_skills=runtime_config.enabled_skills
|
||||
)
|
||||
|
||||
router_output = await self._execute_router_step(
|
||||
@@ -178,19 +173,11 @@ class AgentScopeRunner:
|
||||
def _build_toolkit(
|
||||
self,
|
||||
*,
|
||||
session: AsyncSession,
|
||||
owner_id: UUID,
|
||||
enabled_tools: list[AgentTool],
|
||||
enabled_skills: list[SkillName],
|
||||
) -> Any:
|
||||
tool_names = (
|
||||
sorted(resolve_tool_function_names(set(enabled_tools)))
|
||||
if enabled_tools
|
||||
else []
|
||||
)
|
||||
enabled_skill_names = {str(skill.value) for skill in enabled_skills}
|
||||
return build_toolkit(
|
||||
session=session,
|
||||
owner_id=owner_id,
|
||||
enabled_tool_names=set(tool_names) if tool_names else None,
|
||||
enabled_skill_names=enabled_skill_names if enabled_skill_names else None
|
||||
)
|
||||
|
||||
async def _load_stage_config(
|
||||
@@ -279,7 +266,6 @@ class AgentScopeRunner:
|
||||
runtime_mode: RuntimeMode,
|
||||
work_memory: WorkProfileContent | None,
|
||||
) -> WorkerAgentOutputLite:
|
||||
worker_output_model = resolve_worker_output_model(router_output.execution_mode)
|
||||
await self._emit_step_event(
|
||||
pipeline=pipeline,
|
||||
run_input=run_input,
|
||||
@@ -295,13 +281,14 @@ class AgentScopeRunner:
|
||||
toolkit=toolkit,
|
||||
run_input=run_input,
|
||||
stage_config=stage_config,
|
||||
worker_output_model=worker_output_model,
|
||||
worker_output_model=WorkerAgentOutputLite,
|
||||
pipeline=pipeline,
|
||||
runtime_client_time=runtime_client_time,
|
||||
runtime_mode=runtime_mode,
|
||||
work_memory=work_memory,
|
||||
requires_tool_evidence=router_output.requires_tool_evidence,
|
||||
)
|
||||
worker_output = worker_output_model.model_validate(worker_result.payload)
|
||||
worker_output = WorkerAgentOutputLite.model_validate(worker_result.payload)
|
||||
await self._emit_step_event(
|
||||
pipeline=pipeline,
|
||||
run_input=run_input,
|
||||
@@ -338,7 +325,6 @@ class AgentScopeRunner:
|
||||
user_context=user_context,
|
||||
now_utc=datetime.now(timezone.utc),
|
||||
runtime_client_time=runtime_client_time,
|
||||
tools=None,
|
||||
user_memory=user_memory,
|
||||
),
|
||||
"system",
|
||||
@@ -400,6 +386,7 @@ class AgentScopeRunner:
|
||||
runtime_client_time: ClientTimeContext | None,
|
||||
runtime_mode: RuntimeMode,
|
||||
work_memory: WorkProfileContent | None,
|
||||
requires_tool_evidence: bool = False,
|
||||
) -> StageExecutionResult:
|
||||
tracking_model = self._build_model(stage_config=stage_config)
|
||||
emitter = PipelineStageEmitter(
|
||||
@@ -420,12 +407,12 @@ class AgentScopeRunner:
|
||||
now_utc=datetime.now(timezone.utc),
|
||||
runtime_client_time=runtime_client_time,
|
||||
extra_context=stage_config.extra_context,
|
||||
tools=None,
|
||||
work_memory=work_memory,
|
||||
),
|
||||
toolkit=toolkit,
|
||||
model=tracking_model,
|
||||
emitter=emitter,
|
||||
force_tool_on_first_reasoning=requires_tool_evidence,
|
||||
)
|
||||
async with self._active_agent_lock:
|
||||
self._active_agent = agent
|
||||
@@ -494,6 +481,7 @@ class AgentScopeRunner:
|
||||
toolkit: Any,
|
||||
model: TrackingChatModel,
|
||||
emitter: PipelineStageEmitter | None = None,
|
||||
force_tool_on_first_reasoning: bool = False,
|
||||
) -> JsonReActAgent:
|
||||
return JsonReActAgent(
|
||||
name=agent_name,
|
||||
@@ -503,6 +491,7 @@ class AgentScopeRunner:
|
||||
toolkit=toolkit,
|
||||
memory=InMemoryMemory(),
|
||||
emitter=emitter,
|
||||
force_tool_on_first_reasoning=force_tool_on_first_reasoning,
|
||||
)
|
||||
|
||||
async def _emit_step_event(
|
||||
|
||||
Reference in New Issue
Block a user