From fe84d36b2d6747029f34292f334a0c33851e09c5 Mon Sep 17 00:00:00 2001 From: OkaykOrhmn Date: Thu, 14 Nov 2024 10:39:24 +0330 Subject: [PATCH] "Updated AI chat models and views to include assistants' names and IDs, added new fields to BotsModel and ChatsModel, and modified RequestHelper and AiChatState to accommodate these changes." --- lib/models/ai/ai_chat_args.dart | 8 +++- lib/models/ai/bots_model.dart | 31 ++++++++++++++- lib/models/ai/chats_model.dart | 41 +++++++++++++------- lib/services/network/request_helper.dart | 6 +-- lib/views/ai/ai_chat_page.dart | 15 ++++--- lib/views/ai/ai_chat_state.dart | 5 ++- lib/views/ai/bot_assistants_page.dart | 8 +++- lib/views/ai/history_ai_chat_page.dart | 9 +++-- lib/views/ai/widgets/ai_message_bar.dart | 7 +++- lib/views/ai/widgets/ai_message_bar_ios.dart | 10 +++-- lib/views/ai/widgets/hoshan_drawer.dart | 5 ++- 11 files changed, 110 insertions(+), 35 deletions(-) diff --git a/lib/models/ai/ai_chat_args.dart b/lib/models/ai/ai_chat_args.dart index 1990856..2648c86 100644 --- a/lib/models/ai/ai_chat_args.dart +++ b/lib/models/ai/ai_chat_args.dart @@ -6,8 +6,14 @@ class AiChatArgs { final ChatsModel? chat; final Prompts? prompts; final bool? attach; + final String? assistantsName; final List? isTool; AiChatArgs( - {required this.bot, this.chat, this.prompts, this.attach, this.isTool}); + {required this.bot, + this.chat, + this.prompts, + this.attach, + this.isTool, + this.assistantsName}); } diff --git a/lib/models/ai/bots_model.dart b/lib/models/ai/bots_model.dart index 29e5836..2e1f08a 100644 --- a/lib/models/ai/bots_model.dart +++ b/lib/models/ai/bots_model.dart @@ -8,7 +8,15 @@ class BotsModel { int? attachment; bool? editable; - BotsModel({this.id, this.name, this.image}); + BotsModel( + {this.id, + this.name, + this.image, + this.attachment, + this.attachmentType, + this.description, + this.editable, + this.responseType}); BotsModel.fromJson(Map json) { id = json['id']; @@ -40,4 +48,25 @@ class BotsModel { data['responseType'] = responseType; return data; } + + BotsModel copyWith( + {int? id, + String? name, + String? image, + String? responseType, + String? description, + List? attachmentType, + int? attachment, + bool? editable}) { + return BotsModel( + id: id ?? this.id, + name: name ?? this.name, + image: image ?? this.image, + responseType: responseType ?? this.responseType, + description: description ?? this.description, + attachmentType: attachmentType ?? this.attachmentType, + attachment: attachment ?? this.attachment, + editable: editable ?? this.editable, + ); + } } diff --git a/lib/models/ai/chats_model.dart b/lib/models/ai/chats_model.dart index 2accc8d..707e778 100644 --- a/lib/models/ai/chats_model.dart +++ b/lib/models/ai/chats_model.dart @@ -1,3 +1,4 @@ +import 'package:didvan/models/ai/bot_assistants_model.dart'; import 'package:didvan/models/ai/bots_model.dart'; import 'package:didvan/models/ai/files_model.dart'; @@ -10,21 +11,24 @@ class ChatsModel { String? createdAt; String? updatedAt; BotsModel? bot; + BotAssistants? userBot; List? prompts; bool? isEditing; + String? assistantsName; - ChatsModel({ - this.id, - this.userId, - this.botId, - this.title, - this.placeholder, - this.createdAt, - this.updatedAt, - this.bot, - this.prompts, - this.isEditing = false, - }); + ChatsModel( + {this.id, + this.userId, + this.botId, + this.title, + this.placeholder, + this.createdAt, + this.updatedAt, + this.bot, + this.prompts, + this.isEditing = false, + this.assistantsName, + this.userBot}); ChatsModel.fromJson(Map json) { id = json['id']; @@ -34,7 +38,18 @@ class ChatsModel { placeholder = json['placeholder']; createdAt = json['createdAt']; updatedAt = json['updatedAt']; - bot = json['bot'] != null ? BotsModel.fromJson(json['bot']) : null; + userBot = json['userBot'] != null + ? BotAssistants.fromJson(json['userBot']) + : null; + bot = json['bot'] != null + ? BotsModel.fromJson(json['bot']) + : userBot?.bot?.copyWith( + id: userBot?.id, + image: userBot?.image, + ); + if (userBot != null) { + assistantsName = userBot!.name; + } if (json['prompts'] != null) { prompts = []; json['prompts'].forEach((v) { diff --git a/lib/services/network/request_helper.dart b/lib/services/network/request_helper.dart index bdb6bb4..74b3ead 100644 --- a/lib/services/network/request_helper.dart +++ b/lib/services/network/request_helper.dart @@ -201,8 +201,8 @@ class RequestHelper { static String deleteComment(int id) => '$baseUrl/comment/$id'; static String reportComment(int id) => '$baseUrl/comment/$id/report'; static String widgetNews() => '$baseUrl/user/widget'; - static String aiChats() => '$baseUrl/ai/chat'; - static String aiArchived() => '$baseUrl/ai/chat${_urlConcatGenerator([ + static String aiChats() => '$baseUrl/ai/chat/v2'; + static String aiArchived() => '$baseUrl/ai/chat/v2${_urlConcatGenerator([ const MapEntry('archived', true), ])}'; static String aiBots() => '$baseUrl/ai/bot/v2'; @@ -219,7 +219,7 @@ class RequestHelper { MapEntry('q', q), const MapEntry('archived', true), ])}'; - static String aiAChat(int id) => '$baseUrl/ai/chat/$id'; + static String aiAChat(int id) => '$baseUrl/ai/chat/$id/v2'; static String aiChatId() => '$baseUrl/ai/chat/id'; static String aiDeleteChats() => '$baseUrl/ai/chat'; static String aiChangeChats(int id) => '$baseUrl/ai/chat/$id/title'; diff --git a/lib/views/ai/ai_chat_page.dart b/lib/views/ai/ai_chat_page.dart index 4b751db..fe10618 100644 --- a/lib/views/ai/ai_chat_page.dart +++ b/lib/views/ai/ai_chat_page.dart @@ -85,7 +85,8 @@ class _AiChatPageState extends State { state.message.clear(); state.update(); - await state.postMessage(widget.args.bot); + await state.postMessage( + widget.args.bot, widget.args.assistantsName != null); } }); super.initState(); @@ -142,7 +143,8 @@ class _AiChatPageState extends State { height: 12, ), DidvanText( - widget.args.bot.name.toString(), + widget.args.assistantsName ?? + widget.args.bot.name.toString(), fontSize: 17, fontWeight: FontWeight.bold, ), @@ -233,6 +235,7 @@ class _AiChatPageState extends State { AiMessageBar( bot: widget.args.bot, attch: widget.args.attach, + assistantsName: widget.args.assistantsName, ), ], )), @@ -517,7 +520,7 @@ class _AiChatPageState extends State { textDirection: TextDirection.ltr, child: DidvanText( - '${widget.args.bot.name}', + '${widget.args.assistantsName ?? widget.args.bot.name}', maxLines: 1, overflow: TextOverflow.ellipsis, @@ -590,8 +593,10 @@ class _AiChatPageState extends State { message.copyWith(error: false)); state.file = file; state.update(); - await state - .postMessage(widget.args.bot); + await state.postMessage( + widget.args.bot, + widget.args.assistantsName != + null); }, child: Icon( DidvanIcons.refresh_solid, diff --git a/lib/views/ai/ai_chat_state.dart b/lib/views/ai/ai_chat_state.dart index a240af9..8b7ed73 100644 --- a/lib/views/ai/ai_chat_state.dart +++ b/lib/views/ai/ai_chat_state.dart @@ -133,7 +133,7 @@ class AiChatState extends CoreProvier { update(); } - Future postMessage(BotsModel bot) async { + Future postMessage(BotsModel bot, bool isAssistants) async { onResponsing = true; final uploadedFile = file; file = null; @@ -157,7 +157,8 @@ class AiChatState extends CoreProvier { // } final req = await AiApiService.initial( - url: '/${bot.id}/${bot.name}'.toLowerCase(), + url: '${isAssistants ? '/custom' : ''}/${bot.id}/${bot.name}' + .toLowerCase(), message: message, chatId: chatId, file: uploadedFile, diff --git a/lib/views/ai/bot_assistants_page.dart b/lib/views/ai/bot_assistants_page.dart index 9b1e005..56ea9df 100644 --- a/lib/views/ai/bot_assistants_page.dart +++ b/lib/views/ai/bot_assistants_page.dart @@ -1,6 +1,7 @@ import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; +import 'package:didvan/models/ai/ai_chat_args.dart'; import 'package:didvan/models/ai/bot_assistants_model.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/views/ai/bot_assistants_state.dart'; @@ -222,8 +223,13 @@ class _BotAssistantsPageState extends State { const SizedBox( height: 12, ), - const DidvanButton( + DidvanButton( title: 'استفاده از دستیار', + onPressed: () => Navigator.pushNamed(context, Routes.aiChat, + arguments: AiChatArgs( + bot: assistants.bot!.copyWith( + id: assistants.id, image: assistants.image), + assistantsName: assistants.name)), ) ], ), diff --git a/lib/views/ai/history_ai_chat_page.dart b/lib/views/ai/history_ai_chat_page.dart index 069c722..aa78ae8 100644 --- a/lib/views/ai/history_ai_chat_page.dart +++ b/lib/views/ai/history_ai_chat_page.dart @@ -217,8 +217,10 @@ class _HistoryAiChatPageState extends State { onTap: () { // if (state.chatsToDelete.isEmpty) { navigatorKey.currentState!.pushNamed(Routes.aiChat, - arguments: - AiChatArgs(bot: chat.bot!, chat: chat)); + arguments: AiChatArgs( + bot: chat.bot!, + chat: chat, + assistantsName: chat.assistantsName)); // } else { // if (state.chatsToDelete.contains(chat.id)) { // state.chatsToDelete.remove(chat.id!); @@ -277,7 +279,8 @@ class _HistoryAiChatPageState extends State { MainAxisAlignment.spaceBetween, children: [ DidvanText( - chat.bot!.name.toString(), + chat.assistantsName ?? + chat.bot!.name.toString(), fontWeight: FontWeight.bold, // fontSize: 18, ), diff --git a/lib/views/ai/widgets/ai_message_bar.dart b/lib/views/ai/widgets/ai_message_bar.dart index 856eb44..ae985cd 100644 --- a/lib/views/ai/widgets/ai_message_bar.dart +++ b/lib/views/ai/widgets/ai_message_bar.dart @@ -40,8 +40,10 @@ typedef _Fn = void Function(); class AiMessageBar extends StatefulWidget { final BotsModel bot; + final String? assistantsName; final bool? attch; - const AiMessageBar({Key? key, required this.bot, this.attch}) + const AiMessageBar( + {Key? key, required this.bot, this.attch, this.assistantsName}) : super(key: key); @override @@ -516,7 +518,8 @@ class _AiMessageBarState extends State { state.message.clear(); openAttach = false; state.update(); - await state.postMessage(widget.bot); + await state.postMessage( + widget.bot, widget.assistantsName != null); }, ), ); diff --git a/lib/views/ai/widgets/ai_message_bar_ios.dart b/lib/views/ai/widgets/ai_message_bar_ios.dart index d8d317d..57ad762 100644 --- a/lib/views/ai/widgets/ai_message_bar_ios.dart +++ b/lib/views/ai/widgets/ai_message_bar_ios.dart @@ -38,9 +38,12 @@ import 'package:path/path.dart' as p; class AiMessageBarIOS extends StatefulWidget { final BotsModel bot; + final String? assistantsName; + const AiMessageBarIOS({ super.key, required this.bot, + this.assistantsName, }); @override @@ -308,9 +311,10 @@ class _AiMessageBarIOSState extends State { messageText.value = state .message.text; - await state - .postMessage( - widget.bot); + await state.postMessage( + widget.bot, + widget.assistantsName != + null); }, ), ), diff --git a/lib/views/ai/widgets/hoshan_drawer.dart b/lib/views/ai/widgets/hoshan_drawer.dart index 51c6588..149b5a6 100644 --- a/lib/views/ai/widgets/hoshan_drawer.dart +++ b/lib/views/ai/widgets/hoshan_drawer.dart @@ -351,7 +351,10 @@ class _HoshanDrawerState extends State { child: InkWell( onTap: () { navigatorKey.currentState!.pushNamed(Routes.aiChat, - arguments: AiChatArgs(bot: chat.bot!, chat: chat)); + arguments: AiChatArgs( + bot: chat.bot!, + chat: chat, + assistantsName: chat.assistantsName)); }, child: Row( children: [