Merge pull request #538 from iceljc/features/refine-send-http-request

refine http handler
This commit is contained in:
C. Oceania 2024-07-11 16:39:50 -05:00 committed by GitHub
commit 30c809ed37
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -39,7 +39,7 @@ public class HandleHttpRequestFn : IFunctionCallback
{ {
var response = await SendHttpRequest(url, method, content); var response = await SendHttpRequest(url, method, content);
var responseContent = await HandleHttpResponse(response); var responseContent = await HandleHttpResponse(response);
message.RichContent = BuildRichContent(responseContent); message.Content = responseContent;
message.StopCompletion = true; message.StopCompletion = true;
return true; return true;
} }
@ -47,7 +47,7 @@ public class HandleHttpRequestFn : IFunctionCallback
{ {
var msg = $"Fail when sending http request. Url: {url}, method: {method}, content: {content}"; var msg = $"Fail when sending http request. Url: {url}, method: {method}, content: {content}";
_logger.LogWarning($"{msg}\n(Error: {ex.Message})"); _logger.LogWarning($"{msg}\n(Error: {ex.Message})");
message.RichContent = BuildRichContent($"{msg}"); message.Content = msg;
message.StopCompletion = true; message.StopCompletion = true;
return false; return false;
} }
@ -57,21 +57,14 @@ public class HandleHttpRequestFn : IFunctionCallback
{ {
if (string.IsNullOrEmpty(url)) return null; if (string.IsNullOrEmpty(url)) return null;
var settings = _services.GetRequiredService<HttpHandlerSettings>();
using var client = _httpClientFactory.CreateClient(); using var client = _httpClientFactory.CreateClient();
AddRequestHeaders(client); AddRequestHeaders(client);
var (uri, request) = BuildHttpRequest(url, method, content); var (uri, request) = BuildHttpRequest(url, method, content);
if (string.IsNullOrEmpty(uri.Host))
{
client.BaseAddress = new Uri(settings.BaseAddress);
}
var response = await client.SendAsync(request); var response = await client.SendAsync(request);
if (response == null || !response.IsSuccessStatusCode) if (response == null || !response.IsSuccessStatusCode)
{ {
throw new Exception($"Status code: {response?.StatusCode}"); _logger.LogWarning($"Response status code: {response?.StatusCode}");
} }
return response; return response;
@ -94,17 +87,24 @@ public class HandleHttpRequestFn : IFunctionCallback
var httpMethod = GetHttpMethod(method); var httpMethod = GetHttpMethod(method);
StringContent httpContent; StringContent httpContent;
var requestUrl = url;
if (httpMethod == HttpMethod.Get) if (httpMethod == HttpMethod.Get)
{ {
httpContent = BuildHttpContent("{}"); httpContent = BuildHttpContent("{}");
requestUrl = BuildQuery(url, content);
} }
else else
{ {
httpContent = BuildHttpContent(content); httpContent = BuildHttpContent(content);
} }
var requestUrl = BuildQuery(url, content); if (!Uri.TryCreate(requestUrl, UriKind.Absolute, out var uri))
var uri = new Uri(requestUrl); {
var settings = _services.GetRequiredService<HttpHandlerSettings>();
var baseUri = new Uri(settings.BaseAddress);
uri = new Uri(baseUri, requestUrl);
}
return (uri, new HttpRequestMessage return (uri, new HttpRequestMessage
{ {
RequestUri = uri, RequestUri = uri,
@ -195,17 +195,4 @@ public class HandleHttpRequestFn : IFunctionCallback
return await response.Content.ReadAsStringAsync(); return await response.Content.ReadAsStringAsync();
} }
private RichContent<IRichMessage> BuildRichContent(string? content)
{
var state = _services.GetRequiredService<IConversationStateService>();
var text = !string.IsNullOrEmpty(content) ? content : "Cannot get any response from the http request.";
return new RichContent<IRichMessage>
{
Recipient = new Recipient { Id = state.GetConversationId() },
Editor = EditorTypeEnum.Text,
Message = new TextMessage(text)
};
}
} }