diff --git a/clients/search-component/README.md b/clients/search-component/README.md
index bb439ada13..e93c7760b5 100644
--- a/clients/search-component/README.md
+++ b/clients/search-component/README.md
@@ -99,7 +99,8 @@ declare module "solid-js" {
| problemLink | string (example: "mailto:help@trieve.ai?subject=") | null |
| responsive | boolean | false |
| floatingButtonPosition | "top-left", "top-right", "bottom-left", or "bottom-right" | "bottom-right" |
-| showFloatingButton | boolean | false |
+| showFloatingButton | boolean | false |
+| buttonTriggers | { selector: "query-selector", mode: "chat" | "search" }[] | [] |
### Search Results
diff --git a/clients/search-component/package.json b/clients/search-component/package.json
index ef7af2cc00..3c430d8d91 100644
--- a/clients/search-component/package.json
+++ b/clients/search-component/package.json
@@ -19,7 +19,7 @@
"import": "./dist/vanilla/index.js"
}
},
- "version": "0.2.27",
+ "version": "0.2.28",
"license": "MIT",
"homepage": "https://github.com/devflowinc/trieve/tree/main/clients/search-component",
"scripts": {
diff --git a/clients/search-component/src/TrieveModal/Chat/AIInitalMessage.tsx b/clients/search-component/src/TrieveModal/Chat/AIInitalMessage.tsx
index 42108d648b..e60bed62c4 100644
--- a/clients/search-component/src/TrieveModal/Chat/AIInitalMessage.tsx
+++ b/clients/search-component/src/TrieveModal/Chat/AIInitalMessage.tsx
@@ -38,7 +38,7 @@ export const AIInitialMessage = () => {
I'm an AI assistant with access to documentation, help articles, and
other content.
-
+
Ask me anything about{" "}
| null;
chat?: (boolean) | null;
creatorLinkedInUrl?: (string) | null;
creatorName?: (string) | null;
diff --git a/frontends/dashboard/src/pages/dataset/PublicPageSettings.tsx b/frontends/dashboard/src/pages/dataset/PublicPageSettings.tsx
index 5466a8b36f..db3b9fc154 100644
--- a/frontends/dashboard/src/pages/dataset/PublicPageSettings.tsx
+++ b/frontends/dashboard/src/pages/dataset/PublicPageSettings.tsx
@@ -548,7 +548,40 @@ const PublicPageControls = () => {
inputClass="block w-full rounded border border-neutral-300 px-3 py-1.5 shadow-sm placeholder:text-neutral-400 focus:outline-magenta-500 sm:text-sm sm:leading-6"
/>
-
+
+
+
+ }
+ />
+
+
{
+ return `${trigger.selector},${trigger.mode}`;
+ }) ?? []
+ }
+ onChange={(e) => {
+ setExtraParams(
+ "buttonTriggers",
+ e.map((trigger) => {
+ const [selector, mode] = trigger.split(",");
+ return {
+ selector,
+ mode,
+ };
+ }),
+ );
+ }}
+ addLabel="Add Trigger"
+ addClass="text-sm"
+ inputClass="block w-full rounded border border-neutral-300 px-3 py-1.5 shadow-sm placeholder:text-neutral-400 focus:outline-magenta-500 sm:text-sm sm:leading-6"
+ />
+
diff --git a/server/src/data/models.rs b/server/src/data/models.rs
index 0d6cd66c96..1b46a95892 100644
--- a/server/src/data/models.rs
+++ b/server/src/data/models.rs
@@ -3153,6 +3153,9 @@ impl DatasetConfigurationDTO {
show_floating_button: page_parameters_self
.show_floating_button
.or(page_parameters_curr.show_floating_button),
+ button_triggers: page_parameters_self
+ .button_triggers
+ .or(page_parameters_curr.button_triggers),
debounce_ms: page_parameters_self
.debounce_ms
.or(page_parameters_curr.debounce_ms),
diff --git a/server/src/handlers/page_handler.rs b/server/src/handlers/page_handler.rs
index e9d750e8f0..2e4f3d3ad7 100644
--- a/server/src/handlers/page_handler.rs
+++ b/server/src/handlers/page_handler.rs
@@ -136,6 +136,13 @@ pub struct OpenGraphMetadata {
description: Option,
}
+#[derive(Serialize, Deserialize, Debug, Clone, ToSchema, Default)]
+#[serde(rename_all = "camelCase")]
+pub struct ButtonTrigger {
+ selector: String,
+ mode: String,
+}
+
#[derive(Serialize, Deserialize, Debug, Clone, ToSchema, Default)]
#[serde(rename_all = "camelCase")]
pub struct SingleProductOptions {
@@ -217,6 +224,8 @@ pub struct PublicPageParameters {
#[serde(skip_serializing_if = "Option::is_none")]
pub show_floating_button: Option,
#[serde(skip_serializing_if = "Option::is_none")]
+ pub button_triggers: Option>,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub debounce_ms: Option,
#[serde(skip_serializing_if = "Option::is_none")]
pub hero_pattern: Option,
diff --git a/server/src/lib.rs b/server/src/lib.rs
index 1a7367fbfd..7c92d751a6 100644
--- a/server/src/lib.rs
+++ b/server/src/lib.rs
@@ -396,6 +396,7 @@ impl Modify for SecurityAddon {
operators::crawl_operator::Metadata,
operators::crawl_operator::Sitemap,
handlers::stripe_handler::CreateSetupCheckoutSessionResPayload,
+ handlers::page_handler::ButtonTrigger,
handlers::page_handler::PublicPageSearchOptions,
handlers::page_handler::OpenGraphMetadata,
handlers::page_handler::SingleProductOptions,
diff --git a/server/src/public/page.html b/server/src/public/page.html
index f953a6afaf..87676e6393 100644
--- a/server/src/public/page.html
+++ b/server/src/public/page.html
@@ -4,7 +4,7 @@