diff --git a/lib/services/agentic_services/agent_caller.dart b/lib/services/agentic_services/agent_caller.dart index f27e349b..c74169bd 100644 --- a/lib/services/agentic_services/agent_caller.dart +++ b/lib/services/agentic_services/agent_caller.dart @@ -7,7 +7,7 @@ import 'package:genai/genai.dart'; class APIDashAgentCaller { static APIDashAgentCaller instance = APIDashAgentCaller(); - Future<(String? output, String error)> call( + Future call( APIDashAIAgent agent, { required WidgetRef ref, required AgentInputs input, @@ -15,7 +15,7 @@ class APIDashAgentCaller { final defaultAIModel = ref.read(settingsProvider.select((e) => e.defaultAIModel)); if (defaultAIModel == null) { - return (null, 'NO_DEFAULT_LLM'); + throw Exception('NO_DEFAULT_LLM'); } final baseAIRequestObject = AIRequestModel.fromJson(defaultAIModel); final ans = await GenAIAgenticService.callAgent( diff --git a/lib/services/agentic_services/agents/agents.dart b/lib/services/agentic_services/agents/agents.dart new file mode 100644 index 00000000..e7ae4755 --- /dev/null +++ b/lib/services/agentic_services/agents/agents.dart @@ -0,0 +1,5 @@ +export 'intermediate_rep_gen.dart'; +export 'semantic_analyser.dart'; +export 'stac2flutter.dart'; +export 'stacgen.dart'; +export 'stacmodifier.dart'; diff --git a/lib/services/agentic_services/agents/intermediate_rep_gen.dart b/lib/services/agentic_services/agents/intermediate_rep_gen.dart index cb35209d..f20f907c 100644 --- a/lib/services/agentic_services/agents/intermediate_rep_gen.dart +++ b/lib/services/agentic_services/agents/intermediate_rep_gen.dart @@ -1,6 +1,6 @@ import 'package:genai/agentic_engine/blueprint.dart'; -const String kIntermediateRepGenSystemPrompt = """ +const String _sysprompt = """ You are an expert at converting API Responses into a YAML schema tree. When you get a given JSON API Response, I want you to break it down and recombine it in the form of a YAMK UI schema. @@ -45,7 +45,7 @@ class IntermediateRepresentationGen extends APIDashAIAgent { @override String getSystemPrompt() { - return kIntermediateRepGenSystemPrompt; + return _sysprompt; } @override diff --git a/lib/services/agentic_services/agents/semantic_analyser.dart b/lib/services/agentic_services/agents/semantic_analyser.dart index c21f4873..6d132df9 100644 --- a/lib/services/agentic_services/agents/semantic_analyser.dart +++ b/lib/services/agentic_services/agents/semantic_analyser.dart @@ -1,6 +1,6 @@ import 'package:genai/agentic_engine/blueprint.dart'; -const String kSemanticAnalyserSystemPrompt = """ +const String _sysprompt = """ You are an expert at understanding API response structures. When i provide a sample JSON response, Please give me a semantic analysis about it. @@ -20,7 +20,7 @@ class ResponseSemanticAnalyser extends APIDashAIAgent { @override String getSystemPrompt() { - return kSemanticAnalyserSystemPrompt; + return _sysprompt; } @override diff --git a/lib/services/agentic_services/agents/stac2flutter.dart b/lib/services/agentic_services/agents/stac2flutter.dart index c0bf6d4d..442fd624 100644 --- a/lib/services/agentic_services/agents/stac2flutter.dart +++ b/lib/services/agentic_services/agents/stac2flutter.dart @@ -1,6 +1,6 @@ import 'package:genai/agentic_engine/blueprint.dart'; -const String kIntermediateRepGenSystemPrompt = """ +const String _sysprompt = """ You are an expert agent whose sole JOB is to accept FLutter-SDUI (json-like) representation and convert it into actual working FLutter component. @@ -22,7 +22,7 @@ class StacToFlutterBot extends APIDashAIAgent { @override String getSystemPrompt() { - return kIntermediateRepGenSystemPrompt; + return _sysprompt; } @override diff --git a/lib/services/agentic_services/agents/stacgen.dart b/lib/services/agentic_services/agents/stacgen.dart index 7599298d..c59d7d7b 100644 --- a/lib/services/agentic_services/agents/stacgen.dart +++ b/lib/services/agentic_services/agents/stacgen.dart @@ -1,6 +1,6 @@ import 'package:genai/agentic_engine/blueprint.dart'; -const String kIntermediateRepGenSystemPrompt = """ +const String _sysprompt = """ You are an expert agent whose sole JOB is to generate FLutter-SDUI (json-like) representation from a Text based description and a provided Schema @@ -232,7 +232,7 @@ class StacGenBot extends APIDashAIAgent { @override String getSystemPrompt() { - return kIntermediateRepGenSystemPrompt; + return _sysprompt; } @override diff --git a/lib/services/agentic_services/agents/stacmodifier.dart b/lib/services/agentic_services/agents/stacmodifier.dart index 0ad35c45..b2058869 100644 --- a/lib/services/agentic_services/agents/stacmodifier.dart +++ b/lib/services/agentic_services/agents/stacmodifier.dart @@ -1,6 +1,6 @@ import 'package:genai/agentic_engine/blueprint.dart'; -const String kIntermediateRepGenSystemPrompt = """ +const String _sysprompt = """ You are an expert agent whose sole JOB is to accept FLutter-SDUI (json-like) representation and modify it to match the requests of the client. @@ -21,7 +21,7 @@ class SlacModifierBot extends APIDashAIAgent { @override String getSystemPrompt() { - return kIntermediateRepGenSystemPrompt; + return _sysprompt; } @override diff --git a/lib/widgets/ai_ui_desginer_widgets.dart b/lib/widgets/ai_ui_desginer_widgets.dart index 35b1a859..6139f456 100644 --- a/lib/widgets/ai_ui_desginer_widgets.dart +++ b/lib/widgets/ai_ui_desginer_widgets.dart @@ -1,13 +1,15 @@ import 'dart:convert'; - import 'package:apidash/consts.dart'; import 'package:apidash/services/agentic_services/agent_caller.dart'; import 'package:apidash/widgets/widget_sending.dart'; import 'package:apidash_design_system/apidash_design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:genai/agentic_engine/blueprint.dart'; import 'package:stac/stac.dart' as stac; +import '../services/agentic_services/agents/agents.dart'; + void showCustomDialog(BuildContext context, String content) { showDialog( context: context, @@ -48,32 +50,37 @@ class _DialogContentsState extends ConsumerState { }); //STEP 1: RESPONSE_ANALYSER (call the Semantic Analysis & IRGen Bots in parallel) final step1Res = await Future.wait([ - APIDashAgentCaller.instance.semanticAnalyser( - ref, + APIDashAgentCaller.instance.call( + ResponseSemanticAnalyser(), + ref: ref, input: AgentInputs(query: apiResponse), ), - APIDashAgentCaller.instance.irGenerator( - ref, + APIDashAgentCaller.instance.call( + IntermediateRepresentationGen(), + ref: ref, input: AgentInputs(variables: { 'VAR_API_RESPONSE': apiResponse, }), ), ]); - final SA = step1Res[0]['SEMANTIC_ANALYSIS']; - final IR = step1Res[1]['INTERMEDIATE_REPRESENTATION']; + + final SA = step1Res[0]?['SEMANTIC_ANALYSIS']; + final IR = step1Res[1]?['INTERMEDIATE_REPRESENTATION']; print("Semantic Analysis: $SA"); print("Intermediate Representation: $IR"); //STEP 2: STAC_GEN (Generate the SDUI Code) - final sduiCode = await APIDashAgentCaller.instance.stacGenerator( - ref, + + final sduiCode = await APIDashAgentCaller.instance.call( + StacGenBot(), + ref: ref, input: AgentInputs(variables: { 'VAR_RAW_API_RESPONSE': apiResponse, 'VAR_INTERMEDIATE_REPR': IR, 'VAR_SEMANTIC_ANALYSIS': SA, }), ); - return sduiCode['STAC'].toString(); + return sduiCode?['STAC']?.toString() ?? ""; } @override