summaryrefslogtreecommitdiff
path: root/src/Agent.Core/Runtime/AgentRuntime.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Agent.Core/Runtime/AgentRuntime.cs')
-rw-r--r--src/Agent.Core/Runtime/AgentRuntime.cs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/Agent.Core/Runtime/AgentRuntime.cs b/src/Agent.Core/Runtime/AgentRuntime.cs
index 894f50e..333d557 100644
--- a/src/Agent.Core/Runtime/AgentRuntime.cs
+++ b/src/Agent.Core/Runtime/AgentRuntime.cs
@@ -279,7 +279,7 @@ public sealed class AgentRuntime(TaskRegistry registry, IOllamaClient ollama, Ag
toolResult = new(false, ex.Message, false, $"{call.Function.Name}:{ex.GetType().Name}:{ex.Message}");
}
- externalEffectEvidence |= toolResult.Success && toolResult.ExternalEffect;
+ externalEffectEvidence |= toolResult.Success && toolResult.ExternalEffect && plannerTask.RequiredEffectTools.Contains(call.Function.Name);
// task_update is a metadata tool for graph bookkeeping; its failures should not block completion.
bool isMetadataTool = call.Function.Name == "task_update";
if (toolResult.Success) unresolvedToolFailures.Remove(call.Function.Name);
@@ -298,6 +298,9 @@ public sealed class AgentRuntime(TaskRegistry registry, IOllamaClient ollama, Ag
}
ToolUseGuardResult callGuard = guard.Evaluate(requiresExternalEffect, true, externalEffectEvidence, failureFingerprint);
if (callGuard.Decision == ToolUseGuardDecision.Fail) throw new InvalidOperationException(callGuard.Observation);
+ if (callGuard.Decision == ToolUseGuardDecision.Retry)
+ messages.Add(new OllamaMessage("system", callGuard.Observation + " Required effect Tool(s) for the current Task: " +
+ string.Join(", ", plannerTask.RequiredEffectTools.Order(StringComparer.Ordinal)) + "."));
continue;
}