This commit is contained in:
2026-04-17 03:04:14 +03:30
parent 43d0433a8e
commit 8868afe656
5 changed files with 307 additions and 6 deletions
+173 -3
View File
@@ -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
}