diff --git a/src/lib/helpers/constants.js b/src/lib/helpers/constants.js index ddb7d4a5..f91563c2 100644 --- a/src/lib/helpers/constants.js +++ b/src/lib/helpers/constants.js @@ -36,4 +36,7 @@ export const EVALUATOR_ID = "2cd4b805-7078-4405-87e9-2ec9aadf8a11"; export const TRAINING_MODE = "training"; export const DEFAULT_KNOWLEDGE_COLLECTION = "BotSharp"; -export const IMAGE_DATA_PREFIX = 'data:image'; \ No newline at end of file +export const IMAGE_DATA_PREFIX = 'data:image'; + +export const INTEGER_REGEX = "[0-9]+"; +export const DECIMAL_REGEX = "[0-9.]+"; \ No newline at end of file diff --git a/src/lib/helpers/types/agentTypes.js b/src/lib/helpers/types/agentTypes.js index 96d74084..2637614c 100644 --- a/src/lib/helpers/types/agentTypes.js +++ b/src/lib/helpers/types/agentTypes.js @@ -140,7 +140,8 @@ * @property {string} name * @property {string} type * @property {string?} [displayName] - * @property {boolean} disabled + * @property {boolean} disabled + * @property {number?} [confidence] */ /** diff --git a/src/lib/scss/custom/pages/_agent.scss b/src/lib/scss/custom/pages/_agent.scss index a7f4df42..9e5ffda4 100644 --- a/src/lib/scss/custom/pages/_agent.scss +++ b/src/lib/scss/custom/pages/_agent.scss @@ -167,6 +167,8 @@ .utility-label { width: 30%; + font-size: 0.95em; + flex-wrap: wrap; } .utility-value { @@ -222,7 +224,7 @@ display: flex; .utility-label { - font-size: 12px; + font-size: 0.95em; } } } diff --git a/src/routes/page/agent/[agentId]/+page.svelte b/src/routes/page/agent/[agentId]/+page.svelte index 0e1837e6..06e47d03 100644 --- a/src/routes/page/agent/[agentId]/+page.svelte +++ b/src/routes/page/agent/[agentId]/+page.svelte @@ -107,11 +107,7 @@ utilities: agent.utilities || [], knowledge_bases: agent.knowledge_bases || [], rules: agent.rules || [], - max_message_count: Number(agent.max_message_count) > 0 ? Number(agent.max_message_count) : null, - llm_config: { - ...agent.llm_config, - max_output_tokens: Number(agent.llm_config.max_output_tokens) > 0 ? Number(agent.llm_config.max_output_tokens) : null - } + max_message_count: Number(agent.max_message_count) > 0 ? Number(agent.max_message_count) : null }; isLoading = true; saveAgent(agent).then(res => { @@ -198,6 +194,7 @@ function fetchTabData() { const data = agentTabsCmp?.fetchTabData(); if (data) { + agent.llm_config = data.llmConfig; agent.utilities = data.utilities || []; agent.knowledge_bases = data.knwoledgebases || []; agent.rules = data.rules || []; @@ -239,7 +236,7 @@ saveAgentDraft(data); } - function agentDraftReset() { + function handleAgentReset() { agent = JSON.parse(JSON.stringify(originalAgent)); agentDraft = null; deleteAgentDraft(); @@ -266,7 +263,7 @@ profiles={agent.profiles || []} labels={agent.labels || []} resetable={!!agentDraft} - resetAgent={() => agentDraftReset()} + resetAgent={() => handleAgentReset()} {handleAgentChange} /> 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 97605035..553c3911 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 @@ -3,8 +3,11 @@ import { Card, CardBody, Input, Button } from '@sveltestrap/sveltestrap'; import { getVectorKnowledgeCollections } from '$lib/services/knowledge-base-service'; import { KnowledgeCollectionDisplayType } from '$lib/helpers/enums'; + import { DECIMAL_REGEX } from '$lib/helpers/constants'; const limit = 5; + const confidLowerBound = 0; + const confidUpperBound = 1; /** @type {import('$agentTypes').AgentModel} */ export let agent; @@ -17,7 +20,8 @@ return { name: x.name, type: x.type, - disabled: x.disabled + disabled: x.disabled, + confidence: x.confidence }; }); @@ -96,6 +100,44 @@ innerRefresh(innerKnowledgeBases); } + /** + * @param {any} e + * @param {number} idx + */ + function changeConfidence(e, idx) { + const found = innerKnowledgeBases.find((_, index) => index === idx); + if (!found) return; + + const value = e.target.value; + const confidence = validateConfidenceNumber(value); + found.confidence = confidence; + handleAgentChange(); + innerRefresh(innerKnowledgeBases); + } + + /** @param {any} e */ + function validateConfidenceInput(e) { + const reg = new RegExp(DECIMAL_REGEX, 'g'); + if (e.key !== 'Backspace' && !reg.test(e.key)) { + e.preventDefault(); + } + } + + /** @param {string} value */ + function validateConfidenceNumber(value) { + let confidence; + const num = Number(value); + + if (isNaN(num) || num < confidLowerBound) { + confidence = '0.0'; + } else if (num >= confidUpperBound) { + confidence = '1.0'; + } else { + confidence = num.toFixed(1); + } + return Number(confidence); + } + function addKnowledgeBase() { innerKnowledgeBases = [ ...innerKnowledgeBases, @@ -136,7 +178,8 @@ name: x.name, type: x.type, displayName: x.displayName, - disabled: x.disabled + disabled: x.disabled, + confidence: x.confidence } }) || []; } @@ -198,6 +241,28 @@ +
+
+
+
+ {'Confidence'} +
+
+
+ validateConfidenceInput(e)} + on:blur={e => changeConfidence(e, uid)} + /> +
+
+
+
+
+
{/each} 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 c2cae30f..f2e84f16 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 @@ -2,6 +2,7 @@ import { onMount } from 'svelte'; import { Card, CardBody, Input } from '@sveltestrap/sveltestrap'; import { getLlmProviders, getLlmProviderModels } from '$lib/services/llm-provider-service'; + import { INTEGER_REGEX } from '$lib/helpers/constants'; /** @type {import('$agentTypes').AgentModel} */ export let agent; @@ -9,6 +10,15 @@ /** @type {() => void} */ export let handleAgentChange = () => {}; + export const fetchLlmConfig = () => { + return { + ...config, + max_output_tokens: Number(config.max_output_tokens) > 0 ? Number(config.max_output_tokens) : null + }; + } + + export const fetchOriginalLlmConfig = () => {}; + export const refresh = () => { config = agent.llm_config; init(); @@ -56,7 +66,6 @@ } config.is_inherit = false; - // handleAgentChange(); models = await getLlmProviderModels(provider); config.model = models[0]?.name; handleAgentChange(); @@ -89,6 +98,14 @@ config.max_output_tokens = value; handleAgentChange(); } + + /** @param {any} e */ + function validateIntegerInput(e) { + const reg = new RegExp(INTEGER_REGEX, 'g'); + if (e.key !== 'Backspace' && !reg.test(e.key)) { + e.preventDefault(); + } + } @@ -138,6 +155,7 @@ min={recursiveDepthLowerLimit} max={recursiveDepthUpperLimit} value={config.max_recursion_depth} + on:keydown={e => validateIntegerInput(e)} on:change={e => changeMaxRecursiveDepth(e)} /> @@ -152,6 +170,7 @@ style="text-align: center;" type="number" value={config.max_output_tokens} + on:keydown={e => validateIntegerInput(e)} on:change={e => changeMaxOutputToken(e)} /> diff --git a/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte b/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte index 1e647c42..2615a31b 100644 --- a/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte +++ b/src/routes/page/agent/[agentId]/agent-components/agent-template.svelte @@ -129,7 +129,7 @@
- {'Prompts:'} + {'Contents:'}
diff --git a/src/routes/page/agent/[agentId]/agent-tabs.svelte b/src/routes/page/agent/[agentId]/agent-tabs.svelte index d9abfc50..74929978 100644 --- a/src/routes/page/agent/[agentId]/agent-tabs.svelte +++ b/src/routes/page/agent/[agentId]/agent-tabs.svelte @@ -16,11 +16,13 @@ export let handleAgentChange = () => {}; export const fetchTabData = () => { + const llmConfig = agentLlmConfigCmp?.fetchLlmConfig(); const utilities = agentUtilityCmp?.fetchUtilities(); const knwoledgebases = agentKnowledgeBaseCmp?.fetchKnowledgeBases(); const rules = agentEventRuleCmp?.fetchRules(); return { + llmConfig, utilities: utilities || [], knwoledgebases: knwoledgebases || [], rules: rules || [] diff --git a/src/routes/page/knowledge-base/documents/+page.svelte b/src/routes/page/knowledge-base/documents/+page.svelte index ed09a125..4650dbeb 100644 --- a/src/routes/page/knowledge-base/documents/+page.svelte +++ b/src/routes/page/knowledge-base/documents/+page.svelte @@ -38,12 +38,12 @@ import CollectionCreateModal from '../common/collection/collection-create-modal.svelte'; import AdvancedSearch from '../common/search/advanced-search.svelte'; import KnowledgeDocumentUpload from './knowledge-document-upload.svelte'; + import { DECIMAL_REGEX } from '$lib/helpers/constants'; const pageSize = 8; const duration = 2000; const maxLength = 4096; const step = 0.1; - const numberRegex = "[0-9\.]+"; const enableVector = true; const collectionType = KnowledgeCollectionType.Document; const includedPayloads = [ @@ -241,7 +241,7 @@ /** @param {any} e */ function validateConfidenceInput(e) { - var reg = new RegExp(numberRegex, 'g'); + const reg = new RegExp(DECIMAL_REGEX, 'g'); if (e.key !== 'Backspace' && !reg.test(e.key)) { e.preventDefault(); } diff --git a/src/routes/page/knowledge-base/question-answer/+page.svelte b/src/routes/page/knowledge-base/question-answer/+page.svelte index 050c735e..2be650a7 100644 --- a/src/routes/page/knowledge-base/question-answer/+page.svelte +++ b/src/routes/page/knowledge-base/question-answer/+page.svelte @@ -32,12 +32,12 @@ import VectorItem from '../common/vector-table/vector-item.svelte'; import VectorItemEditModal from '../common/vector-table/vector-item-edit-modal.svelte'; import CollectionCreateModal from '../common/collection/collection-create-modal.svelte'; + import { DECIMAL_REGEX } from '$lib/helpers/constants'; const pageSize = 8; const duration = 2000; const maxLength = 4096; - const numberRegex = "[0-9\.]+"; const step = 0.1; const enableVector = true; const collectionType = KnowledgeCollectionType.QuestionAnswer; @@ -218,7 +218,7 @@ /** @param {any} e */ function validateConfidenceInput(e) { - var reg = new RegExp(numberRegex, 'g'); + const reg = new RegExp(DECIMAL_REGEX, 'g'); if (e.key !== 'Backspace' && !reg.test(e.key)) { e.preventDefault(); }