Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions lib/consts.dart
Original file line number Diff line number Diff line change
Expand Up @@ -515,3 +515,10 @@ const kLabelGenerateUI = "Generate UI";
// Terminal Page
const kMsgNoLogs = 'No logs yet';
const kMsgSendToView = 'Send a request to view its details in the console.';
// AI
const kLabelUpdateModels = 'Update Models';
const kMsgSelectModelProvider = 'Select Model Provider';
const kMsgSelectAIProvider = "Please select an AI API Provider";
const kLabelAPIKey = 'API Key / Credential';
const kLabelEndpoint = 'Endpoint';
const kLabelModels = 'Models';
11 changes: 8 additions & 3 deletions lib/screens/common_widgets/ai/ai_model_selector_button.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class AIModelSelectorButton extends StatelessWidget {
? null
: () async {
onDialogOpen?.call();
final newAIRequestModel = await showDialog(
final newAIRequestModel = await showDialog<AIRequestModel>(
context: context,
useRootNavigator: useRootNavigator,
builder: (context) {
Expand All @@ -41,8 +41,13 @@ class AIModelSelectorButton extends StatelessWidget {
},
);
onDialogClose?.call();
if (newAIRequestModel == null) return;
onModelUpdated?.call(newAIRequestModel);
if (newAIRequestModel == null) {
debugPrint("Model not updated as newAIRequestModel is null.");
} else {
onModelUpdated?.call(newAIRequestModel);
debugPrint(
"Model updated to ${newAIRequestModel.modelApiProvider?.name}:${newAIRequestModel.model}");
}
},
child: Text(aiRequestModel?.model ?? 'Select Model'),
);
Expand Down
49 changes: 24 additions & 25 deletions lib/screens/common_widgets/ai/ai_model_selector_dialog.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// import 'package:apidash/providers/providers.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash_core/apidash_core.dart';
import 'package:apidash_design_system/apidash_design_system.dart';
Expand All @@ -7,7 +8,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

class AIModelSelectorDialog extends ConsumerStatefulWidget {
final AIRequestModel? aiRequestModel;
const AIModelSelectorDialog({super.key, this.aiRequestModel});
const AIModelSelectorDialog({
super.key,
this.aiRequestModel,
});

@override
ConsumerState<AIModelSelectorDialog> createState() =>
Expand All @@ -33,6 +37,16 @@ class _AIModelSelectorDialogState extends ConsumerState<AIModelSelectorDialog> {
Widget build(BuildContext context) {
// ref.watch(aiApiCredentialProvider);
final width = MediaQuery.of(context).size.width * 0.8;
final updateModelButton = ElevatedButton(
onPressed: null,
// TODO: Add update model logic
//() async {
// await LLMManager.fetchAvailableLLMs();
// setState(() {});
//},
child: Text(kLabelUpdateModels),
);

return FutureBuilder(
future: aM,
builder: (context, snapshot) {
Expand All @@ -48,19 +62,11 @@ class _AIModelSelectorDialogState extends ConsumerState<AIModelSelectorDialog> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ElevatedButton(
onPressed: null,
// TODO: Add update model logic
//() async {
// await LLMManager.fetchAvailableLLMs();
// setState(() {});
//},
child: Text('Update Models'),
),
updateModelButton,
kVSpacer10,
Row(
children: [
Text('Select Model Provider'),
Text(kMsgSelectModelProvider),
kHSpacer20,
Expanded(
child: ADDropdownButton<ModelAPIProvider>(
Expand Down Expand Up @@ -97,15 +103,7 @@ class _AIModelSelectorDialogState extends ConsumerState<AIModelSelectorDialog> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ElevatedButton(
onPressed: null,
// TODO: Add update model logic
//() async {
// await LLMManager.fetchAvailableLLMs();
// setState(() {});
//},
child: Text('Update Models'),
),
updateModelButton,
SizedBox(height: 20),
...data.modelProviders.map(
(x) => ListTile(
Expand Down Expand Up @@ -145,7 +143,7 @@ class _AIModelSelectorDialogState extends ConsumerState<AIModelSelectorDialog> {

_buildModelSelector(AIModelProvider? aiModelProvider) {
if (aiModelProvider == null) {
return Center(child: Text("Please select an AI API Provider"));
return Center(child: Text(kMsgSelectAIProvider));
}
// final currentCredential =
// ref.watch(aiApiCredentialProvider)[aiModelProvider.providerId!] ?? "";
Expand All @@ -159,7 +157,7 @@ class _AIModelSelectorDialogState extends ConsumerState<AIModelSelectorDialog> {
),
SizedBox(height: 20),
if (aiModelProvider.providerId != ModelAPIProvider.ollama) ...[
Text('API Key / Credential'),
Text(kLabelAPIKey),
kVSpacer8,
BoundedTextField(
onChanged: (x) {
Expand All @@ -176,7 +174,7 @@ class _AIModelSelectorDialogState extends ConsumerState<AIModelSelectorDialog> {
),
kVSpacer10,
],
Text('Endpoint'),
Text(kLabelEndpoint),
kVSpacer8,
BoundedTextField(
key: ValueKey(aiModelProvider.providerName ?? ""),
Expand All @@ -191,7 +189,8 @@ class _AIModelSelectorDialogState extends ConsumerState<AIModelSelectorDialog> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Models'),
Text(kLabelModels),
// TODO: Adding a new model
// IconButton(
// onPressed: () => addNewModel(context), icon: Icon(Icons.add))
],
Expand Down Expand Up @@ -242,7 +241,7 @@ class _AIModelSelectorDialogState extends ConsumerState<AIModelSelectorDialog> {
onPressed: () {
Navigator.of(context).pop(newAIRequestModel);
},
child: Text('Save'),
child: Text(kLabelSave),
),
),
],
Expand Down