reducerspec

This commit is contained in:
lda
2026-05-17 16:35:17 +07:00 Verified
parent 86ffb17ec6
commit 281229a78f
9 changed files with 130 additions and 3 deletions
+24 -1
View File
@@ -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),
},