Flutter Agent Pupau

A Flutter plugin that integrates Pupau AI agents in your application.

Features

  • AI-Powered Chat Interface - Full-featured chat UI with streaming responses
  • Multiple Widget Modes - Full screen, sized container, or floating overlay
  • Flexible Authentication - API key or bearer token authentication
  • Event Streaming - Real-time events for conversation lifecycle
  • Multi-language Support - Built-in support for 14 languages
  • Programmatic Control - Open, reset, and load conversations via code

Documentation

For full documentation on Pupau and more information on this plugin, visit Pupau AI Docs

Installation

Add the package name and version in your package's pubspec.yaml file:

dependencies:
  flutter_agent_pupau: ^1.0.1

Then run:

flutter pub get

Usage

1. Import the plugin

import 'package:flutter_agent_pupau/flutter_agent_pupau.dart';

2. Configure PupauConfig

Create a PupauConfig using one of two authentication methods:

Option A: API Key Authentication

final config = PupauConfig.createWithApiKey(
  apiKey: 'your-api-key',
  // Optional parameters
  conversationId: 'existing-conversation-id',  // Load specific conversation
  isAnonymous: false,                          // Anonymous chat mode
  language: 'en',                              // UI language (en, es, fr, de, etc.)
  googleMapsApiKey: 'your-maps-key',           // For location features
  hideInputBox: false,                         // Hide the input field
  widgetMode: WidgetMode.full,                 // Display mode
  showNerdStats: false,                        // Show token/credit stats
  conversationStarters: [                      // Predefined starter messages
    'Tell me about your features',
    'How can you help me?',
  ],
  customProperties: {                          // Custom metadata
    'userId': '123',
    'source': 'mobile_app',
  },
);

Option B: Bearer Token Authentication

Requires explicit assistant ID.

final config = PupauConfig.createWithToken(
  bearerToken: 'your-bearer-token',
  assistantId: 'your-assistant-id',
  isMarketplace: false,                        // Set to true if it's a Pupau marketplace agent
  // ... same optional parameters as above
);

Widget Avatar

The PupauAgentAvatar widget is the main UI component that displays an avatar and handles chat interactions. It supports three display modes:

Full Screen Mode (Default)

On tap it navigates to a full page that displays the chat.

PupauAgentAvatar(
  config: PupauConfig.createWithApiKey(
    apiKey: 'your-api-key',
    widgetMode: WidgetMode.full,
  ),
)
Full Mode

Sized Mode

The avatar expands in-place to a specified width and height.

PupauAgentAvatar(
  config: PupauConfig.createWithApiKey(
    apiKey: 'your-api-key',
    widgetMode: WidgetMode.sized,
    sizedConfig: SizedConfig(
      width: 400,
      height: 600,
      initiallyExpanded: false, // Start collapsed
    ),
  ),
)

Initially Expanded Chat

If you want the chat to be already expanded when the widget first loads, use the sized mode with initiallyExpanded: true. You can also specify to not show the close button, so that the chat will always stay open.

PupauAgentAvatar(
  config: PupauConfig.createWithApiKey(
    apiKey: 'your-api-key',
    widgetMode: WidgetMode.sized,
    sizedConfig: SizedConfig(
      width: 400,
      height: 600,
      initiallyExpanded: true, //Chat starts expanded!
      hasCloseButton: false //Hide close button so that expanded chat cannot be closed
    ),
  ),
)
Sized Mode

Floating Overlay Mode

The chat appears as a floating overlay anchored to the avatar.

PupauAgentAvatar(
  config: PupauConfig.createWithApiKey(
    apiKey: 'your-api-key',
    widgetMode: WidgetMode.floating,
    floatingConfig: FloatingConfig(
      width: 400,
      height: 600,
      anchor: FloatingAnchor.bottomRight, // bottomRight, bottomLeft, topRight, topLeft
    ),
  ),
)
Floating Mode

Programmatic Control with PupauChatUtils

Control the chat programmatically from anywhere in your app:

Open Chat from Code

// Open chat with a button press
ElevatedButton(
  onPressed: () {
    PupauChatUtils.openChat(
      context,
      PupauConfig.createWithApiKey(apiKey: 'your-api-key'),
    );
  },
  child: Text('Open Chat'),
)

Reset Current Chat

// Clear the current conversation and start fresh
await PupauChatUtils.resetChat();

