last ...
This commit is contained in:
+173
-3
@@ -9,6 +9,7 @@ using xAiApi.AI.Configuration;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Microsoft.SemanticKernel.ChatCompletion;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace xAiApi.AI.Services
|
||||
{
|
||||
@@ -155,7 +156,85 @@ namespace xAiApi.AI.Services
|
||||
// Generate Response ...
|
||||
var result = await TextGenreatorClient
|
||||
.GetResponseAsync(
|
||||
chatMessage: prompt,
|
||||
chatMessage: prompt,
|
||||
options: ChatOptions,
|
||||
cancellationToken: cancellationToken
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generated Response ...
|
||||
/// </summary>
|
||||
/// <param name="message">ChatMessage instance</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<ChatResponse> GetResponseByChatMessageAsync(
|
||||
ChatMessage message,
|
||||
CancellationToken cancellationToken = default
|
||||
)
|
||||
{
|
||||
//
|
||||
// Validate ...
|
||||
var isValid = !message.IsNull() && !message.Contents.HasChild();
|
||||
if (!isValid)
|
||||
{
|
||||
XException.InvalidArgs.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Preparing Prompt ...
|
||||
var prompt = await PreparePrompt(
|
||||
message: message,
|
||||
cancellationToken: cancellationToken
|
||||
);
|
||||
|
||||
//
|
||||
// Generate Response ...
|
||||
var result = await TextGenreatorClient
|
||||
.GetResponseAsync(
|
||||
chatMessage: prompt,
|
||||
options: ChatOptions,
|
||||
cancellationToken: cancellationToken
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generated Response ...
|
||||
/// </summary>
|
||||
/// <param name="messages">ChatMessage Enumerable instance</param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<ChatResponse> GetResponseByChatMessagesAsync(
|
||||
IEnumerable<ChatMessage> messages,
|
||||
CancellationToken cancellationToken = default
|
||||
)
|
||||
{
|
||||
//
|
||||
// Validate ...
|
||||
var isValid = !messages.IsNull() && messages.HasChild();
|
||||
if (!isValid)
|
||||
{
|
||||
XException.InvalidArgs.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Preparing Prompt ...
|
||||
var prompt = await PreparePrompt(
|
||||
messages: messages,
|
||||
cancellationToken: cancellationToken
|
||||
);
|
||||
|
||||
//
|
||||
// Generate Response ...
|
||||
var result = await TextGenreatorClient
|
||||
.GetResponseAsync(
|
||||
messages: prompt,
|
||||
options: ChatOptions,
|
||||
cancellationToken: cancellationToken
|
||||
);
|
||||
@@ -191,7 +270,59 @@ namespace xAiApi.AI.Services
|
||||
/// <param name="prompt"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public IAsyncEnumerable<ChatResponseUpdate> GetTextReponseStreamAsync(
|
||||
public async IAsyncEnumerable<string> GetTextReponseStreamAsync(
|
||||
string prompt,
|
||||
[EnumeratorCancellation]
|
||||
CancellationToken cancellationToken = default
|
||||
)
|
||||
{
|
||||
//
|
||||
// Validate ...
|
||||
var isValid = !prompt.IsNullOrEmpty();
|
||||
if (!isValid)
|
||||
{
|
||||
XException.InvalidArgs.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Preparing Prompt ...
|
||||
prompt = PreparePrompt(
|
||||
prompt: prompt,
|
||||
cancellationToken: cancellationToken
|
||||
)
|
||||
.RunTask();
|
||||
|
||||
//
|
||||
// Generate Response ...
|
||||
var stream = TextGenreatorClient
|
||||
.GetStreamingResponseAsync(
|
||||
chatMessage: prompt,
|
||||
options: ChatOptions,
|
||||
cancellationToken: cancellationToken
|
||||
);
|
||||
|
||||
//
|
||||
await foreach (var response in stream)
|
||||
{
|
||||
//
|
||||
if (response.IsNull())
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
//
|
||||
var model = response.Text;
|
||||
yield return model;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate Text Response Stream ...
|
||||
/// </summary>
|
||||
/// <param name="prompt"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public IAsyncEnumerable<ChatResponseUpdate> GetReponseStreamAsync(
|
||||
string prompt,
|
||||
CancellationToken cancellationToken = default
|
||||
)
|
||||
@@ -248,7 +379,46 @@ namespace xAiApi.AI.Services
|
||||
)
|
||||
{
|
||||
//
|
||||
return await Task.FromResult(prompt);
|
||||
return await Task.Run(() =>
|
||||
{
|
||||
return prompt;
|
||||
}, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Preparing Prompt for AI ...
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<ChatMessage> PreparePrompt(
|
||||
ChatMessage message,
|
||||
CancellationToken cancellationToken = default
|
||||
)
|
||||
{
|
||||
//
|
||||
return await Task.Run(() =>
|
||||
{
|
||||
return message;
|
||||
}, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Preparing Prompt for AI ...
|
||||
/// </summary>
|
||||
/// <param name="messages"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<IEnumerable<ChatMessage>> PreparePrompt(
|
||||
IEnumerable<ChatMessage> messages,
|
||||
CancellationToken cancellationToken = default
|
||||
)
|
||||
{
|
||||
//
|
||||
return await Task.Run(() =>
|
||||
{
|
||||
return messages;
|
||||
}, cancellationToken);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user