diff --git a/src/lib/common/InPlaceEdit.svelte b/src/lib/common/InPlaceEdit.svelte index 9ce32362..cadc2c47 100644 --- a/src/lib/common/InPlaceEdit.svelte +++ b/src/lib/common/InPlaceEdit.svelte @@ -68,7 +68,7 @@ {:else} -
edit()}> +
edit()}> {#if !!value?.trim()} {value} {:else} diff --git a/src/lib/common/nav-bar/NavItem.svelte b/src/lib/common/nav-bar/NavItem.svelte index 0c6ffd42..30fe35a3 100644 --- a/src/lib/common/nav-bar/NavItem.svelte +++ b/src/lib/common/nav-bar/NavItem.svelte @@ -118,7 +118,7 @@ on:input={handleTabInput} /> {:else} -
+
{navBtnText}
{/if} diff --git a/src/lib/helpers/types/agentTypes.js b/src/lib/helpers/types/agentTypes.js index e3b3e0b3..96d74084 100644 --- a/src/lib/helpers/types/agentTypes.js +++ b/src/lib/helpers/types/agentTypes.js @@ -5,6 +5,7 @@ /** * @typedef {Object} AgentTemplate + * @property {string?} [uid] * @property {string} name * @property {string} content */ diff --git a/src/lib/scss/custom/pages/_agent.scss b/src/lib/scss/custom/pages/_agent.scss index f6a862c6..a7f4df42 100644 --- a/src/lib/scss/custom/pages/_agent.scss +++ b/src/lib/scss/custom/pages/_agent.scss @@ -102,6 +102,12 @@ background-color: white; padding: 20px; } + + .agent-prompt-body { + overflow-y: auto; + scrollbar-width: none; + margin-bottom: 0px !important; + } } } } diff --git a/src/routes/page/agent/[agentId]/+page.svelte b/src/routes/page/agent/[agentId]/+page.svelte index ba4435b3..0e1837e6 100644 --- a/src/routes/page/agent/[agentId]/+page.svelte +++ b/src/routes/page/agent/[agentId]/+page.svelte @@ -7,7 +7,7 @@ import Breadcrumb from '$lib/common/Breadcrumb.svelte'; import HeadTitle from '$lib/common/HeadTitle.svelte'; import LoadingToComplete from '$lib/common/LoadingToComplete.svelte'; - import AgentPrompt from './agent-components/agent-prompt.svelte'; + import AgentInstruction from './agent-components/agent-instruction.svelte'; import AgentOverview from './agent-components/agent-overview.svelte'; import AgentFunction from './agent-components/agent-function.svelte'; import AgentTabs from './agent-tabs.svelte'; @@ -19,13 +19,16 @@ import { goto } from '$app/navigation'; import { AgentExtensions } from '$lib/helpers/utils/agent'; import LocalStorageManager from '$lib/helpers/utils/storage-manager'; + import AgentTemplate from './agent-components/agent-template.svelte'; /** @type {import('$agentTypes').AgentModel} */ let agent; /** @type {any} */ let agentFunctionCmp = null; /** @type {any} */ - let agentPromptCmp = null; + let agentInstructionCmp = null; + /** @type {any} */ + let agentTemplateCmp = null; /** @type {any} */ let agentTabsCmp = null; /** @type {import('$agentTypes').AgentModel} */ @@ -90,7 +93,8 @@ function handleAgentUpdate() { fetchJsonContent(); - fetchPrompts(); + fetchInstructions(); + fetchTemplates(); fetchTabData(); agent = { @@ -114,7 +118,8 @@ isLoading = false; isComplete = true; deleteAgentDraft(); - refreshChannelPrompts(); + refreshInstructions(); + refreshTemplates(); setTimeout(() => { isComplete = false; }, duration); @@ -132,43 +137,66 @@ functions: textContent?.functions?.length > 0 ? textContent.functions : (jsonContent?.functions?.length > 0 ? jsonContent?.functions : []), responses: textContent?.responses?.length > 0 ? textContent.responses : - (jsonContent?.responses?.length > 0 ? jsonContent?.responses : []), - templates: textContent?.templates?.length > 0 ? textContent.templates : - (jsonContent?.templates?.length > 0 ? jsonContent?.templates : []), + (jsonContent?.responses?.length > 0 ? jsonContent?.responses : []) } } + // Functions, responses function fetchJsonContent() { const data = formatJsonContent(); agent.functions = data.functions; agent.responses = data.responses; - agent.templates = data.templates; } - function formatOriginalPrompts() { - const obj = agentPromptCmp?.fetchOriginalChannelPrompts(); + // Insturctions + function formatOriginalInstructions() { + const obj = agentInstructionCmp?.fetchOriginalInstructions(); return { instruction: obj.systemPrompt, channel_instructions: obj.channelPrompts || [] } } - function fetchPrompts() { - const obj = agentPromptCmp?.fetchChannelPrompts(); + function fetchInstructions() { + const obj = agentInstructionCmp?.fetchInstructions(); agent.instruction = obj.systemPrompt; agent.channel_instructions = obj.channelPrompts || []; } + function refreshInstructions() { + agentInstructionCmp?.refresh(); + } + + // Templates + function formatOriginalTemplates() { + const obj = agentTemplateCmp?.fetchOriginalTemplates(); + return { + templates: obj.templates || [] + } + } + + function fetchTemplates() { + const obj = agentTemplateCmp?.fetchTemplates(); + agent.templates = obj.templates || []; + } + + function refreshTemplates() { + agentTemplateCmp?.refresh(); + } + + + // Tab data function formatOriginalTabData() { - const data = agentTabsCmp?.fetchOriginalData(); + const data = agentTabsCmp?.fetchOriginalTabData(); return data ? { utilities: data.utilities || [], knowledge_bases: data.knwoledgebases || [], rules: data.rules || [] } : null; } + function fetchTabData() { - const data = agentTabsCmp?.fetchData(); + const data = agentTabsCmp?.fetchTabData(); if (data) { agent.utilities = data.utilities || []; agent.knowledge_bases = data.knwoledgebases || []; @@ -176,9 +204,6 @@ } } - function refreshChannelPrompts() { - agentPromptCmp?.refreshChannelPrompts(); - } function deleteCurrentAgent() { Swal.fire({ @@ -207,7 +232,8 @@ const data = { ...agent, ...formatJsonContent(), - ...formatOriginalPrompts(), + ...formatOriginalInstructions(), + ...formatOriginalTemplates(), ...formatOriginalTabData(), }; saveAgentDraft(data); @@ -218,9 +244,10 @@ agentDraft = null; deleteAgentDraft(); setTimeout(() => { - refreshChannelPrompts(); - agentFunctionCmp?.reinit(); - agentTabsCmp?.reinit(); + refreshInstructions(); + refreshTemplates(); + agentFunctionCmp?.refresh(); + agentTabsCmp?.refresh(); }); } @@ -253,8 +280,15 @@
- +
+
+ diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-function.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-function.svelte index 5536c527..b54e59be 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-function.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-function.svelte @@ -6,13 +6,13 @@ export let agent; /** @type {() => void} */ - export let handleAgentChange; + export let handleAgentChange = () => {}; export const fetchContent = () => { return content; } - export const reinit = () => init(); + export const refresh = () => init(); /** @type {import('svelte-jsoneditor').Content} */ let content = { @@ -27,8 +27,7 @@ content = { json: { functions: agent.functions, - responses: agent.responses, - templates: agent.templates + responses: agent.responses } }; } diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-prompt.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-instruction.svelte similarity index 80% rename from src/routes/page/agent/[agentId]/agent-components/agent-prompt.svelte rename to src/routes/page/agent/[agentId]/agent-components/agent-instruction.svelte index 17e56174..1530513b 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-prompt.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-instruction.svelte @@ -1,11 +1,11 @@ @@ -124,7 +127,7 @@
- +
{'Description:'} @@ -141,10 +144,10 @@ /> - +
- {#if local_instructions.length > 1} + {#if inner_instructions.length > 1} {'Instructions:'} {:else} {'System instruction:'} @@ -164,15 +167,15 @@
- {#if local_instructions.length > 1} + {#if inner_instructions.length > 1} - {#each local_instructions as inst, idx (idx) } + {#each inner_instructions as inst, idx (idx) } 0} allowDelete={idx > 0} maxEditLength={20} - editPlaceholder={'Type a channel name here...'} + editPlaceholder={'Type a channel here...'} onClick={() => selectChannel(inst.uid)} onDelete={() => { deleteChannel(inst.uid); handleAgentChange(); }} onInput={handleAgentChange} @@ -195,7 +198,7 @@ class="form-control" style="scrollbar-width: thin; resize: none;" value={selected_instruction.instruction} - rows={24} + rows={20} on:input={(e) => { changePrompt(e); handleAgentChange(); }} placeholder="Enter your instruction" /> diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-knowledge-base.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-knowledge-base.svelte index 837cabb3..97605035 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-knowledge-base.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-knowledge-base.svelte @@ -10,7 +10,7 @@ export let agent; /** @type {() => void} */ - export let handleAgentChange; + export let handleAgentChange = () => {}; export const fetchKnowledgeBases = () => { const candidates = innerKnowledgeBases?.filter(x => !!x.name)?.map(x => { @@ -31,7 +31,7 @@ } }); - refresh(knowledgeBases); + innerRefresh(knowledgeBases); return knowledgeBases; } @@ -39,7 +39,7 @@ return innerKnowledgeBases; } - export const reinit = () => init(); + export const refresh = () => init(); /** @type {any[]} */ let knowledgeBaseOptions = []; @@ -72,7 +72,7 @@ displayName: getDisplayOption(x), }; }) || []; - refresh(list); + innerRefresh(list); } /** @param {import('$agentTypes').AgentKnowledgeBase | any} b */ @@ -93,7 +93,7 @@ found.name = vals[0]; found.type = vals[1]; handleAgentChange(); - refresh(innerKnowledgeBases); + innerRefresh(innerKnowledgeBases); } function addKnowledgeBase() { @@ -125,12 +125,12 @@ found.disabled = !e.target.checked; handleAgentChange(); - refresh(innerKnowledgeBases); + innerRefresh(innerKnowledgeBases); } /** @param {import('$agentTypes').AgentKnowledgeBase[]} list */ - function refresh(list) { + function innerRefresh(list) { innerKnowledgeBases = list?.map(x => { return { name: x.name, diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-llm-config.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-llm-config.svelte index 8a40d67d..c2cae30f 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-llm-config.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-llm-config.svelte @@ -3,23 +3,28 @@ import { Card, CardBody, Input } from '@sveltestrap/sveltestrap'; import { getLlmProviders, getLlmProviderModels } from '$lib/services/llm-provider-service'; - /** @type {string[]} */ - let providers = []; - /** @type {import('$agentTypes').AgentModel} */ export let agent; - /** @type {import('$commonTypes').LlmModelSetting[]} */ - let models = []; - /** @type {() => void} */ - export let handleAgentChange; + export let handleAgentChange = () => {}; + + export const refresh = () => { + config = agent.llm_config; + init(); + }; const recursiveDepthLowerLimit = 1; const recursiveDepthUpperLimit = 10; let config = agent.llm_config; + /** @type {string[]} */ + let providers = []; + + /** @type {import('$commonTypes').LlmModelSetting[]} */ + let models = []; + onMount(async () =>{ await init(); }); @@ -36,10 +41,7 @@ config.model = foundModel?.name || null; } - export const reinit = () => { - config = agent.llm_config; - init(); - }; + /** @param {any} e */ async function changeProvider(e) { 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 3cee375e..7b4b679e 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-overview.svelte @@ -20,7 +20,7 @@ export let labels = []; /** @type {() => void} */ - export let handleAgentChange; + export let handleAgentChange = () => {}; /** @type {boolean} */ export let resetable = false; @@ -129,9 +129,13 @@ - Visibility + +
+ Visibility +
+ -
+
- +
- Routable + +
+ Routable +
+ -
+
- Profiles + +
+ Profiles +
+
{#each profiles as profile, index} @@ -198,7 +212,11 @@ - Labels + +
+ Labels +
+
{#each labels as label, index} @@ -237,9 +255,13 @@ - Status + +
+ Status +
+ -
+
- Max message count + +
+ Max message count +
+ -
+
- Created Date - {utcToLocal(agent.created_datetime)} + +
+ Created Date +
+ + +
+ {utcToLocal(agent.created_datetime)} +
+ diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte index f1e9d779..4c8d1290 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte @@ -10,7 +10,7 @@ export let agent; /** @type {() => void} */ - export let handleAgentChange; + export let handleAgentChange = () => {}; export const fetchRules = () => { const candidates = innerRules?.filter(x => !!x.trigger_name)?.map(x => { @@ -31,7 +31,7 @@ } }); - refresh(rules); + innerRefresh(rules); return rules; } @@ -39,7 +39,7 @@ return innerRules; } - export const reinit = () => init(); + export const refresh = () => init(); /** @type {any[]} */ let ruleOptions = []; @@ -70,7 +70,7 @@ displayName: "", }; }) || []; - refresh(list); + innerRefresh(list); } /** @@ -84,7 +84,7 @@ const val = e.target.value; found.trigger_name = val; handleAgentChange(); - refresh(innerRules); + innerRefresh(innerRules); } function addRule() { @@ -116,7 +116,7 @@ found.disabled = !e.target.checked; handleAgentChange(); - refresh(innerRules); + innerRefresh(innerRules); } /** @@ -133,12 +133,12 @@ found.criteria = val; } handleAgentChange(); - refresh(innerRules); + innerRefresh(innerRules); } /** @param {import('$agentTypes').AgentRule[]} list */ - function refresh(list) { + function innerRefresh(list) { innerRules = list?.map(x => { return { trigger_name: x.trigger_name, diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte new file mode 100644 index 00000000..1e647c42 --- /dev/null +++ b/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte @@ -0,0 +1,185 @@ + + + + + +
+
+
{'Templates'}
+
+
+
+ + +
+
+ {'Prompts:'} +
+ + +
{ addTemplate(); handleAgentChange(); }} + > + +
+
+ + {#if inner_templates.length > 0} + + {#each inner_templates as template, idx (idx) } + selectTemplate(template.uid)} + onDelete={() => { deleteTemplate(template.uid); handleAgentChange(); }} + onInput={() => handleAgentChange()} + /> + {/each} + + { changePrompt(e); handleAgentChange(); }} + placeholder="Enter your template" + /> + {/if} +
+
+
\ No newline at end of file diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-utility.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-utility.svelte index abf65151..c76c738c 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-utility.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-utility.svelte @@ -11,7 +11,7 @@ export let agent; /** @type {() => void} */ - export let handleAgentChange; + export let handleAgentChange = () => {}; export const fetchUtilities = () => { const candidates = innerUtilities?.filter(x => !!x.name)?.map(x => { @@ -47,7 +47,7 @@ }; }); - refresh(candidates); + innerRefresh(candidates); return candidates; } @@ -55,7 +55,7 @@ return innerUtilities; } - export const reinit = () => init(); + export const refresh = () => init(); /** @type {any} */ let utilityMapper = {}; @@ -121,7 +121,7 @@ })) || [] }; }) || []; - refresh(list); + innerRefresh(list); } /** @@ -142,7 +142,7 @@ // @ts-ignore ...utilityMapper[name].templates?.filter(x => !!x.name) || [] ]; - refresh(innerUtilities); + innerRefresh(innerUtilities); } function addUtility() { @@ -176,7 +176,7 @@ found.templates.push({ name: '', displayName: '' }); } - refresh(innerUtilities); + innerRefresh(innerUtilities); } /** @@ -196,7 +196,7 @@ found.templates = tps; } - refresh(innerUtilities); + innerRefresh(innerUtilities); } @@ -224,7 +224,7 @@ tp.displayName = vals[1]; } } - refresh(innerUtilities); + innerRefresh(innerUtilities); } /** @@ -236,12 +236,12 @@ if (!found) return; found.disabled = !e.target.checked; - refresh(innerUtilities); + innerRefresh(innerUtilities); } /** @param {import('$agentTypes').AgentUtility[]} list */ - function refresh(list) { + function innerRefresh(list) { innerUtilities = list?.map(x => { return { name: x.name, diff --git a/src/routes/page/agent/[agentId]/agent-tabs.svelte b/src/routes/page/agent/[agentId]/agent-tabs.svelte index 93062b99..d9abfc50 100644 --- a/src/routes/page/agent/[agentId]/agent-tabs.svelte +++ b/src/routes/page/agent/[agentId]/agent-tabs.svelte @@ -13,9 +13,9 @@ export let agent; /** @type {() => void} */ - export let handleAgentChange; + export let handleAgentChange = () => {}; - export const fetchData = () => { + export const fetchTabData = () => { const utilities = agentUtilityCmp?.fetchUtilities(); const knwoledgebases = agentKnowledgeBaseCmp?.fetchKnowledgeBases(); const rules = agentEventRuleCmp?.fetchRules(); @@ -27,7 +27,7 @@ }; }; - export const fetchOriginalData = () => { + export const fetchOriginalTabData = () => { const utilities = agentUtilityCmp?.fetchOriginalUtilities(); const knwoledgebases = agentKnowledgeBaseCmp?.fetchOriginalKnowledgeBases(); const rules = agentEventRuleCmp?.fetchOriginalRules(); @@ -39,11 +39,11 @@ }; } - export const reinit = () => { - agentLlmConfigCmp?.reinit(); - agentUtilityCmp?.reinit(); - agentKnowledgeBaseCmp?.reinit(); - agentEventRuleCmp?.reinit(); + export const refresh = () => { + agentLlmConfigCmp?.refresh(); + agentUtilityCmp?.refresh(); + agentKnowledgeBaseCmp?.refresh(); + agentEventRuleCmp?.refresh(); } /** @type {any} */