microsoft/semantic-kernel · error · KernelException
The proxy step can only handle 1 parameter object
Error message
The proxy step can only handle 1 parameter object
What it means
ProxyActor.AssignStepFunctionParameterValues enforces that the incoming ProcessMessage carries exactly one value entry. The proxy step's single function (KernelProxyStep.EmitExternalEvent) accepts one parameter object, so messages with zero or multiple values are rejected as a contract violation.
Source
Thrown at dotnet/src/Experimental/Process.Runtime.Dapr/Actors/ProxyActor.cs:41
/// </summary>
/// <param name="host">The Dapr host actor</param>
/// <param name="kernel">An instance of <see cref="Kernel"/></param>
public ProxyActor(ActorHost host, Kernel kernel)
: base(host, kernel)
{
this._logger = this._kernel.LoggerFactory?.CreateLogger(typeof(KernelProxyStep)) ?? new NullLogger<ProxyActor>();
}
internal override void AssignStepFunctionParameterValues(ProcessMessage message)
{
if (this._functions is null || this._inputs is null || this._initialInputs is null)
{
throw new KernelException("The step has not been initialized.").Log(this._logger);
}
if (message.Values.Count != 1)
{
throw new KernelException("The proxy step can only handle 1 parameter object").Log(this._logger);
}
// Add the message values to the inputs for the function
var kvp = message.Values.Single();
if (this._inputs.TryGetValue(message.FunctionName, out Dictionary<string, object?>? functionName) && functionName != null && functionName.TryGetValue(kvp.Key, out object? parameterName) && parameterName != null)
{
this._logger?.LogWarning("Step {StepName} already has input for {FunctionName}.{Key}, it is being overwritten with a message from Step named '{SourceId}'.", this.Name, message.FunctionName, kvp.Key, message.SourceId);
}
if (!this._inputs.TryGetValue(message.FunctionName, out Dictionary<string, object?>? functionParameters))
{
this._inputs[message.FunctionName] = [];
functionParameters = this._inputs[message.FunctionName];
}
if (this._daprProxyInfo?.ProxyMetadata != null && message.SourceEventId != null && this._daprProxyInfo.ProxyMetadata.EventMetadata.TryGetValue(message.SourceEventId, out var metadata) && metadata != null)
{
functionParameters![kvp.Key] = KernelProcessProxyMessageFactory.CreateProxyMessage(this.ParentProcessId!, message.SourceEventId, metadata.TopicName, kvp.Value);View on GitHub (pinned to c028a0c7dc)
Solutions
- Ensure edges targeting the proxy step map exactly one parameter to the EmitExternalEvent function.
- When constructing ProcessMessage objects for a proxy step manually, include exactly one key-value pair in the Values dictionary.
- Review the ProxyMetadata.EventMetadata configuration to confirm each proxied event carries a single data payload.
Defensive patterns
Strategy: validation
Validate before calling
// Ensure edges targeting the proxy step carry exactly one value:
// The proxy step's EmitExternalEvent function takes one parameter.
// When building edges, use OnEvent(...).SendToProxy(proxy, parameterName) or equivalent
// that maps a single parameter.
// If constructing messages manually:
if (message.Values.Count != 1)
{
throw new ArgumentException("Proxy step messages must contain exactly one value.");
} Try / catch
try
{
await proxyStep.ProcessIncomingMessagesAsync();
}
catch (KernelException ex) when (ex.Message.Contains("only handle 1 parameter"))
{
logger.LogError("Proxy step received a message with != 1 values. Check edge parameter mapping.");
} Prevention
- Configure edges to the proxy step with a single parameter mapping.
- Never send multi-value or empty messages to a proxy step.
- Review ProxyMetadata.EventMetadata to ensure each proxied event carries a single payload.
When it happens
Trigger: A ProcessMessage arrives at the ProxyActor with message.Values.Count != 1. The proxy step is designed to forward a single payload to an external topic, so any edge that maps multiple parameters to the EmitExternalEvent function, or sends an empty message, triggers this.
Common situations: An edge targeting the proxy step was configured with a function target whose parameter mapping produces multiple values. Also occurs when a custom step or test sends a manually-constructed ProcessMessage to the proxy with the wrong number of values.
Related errors
- The step has not been initialized.
- The Process must be initialized before accessing the Name pr
- Internal Process Error: The target event id must be specifie
- The target for the edge is not a function target.
- The parent process Id must be set before scoping to the pare
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/42dabbd7d4e382cc.
Report an issue: GitHub.