resolve runtime dependencies
This commit is contained in:
@@ -121,6 +121,11 @@ def builtin_reducers() -> dict[str, ReducerSpec]:
|
||||
}
|
||||
|
||||
|
||||
def builtin_reducer_definitions():
|
||||
"""Return executable built-in reducers for trusted runtime dependency wiring."""
|
||||
return dict(DEFAULT_REDUCER_DEFINITIONS)
|
||||
|
||||
|
||||
def mcp_specs(service: ToolCaller) -> dict[str, NodeSpec[Any, Any]]:
|
||||
"""Return service-bound MCP utility specs available to raw plans."""
|
||||
|
||||
@@ -153,6 +158,7 @@ def builtin_sources(service: ToolCaller) -> dict[str, CapabilitySource]:
|
||||
capabilities=CapabilityBuckets(
|
||||
node_specs=builtin_specs(),
|
||||
reducers=builtin_reducers(),
|
||||
reducer_definitions=builtin_reducer_definitions(),
|
||||
),
|
||||
visibility=SourceVisibility(
|
||||
planner=True,
|
||||
|
||||
@@ -5,6 +5,7 @@ from typing import Any, Literal
|
||||
|
||||
from wf_authoring import NodeSpec
|
||||
from wf_core import ReducerSpec
|
||||
from wf_core.runtime.ops.merges import ReducerDefinition
|
||||
|
||||
SourceKind = Literal["system", "connection"]
|
||||
|
||||
@@ -29,6 +30,7 @@ class CapabilityBuckets:
|
||||
tools: dict[str, Any] = field(default_factory=dict)
|
||||
node_specs: dict[str, NodeSpec[Any, Any]] = field(default_factory=dict)
|
||||
reducers: dict[str, ReducerSpec] = field(default_factory=dict)
|
||||
reducer_definitions: dict[str, ReducerDefinition] = field(default_factory=dict)
|
||||
prompts: dict[str, Any] = field(default_factory=dict)
|
||||
resources: dict[str, Any] = field(default_factory=dict)
|
||||
|
||||
|
||||
@@ -7,11 +7,12 @@ from typing import Any
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from wf_authoring import NodeReturn, NodeSpec, build_async_registry
|
||||
from wf_authoring import NodeReturn, NodeSpec
|
||||
from wf_artifacts import (
|
||||
FileWorkflowArtifactStore,
|
||||
WorkflowArtifact,
|
||||
WorkflowArtifactCatalogEntry,
|
||||
WorkflowDeployment,
|
||||
WorkflowArtifactStore,
|
||||
artifact_catalog_entry,
|
||||
)
|
||||
@@ -33,6 +34,7 @@ from ...shared.errors import error_payload
|
||||
from ...shared.names import RESERVED_CONNECTION_IDS
|
||||
from ...storage import Store
|
||||
from ...workflow.wrappers import _model_from_schema
|
||||
from ...workflow_surface.runtime_dependencies import resolve_runtime_dependencies
|
||||
from ..catalog import CombinedCatalog, snapshot_from_specs
|
||||
from ..discovery import discover_connection_capabilities, specs_from_discovered_tools
|
||||
from ..admin_capabilities import admin_source
|
||||
@@ -545,6 +547,8 @@ class WfMcpService:
|
||||
self,
|
||||
plan: RawWorkflowPlan,
|
||||
workflow_input: dict[str, Any],
|
||||
deployment: WorkflowDeployment | None = None,
|
||||
artifact: WorkflowArtifact | None = None,
|
||||
):
|
||||
self._record_event(
|
||||
make_event(
|
||||
@@ -554,13 +558,30 @@ class WfMcpService:
|
||||
)
|
||||
)
|
||||
workflow = self.compile_plan(plan)
|
||||
specs = [
|
||||
self._get_qualified_spec(node.node)
|
||||
for node in workflow.nodes
|
||||
if isinstance(node, NodeUse)
|
||||
plan_node_names = [
|
||||
node.node for node in workflow.nodes if isinstance(node, NodeUse)
|
||||
]
|
||||
registry = build_async_registry(*specs)
|
||||
run = await execute_workflow_async(workflow, workflow_input, registry)
|
||||
runtime_artifact = artifact or WorkflowArtifact(
|
||||
id=plan.name,
|
||||
version=1,
|
||||
title=plan.name,
|
||||
input_schema=plan.input_schema,
|
||||
output_schema=plan.output_schema,
|
||||
outcomes=("completed",),
|
||||
plan=plan.model_dump(mode="json", by_alias=True),
|
||||
)
|
||||
dependencies = resolve_runtime_dependencies(
|
||||
artifact=runtime_artifact,
|
||||
deployment=deployment,
|
||||
sources=self.capability_sources,
|
||||
plan_node_names=plan_node_names,
|
||||
)
|
||||
run = await execute_workflow_async(
|
||||
workflow,
|
||||
workflow_input,
|
||||
dependencies.node_registry,
|
||||
reducers=dependencies.reducers,
|
||||
)
|
||||
self._record_event(
|
||||
make_event(
|
||||
"workflow_run_completed",
|
||||
|
||||
Reference in New Issue
Block a user