diff --git a/ragflow_web/src/locales/en.ts b/ragflow_web/src/locales/en.ts index 3d9ee54..a9cf30d 100644 --- a/ragflow_web/src/locales/en.ts +++ b/ragflow_web/src/locales/en.ts @@ -11,6 +11,7 @@ export default { yes: 'Yes', no: 'No', total: 'Total', + know: 'Known', rename: 'Rename', name: 'Name', save: 'Save', @@ -106,6 +107,7 @@ export default { noMoreData: `That's all. Nothing more.`, }, knowledgeDetails: { + pleaseAddEmbeddingModel: 'Please add embedding model and LLM in the model provider first, then set them in "Set Default Model".', localUpload: 'Local Upload', fileSize: 'File Size', fileType: 'File Type', diff --git a/ragflow_web/src/locales/zh.ts b/ragflow_web/src/locales/zh.ts index 537fc8f..c8f339d 100644 --- a/ragflow_web/src/locales/zh.ts +++ b/ragflow_web/src/locales/zh.ts @@ -11,6 +11,7 @@ export default { yes: '是', no: '否', total: '总共', + know: '知道了', rename: '重命名', name: '名称', save: '保存', @@ -99,6 +100,7 @@ export default { noMoreData: '没有更多数据了', }, knowledgeDetails: { + pleaseAddEmbeddingModel: '请先在模型提供商中添加嵌入模型和LLM,然后在"设置默认模型"中设置它们。', localUpload: '本地上传', fileSize: '文件大小', fileType: '文件类型', diff --git a/src/hooks/agent-hooks.ts b/src/hooks/agent-hooks.ts index 4247b16..cd2498a 100644 --- a/src/hooks/agent-hooks.ts +++ b/src/hooks/agent-hooks.ts @@ -1,10 +1,14 @@ import { useState, useCallback, useEffect, useRef } from 'react'; import agentService from '@/services/agent_service'; +import userService from '@/services/user_service'; import type { IAgent, IGraph } from '@/interfaces/database/agent'; import type { IAgentPaginationParams, IAgentCreateRequestBody, IAgentSettingRequestBody } from '@/interfaces/request/agent'; import logger from '@/utils/logger'; import { useTranslation } from 'react-i18next'; import { useSnackbar } from '@/hooks/useSnackbar'; +import { useDialog } from '@/hooks/useDialog'; +import { useNavigate } from 'react-router-dom'; +import { isEmpty } from 'lodash'; export interface UseAgentListState { agents: IAgent[]; @@ -39,6 +43,28 @@ export const useAgentList = (initialParams?: IAgentPaginationParams) => { const [currentPage, setCurrentPage] = useState(initialParams?.page || 1); const [pageSize, setPageSize] = useState(initialParams?.page_size || 10); const [keywords, setKeywords] = useState(initialParams?.keywords || ''); + const { showMessage } = useSnackbar(); + const dialog = useDialog(); + const navigate = useNavigate(); + const { t } = useTranslation(); + + // 查询是否有默认的模型 + const checkDefaultModel = useCallback(async (id: string) => { + const { data: res } = await userService.getTenantInfo(); + if (res.code === 0) { + const { data } = res; + if (isEmpty(data.embd_id) || isEmpty(data.llm_id)) { + await dialog.warning({ + title: t('common.warn'), + content: t('knowledgeDetails.pleaseAddEmbeddingModel'), + confirmText: t('common.know') + }); + navigate(`/models`); + } else { + navigate(`/route-ragflow/agent/${id}`); + } + } + }, [dialog, navigate, showMessage]); const fetchAgentList = useCallback(async (params?: IAgentPaginationParams) => { setLoading(true); @@ -81,6 +107,7 @@ export const useAgentList = (initialParams?: IAgentPaginationParams) => { currentPage, pageSize, keywords, + checkDefaultModel, fetchAgents: fetchAgentList, setKeywords, setCurrentPage, diff --git a/src/locales/en.ts b/src/locales/en.ts index 6b0632e..944ecf6 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -15,6 +15,7 @@ export default { total: 'Total', rename: 'Rename', name: 'Name', + know: 'Known', save: 'Save', namePlaceholder: 'Please input name', next: 'Next', @@ -425,6 +426,7 @@ export default { paginationInfo: 'Total {{total}} knowledge bases, page {{current}} of {{totalPages}}', }, knowledgeDetails: { + pleaseAddEmbeddingModel: 'Please add embedding model and LLM in the model provider first, then set them in "Set Default Model".', fileSize: 'File Size', fileType: 'File Type', uploadedBy: 'Uploaded by', diff --git a/src/locales/zh.ts b/src/locales/zh.ts index 7a4d380..0eac524 100644 --- a/src/locales/zh.ts +++ b/src/locales/zh.ts @@ -13,6 +13,7 @@ export default { cancel: '否', total: '总共', rename: '重命名', + know: '知道了', name: '名称', save: '保存', namePlaceholder: '请输入名称', @@ -423,6 +424,7 @@ export default { paginationInfo: '共 {{total}} 个知识库,第 {{current}} 页,共 {{totalPages}} 页', }, knowledgeDetails: { + pleaseAddEmbeddingModel: '请先在模型提供商中添加嵌入模型和LLM,然后在"设置默认模型"中设置它们。', fileSize: '文件大小', fileType: '文件类型', uploadedBy: '创建者', diff --git a/src/pages/agent-mui/list.tsx b/src/pages/agent-mui/list.tsx index 49a1ced..09d6886 100644 --- a/src/pages/agent-mui/list.tsx +++ b/src/pages/agent-mui/list.tsx @@ -17,7 +17,6 @@ import EditAgentDialog from './components/EditAgentDialog'; import { useTranslation } from 'react-i18next'; import { useDialog } from '@/hooks/useDialog'; import { useNavigate } from 'react-router-dom'; - function AgentListPage() { const [searchValue, setSearchValue] = useState(''); const [createOpen, setCreateOpen] = useState(false); @@ -31,6 +30,7 @@ function AgentListPage() { pageSize, setCurrentPage, setKeywords, + checkDefaultModel, refresh, } = useAgentList({ page: 1, page_size: 10 }); @@ -40,8 +40,8 @@ function AgentListPage() { const ops = useAgentOperations(); const totalPages = useMemo(() => { - return Math.ceil((agents?.length || 0) / pageSize) || 1; - }, [agents, pageSize]); + return Math.ceil((total || 0) / pageSize) || 1; + }, [total, pageSize]); const currentPageData = useMemo(() => { const startIndex = (currentPage - 1) * pageSize; @@ -108,7 +108,7 @@ function AgentListPage() { onCreateAgent={() => setCreateOpen(true)} onEdit={(agent) => { setEditTarget(agent); setEditOpen(true); }} onView={(agent) => { - navigate(`/route-ragflow/agent/${agent.id}`); + checkDefaultModel(agent.id); }} onDelete={async (agent) => { const confirmed = await dialog.confirm({