microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
feature/launch-settings-samples

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.AI/Prompts/ChatPrompt/ChatPrompt.Send.cs

109lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4using Microsoft.Teams.AI.Messages;
5using Microsoft.Teams.AI.Models;
6
7namespace Microsoft.Teams.AI.Prompts;
8
9public partial class ChatPrompt<TOptions>
10{
11 public async Task<IMessage> Send(IMessage message, CancellationToken cancellationToken = default)
12 {
13 var buffer = string.Empty;
14 var prompt = Template is not null ? await Template.Render() : null;
15 var res = await Model.Send(message, new(Invoke)
16 {
17 Functions = Functions.List,
18 Messages = Messages,
19 Prompt = prompt is null ? null : new DeveloperMessage(prompt),
20 }, cancellationToken);
21
22 return res;
23 }
24
25 public Task<ModelMessage<string>> Send(string text, IChatPrompt<TOptions>.RequestOptions? options = null, OnStreamChunk? onChunk = null, CancellationToken cancellationToken = default)
26 {
27 var message = UserMessage.Text(text);
28 return Send((IMessage)message, options, onChunk, cancellationToken);
29 }
30
31 public Task<ModelMessage<string>> Send(IContent[] content, IChatPrompt<TOptions>.RequestOptions? options = null, OnStreamChunk? onChunk = null, CancellationToken cancellationToken = default)
32 {
33 var message = UserMessage.Text(content);
34 return Send((IMessage)message, options, onChunk, cancellationToken);
35 }
36
37 public Task<ModelMessage<string>> Send(UserMessage<string> message, IChatPrompt<TOptions>.RequestOptions? options = null, OnStreamChunk? onChunk = null, CancellationToken cancellationToken = default)
38 {
39 return Send((IMessage)message, options, onChunk, cancellationToken);
40 }
41
42 public Task<ModelMessage<string>> Send(UserMessage<IEnumerable<IContent>> message, IChatPrompt<TOptions>.RequestOptions? options = null, OnStreamChunk? onChunk = null, CancellationToken cancellationToken = default)
43 {
44 return Send((IMessage)message, options, onChunk, cancellationToken);
45 }
46
47 public async Task<ModelMessage<string>> Send(IMessage message, IChatPrompt<TOptions>.RequestOptions? options = null, OnStreamChunk? onChunk = null, CancellationToken cancellationToken = default)
48 {
49 var messages = options?.Messages ?? Messages;
50 var buffer = string.Empty;
51 var prompt = Template is not null ? await Template.Render(null, cancellationToken) : null;
52
53 async Task OnChunk(string chunk)
54 {
55 if (chunk == string.Empty || onChunk is null) return;
56 buffer += chunk;
57
58 try
59 {
60 await onChunk(buffer);
61 buffer = string.Empty;
62 }
63 catch { return; }
64 }
65
66 ChatModelOptions<TOptions> requestOptions = new(Invoke)
67 {
68 Functions = Functions.List,
69 Messages = messages,
70 Prompt = prompt is null ? null : new DeveloperMessage(prompt),
71 Options = options is null ? default : options.Request,
72 };
73
74 ModelMessage<string>? res;
75
76 try
77 {
78 Logger.Debug(message);
79
80 foreach (var plugin in Plugins)
81 {
82 message = await plugin.OnBeforeSend(this, message, requestOptions.Options, cancellationToken);
83 }
84
85 if (onChunk is null)
86 {
87 res = await Model.Send(message, requestOptions, cancellationToken);
88 }
89 else
90 {
91 res = await Model.Send(message, requestOptions, new Stream(OnChunk), cancellationToken);
92 }
93
94 Logger.Debug(res);
95
96 foreach (var plugin in Plugins)
97 {
98 res = (ModelMessage<string>)await plugin.OnAfterSend(this, res, requestOptions.Options, cancellationToken);
99 }
100
101 return res;
102 }
103 catch (Exception ex)
104 {
105 ErrorEvent(Model, ex);
106 throw new Exception("an error occured while attempting to send the message", ex);
107 }
108 }
109}