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 AutoGen.Core;
  4. using AutoGen.OpenAI;
  5. using AutoGen.OpenAI.Extension;
  6. using Azure.AI.OpenAI;
  7. using Azure.Core.Pipeline;
  8. using FluentAssertions;
  9. using Microsoft.AspNetCore.Hosting;
  10. using Microsoft.AspNetCore.TestHost;
  11. using Microsoft.Extensions.DependencyInjection;
  12. using Microsoft.Extensions.Hosting;
  13. namespace AutoGen.Service.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, "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, "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. var clientOption = new OpenAIClientOptions(OpenAIClientOptions.ServiceVersion.V2024_02_15_Preview)
  67. {
  68. Transport = new HttpClientTransport(client),
  69. };
  70. return new OpenAIClient("api-key", clientOption);
  71. }
  72. }