From 7a402b83dc86dab3c2b57cbc74ba5875ead8a326 Mon Sep 17 00:00:00 2001 From: Cynthia J Date: Tue, 3 Feb 2026 11:45:43 -0800 Subject: [PATCH] add test for server prompt code execution --- .../lib/pages/server_template_page.dart | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/packages/firebase_ai/firebase_ai/example/lib/pages/server_template_page.dart b/packages/firebase_ai/firebase_ai/example/lib/pages/server_template_page.dart index efe0c8946b94..4c36971550cb 100644 --- a/packages/firebase_ai/firebase_ai/example/lib/pages/server_template_page.dart +++ b/packages/firebase_ai/firebase_ai/example/lib/pages/server_template_page.dart @@ -154,6 +154,15 @@ class _ServerTemplatePageState extends State { color: Theme.of(context).colorScheme.primary, ), tooltip: 'Generate', + ), + if (!_loading) + IconButton( + onPressed: _testCodeExecution, + icon: Icon( + Icons.code, + color: Theme.of(context).colorScheme.primary, + ), + tooltip: 'Test Code Execution', ) else const CircularProgressIndicator(), @@ -290,6 +299,62 @@ class _ServerTemplatePageState extends State { } } + Future _testCodeExecution() async { + setState(() { + _loading = true; + }); + + try { + _messages + .add(MessageData(text: 'Testing code execution', fromUser: true)); + final response = await _templateGenerativeModel + ?.generateContent('cj-code-execution', inputs: {}); + + //_messages.add(MessageData(text: response?.text, fromUser: false)); + final buffer = StringBuffer(); + for (final part in response!.candidates.first.content.parts) { + if (part is ExecutableCodePart) { + buffer.writeln('Executable Code:'); + buffer.writeln('Language: ${part.language}'); + buffer.writeln('Code:'); + buffer.writeln(part.code); + } else if (part is CodeExecutionResultPart) { + buffer.writeln('Code Execution Result:'); + buffer.writeln('Outcome: ${part.outcome}'); + buffer.writeln('Output:'); + buffer.writeln(part.output); + } else if (part is TextPart) { + buffer.writeln(part.text); + } + } + + if (buffer.isNotEmpty) { + _messages.add( + MessageData( + text: buffer.toString(), + fromUser: false, + ), + ); + } + + setState(() { + _loading = false; + _scrollDown(); + }); + } catch (e) { + _showError(e.toString()); + setState(() { + _loading = false; + }); + } finally { + _textController.clear(); + setState(() { + _loading = false; + }); + _textFieldFocus.requestFocus(); + } + } + void _showError(String message) { showDialog( context: context,