From ce568973204c1751ec194761717e223f63bd82cd Mon Sep 17 00:00:00 2001 From: Manas Hejmadi Date: Sat, 7 Jun 2025 22:25:57 +0530 Subject: [PATCH] initializeAIRequest on AIRequest Creation & ControllerUpdate issues fixed --- .../common_widgets/api_type_dropdown.dart | 35 ++++++++++++++ .../ai_request/aireq_authorization.dart | 7 ++- .../ai_request/aireq_configs.dart | 46 ++++++------------- .../request_pane/ai_request/aireq_prompt.dart | 14 ++++-- .../home_page/editor_pane/url_card.dart | 30 ++++++------ 5 files changed, 79 insertions(+), 53 deletions(-) diff --git a/lib/screens/common_widgets/api_type_dropdown.dart b/lib/screens/common_widgets/api_type_dropdown.dart index c35645d6..22534704 100644 --- a/lib/screens/common_widgets/api_type_dropdown.dart +++ b/lib/screens/common_widgets/api_type_dropdown.dart @@ -1,7 +1,9 @@ +import 'package:apidash_core/apidash_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:apidash/providers/providers.dart'; import 'package:apidash/widgets/widgets.dart'; +import 'package:genai/genai.dart'; class APITypeDropdown extends ConsumerWidget { const APITypeDropdown({super.key}); @@ -14,6 +16,9 @@ class APITypeDropdown extends ConsumerWidget { return APITypePopupMenu( apiType: apiType, onChanged: (type) { + if (type == APIType.ai) { + initializeAIRequest(ref); + } ref .read(collectionStateNotifierProvider.notifier) .update(apiType: type); @@ -21,3 +26,33 @@ class APITypeDropdown extends ConsumerWidget { ); } } + +initializeAIRequest(WidgetRef ref) { + final selectedId = ref.watch(selectedIdStateProvider); + final req = ref.watch(collectionStateNotifierProvider)![selectedId]!; + AIRequestModel? aiRequestModel = req.aiRequestModel; + LLMSaveObject? defaultLLMSO = ref + .watch(settingsProvider.notifier) + .settingsModel + ?.defaultLLMSaveObject; //Settings Default + + if (aiRequestModel == null) { + // Creating the AIRequest Model initially + final gmC = GeminiModelController(); + final newAIRM = AIRequestModel( + model: defaultLLMSO?.selectedLLM ?? + LLMProvider.gemini.getLLMByIdentifier('gemini-2.0-flash'), + provider: defaultLLMSO?.provider ?? LLMProvider.gemini, + payload: LLMInputPayload( + endpoint: defaultLLMSO?.endpoint ?? gmC.inputPayload.endpoint, + credential: defaultLLMSO?.credential ?? '', + systemPrompt: '', + userPrompt: '', + configMap: defaultLLMSO?.configMap ?? gmC.inputPayload.configMap, + ), + ); + ref.read(collectionStateNotifierProvider.notifier).update( + aiRequestModel: newAIRM, + ); + } +} diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_authorization.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_authorization.dart index cd5e0221..f17f6101 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_authorization.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_authorization.dart @@ -27,10 +27,13 @@ class AIRequestAuthorizationSection extends ConsumerWidget { fieldKey: "$selectedId-aireq-authvalue-body", initialValue: cred, onChanged: (String value) { - payload.credential = value; + final aim = ref + .read(collectionStateNotifierProvider)![selectedId]! + .aiRequestModel!; + aim.payload.credential = value; ref .read(collectionStateNotifierProvider.notifier) - .update(aiRequestModel: aiReqM.updatePayload(payload)); + .update(aiRequestModel: aim.updatePayload(aim.payload)); }, hintText: 'Enter API key or Authorization Credentials', ), diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_configs.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_configs.dart index b7b3d1ab..eb1fb7cb 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_configs.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_configs.dart @@ -22,6 +22,16 @@ class _AIRequestConfigSectionState final aiReqM = reqM.aiRequestModel!; final payload = aiReqM.payload; + updateRequestModel(LLMModelConfiguration el) { + final aim = ref + .read(collectionStateNotifierProvider)![selectedId]! + .aiRequestModel!; + aim.payload.configMap[el.configId] = el; + ref.read(collectionStateNotifierProvider.notifier).update( + aiRequestModel: aim.updatePayload(aim.payload), + ); + } + return SingleChildScrollView( padding: EdgeInsets.symmetric(vertical: 20), child: Column( @@ -43,12 +53,7 @@ class _AIRequestConfigSectionState value: el.configValue.value as bool, onChanged: (x) { el.configValue.value = x; - payload.configMap[el.configId] = el; - ref - .read(collectionStateNotifierProvider.notifier) - .update( - aiRequestModel: aiReqM.updatePayload(payload), - ); + updateRequestModel(el); setState(() {}); }, ) @@ -60,14 +65,7 @@ class _AIRequestConfigSectionState if (x.isEmpty) x = '0'; if (num.tryParse(x) == null) return; el.configValue.value = num.parse(x); - - payload.configMap[el.configId] = el; - ref - .read(collectionStateNotifierProvider.notifier) - .update( - aiRequestModel: aiReqM.updatePayload(payload), - ); - + updateRequestModel(el); setState(() {}); }, ) @@ -77,14 +75,7 @@ class _AIRequestConfigSectionState initialValue: el.configValue.value.toString(), onChanged: (x) { el.configValue.value = x; - - payload.configMap[el.configId] = el; - ref - .read(collectionStateNotifierProvider.notifier) - .update( - aiRequestModel: aiReqM.updatePayload(payload), - ); - + updateRequestModel(el); setState(() {}); }, ) @@ -119,16 +110,7 @@ class _AIRequestConfigSectionState double ); el.configValue.value = (z.$1, x, z.$3); - - payload.configMap[el.configId] = el; - ref - .read( - collectionStateNotifierProvider.notifier) - .update( - aiRequestModel: - aiReqM.updatePayload(payload), - ); - + updateRequestModel(el); setState(() {}); }, ), diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_prompt.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_prompt.dart index f090ca6e..cca6c511 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_prompt.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/ai_request/aireq_prompt.dart @@ -38,10 +38,13 @@ class AIRequestPromptSection extends ConsumerWidget { fieldKey: "$selectedId-aireq-sysprompt-body", initialValue: systemPrompt, onChanged: (String value) { - payload.systemPrompt = value; + final aim = ref + .read(collectionStateNotifierProvider)![selectedId]! + .aiRequestModel!; + aim.payload.systemPrompt = value; ref .read(collectionStateNotifierProvider.notifier) - .update(aiRequestModel: aiReqM.updatePayload(payload)); + .update(aiRequestModel: aim.updatePayload(aim.payload)); }, hintText: 'Enter System Prompt', ), @@ -64,10 +67,13 @@ class AIRequestPromptSection extends ConsumerWidget { fieldKey: "$selectedId-aireq-userprompt-body", initialValue: userPrompt, onChanged: (String value) { - payload.userPrompt = value; + final aim = ref + .read(collectionStateNotifierProvider)![selectedId]! + .aiRequestModel!; + aim.payload.userPrompt = value; ref .read(collectionStateNotifierProvider.notifier) - .update(aiRequestModel: aiReqM.updatePayload(payload)); + .update(aiRequestModel: aim.updatePayload(aim.payload)); }, hintText: 'Enter User Prompt', ), diff --git a/lib/screens/home_page/editor_pane/url_card.dart b/lib/screens/home_page/editor_pane/url_card.dart index bcbfc479..d64288f5 100644 --- a/lib/screens/home_page/editor_pane/url_card.dart +++ b/lib/screens/home_page/editor_pane/url_card.dart @@ -159,19 +159,19 @@ class AIProviderSelector extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final selectedId = ref.watch(selectedIdStateProvider); final req = ref.watch(collectionStateNotifierProvider)![selectedId]!; - final aiRequestModel = req.aiRequestModel; - final defaultLLMSO = aiRequestModel == null - ? ref - .read(settingsProvider.notifier) - .settingsModel - ?.defaultLLMSaveObject - : LLMSaveObject( - endpoint: aiRequestModel.payload.endpoint, - credential: aiRequestModel.payload.credential, - configMap: aiRequestModel.payload.configMap, - selectedLLM: aiRequestModel.model, - provider: aiRequestModel.provider, - ); + AIRequestModel? aiRequestModel = req.aiRequestModel; + + if (aiRequestModel == null) { + return Container(); + } + + LLMSaveObject defaultLLMSO = LLMSaveObject( + endpoint: aiRequestModel.payload.endpoint, + credential: aiRequestModel.payload.credential, + configMap: aiRequestModel.payload.configMap, + selectedLLM: aiRequestModel.model, + provider: aiRequestModel.provider, + ); return DefaultLLMSelectorButton( key: ValueKey(ref.watch(selectedIdStateProvider)), @@ -184,8 +184,8 @@ class AIProviderSelector extends ConsumerWidget { payload: LLMInputPayload( endpoint: llmso.endpoint, credential: llmso.credential, - systemPrompt: aiRequestModel?.payload.systemPrompt ?? '', - userPrompt: aiRequestModel?.payload.userPrompt ?? '', + systemPrompt: aiRequestModel.payload.systemPrompt, + userPrompt: aiRequestModel.payload.userPrompt, configMap: llmso.configMap, ), ),