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} +
+
+ {#if !!user && (ADMIN_ROLES.includes(user.role || '') || !!user.permissions?.includes(UserPermission.CreateAgent))} + + {/if} +
+
+ {}} + /> + selectAgentTypeOption(e)} + /> + +
+
+ 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 + routing
{/if} {#if agent.allow_routing}
- routing + routing
{/if} {#each agent.functions as fn}
- + {fn.name}/ - +
{/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')}
    - + --> @@ -411,11 +410,11 @@ - changeOption(e, "tags")} + changeOption(e, "tags")} /> - + - - changeOption(e, 'status')}> + + {#each statusOptions as op} + + {/each} - - @@ -218,6 +264,7 @@ {$_('Agent')} {$_('Details')} {$_('Updated Date')} + {$_('Enabled')} {$_('Status')} {$_('Action')} @@ -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)} />