Skip to content
Tracon

TraconRunBudgetExceededException

Namespace Tracon · Assembly Tracon.Abstractions.dll

Thrown when a run tree’s budget runs out: its token or cost budget between two model turns, or a workflow step or function node that the budget refuses to start.

public sealed class TraconRunBudgetExceededException : TraconException, ISerializable
Inheritance
object ← Exception ← TraconException ← TraconRunBudgetExceededException
Implements
ISerializable
Inherited Members
TraconException.ErrorType, Exception.GetBaseException(), Exception.ToString(), Exception.GetType(), Exception.TargetSite, Exception.Message, Exception.Data, Exception.InnerException, Exception.HelpLink, Exception.Source, Exception.HResult, Exception.StackTrace, object.GetType(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()

Thrown by the wrapper installed inside the tool-call loop, one layer before the raw provider client; Microsoft Agent Framework’s function-invoking client does not catch it, so it propagates out of AIAgent.RunAsync/RunStreamingAsync and fails the run.

This is a different fault from AgentRunBudget refusing to reserve a new child run (AgentRunBudget.TryReserveRun): for agent delegation that refusal is returned to the model as an ordinary tool result and the calling agent can recover; this exception ends the run that hit it.

A workflow step has no calling model to recover, so there the refused reservation throws this exception too, and the workflow run ends Failed with the same class as any other budget exhaustion.

A workflow function node is refused the same way, at its start, when the tree’s cost or time budget is already spent (the token budget does not stop a node). The message says “Could not start function node” and names the setting to raise. A node that is already running is never stopped by it, and the refusal is not retried.

A tool call is refused at its start when the tree’s token, cost or time budget is spent. The exception does not leave the tool: its message becomes the tool’s result (“… The tool call did not start.”), a streaming run records the call as failed, and the run ends at its next model call. A tool call that has started is never stopped.

Creates a new error.

public TraconRunBudgetExceededException()

Creates a new error.

public TraconRunBudgetExceededException(string message)

message string

The error message.

TraconRunBudgetExceededException(string, Exception)

Section titled “ TraconRunBudgetExceededException(string, Exception)”

Creates a new error.

public TraconRunBudgetExceededException(string message, Exception innerException)

message string

The error message.

innerException Exception

The underlying error.

The stable value written to TraconException.ErrorType.

public const string RunBudgetExceededErrorType = "run_budget_exceeded"

string

Gets the stable error type name written to the run record.

public override string ErrorType { get; }

string

Defaults to the full name of the exception type, so today’s behaviour does not change. A derived type overrides this member when the record has to be machine readable — for example TraconContentFilteredException writes content_filtered. Reports and alert rules can rely on this stable name instead of an assembly name.

The value is written to RunError.Type and carries no secret.