reducerspec
This commit is contained in:
@@ -4,6 +4,7 @@ from typing import Any, Protocol
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from wf_core import ReducerSpec
|
||||
from wf_authoring import (
|
||||
NodeReturn,
|
||||
NodeSpec,
|
||||
@@ -109,6 +110,25 @@ def builtin_specs() -> dict[str, NodeSpec[Any, Any]]:
|
||||
return {spec.name: spec for spec in qualified_specs}
|
||||
|
||||
|
||||
def builtin_reducers() -> dict[str, ReducerSpec]:
|
||||
"""Return built-in reducers owned by the workflow standard library."""
|
||||
specs = (
|
||||
ReducerSpec(
|
||||
name="wf.std.replace",
|
||||
description="Replace the current state value with the incoming value.",
|
||||
),
|
||||
ReducerSpec(
|
||||
name="wf.std.append",
|
||||
description="Append one value or many values into a list-valued state path.",
|
||||
),
|
||||
ReducerSpec(
|
||||
name="wf.std.merge_object",
|
||||
description="Shallow-merge object values at one exact state path.",
|
||||
),
|
||||
)
|
||||
return {spec.name: spec for spec in specs}
|
||||
|
||||
|
||||
def mcp_specs(service: ToolCaller) -> dict[str, NodeSpec[Any, Any]]:
|
||||
"""Return service-bound MCP utility specs available to raw plans."""
|
||||
|
||||
@@ -138,7 +158,10 @@ def builtin_sources(service: ToolCaller) -> dict[str, CapabilitySource]:
|
||||
BUILTIN_CONNECTION_ID: CapabilitySource(
|
||||
id=BUILTIN_CONNECTION_ID,
|
||||
kind="system",
|
||||
capabilities=CapabilityBuckets(node_specs=builtin_specs()),
|
||||
capabilities=CapabilityBuckets(
|
||||
node_specs=builtin_specs(),
|
||||
reducers=builtin_reducers(),
|
||||
),
|
||||
visibility=SourceVisibility(
|
||||
planner=True,
|
||||
mcp_client=True,
|
||||
|
||||
@@ -4,6 +4,7 @@ from dataclasses import dataclass, field
|
||||
from typing import Any, Literal
|
||||
|
||||
from wf_authoring import NodeSpec
|
||||
from wf_core import ReducerSpec
|
||||
|
||||
SourceKind = Literal["system", "connection"]
|
||||
|
||||
@@ -27,6 +28,7 @@ class SourcePermissions:
|
||||
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)
|
||||
prompts: dict[str, Any] = field(default_factory=dict)
|
||||
resources: dict[str, Any] = field(default_factory=dict)
|
||||
|
||||
@@ -60,6 +62,7 @@ class CapabilitySource:
|
||||
"description": self.description,
|
||||
"tool_count": len(self.capabilities.tools),
|
||||
"node_spec_count": len(self.capabilities.node_specs),
|
||||
"reducer_count": len(self.capabilities.reducers),
|
||||
"prompt_count": len(self.capabilities.prompts),
|
||||
"resource_count": len(self.capabilities.resources),
|
||||
}
|
||||
@@ -71,6 +74,7 @@ class CapabilitySource:
|
||||
"capabilities": {
|
||||
"tools": sorted(self.capabilities.tools),
|
||||
"node_specs": sorted(self.capabilities.node_specs),
|
||||
"reducers": sorted(self.capabilities.reducers),
|
||||
"prompts": sorted(self.capabilities.prompts),
|
||||
"resources": sorted(self.capabilities.resources),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user