Load Specific Conversation

// Load a conversation by ID
await PupauChatUtils.loadConversation('conversation-id');

Event Streaming with PupauEventService

Listen to real-time events from the chat interface:

Basic Event Listening

import 'package:flutter_agent_pupau/flutter_agent_pupau.dart';

// Listen to all chat events
PupauEventService.pupauStream.listen((event) {
  print('Event Type: ${event.type}');
  print('Event Payload: ${event.payload}');
  
  switch (event.type) {
    case UpdateConversationType.newConversation:
      print('New conversation created: ${event.payload}');
      break;
    case UpdateConversationType.messageSent:
      print('Message sent: ${event.payload}');
      break;
    case UpdateConversationType.messageReceived:
      print('Message received: ${event.payload}');
      break;
    case UpdateConversationType.conversationChanged:
      print('Conversation changed to: ${event.payload}');
      break;
    case UpdateConversationType.error:
      print('Error occurred: ${event.payload}');
      break;
    // ... handle other events
  }
});

Event Types

Event Type Payload Description
componentBootStatus BootState Plugin initialization status (off, pending, ok, error)
newConversation String (conversationId) New conversation created
resetConversation null Conversation was reset
conversationChanged String (conversationId) Active conversation changed
conversationTitleGenerated String (title) Conversation title generated
firstMessageComplete null First message in conversation completed
messageSent Message User sent a message
messageReceived Message AI response received
stopMessage null Message streaming stopped
deleteConversation String (conversationId) Conversation deleted
windowClose null Chat window closed
historyToggle bool Conversation history toggled
noCredit null No credits available
error String (error message) General error occurred
authError String (error message) Authentication error
tokensPerSecond double Streaming performance metric
timeToComplete int (milliseconds) Time to complete response
timeToFirstToken int (milliseconds) Time to first token received

Supported Languages

The plugin supports the following language codes for the language parameter:

  • en - English (default)
  • de - German
  • es - Spanish
  • fr - French
  • hi - Hindi
  • it - Italian
  • ko - Korean
  • nl - Dutch
  • pl - Polish
  • pt - Portuguese
  • sq - Albanian
  • sv - Swedish
  • tr - Turkish
  • zh - Chinese

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Libraries

