-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathRuntimeCommunicationProblems.cs
More file actions
130 lines (116 loc) · 5.48 KB
/
RuntimeCommunicationProblems.cs
File metadata and controls
130 lines (116 loc) · 5.48 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System.Globalization;
using System.Net;
using DotPilot.Core.Features.ControlPlaneDomain;
using ManagedCode.Communication;
namespace DotPilot.Core.Features.RuntimeCommunication;
public static class RuntimeCommunicationProblems
{
private const string PromptField = "Prompt";
private const string PromptRequiredDetail = "Prompt is required before the runtime can execute a turn.";
private const string ProviderUnavailableFormat = "{0} is unavailable in the current environment.";
private const string ProviderAuthenticationRequiredFormat = "{0} requires authentication before the runtime can execute a turn.";
private const string ProviderMisconfiguredFormat = "{0} is misconfigured and cannot execute a runtime turn.";
private const string ProviderOutdatedFormat = "{0} is outdated and must be updated before the runtime can execute a turn.";
private const string RuntimeHostUnavailableDetail = "The embedded runtime host is unavailable for the requested operation.";
private const string OrchestrationUnavailableDetail = "The orchestration runtime is unavailable for the requested operation.";
private const string PolicyRejectedFormat = "The requested action was rejected by policy: {0}.";
private const string SessionArchiveMissingFormat = "No persisted runtime session archive exists for session {0}.";
private const string ResumeCheckpointMissingFormat = "Session {0} does not have a checkpoint that can be resumed.";
private const string SessionArchiveCorruptedFormat = "Session {0} has corrupted persisted runtime state.";
public static Problem InvalidPrompt()
{
var problem = Problem.Create(
RuntimeCommunicationProblemCode.PromptRequired,
PromptRequiredDetail,
(int)HttpStatusCode.BadRequest);
problem.AddValidationError(PromptField, PromptRequiredDetail);
return problem;
}
public static Problem ProviderUnavailable(ProviderConnectionStatus status, string providerDisplayName)
{
ArgumentException.ThrowIfNullOrWhiteSpace(providerDisplayName);
return status switch
{
ProviderConnectionStatus.Available => throw new ArgumentOutOfRangeException(nameof(status), status, "Available status does not map to a problem."),
ProviderConnectionStatus.Unavailable => CreateProblem(
RuntimeCommunicationProblemCode.ProviderUnavailable,
ProviderUnavailableFormat,
providerDisplayName,
HttpStatusCode.ServiceUnavailable),
ProviderConnectionStatus.RequiresAuthentication => CreateProblem(
RuntimeCommunicationProblemCode.ProviderAuthenticationRequired,
ProviderAuthenticationRequiredFormat,
providerDisplayName,
HttpStatusCode.Unauthorized),
ProviderConnectionStatus.Misconfigured => CreateProblem(
RuntimeCommunicationProblemCode.ProviderMisconfigured,
ProviderMisconfiguredFormat,
providerDisplayName,
HttpStatusCode.FailedDependency),
ProviderConnectionStatus.Outdated => CreateProblem(
RuntimeCommunicationProblemCode.ProviderOutdated,
ProviderOutdatedFormat,
providerDisplayName,
HttpStatusCode.PreconditionFailed),
_ => throw new ArgumentOutOfRangeException(nameof(status), status, "Unknown provider status."),
};
}
public static Problem RuntimeHostUnavailable()
{
return Problem.Create(
RuntimeCommunicationProblemCode.RuntimeHostUnavailable,
RuntimeHostUnavailableDetail,
(int)HttpStatusCode.ServiceUnavailable);
}
public static Problem OrchestrationUnavailable()
{
return Problem.Create(
RuntimeCommunicationProblemCode.OrchestrationUnavailable,
OrchestrationUnavailableDetail,
(int)HttpStatusCode.ServiceUnavailable);
}
public static Problem PolicyRejected(string policyName)
{
ArgumentException.ThrowIfNullOrWhiteSpace(policyName);
return CreateProblem(
RuntimeCommunicationProblemCode.PolicyRejected,
PolicyRejectedFormat,
policyName,
HttpStatusCode.Forbidden);
}
public static Problem SessionArchiveMissing(SessionId sessionId)
{
return CreateProblem(
RuntimeCommunicationProblemCode.SessionArchiveMissing,
SessionArchiveMissingFormat,
sessionId.ToString(),
HttpStatusCode.NotFound);
}
public static Problem ResumeCheckpointMissing(SessionId sessionId)
{
return CreateProblem(
RuntimeCommunicationProblemCode.ResumeCheckpointMissing,
ResumeCheckpointMissingFormat,
sessionId.ToString(),
HttpStatusCode.Conflict);
}
public static Problem SessionArchiveCorrupted(SessionId sessionId)
{
return CreateProblem(
RuntimeCommunicationProblemCode.SessionArchiveCorrupted,
SessionArchiveCorruptedFormat,
sessionId.ToString(),
HttpStatusCode.InternalServerError);
}
private static Problem CreateProblem(
RuntimeCommunicationProblemCode code,
string detailFormat,
string value,
HttpStatusCode statusCode)
{
return Problem.Create(
code,
string.Format(CultureInfo.InvariantCulture, detailFormat, value),
(int)statusCode);
}
}