Skip to content

Commit 6419cda

Browse files
authored
Merge pull request #201 from APIParkLab/feature/1.5
Feature/1.5
2 parents 3e50895 + 4b03c56 commit 6419cda

File tree

3 files changed

+119
-31
lines changed

3 files changed

+119
-31
lines changed

frontend/packages/core/src/const/ai-service/type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export type AiServiceConfigFieldType = {
1919
serviceType?:'public'|'inner';
2020
catalogue?:string | string[];
2121
approvalType?:string;
22+
providerType?:string
2223
};
2324

2425
export type AiServiceSubServiceTableListItem = {

frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ const AiServiceInsidePage: FC = () => {
3131
const getAiServiceInfo = () => {
3232
fetchData<BasicResponse<{ service: AiServiceConfigFieldType }>>('service/info', {
3333
method: 'GET',
34-
eoParams: { team: teamId, service: serviceId }
34+
eoParams: { team: teamId, service: serviceId },
35+
eoTransformKeys: ['provider_type']
3536
}).then((response) => {
3637
const { code, data, msg } = response
3738
if (code === STATUS_CODE.SUCCESS) {

frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx

Lines changed: 116 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ import { AI_SERVICE_VARIABLES_TABLE_COLUMNS } from '@core/const/ai-service/const
1515
import { VariableItems } from '@core/const/ai-service/type.ts'
1616
import { API_PATH_MATCH_RULES } from '@core/const/system/const'
1717
import { useAiServiceContext } from '@core/contexts/AiServiceContext.tsx'
18-
import { AiProviderDefaultConfig, AiProviderLlmsItems } from '@core/pages/aiSetting/AiSettingList'
1918
import { Icon } from '@iconify/react/dist/iconify.js'
2019
import { App, Button, Form, Input, InputNumber, Row, Space, Spin, Switch, Tag } from 'antd'
2120
import { MutableRefObject, useEffect, useMemo, useRef, useState } from 'react'
2221
import { useNavigate, useParams } from 'react-router-dom'
2322
import AiServiceRouterModelConfig, { AiServiceRouterModelConfigHandle } from './AiServiceInsideRouterModelConfig'
23+
import { AiProviderDefaultConfig, AiProviderLlmsItems } from '@core/pages/aiSetting/types'
2424

2525
type AiServiceRouterField = {
2626
name: string
@@ -151,7 +151,13 @@ const AiServiceInsideRouterCreate = () => {
151151
type: aiModel?.type
152152
}) as AiProviderDefaultConfig & { config: string }
153153
)
154-
aiModel?.type !== 'local' && getDefaultModelConfig(aiModel?.provider, false)
154+
getDefaultModelConfig({
155+
provider: aiModel?.provider,
156+
id: aiModel?.id,
157+
replaceDefaultLlm: false,
158+
setIcon: true,
159+
type: aiModel?.type
160+
})
155161
} else {
156162
message.error(msg || $t(RESPONSE_TIPS.error))
157163
}
@@ -160,36 +166,109 @@ const AiServiceInsideRouterCreate = () => {
160166
.finally(() => setLoading(false))
161167
}
162168

163-
const getDefaultModelConfig = (provider?: string, resetDefaultLlm = true) => {
164-
fetchData<BasicResponse<{ llms: AiProviderLlmsItems[]; provider: AiProviderDefaultConfig }>>('ai/provider/llms', {
165-
method: 'GET',
166-
eoParams: { provider: provider ?? aiServiceInfo?.provider?.id },
167-
eoTransformKeys: ['default_llm']
168-
})
169-
.then((response) => {
170-
const { code, data, msg } = response
171-
if (code === STATUS_CODE.SUCCESS) {
172-
setLlmList(data.llms)
173-
if (resetDefaultLlm) {
174-
setDefaultLlm((prev) => {
175-
const llmSetting = data.llms?.find(
176-
(x: AiProviderLlmsItems) => x.id === (prev?.id ?? data.provider.defaultLlm)
177-
)
178-
return {
179-
...prev,
180-
defaultLlm: data.provider.defaultLlm,
181-
provider: data.provider.id,
182-
name: data.provider.name,
183-
config: llmSetting?.config || '',
184-
...(llmSetting ?? {})
185-
} as AiProviderDefaultConfig & { config: string }
186-
})
169+
const getDefaultModelConfig = ({
170+
provider,
171+
id,
172+
replaceDefaultLlm = true,
173+
setIcon = true,
174+
type
175+
}: {
176+
provider?: string
177+
id?: string
178+
replaceDefaultLlm?: boolean
179+
setIcon?: boolean
180+
type?: string
181+
} = {}) => {
182+
// 如果编辑状态下 是本地 或者,新增状态下是本地
183+
if (type === 'local' || (!type && aiServiceInfo?.providerType === 'local')) {
184+
fetchData<BasicResponse<{ llms: AiProviderLlmsItems[]; provider: AiProviderDefaultConfig }>>('simple/ai/models/local/configured', {
185+
method: 'GET',
186+
eoTransformKeys: ['default_config']
187+
})
188+
.then((response) => {
189+
const { code, data, msg } = response
190+
if (code === STATUS_CODE.SUCCESS) {
191+
setLlmList(data.models)
192+
const localId = id || aiServiceInfo?.id
193+
194+
if (replaceDefaultLlm) {
195+
setDefaultLlm((prev) => {
196+
const llmSetting = data.models?.find(
197+
(x: AiProviderLlmsItems) => x.id === (prev?.id ?? localId)
198+
)
199+
return {
200+
...prev,
201+
defaultLlm: localId,
202+
provider: localId,
203+
name: aiServiceInfo?.name,
204+
config: llmSetting?.defaultConfig || '',
205+
type: 'local',
206+
...(llmSetting ?? {})
207+
} as AiProviderDefaultConfig & { config: string }
208+
})
209+
}
210+
if (setIcon) {
211+
setDefaultLlm((prev) => {
212+
const llmSetting = data.models?.find(
213+
(x: AiProviderLlmsItems) => x.id === (prev?.id ?? localId)
214+
)
215+
return {
216+
...prev,
217+
logo: llmSetting?.logo,
218+
scopes: llmSetting?.scopes
219+
} as AiProviderDefaultConfig & { config: string }
220+
})
221+
}
222+
} else {
223+
message.error(msg || $t(RESPONSE_TIPS.error))
187224
}
188-
} else {
189-
message.error(msg || $t(RESPONSE_TIPS.error))
190-
}
225+
})
226+
.catch((errorInfo) => console.error(errorInfo))
227+
} else {
228+
fetchData<BasicResponse<{ llms: AiProviderLlmsItems[]; provider: AiProviderDefaultConfig }>>('ai/provider/llms', {
229+
method: 'GET',
230+
eoParams: { provider: provider ?? aiServiceInfo?.provider?.id },
231+
eoTransformKeys: ['default_llm']
191232
})
192-
.catch((errorInfo) => console.error(errorInfo))
233+
.then((response) => {
234+
const { code, data, msg } = response
235+
if (code === STATUS_CODE.SUCCESS) {
236+
setLlmList(data.llms)
237+
if (replaceDefaultLlm) {
238+
setDefaultLlm((prev) => {
239+
const llmSetting = data.llms?.find(
240+
(x: AiProviderLlmsItems) => x.id === (prev?.id ?? data.provider.defaultLlm)
241+
)
242+
return {
243+
...prev,
244+
defaultLlm: data.provider.defaultLlm,
245+
provider: data.provider.id,
246+
name: data.provider.name,
247+
config: llmSetting?.config || '',
248+
type: 'online',
249+
...(llmSetting ?? {})
250+
} as AiProviderDefaultConfig & { config: string }
251+
})
252+
}
253+
if (setIcon) {
254+
setDefaultLlm((prev) => {
255+
const llmSetting = data.llms?.find(
256+
(x: AiProviderLlmsItems) => x.id === (prev?.id ?? data.provider.defaultLlm)
257+
)
258+
return {
259+
...prev,
260+
logo: llmSetting?.logo,
261+
scopes: llmSetting?.scopes
262+
} as AiProviderDefaultConfig & { config: string }
263+
})
264+
}
265+
} else {
266+
message.error(msg || $t(RESPONSE_TIPS.error))
267+
}
268+
})
269+
.catch((errorInfo) => console.error(errorInfo))
270+
}
271+
193272
}
194273

195274
useEffect(() => {
@@ -241,6 +320,13 @@ const AiServiceInsideRouterCreate = () => {
241320

242321
const handlerSubmit: () => Promise<boolean> | undefined = () => {
243322
return drawerAddFormRef.current?.save()?.then((res: { id: string; config: string, type: string, provider: string }) => {
323+
getDefaultModelConfig({
324+
provider: res.provider,
325+
id: res.id,
326+
type: res.type,
327+
replaceDefaultLlm: false,
328+
setIcon: true
329+
})
244330
setDefaultLlm(
245331
(prev) =>
246332
({

0 commit comments

Comments
 (0)