diff --git a/Controllers/XAiServiceControllerBase.cs b/Controllers/XAiServiceControllerBase.cs
index 5518da3..85bf350 100644
--- a/Controllers/XAiServiceControllerBase.cs
+++ b/Controllers/XAiServiceControllerBase.cs
@@ -166,11 +166,11 @@ namespace xAiApi.Controllers
//
#region Data Provided Actions ...
///
- /// Load AI Projects ...
+ /// Retrieve AI Projects ...
///
///
///
- [HttpGet("LoadProjects")]
+ [HttpGet("Projects")]
public async Task>> LoadProjects(
CancellationToken cancellationToken = default
)
@@ -178,9 +178,6 @@ namespace xAiApi.Controllers
//
try
{
- //
- // Validate ...
-
//
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
@@ -203,6 +200,199 @@ namespace xAiApi.Controllers
}
}
+ ///
+ /// Retrieve Specified AI Project's Conversations ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("Projects/{projectId}/Conversations")]
+ public async Task>> LoadConversations(
+ [FromRoute] Guid projectId,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ try
+ {
+ //
+ // Validate ...
+ if (projectId.IsDefaultGuid())
+ {
+ XException.InvalidArgs.Throw();
+ }
+
+ //
+ var userInfo = await GetUserInfo();
+ var connectionId = GetConnectionId();
+
+ //
+ var result = await aiService.LoadConversations(
+ projectId: projectId,
+ connectionId: connectionId,
+ cancellationToken: cancellationToken
+ );
+
+ //
+ return Ok(result);
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Retrieve Specified AI Conversation's Messages ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("Conversations/{conversationId}/Messages")]
+ public async Task>> LoadMessages(
+ [FromRoute] Guid conversationId,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ try
+ {
+ //
+ // Validate ...
+ if (conversationId.IsDefaultGuid())
+ {
+ XException.InvalidArgs.Throw();
+ }
+
+ //
+ var result = await aiService.LoadMessages(
+ conversationId: conversationId,
+ cancellationToken: cancellationToken
+ );
+
+ //
+ return Ok(result);
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Create an AI Project ...
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Projects")]
+ public async Task> CreateProject(
+ [FromBody] XAiProjectDto item,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ try
+ {
+ //
+ // Validate ...
+ if (item.IsNullOrDefault())
+ {
+ XException.InvalidArgs.Throw();
+ }
+
+ //
+ var userInfo = await GetUserInfo();
+ var connectionId = GetConnectionId();
+
+ //
+ // Update Required Params ...
+ item.OwnerId = userInfo.UserId;
+ if (!item.IsValidForAddOrUpdate())
+ {
+ XException.InvalidData.Throw();
+ }
+
+ //
+ var result = await aiService.CreateProject(
+ item: item,
+ ownerId: userInfo.UserId,
+ connectionId: connectionId,
+ cancellationToken: cancellationToken
+ );
+
+ //
+ return Ok(result);
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Create an AI Conversation ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Projects/{projectId}/Conversations")]
+ public async Task> CreateConversation(
+ [FromRoute] Guid projectId,
+ [FromBody] XAiConversationDto item,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ try
+ {
+ //
+ // Validate ...
+ if (projectId.IsDefaultGuid() ||
+ item.IsNullOrDefault())
+ {
+ XException.InvalidArgs.Throw();
+ }
+
+ //
+ var userInfo = await GetUserInfo();
+ var connectionId = GetConnectionId();
+
+ //
+ // Update Required Params ...
+ item.OwnerId = userInfo.UserId;
+ if (!item.IsValidForAddOrUpdate())
+ {
+ XException.InvalidData.Throw();
+ }
+
+ //
+ var result = await aiService.CreateConversation(
+ item: item,
+ projectId: projectId,
+ ownerId: userInfo.UserId,
+ connectionId: connectionId,
+ cancellationToken: cancellationToken
+ );
+
+ //
+ return Ok(result);
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
///
/// Ask Question and Get Response ...
///
diff --git a/Interfaces/IXAiServiceBase.cs b/Interfaces/IXAiServiceBase.cs
index c590aa7..7869fb4 100644
--- a/Interfaces/IXAiServiceBase.cs
+++ b/Interfaces/IXAiServiceBase.cs
@@ -100,6 +100,62 @@ namespace xAiApi.Interfaces
CancellationToken cancellationToken = default
);
+ ///
+ /// Load Conversations of Specified AI Project ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> LoadConversations(
+ Guid projectId,
+ string connectionId = null,
+ CancellationToken cancellationToken = default
+ );
+
+ ///
+ /// Load Messages of Specified Conversation ...
+ ///
+ ///
+ ///
+ ///
+ Task> LoadMessages(
+ Guid conversationId,
+ CancellationToken cancellationToken = default
+ );
+
+ ///
+ /// Create an AI Project ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task CreateProject(
+ string ownerId,
+ XAiProjectDto item,
+ string connectionId = null,
+ CancellationToken cancellationToken = default
+ );
+
+ ///
+ /// Create an AI Conversation ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task CreateConversation(
+ string ownerId,
+ Guid projectId,
+ XAiConversationDto item,
+ string connectionId = null,
+ CancellationToken cancellationToken = default
+ );
+
///
/// Ask a Question as Prompt and Retrieve Response ...
///
diff --git a/Interfaces/IXAiServiceControllerBase.cs b/Interfaces/IXAiServiceControllerBase.cs
index 848889e..c733f1f 100644
--- a/Interfaces/IXAiServiceControllerBase.cs
+++ b/Interfaces/IXAiServiceControllerBase.cs
@@ -1,3 +1,4 @@
+using System;
using System.Threading;
using xAiModels.Models;
using xAiModels.Models.Dtos;
@@ -39,15 +40,65 @@ namespace xAiApi.Interfaces
//
#region Data Provided Actions ...
///
- /// Load AI Projects ...
+ /// Retrieve AI Projects ...
///
///
///
- [HttpGet("LoadProjects")]
+ [HttpGet("Projects")]
Task>> LoadProjects(
CancellationToken cancellationToken = default
);
-
+
+ ///
+ /// Retrieve Specified AI Project's Conversations ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("Projects/{projectId}/Conversations")]
+ Task>> LoadConversations(
+ [FromRoute] Guid projectId,
+ CancellationToken cancellationToken = default
+ );
+
+ ///
+ /// Retrieve Specified AI Conversation's Messages ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("Conversations/{conversationId}/Messages")]
+ Task>> LoadMessages(
+ [FromRoute] Guid conversationId,
+ CancellationToken cancellationToken = default
+ );
+
+ ///
+ /// Create an AI Project ...
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Projects")]
+ Task> CreateProject(
+ [FromBody] XAiProjectDto item,
+ CancellationToken cancellationToken = default
+ );
+
+ ///
+ /// Create an AI Conversation ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Projects/{projectId}/Conversations")]
+ Task> CreateConversation(
+ [FromRoute] Guid projectId,
+ [FromBody] XAiConversationDto item,
+ CancellationToken cancellationToken = default
+ );
+
///
/// Ask Question and Get Response ...
///
diff --git a/Providers/XAIServiceBase.cs b/Providers/XAIServiceBase.cs
index 839a39f..63acec0 100644
--- a/Providers/XAIServiceBase.cs
+++ b/Providers/XAIServiceBase.cs
@@ -413,6 +413,123 @@ namespace xAiApi.Providers
return result;
}
+ ///
+ /// Load Conversations of Specified AI Project ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task> LoadConversations(
+ Guid projectId,
+ string connectionId = null,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ // Validate Args ...
+ if (projectId.IsDefaultGuid())
+ {
+ XException.InvalidArgs.Throw();
+ }
+
+ //
+ var result = await dataProvider.LoadConversations(
+ fillMessages: false,
+ projectId: projectId,
+ connectionId: connectionId,
+ cancellationToken: cancellationToken
+ );
+
+ //
+ return result;
+ }
+
+ ///
+ /// Load Messages of Specified Conversation ...
+ ///
+ ///
+ ///
+ ///
+ public async Task> LoadMessages(
+ Guid conversationId,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ // Validate Args ...
+ if (conversationId.IsDefaultGuid())
+ {
+ XException.InvalidArgs.Throw();
+ }
+
+ //
+ var result = await dataProvider.LoadMessages(
+ conversationId: conversationId,
+ cancellationToken: cancellationToken
+ );
+
+ //
+ return result;
+ }
+
+ ///
+ /// Create an AI Project ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task CreateProject(
+ string ownerId,
+ XAiProjectDto item,
+ string connectionId = null,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ var result = await dataProvider.CreateProject(
+ item: item,
+ ownerId: ownerId,
+ connectionId: connectionId,
+ cancellationToken: cancellationToken
+ );
+
+ //
+ return result;
+ }
+
+ ///
+ /// Create an AI Conversation ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task CreateConversation(
+ string ownerId,
+ Guid projectId,
+ XAiConversationDto item,
+ string connectionId = null,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ var result = await dataProvider.CreateConversation(
+ item: item,
+ ownerId: ownerId,
+ projectId: projectId,
+ connectionId: connectionId,
+ cancellationToken: cancellationToken
+ );
+
+ //
+ return result;
+ }
+
///
/// Ask a Question as Prompt and Retrieve Response ...
///