-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDeterministicAgentRuntimeClient.cs
More file actions
60 lines (50 loc) · 2.2 KB
/
DeterministicAgentRuntimeClient.cs
File metadata and controls
60 lines (50 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using DotPilot.Core.Features.ControlPlaneDomain;
using DotPilot.Core.Features.RuntimeCommunication;
using DotPilot.Core.Features.RuntimeFoundation;
using ManagedCode.Communication;
namespace DotPilot.Runtime.Features.RuntimeFoundation;
public sealed class DeterministicAgentRuntimeClient : IAgentRuntimeClient
{
private readonly DeterministicAgentTurnEngine _engine;
public DeterministicAgentRuntimeClient()
: this(TimeProvider.System)
{
}
internal DeterministicAgentRuntimeClient(TimeProvider timeProvider)
{
_engine = new DeterministicAgentTurnEngine(timeProvider);
}
public ValueTask<Result<AgentTurnResult>> ExecuteAsync(AgentTurnRequest request, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
return ValueTask.FromResult(NormalizeArtifacts(_engine.Execute(request)));
}
public ValueTask<Result<AgentTurnResult>> ResumeAsync(AgentTurnResumeRequest request, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
_ = request;
return ValueTask.FromResult(Result<AgentTurnResult>.Fail(RuntimeCommunicationProblems.OrchestrationUnavailable()));
}
public ValueTask<Result<RuntimeSessionArchive>> GetSessionArchiveAsync(SessionId sessionId, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
return ValueTask.FromResult(Result<RuntimeSessionArchive>.Fail(RuntimeCommunicationProblems.SessionArchiveMissing(sessionId)));
}
private static Result<AgentTurnResult> NormalizeArtifacts(Result<AgentTurnResult> result)
{
if (result.IsFailed || result.Value is null)
{
return result;
}
var outcome = result.Value;
var normalizedArtifacts = outcome.ProducedArtifacts
.Select(artifact => artifact with { CreatedAt = RuntimeFoundationDeterministicIdentity.ArtifactCreatedAt })
.ToArray();
return Result<AgentTurnResult>.Succeed(
new AgentTurnResult(
outcome.Summary,
outcome.NextPhase,
outcome.ApprovalState,
normalizedArtifacts));
}
}