diff --git a/src/Extensions/Chat.cs b/src/Extensions/Chat.cs index 4cc595a..e5421ac 100644 --- a/src/Extensions/Chat.cs +++ b/src/Extensions/Chat.cs @@ -41,6 +41,15 @@ public void Add(string role, string message) _ => new ChatRole(role) }, message)); + /// Creates a user message. + public static ChatMessage User(string message) => new(ChatRole.User, message); + + /// Creates an assistant message. + public static ChatMessage Assistant(string message) => new(ChatRole.Assistant, message); + + /// Creates a system message. + public static ChatMessage System(string message) => new(ChatRole.System, message); + IEnumerator IEnumerable.GetEnumerator() => messages.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => messages.GetEnumerator(); diff --git a/src/Tests/ChatExtensionsTests.cs b/src/Tests/ChatExtensionsTests.cs new file mode 100644 index 0000000..80b88ac --- /dev/null +++ b/src/Tests/ChatExtensionsTests.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Devlooped.Extensions.AI; +using Microsoft.Extensions.AI; +using static Devlooped.Extensions.AI.Chat; + +namespace Devlooped; + +public class ChatExtensionsTests +{ + [Fact] + public void FactoryMethods() + { + var message = User("hello"); + + Assert.Equal(ChatRole.User, message.Role); + Assert.Equal("hello", message.Text); + + message = Assistant("hello"); + + Assert.Equal(ChatRole.Assistant, message.Role); + Assert.Equal("hello", message.Text); + + // Can't use System without qualifying since it's also a namespace. + message = Chat.System("hello"); + Assert.Equal(ChatRole.System, message.Role); + Assert.Equal("hello", message.Text); + } +}