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.

LLamaSharpChatCompletion.cs 2.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using LLama;
  2. using Microsoft.SemanticKernel.AI.ChatCompletion;
  3. using System.Runtime.CompilerServices;
  4. namespace LLamaSharp.SemanticKernel.ChatCompletion;
  5. /// <summary>
  6. /// LLamaSharp ChatCompletion
  7. /// </summary>
  8. public sealed class LLamaSharpChatCompletion : IChatCompletion
  9. {
  10. private const string UserRole = "user:";
  11. private const string AssistantRole = "assistant:";
  12. private ChatSession session;
  13. private ChatRequestSettings defaultRequestSettings;
  14. public LLamaSharpChatCompletion(InteractiveExecutor model, ChatRequestSettings? defaultRequestSettings = default)
  15. {
  16. this.session = new ChatSession(model)
  17. .WithHistoryTransform(new HistoryTransform())
  18. .WithOutputTransform(new LLamaTransforms.KeywordTextOutputStreamTransform(new string[] { UserRole, AssistantRole }));
  19. this.defaultRequestSettings = defaultRequestSettings ??= new ChatRequestSettings()
  20. {
  21. MaxTokens = 256,
  22. Temperature = 0,
  23. TopP = 0,
  24. StopSequences = new List<string> { }
  25. };
  26. }
  27. public LLamaSharpChatCompletion(ChatSession session, ChatRequestSettings? defaultRequestSettings = default)
  28. {
  29. this.session = session;
  30. this.defaultRequestSettings = defaultRequestSettings ??= new ChatRequestSettings()
  31. {
  32. MaxTokens = 256,
  33. Temperature = 0,
  34. TopP = 0,
  35. StopSequences = new List<string> { }
  36. };
  37. }
  38. /// <inheritdoc/>
  39. public ChatHistory CreateNewChat(string? instructions = "")
  40. {
  41. var history = new ChatHistory();
  42. if (instructions != null && !string.IsNullOrEmpty(instructions))
  43. {
  44. history.AddSystemMessage(instructions);
  45. }
  46. return history;
  47. }
  48. /// <inheritdoc/>
  49. public async Task<IReadOnlyList<IChatResult>> GetChatCompletionsAsync(ChatHistory chat, ChatRequestSettings? requestSettings = null, CancellationToken cancellationToken = default)
  50. {
  51. requestSettings = requestSettings ?? this.defaultRequestSettings;
  52. var result = this.session.ChatAsync(chat.ToLLamaSharpChatHistory(), requestSettings.ToLLamaSharpInferenceParams(), cancellationToken);
  53. return new List<IChatResult> { new LLamaSharpChatResult(result) }.AsReadOnly();
  54. }
  55. /// <inheritdoc/>
  56. public async IAsyncEnumerable<IChatStreamingResult> GetStreamingChatCompletionsAsync(ChatHistory chat, ChatRequestSettings? requestSettings = null, [EnumeratorCancellation] CancellationToken cancellationToken = default)
  57. {
  58. requestSettings = requestSettings ?? this.defaultRequestSettings;
  59. var result = this.session.ChatAsync(chat.ToLLamaSharpChatHistory(), requestSettings.ToLLamaSharpInferenceParams(), cancellationToken);
  60. yield return new LLamaSharpChatResult(result);
  61. }
  62. }