feat(model-settings): add system default model configuration dialog
This commit is contained in:
@@ -1,13 +1,16 @@
|
||||
import { useState, useCallback } from 'react';
|
||||
import { useState, useCallback, useMemo } from 'react';
|
||||
import { useMessage } from '@/hooks/useSnackbar';
|
||||
import userService from '@/services/user_service';
|
||||
import logger from '@/utils/logger';
|
||||
import type {
|
||||
import type {
|
||||
ApiKeyFormData,
|
||||
AzureOpenAIFormData,
|
||||
BedrockFormData,
|
||||
OllamaFormData,
|
||||
} from '../components/ModelDialogs';
|
||||
import type { ITenantInfo } from '@/interfaces/database/knowledge';
|
||||
import { useLlmList } from '@/hooks/llm-hooks';
|
||||
import type { LlmModelType } from '@/constants/knowledge';
|
||||
|
||||
// 对话框状态管理 hook
|
||||
export const useDialogState = () => {
|
||||
@@ -42,7 +45,7 @@ export const useDialogState = () => {
|
||||
// API Key 对话框管理
|
||||
export const useApiKeyDialog = () => {
|
||||
const dialogState = useDialogState();
|
||||
const showMessage = useMessage();
|
||||
const showMessage = useMessage();
|
||||
const [factoryName, setFactoryName] = useState('');
|
||||
|
||||
const openApiKeyDialog = useCallback((factory: string, data?: Partial<ApiKeyFormData>, isEdit = false) => {
|
||||
@@ -81,7 +84,7 @@ export const useApiKeyDialog = () => {
|
||||
// Azure OpenAI 对话框管理
|
||||
export const useAzureOpenAIDialog = () => {
|
||||
const dialogState = useDialogState();
|
||||
const showMessage = useMessage();
|
||||
const showMessage = useMessage();
|
||||
|
||||
const submitAzureOpenAI = useCallback(async (data: AzureOpenAIFormData) => {
|
||||
dialogState.setLoading(true);
|
||||
@@ -114,7 +117,7 @@ export const useAzureOpenAIDialog = () => {
|
||||
// AWS Bedrock 对话框管理
|
||||
export const useBedrockDialog = () => {
|
||||
const dialogState = useDialogState();
|
||||
const showMessage = useMessage();
|
||||
const showMessage = useMessage();
|
||||
|
||||
const submitBedrock = useCallback(async (data: BedrockFormData) => {
|
||||
dialogState.setLoading(true);
|
||||
@@ -148,7 +151,7 @@ export const useBedrockDialog = () => {
|
||||
// Ollama 对话框管理
|
||||
export const useOllamaDialog = () => {
|
||||
const dialogState = useDialogState();
|
||||
const showMessage = useMessage();
|
||||
const showMessage = useMessage();
|
||||
|
||||
const submitOllama = useCallback(async (data: OllamaFormData) => {
|
||||
dialogState.setLoading(true);
|
||||
@@ -178,7 +181,7 @@ export const useOllamaDialog = () => {
|
||||
|
||||
// 删除操作管理
|
||||
export const useDeleteOperations = () => {
|
||||
const showMessage = useMessage();
|
||||
const showMessage = useMessage();
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
const deleteLlm = useCallback(async (factoryName: string, modelName: string) => {
|
||||
@@ -224,9 +227,56 @@ export const useDeleteOperations = () => {
|
||||
// 系统默认模型设置
|
||||
export const useSystemModelSetting = () => {
|
||||
const dialogState = useDialogState();
|
||||
const showMessage = useMessage();
|
||||
const showMessage = useMessage();
|
||||
|
||||
const submitSystemModelSetting = useCallback(async (data: { defaultModel: string }) => {
|
||||
const { data: llmList } = useLlmList();
|
||||
|
||||
const getOptionsByModelType = useCallback((modelType: LlmModelType) => {
|
||||
return Object.entries(llmList)
|
||||
.filter(([, value]) =>
|
||||
modelType
|
||||
? value.some((x) => x.model_type.includes(modelType))
|
||||
: true,
|
||||
)
|
||||
.map(([key, value]) => {
|
||||
return {
|
||||
label: key,
|
||||
options: value
|
||||
.filter(
|
||||
(x) =>
|
||||
(modelType ? x.model_type.includes(modelType) : true) &&
|
||||
x.available,
|
||||
)
|
||||
.map((x) => ({
|
||||
label: x.llm_name,
|
||||
value: `${x.llm_name}@${x.fid}`,
|
||||
disabled: !x.available,
|
||||
model: x,
|
||||
})),
|
||||
};
|
||||
})
|
||||
.filter((x) => x.options.length > 0);
|
||||
}, [llmList]);
|
||||
|
||||
const allModelOptions = useMemo(() => {
|
||||
const llmOptions = getOptionsByModelType('chat');
|
||||
const image2textOptions = getOptionsByModelType('image2text');
|
||||
const embeddingOptions = getOptionsByModelType('embedding');
|
||||
const speech2textOptions = getOptionsByModelType('speech2text');
|
||||
const rerankOptions = getOptionsByModelType('rerank');
|
||||
const ttsOptions = getOptionsByModelType('tts');
|
||||
|
||||
return {
|
||||
llmOptions,
|
||||
image2textOptions,
|
||||
embeddingOptions,
|
||||
speech2textOptions,
|
||||
rerankOptions,
|
||||
ttsOptions,
|
||||
}
|
||||
}, [llmList, getOptionsByModelType]);
|
||||
|
||||
const submitSystemModelSetting = useCallback(async (data: Partial<ITenantInfo>) => {
|
||||
dialogState.setLoading(true);
|
||||
try {
|
||||
// 这里需要根据实际的 API 接口调整
|
||||
@@ -245,6 +295,7 @@ export const useSystemModelSetting = () => {
|
||||
return {
|
||||
...dialogState,
|
||||
submitSystemModelSetting,
|
||||
allModelOptions,
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user