Skip to content

Commit f69ccc9

Browse files
author
Jicheng Lu
committed
refine agent knowledge base
1 parent f519343 commit f69ccc9

File tree

8 files changed

+81
-22
lines changed

8 files changed

+81
-22
lines changed

src/lib/helpers/enums.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ const knowledgeCollectionType = {
7777
};
7878
export const KnowledgeCollectionType = Object.freeze(knowledgeCollectionType);
7979

80+
const knowledgeCollectionDisplayType = {
81+
[knowledgeCollectionType.QuestionAnswer]: "Q & A",
82+
[knowledgeCollectionType.Document]: "Docs",
83+
};
84+
export const KnowledgeCollectionDisplayType = Object.freeze(knowledgeCollectionDisplayType);
85+
8086
const knowledgePayloadName = {
8187
Text: 'text',
8288
Question: 'question',

src/lib/helpers/types/agentTypes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@
130130
/**
131131
* @typedef {Object} AgentKnowledgeBase
132132
* @property {string} name
133+
* @property {string} type
134+
* @property {string?} [displayName]
133135
* @property {boolean} disabled
134136
*/
135137

src/lib/helpers/types/knowledgeTypes.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,24 @@
6565
* @property {number} count
6666
*/
6767

68+
/**
69+
* @typedef {Object} VectorCollectionConfig
70+
* @property {string} name
71+
* @property {string} type
72+
* @property {VectorStoreConfig} vector_store
73+
* @property {KnowledgeEmbeddingConfig} text_embedding
74+
*/
75+
76+
/**
77+
* @typedef {Object} VectorStoreConfig
78+
* @property {string} provider
79+
*/
80+
81+
/**
82+
* @typedef {Object} KnowledgeEmbeddingConfig
83+
* @property {string} provider
84+
* @property {string} model
85+
* @property {number} dimension
86+
*/
87+
6888
export default {};

src/lib/services/knowledge-base-service.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ export async function existVectorCollection(collection) {
1717
}
1818

1919
/**
20-
* @param {string} type
21-
* @returns {Promise<string[]>}
20+
* @param {string?} type
21+
* @returns {Promise<import('$knowledgeTypes').VectorCollectionConfig[]>}
2222
*/
23-
export async function getVectorKnowledgeCollections(type) {
23+
export async function getVectorKnowledgeCollections(type = null) {
2424
const url = endpoints.vectorCollectionsUrl;
2525
const response = await axios.get(url, {
2626
params: {

src/routes/page/agent/[agentId]/agent-knowledge-base.svelte

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { onMount } from 'svelte';
33
import { Card, CardBody, Input, Button } from '@sveltestrap/sveltestrap';
44
import { getVectorKnowledgeCollections } from '$lib/services/knowledge-base-service';
5+
import { KnowledgeCollectionDisplayType } from '$lib/helpers/enums';
56
67
const limit = 5;
78
@@ -12,28 +13,45 @@
1213
const candidates = innerKnowledgeBases?.filter(x => !!x.name)?.map(x => {
1314
return {
1415
name: x.name,
16+
type: x.type,
1517
disabled: x.disabled
1618
};
1719
});
18-
candidates.map(x => {
19-
console.log(x.disabled);
20-
console.log(x.name);
20+
21+
/** @type {import('$agentTypes').AgentKnowledgeBase[]} */
22+
const knowledgeBases = [];
23+
const unique = new Set();
24+
candidates.forEach(x => {
25+
if (!unique.has(x.name)) {
26+
knowledgeBases.push(x);
27+
unique.add(x.name);
28+
}
2129
});
22-
refresh(candidates);
23-
return candidates;
30+
31+
refresh(knowledgeBases);
32+
return knowledgeBases;
2433
}
2534
26-
/** @type {string[]} */
35+
/** @type {any[]} */
2736
let knowledgeBaseOptions = [];
2837
2938
/** @type {import('$agentTypes').AgentKnowledgeBase[]} */
3039
let innerKnowledgeBases = [];
3140
3241
onMount(async () =>{
33-
const type = 'question-answer';
34-
getVectorKnowledgeCollections(type).then(data => {
35-
const names = data || [];
36-
knowledgeBaseOptions = ["", ...names];
42+
getVectorKnowledgeCollections().then(data => {
43+
const list = data?.map(x => {
44+
return {
45+
name: x.name,
46+
type: x.type,
47+
displayName: getDisplayOption(x)
48+
};
49+
}) || [];
50+
knowledgeBaseOptions = [{
51+
name: "",
52+
type: "",
53+
displayName: ""
54+
}, ...list];
3755
});
3856
init();
3957
});
@@ -42,12 +60,19 @@
4260
const list = agent.knowledge_bases?.map(x => {
4361
return {
4462
...x,
63+
displayName: getDisplayOption(x),
4564
disabled: false
4665
};
4766
}) || [];
4867
refresh(list);
4968
}
5069
70+
/** @param {import('$agentTypes').AgentKnowledgeBase | any} b */
71+
function getDisplayOption(b) {
72+
return `${b.name} ${!!KnowledgeCollectionDisplayType[b.type]
73+
? `(${KnowledgeCollectionDisplayType[b.type]})` : ''}`
74+
}
75+
5176
/**
5277
* @param {any} e
5378
* @param {number} idx
@@ -56,8 +81,9 @@
5681
const found = innerKnowledgeBases.find((_, index) => index === idx);
5782
if (!found) return;
5883
59-
const name = e.target.value;
60-
found.name = name;
84+
const vals = e.target.value.split("#");
85+
found.name = vals[0];
86+
found.type = vals[1];
6187
refresh(innerKnowledgeBases);
6288
}
6389
@@ -66,6 +92,8 @@
6692
...innerKnowledgeBases,
6793
{
6894
name: '',
95+
type: '',
96+
displayName: '',
6997
disabled: false
7098
}
7199
];
@@ -94,6 +122,8 @@
94122
innerKnowledgeBases = list?.map(x => {
95123
return {
96124
name: x.name,
125+
type: x.type,
126+
displayName: x.displayName,
97127
disabled: x.disabled
98128
}
99129
}) || [];
@@ -135,12 +165,13 @@
135165
<div class="utility-input line-align-center">
136166
<Input
137167
type="select"
138-
value={knowledge.name}
139168
disabled={knowledge.disabled}
140169
on:change={e => changeKnowledgeBase(e, uid)}
141170
>
142-
{#each [...knowledgeBaseOptions, "one.data-assistant"] as option}
143-
<option value={option} selected={option == knowledge.name}>{option}</option>
171+
{#each [...knowledgeBaseOptions] as option}
172+
<option value={`${option.name}#${option.type}`} selected={option.name == knowledge.name}>
173+
{option.displayName}
174+
</option>
144175
{/each}
145176
</Input>
146177
</div>

src/routes/page/agent/[agentId]/agent-utility.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@
342342
on:change={e => selectContent(e, uid, fid, 'function')}
343343
>
344344
{#each (utilityMapper[utility.name]?.functions || []) as option}
345-
<option value={`${option.name}#${option.dsiplayName}`} selected={option.name == fn.name}>{option.displayName}</option>
345+
<option value={`${option.name}#${option.displayName}`} selected={option.name == fn.name}>{option.displayName}</option>
346346
{/each}
347347
</Input>
348348
</div>
@@ -391,7 +391,7 @@
391391
on:change={e => selectContent(e, uid, tid, 'template')}
392392
>
393393
{#each (utilityMapper[utility.name]?.templates || []) as option}
394-
<option value={`${option.name}#${option.dsiplayName}`} selected={option.name == tp.name}>{option.displayName}</option>
394+
<option value={`${option.name}#${option.displayName}`} selected={option.name == tp.name}>{option.displayName}</option>
395395
{/each}
396396
</Input>
397397
</div>

src/routes/page/knowledge-base/documents/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@
270270
function getCollections() {
271271
return new Promise((resolve, reject) => {
272272
getVectorKnowledgeCollections(collectionType).then(res => {
273-
const retCollections = res || [];
273+
const retCollections = res?.map(x => x.name) || [];
274274
collections = [ ...retCollections ];
275275
selectedCollection = collections[0];
276276
resolve(res);

src/routes/page/knowledge-base/question-answer/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@
247247
function getCollections() {
248248
return new Promise((resolve, reject) => {
249249
getVectorKnowledgeCollections(collectionType).then(res => {
250-
const retCollections = res || [];
250+
const retCollections = res?.map(x => x.name) || [];
251251
collections = [ ...retCollections ];
252252
selectedCollection = collections[0];
253253
resolve(res);

0 commit comments

Comments
 (0)