chat_page/bindings/chat_bindings
chat_page/components/attachments_elements/attachment_card
chat_page/components/attachments_elements/attachment_note_modal
chat_page/components/attachments_elements/attachment_switch_skeleton
chat_page/components/attachments_elements/attachments_box
chat_page/components/attachments_elements/attachments_list
chat_page/components/attachments_elements/attachments_modal
chat_page/components/attachments_elements/attachments_tokens_info
chat_page/components/attachments_elements/toggle_attachments_switch
chat_page/components/chat_elements/assistant_avatar
chat_page/components/chat_elements/assistant_capabilities
chat_page/components/chat_elements/assistant_chip
chat_page/components/chat_elements/assistant_info_modal
chat_page/components/chat_elements/chat_app_bar
chat_page/components/chat_elements/chat_image_full
chat_page/components/chat_elements/chat_image_zoomable
chat_page/components/chat_elements/chat_input_field
chat_page/components/chat_elements/chat_loading_message
chat_page/components/chat_elements/chat_skeleton
chat_page/components/chat_elements/chat_tools_fab
chat_page/components/chat_elements/conversation_starter_chip
chat_page/components/chat_elements/conversation_starters_list
chat_page/components/chat_elements/conversation_title
chat_page/components/chat_elements/custom_action_card
chat_page/components/chat_elements/custom_actions_modal
chat_page/components/chat_elements/initial_message
chat_page/components/chat_elements/messages_list
chat_page/components/chat_elements/my_mention_tag_text_editing_controller
chat_page/components/chat_elements/my_mention_tag_text_field
chat_page/components/chat_elements/scroll_button
chat_page/components/chat_elements/send_message_button
chat_page/components/chat_elements/taggable_assistants_list
chat_page/components/chat_elements/tagged_assistants_list
chat_page/components/markdown_builders_elements/code_builder
chat_page/components/markdown_builders_elements/code_container
chat_page/components/markdown_builders_elements/download_builder
chat_page/components/markdown_builders_elements/download_container
chat_page/components/markdown_builders_elements/download_syntax
chat_page/components/markdown_builders_elements/google_map_builder
chat_page/components/markdown_builders_elements/google_map_container
chat_page/components/markdown_builders_elements/google_map_syntax
chat_page/components/markdown_builders_elements/mermaid_builder
chat_page/components/markdown_builders_elements/mermaid_container
chat_page/components/markdown_builders_elements/mermaid_syntax
chat_page/components/markdown_builders_elements/thinking_builder
chat_page/components/markdown_builders_elements/thinking_syntax_builder
chat_page/components/markdown_builders_elements/thinking_tag_container
chat_page/components/markdown_builders_elements/tool_use_info
chat_page/components/markdown_builders_elements/tool_use_info_list
chat_page/components/message_elements/attachments_box
chat_page/components/message_elements/chat_date_container
chat_page/components/message_elements/context_info_container
chat_page/components/message_elements/context_info_item
chat_page/components/message_elements/fork_conversation_icon
chat_page/components/message_elements/fork_conversation_modal
chat_page/components/message_elements/kb_references_modal
chat_page/components/message_elements/knowledge_base_info
chat_page/components/message_elements/loading_dots
chat_page/components/message_elements/loading_tag
chat_page/components/message_elements/loading_text
chat_page/components/message_elements/loading_tool_use
chat_page/components/message_elements/message_action_bar
chat_page/components/message_elements/message_body
chat_page/components/message_elements/message_bottom_elements
chat_page/components/message_elements/message_bubble
chat_page/components/message_elements/message_content
chat_page/components/message_elements/message_context_menu
chat_page/components/message_elements/message_copy_icon
chat_page/components/message_elements/message_elements
chat_page/components/message_elements/message_load_error_info
chat_page/components/message_elements/message_menu_tip
chat_page/components/message_elements/message_notifier
chat_page/components/message_elements/message_sender_info
chat_page/components/message_elements/message_stream_builder
chat_page/components/message_elements/message_time_info
chat_page/components/message_elements/my_context_menu_region
chat_page/components/message_elements/my_menu_item
chat_page/components/message_elements/prompt_option_button
chat_page/components/message_elements/prompt_options_list
chat_page/components/message_elements/reaction_icon
chat_page/components/message_elements/reference_text
chat_page/components/message_elements/reflection_tag_container
chat_page/components/message_elements/search_external_button
chat_page/components/message_elements/text_to_speach_icon
chat_page/components/message_elements/urls_list
chat_page/components/message_elements/web_search_type_indicator
chat_page/components/shared/api_error_widget
chat_page/components/shared/basic_app_bar
chat_page/components/shared/close_icon
chat_page/components/shared/custom_basic_dialog
chat_page/components/shared/custom_button
chat_page/components/shared/custom_checkbox
chat_page/components/shared/custom_delete_confirm_dialog
chat_page/components/shared/custom_info_box
chat_page/components/shared/custom_input_field
chat_page/components/shared/custom_selectable_text
chat_page/components/shared/custom_switch
chat_page/components/shared/error_snackbar
chat_page/components/shared/feedback_snackbar
chat_page/components/shared/image_not_available_widget
chat_page/components/shared/info_row
chat_page/components/shared/marketplace_icon
chat_page/components/shared/no_data_found_info
chat_page/components/shared/selection_transformer
chat_page/components/shared/setting_denied_dialog
chat_page/components/tool_use_elements/ask_user_option
chat_page/components/tool_use_elements/basic_tool_use_modal
chat_page/components/tool_use_elements/browser_inspector_modal
chat_page/components/tool_use_elements/browser_use_bottom_info
chat_page/components/tool_use_elements/browser_use_datalayer_content
chat_page/components/tool_use_elements/browser_use_datalayer_item
chat_page/components/tool_use_elements/browser_use_loading_message
chat_page/components/tool_use_elements/browser_use_network_content
chat_page/components/tool_use_elements/browser_use_network_item
chat_page/components/tool_use_elements/document_tool_card
chat_page/components/tool_use_elements/document_tool_download
chat_page/components/tool_use_elements/image_generation_tool_modal
chat_page/components/tool_use_elements/message_ask_user
chat_page/components/tool_use_elements/message_browser_use
chat_page/components/tool_use_elements/message_browser_use_loading_placeholder
chat_page/components/tool_use_elements/message_browser_use_navigate
chat_page/components/tool_use_elements/message_browser_use_screenshot
chat_page/components/tool_use_elements/message_document
chat_page/components/tool_use_elements/message_knowledge_base
chat_page/components/tool_use_elements/message_thinking
chat_page/components/tool_use_elements/message_to_do_list
chat_page/components/tool_use_elements/smtp_info_modal
chat_page/components/tool_use_elements/todo_item
chat_page/components/tool_use_elements/tool_use_avatar
chat_page/components/tool_use_elements/tool_use_bubble
chat_page/components/tool_use_elements/tool_use_info
chat_page/components/tool_use_elements/tool_use_info_list
chat_page/components/tool_use_elements/tool_use_message_content
chat_page/components/ui_tool_elements/message_authorize_tool
chat_page/components/ui_tool_elements/message_request_credentials
chat_page/components/ui_tool_elements/ui_tool_bubble
chat_page/components/web_elements/chat_images_list
chat_page/components/web_elements/graph_info_container
chat_page/components/web_elements/news_container
chat_page/components/web_elements/organic_info_container
chat_page/components/web_elements/organic_info_modal
chat_page/components/web_elements/source_info
chat_page/components/web_elements/web_search_elements
chat_page/components/web_elements/web_search_images_modal
chat_page/components/web_elements/web_search_news_list
chat_page/components/web_elements/web_search_news_modal
chat_page/controllers/assistants_controller
chat_page/controllers/attachments_controller
chat_page/controllers/browser_inspector_controller
chat_page/controllers/chat_controller
chat_page/controllers/tool_ask_user_controller
chat_page/pupau_agent_avatar
chat_page/pupau_agent_chat
config/pupau_config
flutter_agent_pupau
Main library file for flutter_agent_pupau package
models/ai_model
models/assistant_api_key_model
models/assistant_model
models/attachment_model
models/chat_image_model
models/conversation_model
models/custom_action_model
models/loading_message_model
models/prompt_option_model
models/prompt_reflection_model
models/pupau_message_model
models/setting_model
models/tool_use_message_model
models/tool_use_models/tool_use_ask_user_data
models/tool_use_models/tool_use_browser_use_data
models/tool_use_models/tool_use_document_data
models/tool_use_models/tool_use_image_generation_data
models/tool_use_models/tool_use_knowledge_base_data
models/tool_use_models/tool_use_pipeline_data
models/tool_use_models/tool_use_s_m_t_p_data
models/tool_use_models/tool_use_thinking_data
models/tool_use_models/tool_use_to_do_list_data
models/tool_use_models/tool_use_web_reader_data
models/tool_use_models/tool_use_web_search_data
models/ui_tool_message_model
pupau_agent
Public API for flutter_agent_pupau package
services/api_exceptions
services/api_service
services/assistant_service
services/attachment_service
services/conversation_service
services/device_service
services/file_service
services/file_service_stub
services/file_service_web
services/google_drive_service
services/google_maps_service
services/json_parse_service
services/message_service
services/pupau_event_service
services/settings_service
services/sse_service
services/string_service
services/style_service
services/tag_service
services/tool_ask_user_service
services/tool_use_service
services/tts_service
services/ui_tool_service
utils/api_urls
utils/constants
utils/pupau_chat_utils
utils/pupau_shared_preferences
utils/settings
utils/translations/languages/de_de_translation
utils/translations/languages/en_us_translation
utils/translations/languages/es_es_translation
utils/translations/languages/fr_fr_translation
utils/translations/languages/hi_in_translation
utils/translations/languages/it_it_translation
utils/translations/languages/ko_kr_translation
utils/translations/languages/nl_nl_translation
utils/translations/languages/pl_pl_translation
utils/translations/languages/pt_pt_translation
utils/translations/languages/sq_al_translation
utils/translations/languages/sv_se_translation
utils/translations/languages/tr_tr_translation
utils/translations/languages/zh_cn_translation
utils/translations/localization_service
utils/translations/strings_enum
utils/translations/theme/anonymous_theme_colors
utils/translations/theme/dark_theme_colors
utils/translations/theme/light_theme_colors
utils/translations/theme/my_fonts
utils/translations/theme/my_styles
utils/translations/theme/my_theme
utils/translations/theme/theme_extensions/pupau_theme_data
utils/translations/theme/theme_extensions/skeleton_theme_data