Skip to content

Commit 1bf501d

Browse files
waldekmastykarzCopilot
andauthored
Fixes body encoding and prompt type issues in LanguageModelFailurePlugin (dotnet#1643)
Co-authored-by: Copilot <copilot@github.com>
1 parent ffe128f commit 1bf501d

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

DevProxy.Plugins/Behavior/LanguageModelFailurePlugin.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo
7373
return;
7474
}
7575

76-
if (!OpenAIRequest.TryGetCompletionLikeRequest(request.BodyString, Logger, out var openAiRequest))
76+
Logger.LogDebug("Request encoding: {Encoding}", request.Encoding?.EncodingName ?? "null");
77+
var originalBody = System.Text.Encoding.UTF8.GetString(request.Body);
78+
Logger.LogDebug("Original request body:\n{Body}", originalBody);
79+
80+
if (!OpenAIRequest.TryGetCompletionLikeRequest(originalBody, Logger, out var openAiRequest))
7781
{
7882
Logger.LogRequest("Skipping non-OpenAI request", MessageType.Skipped, new LoggingContext(e.Session));
7983
return;
@@ -91,15 +95,17 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo
9195
completionRequest.Prompt += "\n\n" + faultPrompt;
9296
Logger.LogDebug("Modified completion request prompt: {Prompt}", completionRequest.Prompt);
9397
Logger.LogRequest($"Simulating fault {faultName}", MessageType.Chaos, new LoggingContext(e.Session));
94-
e.Session.SetRequestBodyString(JsonSerializer.Serialize(completionRequest, ProxyUtils.JsonSerializerOptions));
98+
var modifiedBody = JsonSerializer.Serialize(completionRequest, ProxyUtils.JsonSerializerOptions);
99+
Logger.LogDebug("Modified request body:\n{Body}", modifiedBody);
100+
e.Session.SetRequestBodyString(modifiedBody);
95101
}
96102
else if (openAiRequest is OpenAIChatCompletionRequest chatRequest)
97103
{
98104
var messages = new List<OpenAIChatCompletionMessage>(chatRequest.Messages)
99105
{
100106
new()
101107
{
102-
Role = "user",
108+
Role = "system",
103109
Content = faultPrompt
104110
}
105111
};
@@ -114,15 +120,17 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo
114120

115121
Logger.LogDebug("Added fault prompt to messages: {Prompt}", faultPrompt);
116122
Logger.LogRequest($"Simulating fault {faultName}", MessageType.Chaos, new LoggingContext(e.Session));
117-
e.Session.SetRequestBodyString(JsonSerializer.Serialize(newRequest, ProxyUtils.JsonSerializerOptions));
123+
var modifiedBody = JsonSerializer.Serialize(newRequest, ProxyUtils.JsonSerializerOptions);
124+
Logger.LogDebug("Modified request body:\n{Body}", modifiedBody);
125+
e.Session.SetRequestBodyString(modifiedBody);
118126
}
119127
else if (openAiRequest is OpenAIResponsesRequest responsesRequest)
120128
{
121129
var inputItems = new List<OpenAIResponsesInputItem>(responsesRequest.Input ?? [])
122130
{
123131
new()
124132
{
125-
Role = "user",
133+
Role = "system",
126134
Content = faultPrompt
127135
}
128136
};
@@ -144,7 +152,9 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo
144152

145153
Logger.LogDebug("Added fault prompt to Responses API input: {Prompt}", faultPrompt);
146154
Logger.LogRequest($"Simulating fault {faultName}", MessageType.Chaos, new LoggingContext(e.Session));
147-
e.Session.SetRequestBodyString(JsonSerializer.Serialize(newRequest, ProxyUtils.JsonSerializerOptions));
155+
var modifiedBody = JsonSerializer.Serialize(newRequest, ProxyUtils.JsonSerializerOptions);
156+
Logger.LogDebug("Modified request body:\n{Body}", modifiedBody);
157+
e.Session.SetRequestBodyString(modifiedBody);
148158
}
149159
else
150160
{

0 commit comments

Comments
 (0)