From 22dc65fe19f32faa7dfd00eaa1d3375783fb416e Mon Sep 17 00:00:00 2001
From: Jicheng Lu <103353@smsassist.com>
Date: Thu, 30 Jan 2025 15:58:17 -0600
Subject: [PATCH] refine agent filter, agent task filter, agent label
---
src/lib/common/MultiSelect.svelte | 7 +-
src/lib/helpers/enums.js | 10 +++
src/lib/helpers/types/agentTypes.js | 18 +++-
src/lib/scss/custom/pages/_agent.scss | 17 ++++
src/lib/scss/custom/structure/_topbar.scss | 1 +
.../[conversationId]/chat-box.svelte | 5 +-
src/routes/page/agent/+page.svelte | 68 +++++++++++++--
src/routes/page/agent/[agentId]/+page.svelte | 3 +-
.../agent-components/agent-overview.svelte | 60 +++++++++++++-
src/routes/page/agent/card-agent.svelte | 25 ++++--
src/routes/page/agent/evaluator/+page.svelte | 2 +-
src/routes/page/agent/router/+page.svelte | 20 +++--
.../page/agent/router/routing-flow.svelte | 83 ++++++++++++++-----
src/routes/page/conversation/+page.svelte | 17 ++--
src/routes/page/task/+page.svelte | 74 ++++++++++++++---
15 files changed, 340 insertions(+), 70 deletions(-)
diff --git a/src/lib/common/MultiSelect.svelte b/src/lib/common/MultiSelect.svelte
index b2cb03bf..d324e2f8 100644
--- a/src/lib/common/MultiSelect.svelte
+++ b/src/lib/common/MultiSelect.svelte
@@ -20,6 +20,9 @@
/** @type {string} */
export let placeholder = '';
+ /** @type {string} */
+ export let selectedText = '';
+
/** @type {string} */
export let containerClasses = "";
@@ -153,9 +156,9 @@
if (count === 0) {
displayText = '';
} else if (count === options.length) {
- displayText = `All selected (${count})`;
+ displayText = `All selected ${selectedText} (${count})`;
} else {
- displayText = `Selected (${count})`;
+ displayText = `Selected ${selectedText} (${count})`;
}
verifySelectAll();
diff --git a/src/lib/helpers/enums.js b/src/lib/helpers/enums.js
index f15b25e2..3ade3dc6 100644
--- a/src/lib/helpers/enums.js
+++ b/src/lib/helpers/enums.js
@@ -71,6 +71,16 @@ const agentType = {
};
export const AgentType = Object.freeze(agentType);
+const agentTaskStatus = {
+ Scheduled: 'scheduled',
+ New: 'new',
+ Running: 'running',
+ Success: 'success',
+ Failed: 'failed'
+};
+export const AgentTaskStatus = Object.freeze(agentTaskStatus);
+
+
const knowledgeCollectionType = {
QuestionAnswer: 'question-answer',
Document: 'document'
diff --git a/src/lib/helpers/types/agentTypes.js b/src/lib/helpers/types/agentTypes.js
index c0ea4e6d..61912e5a 100644
--- a/src/lib/helpers/types/agentTypes.js
+++ b/src/lib/helpers/types/agentTypes.js
@@ -27,12 +27,12 @@
/**
* @typedef {Object} AgentFilter
* @property {import('$commonTypes').Pagination} pager - Pagination
- * @property {string} [type]
- * @property {string} [agentName]
+ * @property {string[]?} [types]
+ * @property {string[]?} [agentNames]
* @property {string} [similarName]
* @property {boolean} [isPublic]
* @property {boolean} [disabled]
- * @property {string[]} [agentIds]
+ * @property {string[]?} [agentIds]
*/
/**
@@ -46,9 +46,11 @@
* @property {boolean} disabled
* @property {boolean} is_public
* @property {boolean} is_host
+ * @property {boolean} is_router
* @property {boolean} allow_routing
* @property {string} icon_url - Icon
* @property {string[]} profiles - The agent profiles.
+ * @property {string[]} labels - The agent labels.
* @property {boolean} merge_utility - Merge utility
* @property {number?} [max_message_count]
* @property {AgentUtility[]} utilities - The agent utilities.
@@ -78,6 +80,7 @@
* @typedef {Object} AgentTaskFilter
* @property {import('$commonTypes').Pagination} pager - Pagination
* @property {string} [agentId] - The agent id.
+ * @property {string?} [status] - The agent task status.
*/
/**
@@ -87,6 +90,7 @@
* @property {string} description - Description.
* @property {string} content - Task detail.
* @property {boolean} enabled
+ * @property {string} status
* @property {Date} created_datetime
* @property {Date} updated_datetime
* @property {string} agent_id - Description.
@@ -150,4 +154,12 @@
* @property {string?} [displayName]
*/
+
+/**
+ * @typedef {Object} AgentTaskSearchOption
+ * @property {string?} [agentId]
+ * @property {string?} [status]
+ */
+
+
export default {};
\ No newline at end of file
diff --git a/src/lib/scss/custom/pages/_agent.scss b/src/lib/scss/custom/pages/_agent.scss
index 0596a38e..bb9ea63e 100644
--- a/src/lib/scss/custom/pages/_agent.scss
+++ b/src/lib/scss/custom/pages/_agent.scss
@@ -1,3 +1,13 @@
+.agents-header-container {
+ display: flex;
+ justify-content: space-between;
+
+ .agent-filter {
+ display: flex;
+ gap: 10px
+ }
+}
+
.agent-prop-key {
width: 45%;
}
@@ -205,4 +215,11 @@
}
}
}
+}
+
+.agent-label-container {
+ display: flex;
+ gap: 5px;
+ flex-wrap: wrap;
+ margin: 5px 0px;
}
\ No newline at end of file
diff --git a/src/lib/scss/custom/structure/_topbar.scss b/src/lib/scss/custom/structure/_topbar.scss
index 98bfe937..d37e5c70 100644
--- a/src/lib/scss/custom/structure/_topbar.scss
+++ b/src/lib/scss/custom/structure/_topbar.scss
@@ -101,6 +101,7 @@
}
.page-content {
+ min-height: 500px;
padding: calc(#{$header-height} + #{$grid-gutter-width}) calc(#{$grid-gutter-width} * 0.75) $footer-height calc(#{$grid-gutter-width} * 0.75);
}
diff --git a/src/routes/chat/[agentId]/[conversationId]/chat-box.svelte b/src/routes/chat/[agentId]/[conversationId]/chat-box.svelte
index 94378811..f264cfab 100644
--- a/src/routes/chat/[agentId]/[conversationId]/chat-box.svelte
+++ b/src/routes/chat/[agentId]/[conversationId]/chat-box.svelte
@@ -70,8 +70,7 @@
import ChatBigMessage from './chat-util/chat-big-message.svelte';
import PersistLog from './persist-log/persist-log.svelte';
import InstantLog from './instant-log/instant-log.svelte';
-
-
+
const options = {
scrollbars: {
@@ -1651,7 +1650,7 @@
{#if message?.message_id === lastBotMsg?.message_id && message?.uuid === lastBotMsg?.uuid}
-
+
{#if PUBLIC_LIVECHAT_SPEAKER_ENABLED === 'true'}
(
+ { key: k, value: v }
+ ));
+
+ /** @type {string[]} */
+ let selectedAgentTypes = [];
+
onMount(async () => {
user = await myInfo();
getPagedAgents();
@@ -50,7 +58,8 @@
if (event.name !== GlobalEvent.Search) return;
filter = {
- pager: { page: firstPage, size: pageSize, count: 0 },
+ pager: initFilter.pager,
+ types: selectedAgentTypes?.length > 0 ? selectedAgentTypes : null,
similarName: event.payload || null
};
getPagedAgents();
@@ -138,17 +147,62 @@
getPagedAgents();
}
+
+
+ /**
+ * @param {any} e
+ */
+ function selectAgentTypeOption(e) {
+ // @ts-ignore
+ selectedAgentTypes = e.detail.selecteds?.map(x => x.value) || [];
+ }
+
+ function searchAgents() {
+ filter = {
+ ...filter,
+ types: selectedAgentTypes?.length > 0 ? selectedAgentTypes : null,
+ pager: initFilter.pager
+ };
+ getPagedAgents();
+ }
-{#if !!user && (ADMIN_ROLES.includes(user.role || '') || !!user.permissions?.includes(UserPermission.CreateAgent))}
-
-{/if}
+
+
diff --git a/src/routes/page/agent/[agentId]/+page.svelte b/src/routes/page/agent/[agentId]/+page.svelte
index 753bec9f..db2bdecd 100644
--- a/src/routes/page/agent/[agentId]/+page.svelte
+++ b/src/routes/page/agent/[agentId]/+page.svelte
@@ -75,6 +75,7 @@
instruction: agent.instruction || '',
channel_instructions: agent.channel_instructions || [],
profiles: agent.profiles?.filter((x, idx, self) => x?.trim()?.length > 0 && self.indexOf(x) === idx) || [],
+ labels: agent.labels?.filter((x, idx, self) => x?.trim()?.length > 0 && self.indexOf(x) === idx) || [],
utilities: agent.utilities || [],
knowledge_bases: agent.knowledge_bases || [],
rules: agent.rules || [],
@@ -161,7 +162,7 @@
diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte
index 56acd942..95c22905 100644
--- a/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte
+++ b/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte
@@ -6,7 +6,7 @@
import { AgentType } from '$lib/helpers/enums';
import { AgentExtensions } from '$lib/helpers/utils/agent';
- const profileLimit = 10;
+ const limit = 10;
/** @type {import('$agentTypes').AgentModel} */
@@ -15,6 +15,9 @@
/** @type {string[]} */
export let profiles = [];
+ /** @type {string[]} */
+ export let labels = [];
+
onMount(() => {});
function addProfile() {
@@ -32,6 +35,21 @@
agent.profiles = profiles;
}
+ function addLabel() {
+ if (!!!agent) return;
+
+ labels = [...labels, ''];
+ agent.labels = labels;
+ }
+
+ /**
+ * @param {number} index
+ */
+ function removeLabel(index) {
+ labels = labels.filter((x, idx) => idx !== index);
+ agent.labels = labels;
+ }
+
function chatWithAgent() {
if (!!!agent?.id) return;
@@ -127,7 +145,7 @@
{/each}
- {#if profiles?.length < profileLimit}
+ {#if profiles?.length < limit}
+
+ Labels |
+
+
+ {#each labels as label, index}
+
+
+
+ {}}
+ on:click={() => removeLabel(index)}
+ />
+
+
+ {/each}
+ {#if labels?.length < limit}
+
+ {}}
+ on:click={() => addLabel()}
+ />
+
+ {/if}
+
+ |
+
Status |
diff --git a/src/routes/page/agent/card-agent.svelte b/src/routes/page/agent/card-agent.svelte
index 0c4db673..5960660e 100644
--- a/src/routes/page/agent/card-agent.svelte
+++ b/src/routes/page/agent/card-agent.svelte
@@ -31,24 +31,32 @@
{agent.name}
- Provided by {agent.plugin.name}
+ {#if agent.labels?.length > 0}
+
+ {#each agent.labels as label}
+ {label}
+ {/each}
+
+ {:else}
+ Provided by {agent.plugin.name}
+ {/if}
{agent.description}
{#if agent.is_router}
- ![routing](icons/router.png)
+
{/if}
{#if agent.allow_routing}
- ![routing](icons/routing-2.png)
+
{/if}
{#each agent.functions as fn}
-
+
![{fn.name}/](images/function.png)
-
+
{/each}
@@ -67,6 +75,13 @@
{format(agent.updated_datetime, 'short-date')}
+ {#if agent.is_router}
+
+
+ {$_('View')}
+
+
+ {/if}
{$_('Build')}
diff --git a/src/routes/page/agent/evaluator/+page.svelte b/src/routes/page/agent/evaluator/+page.svelte
index 49e07d3a..85f60542 100644
--- a/src/routes/page/agent/evaluator/+page.svelte
+++ b/src/routes/page/agent/evaluator/+page.svelte
@@ -16,7 +16,7 @@
/** @type {import('$agentTypes').AgentFilter} */
const initFilter = {
pager: { page: firstPage, size: pageSize, count: 0 },
- type: "evaluating"
+ types: ["evaluating"]
};
/** @type {import('$agentTypes').AgentFilter} */
diff --git a/src/routes/page/agent/router/+page.svelte b/src/routes/page/agent/router/+page.svelte
index 603a981f..081c6d23 100644
--- a/src/routes/page/agent/router/+page.svelte
+++ b/src/routes/page/agent/router/+page.svelte
@@ -1,29 +1,39 @@
@@ -56,7 +65,8 @@
handleUserNodeSelected()}
on:routerNodeSelected={(e) => handleRouterNodeSelected(e.detail.agent)}
on:agentNodeSelected={(e) => handleAgentNodeSelected(e.detail.agent)}/>
diff --git a/src/routes/page/agent/router/routing-flow.svelte b/src/routes/page/agent/router/routing-flow.svelte
index 289c4a5b..1e259078 100644
--- a/src/routes/page/agent/router/routing-flow.svelte
+++ b/src/routes/page/agent/router/routing-flow.svelte
@@ -1,14 +1,16 @@
@@ -256,14 +265,50 @@
- handlePlannerAgentSelected()}/>
-
-
- handleTaskAgentSelected()} />
-
-
- handleStaticAgentSelected()} />
-
+ handlePlannerAgentSelected()}
+ />
+
+
+ handleTaskAgentSelected()}
+ />
+
+
+ handleStaticAgentSelected()}
+ />
+
\ No newline at end of file
diff --git a/src/routes/page/conversation/+page.svelte b/src/routes/page/conversation/+page.svelte
index 0342afce..c390f1a1 100644
--- a/src/routes/page/conversation/+page.svelte
+++ b/src/routes/page/conversation/+page.svelte
@@ -331,8 +331,7 @@
} else if (type === 'tags') {
searchOption = {
...searchOption,
- // @ts-ignore
- tags: e.detail.selecteds?.map(x => x.value) || []
+ tags: e.target.value?.length > 0 ? [e.target.value] : []
};
}
}
@@ -358,12 +357,12 @@
{$_('Conversation List')}
-
+ -->
|
@@ -232,7 +279,8 @@
{task.agent_name} |
{@html replaceNewLine(task.content)} |
{utcToLocal(task.updated_datetime)} |
-
{task.enabled ? $_("Enabled") : $_('"Disabled"')} |
+
{task.enabled ? $_("Enabled") : $_("Disabled")} |
+
{task.status} |
-
@@ -252,7 +300,7 @@
-
+ pageTo(pg)} />
|