This commit is contained in:
2026-04-15 00:34:05 +03:30
parent 5b90d694dc
commit 62c54a3d4c
7 changed files with 68 additions and 19 deletions
+2
View File
@@ -0,0 +1,2 @@
bin
obj
+2
View File
@@ -6,5 +6,7 @@ namespace xAiService.Constants
{ {
[StringValue("AskAI")] [StringValue("AskAI")]
Ask, Ask,
[StringValue("AskAIStream")]
Stream,
} }
} }
+24 -3
View File
@@ -47,11 +47,11 @@ namespace xAiService.Controllers
try try
{ {
// //
var tokens = Ex(); var userInfo = await GetUserInfo();
var result = await aiService var result = await aiService
.GetTextResponseAsync( .GetTextResponseAsync(
prompt: prompt, prompt: prompt,
tokens: tokens, userInfo: userInfo,
cancellationToken: cancellationToken cancellationToken: cancellationToken
); );
@@ -67,12 +67,33 @@ namespace xAiService.Controllers
} }
[HttpGet("AskStream")] [HttpGet("AskStream")]
public async Task AskAIStream( public async Task<ActionResult> AskAIStream(
[FromQuery] string prompt, [FromQuery] string prompt,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
) )
{ {
//
// Do ...
try
{
//
var userInfo = await GetUserInfo();
var result = aiService
.GetTextReponseStreamAsync(
prompt: prompt,
userInfo: userInfo,
cancellationToken: cancellationToken
);
//
return Ok(result);
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
} }
#endregion #endregion
} }
+5 -1
View File
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.AI; using Microsoft.Extensions.AI;
@@ -21,6 +22,7 @@ namespace xAiService.Interfaces
/// Generated Response ... /// Generated Response ...
/// </summary> /// </summary>
/// <param name="prompt"></param> /// <param name="prompt"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
public Task<ChatResponse> GetResponseAsync( public Task<ChatResponse> GetResponseAsync(
@@ -33,6 +35,7 @@ namespace xAiService.Interfaces
/// Generated Response ... /// Generated Response ...
/// </summary> /// </summary>
/// <param name="prompt"></param> /// <param name="prompt"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
public Task<string> GetTextResponseAsync( public Task<string> GetTextResponseAsync(
@@ -45,9 +48,10 @@ namespace xAiService.Interfaces
/// Generate Text Response Stream ... /// Generate Text Response Stream ...
/// </summary> /// </summary>
/// <param name="prompt"></param> /// <param name="prompt"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
Task GetTextReponseStreamAsync( IAsyncEnumerable<string> GetTextReponseStreamAsync(
string prompt, string prompt,
XUserClaimsInfoDto userInfo, XUserClaimsInfoDto userInfo,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
+5
View File
@@ -10,5 +10,10 @@ namespace xAiService.Interfaces
[FromQuery] string prompt, [FromQuery] string prompt,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
); );
Task<ActionResult> AskAIStream(
[FromQuery] string prompt,
CancellationToken cancellationToken = default
);
} }
} }
+11
View File
@@ -0,0 +1,11 @@
# xSaherElm.xAiService
it is a Part of xSaherElm Project which integrate and provides all xAiApi features.
## Maintainer
Hadi Khazaee asl
[https://www.saherelm.ir](https://www.saherelm.ir)
[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com)
+18 -14
View File
@@ -45,6 +45,7 @@ namespace xAiService.Services
/// Generated Response ... /// Generated Response ...
/// </summary> /// </summary>
/// <param name="prompt"></param> /// <param name="prompt"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
public Task<ChatResponse> GetResponseAsync( public Task<ChatResponse> GetResponseAsync(
@@ -60,6 +61,7 @@ namespace xAiService.Services
/// Generated Response ... /// Generated Response ...
/// </summary> /// </summary>
/// <param name="prompt"></param> /// <param name="prompt"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
public async Task<string> GetTextResponseAsync( public async Task<string> GetTextResponseAsync(
@@ -99,9 +101,10 @@ namespace xAiService.Services
/// Generate Text Response Stream ... /// Generate Text Response Stream ...
/// </summary> /// </summary>
/// <param name="prompt"></param> /// <param name="prompt"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
public async Task GetTextReponseStreamAsync( public IAsyncEnumerable<string> GetTextReponseStreamAsync(
string prompt, string prompt,
XUserClaimsInfoDto userInfo, XUserClaimsInfoDto userInfo,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
@@ -109,13 +112,22 @@ namespace xAiService.Services
{ {
// //
// Validate Args ... // Validate Args ...
ValidationProvider.NotEmpty(prompt); ValidationProvider
.GroupValidationBuilder()
.AddNotEmpty(prompt)
.AddNotNull(userInfo)
.AddNotZero(userInfo.ExpiresAt)
.AddNotEmpty(userInfo.AccessToken)
.AddNotEmpty(userInfo.RefreshToken)
.ValidateGroup();
// //
var client = GetRestClient(userInfo); var tokens = ToTokenResponse(userInfo);
var request = GetRestRequet( var result = StreamData<string>(
endpoint: XAiApiEndpoint.Ask, tokens: tokens,
addXPoweredValue: true, addXPoweredValue: true,
endpoint: XAiApiEndpoint.Stream,
cancellationToken: cancellationToken,
queryStrings: new Dictionary<string, string> queryStrings: new Dictionary<string, string>
{ {
{ XAiApiQueryParams.Prompt, prompt } { XAiApiQueryParams.Prompt, prompt }
@@ -123,15 +135,7 @@ namespace xAiService.Services
); );
// //
var response = await RunRestRequest<string>( return result;
client,
request,
XHttpMethod.GET,
cancellationToken: cancellationToken
);
//
return response;
} }
#endregion #endregion
} }