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.

AgentChatSmokeTest.cs 3.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // Copyright (c) Microsoft Corporation. All rights reserved.
  2. // AgentChatSmokeTest.cs
  3. using Microsoft.AutoGen.AgentChat.Abstractions;
  4. using Microsoft.AutoGen.AgentChat.Agents;
  5. using Microsoft.AutoGen.AgentChat.GroupChat;
  6. using Microsoft.AutoGen.AgentChat.Terminations;
  7. using Xunit;
  8. namespace Microsoft.AutoGen.AgentChat.Tests;
  9. public class AgentChatSmokeTest
  10. {
  11. public class SpeakMessageAgent : ChatAgentBase
  12. {
  13. public SpeakMessageAgent(string name, string description, string content) : base(name, description)
  14. {
  15. this.Content = content;
  16. }
  17. public string Content { get; private set; }
  18. public override IEnumerable<Type> ProducedMessageTypes => [typeof(HandoffMessage)];
  19. public override ValueTask<Response> HandleAsync(IEnumerable<ChatMessage> item, CancellationToken cancellationToken)
  20. {
  21. Response result = new()
  22. {
  23. Message = new TextMessage { Content = this.Content, Source = this.Name }
  24. };
  25. return ValueTask.FromResult(result);
  26. }
  27. public override ValueTask ResetAsync(CancellationToken cancellationToken)
  28. {
  29. return ValueTask.CompletedTask;
  30. }
  31. }
  32. public class TerminatingAgent : ChatAgentBase
  33. {
  34. public List<ChatMessage>? IncomingMessages { get; private set; }
  35. public TerminatingAgent(string name, string description) : base(name, description)
  36. {
  37. }
  38. public override IEnumerable<Type> ProducedMessageTypes => [typeof(StopMessage)];
  39. public override ValueTask<Response> HandleAsync(IEnumerable<ChatMessage> item, CancellationToken cancellationToken)
  40. {
  41. this.IncomingMessages = item.ToList();
  42. string content = "Terminating";
  43. if (item.Any())
  44. {
  45. ChatMessage lastMessage = item.Last();
  46. switch (lastMessage)
  47. {
  48. case TextMessage textMessage:
  49. content = $"Terminating; got: {textMessage.Content}";
  50. break;
  51. case HandoffMessage handoffMessage:
  52. content = $"Terminating; got handoff: {handoffMessage.Context}";
  53. break;
  54. }
  55. }
  56. Response result = new()
  57. {
  58. Message = new StopMessage { Content = content, Source = this.Name }
  59. };
  60. return ValueTask.FromResult(result);
  61. }
  62. public override ValueTask ResetAsync(CancellationToken cancellationToken)
  63. {
  64. this.IncomingMessages = null;
  65. return ValueTask.CompletedTask;
  66. }
  67. }
  68. [Fact]
  69. public async Task Test_RoundRobin_SpeakAndTerminating()
  70. {
  71. TerminatingAgent terminatingAgent = new("Terminate", "Terminate");
  72. ITeam chat = new RoundRobinGroupChat(
  73. [
  74. new SpeakMessageAgent("Speak", "Speak", "Hello"),
  75. terminatingAgent
  76. ],
  77. terminationCondition: new StopMessageTermination());
  78. TaskResult result = await chat.RunAsync("");
  79. Assert.Equal(3, result.Messages.Count);
  80. Assert.Equal("", Assert.IsType<TextMessage>(result.Messages[0]).Content);
  81. Assert.Equal("Hello", Assert.IsType<TextMessage>(result.Messages[1]).Content);
  82. Assert.Equal("Terminating; got: Hello", Assert.IsType<StopMessage>(result.Messages[2]).Content);
  83. }
  84. }