Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8d0ce94fe | ||
|
|
f34756f4bb |
@@ -116,25 +116,27 @@ public sealed class AgentEngineConcurrencyTests
|
|||||||
{
|
{
|
||||||
// Wichtige Gegenprobe: Der Fix für B2 darf nicht versehentlich alle Agenten
|
// Wichtige Gegenprobe: Der Fix für B2 darf nicht versehentlich alle Agenten
|
||||||
// gegeneinander sperren.
|
// gegeneinander sperren.
|
||||||
var toolDelay = TimeSpan.FromMilliseconds(200);
|
//
|
||||||
var fixture = new EngineFixture().WithTool(FakeTool.Slow(toolDelay));
|
// Bis zum 2026-09-24 antwortete die Attrappe hier nur mit Text: Das langsame
|
||||||
|
// Werkzeug lief nie, die Läufe waren sofort fertig, und geprüft wurde nur, ob drei
|
||||||
|
// leere Läufe unter 450 ms bleiben. Das bestand auch mit gegenseitig gesperrten
|
||||||
|
// Agenten - und schlug unter Last fehl, weil es die Maschine mass statt der Engine.
|
||||||
|
// Jetzt ruft jeder Agent das Werkzeug wirklich auf, und bewiesen wird die Überlappung.
|
||||||
|
var tool = FakeTool.Slow(TimeSpan.FromMilliseconds(500));
|
||||||
|
var fixture = new EngineFixture().WithTool(tool);
|
||||||
|
|
||||||
var a = fixture.AddAgent("agent-1", "TestTool");
|
var a = fixture.AddAgent("agent-1", "TestTool");
|
||||||
var b = fixture.AddAgent("agent-2", "TestTool");
|
var b = fixture.AddAgent("agent-2", "TestTool");
|
||||||
var c = fixture.AddAgent("agent-3", "TestTool");
|
var c = fixture.AddAgent("agent-3", "TestTool");
|
||||||
|
|
||||||
fixture.Client.AlwaysRespondsWithText("Antwort");
|
fixture.Client.RespondsContextually("TestTool");
|
||||||
|
|
||||||
var sw = System.Diagnostics.Stopwatch.StartNew();
|
|
||||||
await Task.WhenAll(
|
await Task.WhenAll(
|
||||||
fixture.Engine.ChatAsync(a, "x", "test-instance", default),
|
fixture.Engine.ChatAsync(a, "x", "test-instance", default),
|
||||||
fixture.Engine.ChatAsync(b, "x", "test-instance", default),
|
fixture.Engine.ChatAsync(b, "x", "test-instance", default),
|
||||||
fixture.Engine.ChatAsync(c, "x", "test-instance", default));
|
fixture.Engine.ChatAsync(c, "x", "test-instance", default));
|
||||||
sw.Stop();
|
|
||||||
|
|
||||||
// Seriell wären es mindestens 3 × 200 ms. Parallel deutlich weniger.
|
tool.MaxConcurrent.ShouldBeGreaterThan(1, "Agenten dürfen sich nicht gegenseitig blockieren");
|
||||||
sw.Elapsed.ShouldBeLessThan(TimeSpan.FromMilliseconds(450),
|
|
||||||
"Agenten dürfen sich nicht gegenseitig blockieren");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task WaitUntilAsync(Func<bool> condition, int timeoutMs = 2_000)
|
private static async Task WaitUntilAsync(Func<bool> condition, int timeoutMs = 2_000)
|
||||||
|
|||||||
Reference in New Issue
Block a user