From 3a0c165cecad476093a37b38b7863e9c0dbd76e6 Mon Sep 17 00:00:00 2001 From: ningyv <1793599591@qq.com> Date: Mon, 17 Feb 2025 11:06:23 +0800 Subject: [PATCH] feat: feature/1.5-Data Integration --- .../core/src/const/ai-service/type.ts | 1 + .../pages/aiService/AiServiceInsidePage.tsx | 3 +- .../api/AiServiceInsideRouterCreate.tsx | 141 ++++++++++++++---- 3 files changed, 113 insertions(+), 32 deletions(-) diff --git a/frontend/packages/core/src/const/ai-service/type.ts b/frontend/packages/core/src/const/ai-service/type.ts index fc788ae5..27062c72 100644 --- a/frontend/packages/core/src/const/ai-service/type.ts +++ b/frontend/packages/core/src/const/ai-service/type.ts @@ -19,6 +19,7 @@ export type AiServiceConfigFieldType = { serviceType?:'public'|'inner'; catalogue?:string | string[]; approvalType?:string; + providerType?:string }; export type AiServiceSubServiceTableListItem = { diff --git a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx index 16178602..c438539f 100644 --- a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx +++ b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx @@ -31,7 +31,8 @@ const AiServiceInsidePage: FC = () => { const getAiServiceInfo = () => { fetchData>('service/info', { method: 'GET', - eoParams: { team: teamId, service: serviceId } + eoParams: { team: teamId, service: serviceId }, + eoTransformKeys: ['provider_type'] }).then((response) => { const { code, data, msg } = response if (code === STATUS_CODE.SUCCESS) { diff --git a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx index f3e0de23..ec5f4516 100644 --- a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx +++ b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx @@ -15,12 +15,12 @@ import { AI_SERVICE_VARIABLES_TABLE_COLUMNS } from '@core/const/ai-service/const import { VariableItems } from '@core/const/ai-service/type.ts' import { API_PATH_MATCH_RULES } from '@core/const/system/const' import { useAiServiceContext } from '@core/contexts/AiServiceContext.tsx' -import { AiProviderDefaultConfig, AiProviderLlmsItems } from '@core/pages/aiSetting/AiSettingList' import { Icon } from '@iconify/react/dist/iconify.js' import { App, Button, Form, Input, InputNumber, Row, Space, Spin, Switch, Tag } from 'antd' import { MutableRefObject, useEffect, useMemo, useRef, useState } from 'react' import { useNavigate, useParams } from 'react-router-dom' import AiServiceRouterModelConfig, { AiServiceRouterModelConfigHandle } from './AiServiceInsideRouterModelConfig' +import { AiProviderDefaultConfig, AiProviderLlmsItems } from '@core/pages/aiSetting/types' type AiServiceRouterField = { name: string @@ -151,7 +151,13 @@ const AiServiceInsideRouterCreate = () => { type: aiModel?.type }) as AiProviderDefaultConfig & { config: string } ) - aiModel?.type !== 'local' && getDefaultModelConfig(aiModel?.provider, false) + getDefaultModelConfig({ + provider: aiModel?.provider, + id: aiModel?.id, + replaceDefaultLlm: false, + setIcon: true, + type: aiModel?.type + }) } else { message.error(msg || $t(RESPONSE_TIPS.error)) } @@ -160,36 +166,109 @@ const AiServiceInsideRouterCreate = () => { .finally(() => setLoading(false)) } - const getDefaultModelConfig = (provider?: string, resetDefaultLlm = true) => { - fetchData>('ai/provider/llms', { - method: 'GET', - eoParams: { provider: provider ?? aiServiceInfo?.provider?.id }, - eoTransformKeys: ['default_llm'] - }) - .then((response) => { - const { code, data, msg } = response - if (code === STATUS_CODE.SUCCESS) { - setLlmList(data.llms) - if (resetDefaultLlm) { - setDefaultLlm((prev) => { - const llmSetting = data.llms?.find( - (x: AiProviderLlmsItems) => x.id === (prev?.id ?? data.provider.defaultLlm) - ) - return { - ...prev, - defaultLlm: data.provider.defaultLlm, - provider: data.provider.id, - name: data.provider.name, - config: llmSetting?.config || '', - ...(llmSetting ?? {}) - } as AiProviderDefaultConfig & { config: string } - }) - } - } else { - message.error(msg || $t(RESPONSE_TIPS.error)) - } + const getDefaultModelConfig = ({ + provider, + id, + replaceDefaultLlm = true, + setIcon = true, + type + }: { + provider?: string + id?: string + replaceDefaultLlm?: boolean + setIcon?: boolean + type?: string + } = {}) => { + // 如果编辑状态下 是本地 或者,新增状态下是本地 + if (type === 'local' || (!type && aiServiceInfo?.providerType === 'local')) { + fetchData>('simple/ai/models/local/configured', { + method: 'GET', + eoTransformKeys: ['default_config'] }) - .catch((errorInfo) => console.error(errorInfo)) + .then((response) => { + const { code, data, msg } = response + if (code === STATUS_CODE.SUCCESS) { + setLlmList(data.models) + const localId = id || aiServiceInfo?.id + + if (replaceDefaultLlm) { + setDefaultLlm((prev) => { + const llmSetting = data.models?.find( + (x: AiProviderLlmsItems) => x.id === (prev?.id ?? localId) + ) + return { + ...prev, + defaultLlm: localId, + provider: localId, + name: aiServiceInfo?.name, + config: llmSetting?.defaultConfig || '', + type: 'local', + ...(llmSetting ?? {}) + } as AiProviderDefaultConfig & { config: string } + }) + } + if (setIcon) { + setDefaultLlm((prev) => { + const llmSetting = data.models?.find( + (x: AiProviderLlmsItems) => x.id === (prev?.id ?? localId) + ) + return { + ...prev, + logo: llmSetting?.logo, + scopes: llmSetting?.scopes + } as AiProviderDefaultConfig & { config: string } + }) + } + } else { + message.error(msg || $t(RESPONSE_TIPS.error)) + } + }) + .catch((errorInfo) => console.error(errorInfo)) + } else { + fetchData>('ai/provider/llms', { + method: 'GET', + eoParams: { provider: provider ?? aiServiceInfo?.provider?.id }, + eoTransformKeys: ['default_llm'] + }) + .then((response) => { + const { code, data, msg } = response + if (code === STATUS_CODE.SUCCESS) { + setLlmList(data.llms) + if (replaceDefaultLlm) { + setDefaultLlm((prev) => { + const llmSetting = data.llms?.find( + (x: AiProviderLlmsItems) => x.id === (prev?.id ?? data.provider.defaultLlm) + ) + return { + ...prev, + defaultLlm: data.provider.defaultLlm, + provider: data.provider.id, + name: data.provider.name, + config: llmSetting?.config || '', + type: 'online', + ...(llmSetting ?? {}) + } as AiProviderDefaultConfig & { config: string } + }) + } + if (setIcon) { + setDefaultLlm((prev) => { + const llmSetting = data.llms?.find( + (x: AiProviderLlmsItems) => x.id === (prev?.id ?? data.provider.defaultLlm) + ) + return { + ...prev, + logo: llmSetting?.logo, + scopes: llmSetting?.scopes + } as AiProviderDefaultConfig & { config: string } + }) + } + } else { + message.error(msg || $t(RESPONSE_TIPS.error)) + } + }) + .catch((errorInfo) => console.error(errorInfo)) + } + } useEffect(() => {