Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/lib/helpers/enums.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
2 changes: 2 additions & 0 deletions src/lib/helpers/types/agentTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@
/**
* @typedef {Object} AgentKnowledgeBase
* @property {string} name
* @property {string} type
* @property {string?} [displayName]
* @property {boolean} disabled
*/

Expand Down
20 changes: 20 additions & 0 deletions src/lib/helpers/types/knowledgeTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {};
6 changes: 3 additions & 3 deletions src/lib/services/knowledge-base-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ export async function existVectorCollection(collection) {
}

/**
* @param {string} type
* @returns {Promise<string[]>}
* @param {string?} type
* @returns {Promise<import('$knowledgeTypes').VectorCollectionConfig[]>}
*/
export async function getVectorKnowledgeCollections(type) {
export async function getVectorKnowledgeCollections(type = null) {
const url = endpoints.vectorCollectionsUrl;
const response = await axios.get(url, {
params: {
Expand Down
61 changes: 46 additions & 15 deletions src/routes/page/agent/[agentId]/agent-knowledge-base.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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();
});
Expand All @@ -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
Expand All @@ -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);
}

Expand All @@ -66,6 +92,8 @@
...innerKnowledgeBases,
{
name: '',
type: '',
displayName: '',
disabled: false
}
];
Expand Down Expand Up @@ -94,6 +122,8 @@
innerKnowledgeBases = list?.map(x => {
return {
name: x.name,
type: x.type,
displayName: x.displayName,
disabled: x.disabled
}
}) || [];
Expand Down Expand Up @@ -135,12 +165,13 @@
<div class="utility-input line-align-center">
<Input
type="select"
value={knowledge.name}
disabled={knowledge.disabled}
on:change={e => changeKnowledgeBase(e, uid)}
>
{#each [...knowledgeBaseOptions, "one.data-assistant"] as option}
<option value={option} selected={option == knowledge.name}>{option}</option>
{#each [...knowledgeBaseOptions] as option}
<option value={`${option.name}#${option.type}`} selected={option.name == knowledge.name}>
{option.displayName}
</option>
{/each}
</Input>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/routes/page/agent/[agentId]/agent-utility.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@
on:change={e => selectContent(e, uid, fid, 'function')}
>
{#each (utilityMapper[utility.name]?.functions || []) as option}
<option value={`${option.name}#${option.dsiplayName}`} selected={option.name == fn.name}>{option.displayName}</option>
<option value={`${option.name}#${option.displayName}`} selected={option.name == fn.name}>{option.displayName}</option>
{/each}
</Input>
</div>
Expand Down Expand Up @@ -391,7 +391,7 @@
on:change={e => selectContent(e, uid, tid, 'template')}
>
{#each (utilityMapper[utility.name]?.templates || []) as option}
<option value={`${option.name}#${option.dsiplayName}`} selected={option.name == tp.name}>{option.displayName}</option>
<option value={`${option.name}#${option.displayName}`} selected={option.name == tp.name}>{option.displayName}</option>
{/each}
</Input>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/routes/page/knowledge-base/documents/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Loading