You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

OpenAIChatCompletionMiddlewareTests.cs 2.8 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright (c) Microsoft Corporation. All rights reserved.
  2. // OpenAIChatCompletionMiddlewareTests.cs
  3. using System.ClientModel;
  4. using System.ClientModel.Primitives;
  5. using AutoGen.Core;
  6. using AutoGen.OpenAI;
  7. using AutoGen.OpenAI.Extension;
  8. using FluentAssertions;
  9. using Microsoft.AspNetCore.Hosting;
  10. using Microsoft.AspNetCore.TestHost;
  11. using Microsoft.Extensions.DependencyInjection;
  12. using Microsoft.Extensions.Hosting;
  13. using OpenAI;
  14. namespace AutoGen.WebAPI.Tests;
  15. public class OpenAIChatCompletionMiddlewareTests
  16. {
  17. [Fact]
  18. public async Task ItReturnTextMessageWhenSendTextMessage()
  19. {
  20. var agent = new EchoAgent("test");
  21. var hostBuilder = CreateHostBuilder(agent);
  22. using var host = await hostBuilder.StartAsync();
  23. var client = host.GetTestClient();
  24. var openaiClient = CreateOpenAIClient(client);
  25. var openAIAgent = new OpenAIChatAgent(openaiClient.GetChatClient("test"), "test")
  26. .RegisterMessageConnector();
  27. var response = await openAIAgent.SendAsync("Hey");
  28. response.GetContent().Should().Be("Hey");
  29. response.Should().BeOfType<TextMessage>();
  30. response.From.Should().Be("test");
  31. }
  32. [Fact]
  33. public async Task ItReturnTextMessageWhenSendTextMessageUseStreaming()
  34. {
  35. var agent = new EchoAgent("test");
  36. var hostBuilder = CreateHostBuilder(agent);
  37. using var host = await hostBuilder.StartAsync();
  38. var client = host.GetTestClient();
  39. var openaiClient = CreateOpenAIClient(client);
  40. var openAIAgent = new OpenAIChatAgent(openaiClient.GetChatClient("test"), "test")
  41. .RegisterMessageConnector();
  42. var message = new TextMessage(Role.User, "ABCDEFGHIJKLMN");
  43. var chunks = new List<IMessage>();
  44. await foreach (var chunk in openAIAgent.GenerateStreamingReplyAsync([message]))
  45. {
  46. chunk.Should().BeOfType<TextMessageUpdate>();
  47. chunks.Add(chunk);
  48. }
  49. var mergedChunks = string.Join("", chunks.Select(c => c.GetContent()));
  50. mergedChunks.Should().Be("ABCDEFGHIJKLMN");
  51. chunks.Count.Should().Be(14);
  52. }
  53. private IHostBuilder CreateHostBuilder(IAgent agent)
  54. {
  55. return new HostBuilder()
  56. .ConfigureWebHost(webHost =>
  57. {
  58. webHost.UseTestServer();
  59. webHost.Configure(app =>
  60. {
  61. app.UseAgentAsOpenAIChatCompletionEndpoint(agent);
  62. });
  63. });
  64. }
  65. private OpenAIClient CreateOpenAIClient(HttpClient client)
  66. {
  67. return new OpenAIClient(new ApiKeyCredential("api-key"), new OpenAIClientOptions
  68. {
  69. Transport = new HttpClientPipelineTransport(client),
  70. });
  71. }
  72. }