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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. [Trait("Category", "UnitV1")]
  16. public class OpenAIChatCompletionMiddlewareTests
  17. {
  18. [Fact]
  19. public async Task ItReturnTextMessageWhenSendTextMessage()
  20. {
  21. var agent = new EchoAgent("test");
  22. var hostBuilder = CreateHostBuilder(agent);
  23. using var host = await hostBuilder.StartAsync();
  24. var client = host.GetTestClient();
  25. var openaiClient = CreateOpenAIClient(client);
  26. var openAIAgent = new OpenAIChatAgent(openaiClient.GetChatClient("test"), "test")
  27. .RegisterMessageConnector();
  28. var response = await openAIAgent.SendAsync("Hey");
  29. response.GetContent().Should().Be("Hey");
  30. response.Should().BeOfType<TextMessage>();
  31. response.From.Should().Be("test");
  32. }
  33. [Fact]
  34. public async Task ItReturnTextMessageWhenSendTextMessageUseStreaming()
  35. {
  36. var agent = new EchoAgent("test");
  37. var hostBuilder = CreateHostBuilder(agent);
  38. using var host = await hostBuilder.StartAsync();
  39. var client = host.GetTestClient();
  40. var openaiClient = CreateOpenAIClient(client);
  41. var openAIAgent = new OpenAIChatAgent(openaiClient.GetChatClient("test"), "test")
  42. .RegisterMessageConnector();
  43. var message = new TextMessage(Role.User, "ABCDEFGHIJKLMN");
  44. var chunks = new List<IMessage>();
  45. await foreach (var chunk in openAIAgent.GenerateStreamingReplyAsync([message]))
  46. {
  47. chunk.Should().BeOfType<TextMessageUpdate>();
  48. chunks.Add(chunk);
  49. }
  50. var mergedChunks = string.Join("", chunks.Select(c => c.GetContent()));
  51. mergedChunks.Should().Be("ABCDEFGHIJKLMN");
  52. chunks.Count.Should().Be(14);
  53. }
  54. private IHostBuilder CreateHostBuilder(IAgent agent)
  55. {
  56. return new HostBuilder()
  57. .ConfigureWebHost(webHost =>
  58. {
  59. webHost.UseTestServer();
  60. webHost.Configure(app =>
  61. {
  62. app.UseAgentAsOpenAIChatCompletionEndpoint(agent);
  63. });
  64. });
  65. }
  66. private OpenAIClient CreateOpenAIClient(HttpClient client)
  67. {
  68. return new OpenAIClient(new ApiKeyCredential("api-key"), new OpenAIClientOptions
  69. {
  70. Transport = new HttpClientPipelineTransport(client),
  71. });
  72. }
  73. }