diff --git a/src/lib/helpers/enums.js b/src/lib/helpers/enums.js index 569a39ce..36ccee84 100644 --- a/src/lib/helpers/enums.js +++ b/src/lib/helpers/enums.js @@ -77,6 +77,12 @@ const knowledgeCollectionType = { }; export const KnowledgeCollectionType = Object.freeze(knowledgeCollectionType); +const knowledgeCollectionDisplayType = { + [knowledgeCollectionType.QuestionAnswer]: "Q & A", + [knowledgeCollectionType.Document]: "Docs", +}; +export const KnowledgeCollectionDisplayType = Object.freeze(knowledgeCollectionDisplayType); + const knowledgePayloadName = { Text: 'text', Question: 'question', diff --git a/src/lib/helpers/types/agentTypes.js b/src/lib/helpers/types/agentTypes.js index 312b42e2..507b3b44 100644 --- a/src/lib/helpers/types/agentTypes.js +++ b/src/lib/helpers/types/agentTypes.js @@ -130,6 +130,8 @@ /** * @typedef {Object} AgentKnowledgeBase * @property {string} name + * @property {string} type + * @property {string?} [displayName] * @property {boolean} disabled */ diff --git a/src/lib/helpers/types/knowledgeTypes.js b/src/lib/helpers/types/knowledgeTypes.js index d470499b..5a23313d 100644 --- a/src/lib/helpers/types/knowledgeTypes.js +++ b/src/lib/helpers/types/knowledgeTypes.js @@ -65,4 +65,24 @@ * @property {number} count */ +/** + * @typedef {Object} VectorCollectionConfig + * @property {string} name + * @property {string} type + * @property {VectorStoreConfig} vector_store + * @property {KnowledgeEmbeddingConfig} text_embedding + */ + +/** + * @typedef {Object} VectorStoreConfig + * @property {string} provider + */ + +/** + * @typedef {Object} KnowledgeEmbeddingConfig + * @property {string} provider + * @property {string} model + * @property {number} dimension + */ + export default {}; \ No newline at end of file diff --git a/src/lib/services/knowledge-base-service.js b/src/lib/services/knowledge-base-service.js index 78dc837f..165cc7fe 100644 --- a/src/lib/services/knowledge-base-service.js +++ b/src/lib/services/knowledge-base-service.js @@ -17,10 +17,10 @@ export async function existVectorCollection(collection) { } /** - * @param {string} type - * @returns {Promise} + * @param {string?} type + * @returns {Promise} */ -export async function getVectorKnowledgeCollections(type) { +export async function getVectorKnowledgeCollections(type = null) { const url = endpoints.vectorCollectionsUrl; const response = await axios.get(url, { params: { diff --git a/src/routes/page/agent/[agentId]/agent-knowledge-base.svelte b/src/routes/page/agent/[agentId]/agent-knowledge-base.svelte index e4c2a2f6..9fb3bfb9 100644 --- a/src/routes/page/agent/[agentId]/agent-knowledge-base.svelte +++ b/src/routes/page/agent/[agentId]/agent-knowledge-base.svelte @@ -2,6 +2,7 @@ import { onMount } from 'svelte'; import { Card, CardBody, Input, Button } from '@sveltestrap/sveltestrap'; import { getVectorKnowledgeCollections } from '$lib/services/knowledge-base-service'; + import { KnowledgeCollectionDisplayType } from '$lib/helpers/enums'; const limit = 5; @@ -12,28 +13,45 @@ const candidates = innerKnowledgeBases?.filter(x => !!x.name)?.map(x => { return { name: x.name, + type: x.type, disabled: x.disabled }; }); - candidates.map(x => { - console.log(x.disabled); - console.log(x.name); + + /** @type {import('$agentTypes').AgentKnowledgeBase[]} */ + const knowledgeBases = []; + const unique = new Set(); + candidates.forEach(x => { + if (!unique.has(x.name)) { + knowledgeBases.push(x); + unique.add(x.name); + } }); - refresh(candidates); - return candidates; + + refresh(knowledgeBases); + return knowledgeBases; } - /** @type {string[]} */ + /** @type {any[]} */ let knowledgeBaseOptions = []; /** @type {import('$agentTypes').AgentKnowledgeBase[]} */ let innerKnowledgeBases = []; onMount(async () =>{ - const type = 'question-answer'; - getVectorKnowledgeCollections(type).then(data => { - const names = data || []; - knowledgeBaseOptions = ["", ...names]; + getVectorKnowledgeCollections().then(data => { + const list = data?.map(x => { + return { + name: x.name, + type: x.type, + displayName: getDisplayOption(x) + }; + }) || []; + knowledgeBaseOptions = [{ + name: "", + type: "", + displayName: "" + }, ...list]; }); init(); }); @@ -42,12 +60,19 @@ const list = agent.knowledge_bases?.map(x => { return { ...x, + displayName: getDisplayOption(x), disabled: false }; }) || []; refresh(list); } + /** @param {import('$agentTypes').AgentKnowledgeBase | any} b */ + function getDisplayOption(b) { + return `${b.name} ${!!KnowledgeCollectionDisplayType[b.type] + ? `(${KnowledgeCollectionDisplayType[b.type]})` : ''}` + } + /** * @param {any} e * @param {number} idx @@ -56,8 +81,9 @@ const found = innerKnowledgeBases.find((_, index) => index === idx); if (!found) return; - const name = e.target.value; - found.name = name; + const vals = e.target.value.split("#"); + found.name = vals[0]; + found.type = vals[1]; refresh(innerKnowledgeBases); } @@ -66,6 +92,8 @@ ...innerKnowledgeBases, { name: '', + type: '', + displayName: '', disabled: false } ]; @@ -94,6 +122,8 @@ innerKnowledgeBases = list?.map(x => { return { name: x.name, + type: x.type, + displayName: x.displayName, disabled: x.disabled } }) || []; @@ -135,12 +165,13 @@
changeKnowledgeBase(e, uid)} > - {#each [...knowledgeBaseOptions, "one.data-assistant"] as option} - + {#each [...knowledgeBaseOptions] as option} + {/each}
diff --git a/src/routes/page/agent/[agentId]/agent-utility.svelte b/src/routes/page/agent/[agentId]/agent-utility.svelte index 69afa03c..a8c9dce9 100644 --- a/src/routes/page/agent/[agentId]/agent-utility.svelte +++ b/src/routes/page/agent/[agentId]/agent-utility.svelte @@ -342,7 +342,7 @@ on:change={e => selectContent(e, uid, fid, 'function')} > {#each (utilityMapper[utility.name]?.functions || []) as option} - + {/each} @@ -391,7 +391,7 @@ on:change={e => selectContent(e, uid, tid, 'template')} > {#each (utilityMapper[utility.name]?.templates || []) as option} - + {/each} diff --git a/src/routes/page/knowledge-base/documents/+page.svelte b/src/routes/page/knowledge-base/documents/+page.svelte index d319a3d1..c0760819 100644 --- a/src/routes/page/knowledge-base/documents/+page.svelte +++ b/src/routes/page/knowledge-base/documents/+page.svelte @@ -270,7 +270,7 @@ function getCollections() { return new Promise((resolve, reject) => { getVectorKnowledgeCollections(collectionType).then(res => { - const retCollections = res || []; + const retCollections = res?.map(x => x.name) || []; collections = [ ...retCollections ]; selectedCollection = collections[0]; resolve(res); diff --git a/src/routes/page/knowledge-base/question-answer/+page.svelte b/src/routes/page/knowledge-base/question-answer/+page.svelte index 12527347..f4b45343 100644 --- a/src/routes/page/knowledge-base/question-answer/+page.svelte +++ b/src/routes/page/knowledge-base/question-answer/+page.svelte @@ -247,7 +247,7 @@ function getCollections() { return new Promise((resolve, reject) => { getVectorKnowledgeCollections(collectionType).then(res => { - const retCollections = res || []; + const retCollections = res?.map(x => x.name) || []; collections = [ ...retCollections ]; selectedCollection = collections[0]; resolve(res);