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.7 kB

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