feat: add functions for frontend of kb

This commit is contained in:
WangCham
2025-07-17 23:52:46 +08:00
parent 2dfa83ff22
commit cb868ee7b2
7 changed files with 71 additions and 1 deletions

View File

@@ -50,6 +50,9 @@ export default function DynamicFormComponent({
case 'llm-model-selector':
fieldSchema = z.string();
break;
case 'knowledge-base-selector':
fieldSchema = z.string();
break;
case 'prompt-editor':
fieldSchema = z.array(
z.object({

View File

@@ -14,9 +14,10 @@ import {
import { Switch } from '@/components/ui/switch';
import { ControllerRenderProps } from 'react-hook-form';
import { Button } from '@/components/ui/button';
import { useEffect, useState } from 'react';
import { use, useEffect, useState } from 'react';
import { httpClient } from '@/app/infra/http/HttpClient';
import { LLMModel } from '@/app/infra/entities/api';
import { KnowledgeBase } from '@/app/infra/entities/api';
import { toast } from 'sonner';
import {
HoverCard,
@@ -35,6 +36,7 @@ export default function DynamicFormItemComponent({
field: ControllerRenderProps<any, any>;
}) {
const [llmModels, setLlmModels] = useState<LLMModel[]>([]);
const [knowledgeBases, setKnowledgeBases] = useState<KnowledgeBase[]>([]);
const { t } = useTranslation();
useEffect(() => {
@@ -49,6 +51,19 @@ export default function DynamicFormItemComponent({
});
}
}, [config.type]);
useEffect(() => {
if (config.type === DynamicFormItemType.KNOWLEDGE_BASE_SELECTOR) {
httpClient
.getKnowledgeBases()
.then((resp) => {
setKnowledgeBases(resp.bases);
})
.catch((err) => {
toast.error('获取知识库列表失败:' + err.message);
});
}
}, [config.type]);
switch (config.type) {
case DynamicFormItemType.INT:
@@ -249,6 +264,42 @@ export default function DynamicFormItemComponent({
</Select>
);
case DynamicFormItemType.KNOWLEDGE_BASE_SELECTOR:
return (
<Select value={field.value} onValueChange={field.onChange}>
<SelectTrigger>
<SelectValue placeholder={t('knowledge.selectKnowledgeBase')} />
</SelectTrigger>
<SelectContent>
<SelectGroup>
{/* <SelectItem value="">{t('knowledge.empty')}</SelectItem> */}
{knowledgeBases.map((base) => (
<HoverCard key={base.uuid} openDelay={0} closeDelay={0}>
<HoverCardTrigger asChild>
<SelectItem value={base.uuid ?? ''}>{base.name}</SelectItem>
</HoverCardTrigger>
<HoverCardContent
className="w-80 data-[state=open]:animate-none data-[state=closed]:animate-none"
align="end"
side="right"
sideOffset={10}
>
<div className="space-y-2">
<div className="flex items-center gap-2">
<h4 className="font-medium">{base.name}</h4>
</div>
<p className="text-sm text-muted-foreground">
{base.description}
</p>
</div>
</HoverCardContent>
</HoverCard>
))}
</SelectGroup>
</SelectContent>
</Select>
);
case DynamicFormItemType.PROMPT_EDITOR:
return (
<div className="space-y-2">

View File

@@ -55,6 +55,15 @@ export interface LLMModel {
// updated_at: string;
}
export interface KnowledgeBase {
uuid?: string;
name: string;
description: string;
embedding_model_uuid: string;
created_at?: string;
top_k?: number;
}
export interface ApiRespProviderEmbeddingModels {
models: EmbeddingModel[];
}

View File

@@ -21,6 +21,7 @@ export enum DynamicFormItemType {
LLM_MODEL_SELECTOR = 'llm-model-selector',
PROMPT_EDITOR = 'prompt-editor',
UNKNOWN = 'unknown',
KNOWLEDGE_BASE_SELECTOR = 'knowledge-base-selector',
}
export interface IDynamicFormItemOption {

View File

@@ -234,6 +234,8 @@ const enUS = {
title: 'Knowledge',
createKnowledgeBase: 'Create Knowledge Base',
editKnowledgeBase: 'Edit Knowledge Base',
selectKnowledgeBase: 'Select Knowledge Base',
empty: 'Empty',
editDocument: 'Documents',
description: 'Configuring knowledge bases for improved LLM responses',
metadata: 'Metadata',

View File

@@ -236,6 +236,8 @@ const jaJP = {
title: '知識ベース',
createKnowledgeBase: '知識ベースを作成',
editKnowledgeBase: '知識ベースを編集',
selectKnowledgeBase: '知識ベースを選択',
empty: 'なし',
editDocument: 'ドキュメント',
description: 'LLMの回答品質向上のための知識ベースを設定します',
metadata: 'メタデータ',

View File

@@ -229,6 +229,8 @@ const zhHans = {
title: '知识库',
createKnowledgeBase: '创建知识库',
editKnowledgeBase: '编辑知识库',
selectKnowledgeBase: '选择知识库',
empty: '无',
editDocument: '文档',
description: '配置可用于提升模型回复质量的知识库',
metadata: '元数据',