Skip to content

Commit d737afe

Browse files
committed
✨ feat: refactor to support azure openai provider
1 parent e4f110e commit d737afe

File tree

16 files changed

+153
-141
lines changed

16 files changed

+153
-141
lines changed

src/app/api/config/route.test.ts

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest';
22

3-
import { OllamaProvider, OpenRouterProvider, TogetherAIProvider } from '@/config/modelProviders';
4-
import { getServerConfig } from '@/config/server';
53
import { GlobalServerConfig } from '@/types/settings';
64

75
import { GET } from './route';

src/app/api/config/route.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { OllamaProvider, OpenRouterProvider, TogetherAIProvider } from '@/config/modelProviders';
1+
import {
2+
OllamaProviderCard,
3+
OpenRouterProviderCard,
4+
TogetherAIProviderCard,
5+
} from '@/config/modelProviders';
26
import { getServerConfig } from '@/config/server';
37
import { GlobalServerConfig } from '@/types/settings';
48
import { transformToChatModelCards } from '@/utils/parseModels';
@@ -54,7 +58,10 @@ export const GET = async () => {
5458

5559
ollama: {
5660
enabled: ENABLE_OLLAMA,
57-
serverModelCards: transformToChatModelCards(OLLAMA_MODEL_LIST, OllamaProvider.chatModels),
61+
serverModelCards: transformToChatModelCards(
62+
OLLAMA_MODEL_LIST,
63+
OllamaProviderCard.chatModels,
64+
),
5865
},
5966
openai: {
6067
serverModelCards: transformToChatModelCards(OPENAI_MODEL_LIST),
@@ -63,7 +70,7 @@ export const GET = async () => {
6370
enabled: ENABLED_OPENROUTER,
6471
serverModelCards: transformToChatModelCards(
6572
OPENROUTER_MODEL_LIST,
66-
OpenRouterProvider.chatModels,
73+
OpenRouterProviderCard.chatModels,
6774
),
6875
},
6976
perplexity: { enabled: ENABLED_PERPLEXITY },
@@ -72,7 +79,7 @@ export const GET = async () => {
7279
enabled: ENABLED_TOGETHERAI,
7380
serverModelCards: transformToChatModelCards(
7481
TOGETHERAI_MODEL_LIST,
75-
TogetherAIProvider.chatModels,
82+
TogetherAIProviderCard.chatModels,
7683
),
7784
},
7885

src/app/settings/llm/Azure/index.tsx

+15-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { useTranslation } from 'react-i18next';
77
import { Flexbox } from 'react-layout-kit';
88

99
import { ModelProvider } from '@/libs/agent-runtime';
10+
import { useGlobalStore } from '@/store/global';
11+
import { modelConfigSelectors } from '@/store/global/selectors';
1012

1113
import ProviderConfig from '../components/ProviderConfig';
1214
import { LLMProviderApiTokenKey, LLMProviderBaseUrlKey, LLMProviderConfigKey } from '../const';
@@ -30,6 +32,17 @@ const AzureOpenAIProvider = memo(() => {
3032

3133
const { styles } = useStyles();
3234

35+
// Get the first model card's deployment name as the check model
36+
const checkModel = useGlobalStore((s) => {
37+
const chatModelCards = modelConfigSelectors.providerModelCards(providerKey)(s);
38+
39+
if (chatModelCards.length > 0) {
40+
return chatModelCards[0].deploymentName;
41+
}
42+
43+
return 'gpt-35-turbo';
44+
});
45+
3346
return (
3447
<ProviderConfig
3548
apiKeyItems={[
@@ -73,9 +86,10 @@ const AzureOpenAIProvider = memo(() => {
7386
name: [LLMProviderConfigKey, providerKey, 'apiVersion'],
7487
},
7588
]}
76-
checkModel={'gpt-3.5-turbo'}
89+
checkModel={checkModel}
7790
modelList={{
7891
azureDeployName: true,
92+
notFoundContent: t('llm.azure.empty'),
7993
placeholder: t('llm.azure.modelListPlaceholder'),
8094
}}
8195
provider={providerKey}

src/app/settings/llm/components/ProviderModelList/CustomModelOption.tsx

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { ActionIcon } from '@lobehub/ui';
1+
import { ActionIcon, Icon } from '@lobehub/ui';
22
import { App, Typography } from 'antd';
33
import isEqual from 'fast-deep-equal';
4-
import { LucideSettings, LucideTrash2 } from 'lucide-react';
4+
import { LucideArrowRight, LucideSettings, LucideTrash2 } from 'lucide-react';
55
import { memo } from 'react';
66
import { useTranslation } from 'react-i18next';
77
import { Flexbox } from 'react-layout-kit';
@@ -43,7 +43,15 @@ const CustomModelOption = memo<CustomModelOptionProps>(({ id, provider }) => {
4343
<ModelInfoTags id={id} {...modelCard} isCustom />
4444
</Flexbox>
4545
<Typography.Text style={{ fontSize: 12 }} type={'secondary'}>
46-
{id}
46+
<Flexbox gap={2} horizontal>
47+
{id}
48+
{!!modelCard?.deploymentName && (
49+
<>
50+
<Icon icon={LucideArrowRight} />
51+
{modelCard?.deploymentName}
52+
</>
53+
)}
54+
</Flexbox>
4755
</Typography.Text>
4856
</Flexbox>
4957
</Flexbox>

src/app/settings/llm/components/ProviderModelList/ModelConfigModal.tsx

+7-2
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,18 @@ const ModelConfigModal = memo<ModelConfigModalProps>(({ showAzureDeployName, pro
6969
style={{ marginTop: 16 }}
7070
wrapperCol={{ offset: 1, span: 18 }}
7171
>
72-
<Form.Item label={t('llm.customModelCards.modelConfig.id.title')} name={'id'}>
72+
<Form.Item
73+
extra={t('llm.customModelCards.modelConfig.id.extra')}
74+
label={t('llm.customModelCards.modelConfig.id.title')}
75+
name={'id'}
76+
>
7377
<Input placeholder={t('llm.customModelCards.modelConfig.id.placeholder')} />
7478
</Form.Item>
7579
{showAzureDeployName && (
7680
<Form.Item
81+
extra={t('llm.customModelCards.modelConfig.azureDeployName.extra')}
7782
label={t('llm.customModelCards.modelConfig.azureDeployName.title')}
78-
name={'deployName'}
83+
name={'deploymentName'}
7984
>
8085
<Input
8186
placeholder={t('llm.customModelCards.modelConfig.azureDeployName.placeholder')}

src/config/modelProviders/azure.ts

+3-40
Original file line numberDiff line numberDiff line change
@@ -20,58 +20,21 @@ const Azure: ModelProviderCard = {
2020
tokens: 16_384,
2121
},
2222
{
23-
deploymentName: 'gpt-4',
24-
displayName: 'GPT-4 Turbo Preview',
23+
deploymentName: 'gpt-4-turbo',
24+
displayName: 'GPT-4 Turbo',
2525
enabled: true,
2626
functionCall: true,
2727
id: 'gpt-4',
2828
tokens: 128_000,
2929
},
3030
{
31+
deploymentName: 'gpt-4-vision',
3132
description: 'GPT-4 视觉预览版,支持视觉任务',
3233
displayName: 'GPT-4 Turbo with Vision Preview',
3334
id: 'gpt-4-vision-preview',
3435
tokens: 128_000,
3536
vision: true,
3637
},
37-
{
38-
displayName: 'GPT-4 Turbo Preview (1106)',
39-
functionCall: true,
40-
id: 'gpt-4-1106-preview',
41-
tokens: 128_000,
42-
},
43-
{
44-
displayName: 'GPT-4',
45-
functionCall: true,
46-
id: 'gpt-4',
47-
tokens: 8192,
48-
},
49-
{
50-
displayName: 'GPT-4 (0613)',
51-
functionCall: true,
52-
id: 'gpt-4-0613',
53-
tokens: 8192,
54-
},
55-
{
56-
displayName: 'GPT-4 32K',
57-
functionCall: true,
58-
id: 'gpt-4-32k',
59-
tokens: 32_768,
60-
},
61-
{
62-
displayName: 'GPT-4 32K (0613)',
63-
functionCall: true,
64-
id: 'gpt-4-32k-0613',
65-
tokens: 32_768,
66-
},
67-
{
68-
displayName: 'GPT-4 ALL',
69-
files: true,
70-
functionCall: true,
71-
id: 'gpt-4-all',
72-
tokens: 32_768,
73-
vision: true,
74-
},
7538
],
7639
id: 'azure',
7740
};

src/config/modelProviders/index.ts

+14-13
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,17 @@ export const filterEnabledModels = (provider: ModelProviderCard) => {
3434
return provider.chatModels.filter((v) => v.enabled).map((m) => m.id);
3535
};
3636

37-
export { default as AnthropicProvider } from './anthropic';
38-
export { default as BedrockProvider } from './bedrock';
39-
export { default as GoogleProvider } from './google';
40-
export { default as GroqProvider } from './groq';
41-
export { default as MistralProvider } from './mistral';
42-
export { default as MoonshotProvider } from './moonshot';
43-
export { default as OllamaProvider } from './ollama';
44-
export { default as OpenAIProvider } from './openai';
45-
export { default as OpenRouterProvider } from './openrouter';
46-
export { default as PerplexityProvider } from './perplexity';
47-
export { default as TogetherAIProvider } from './togetherai';
48-
export { default as ZeroOneProvider } from './zeroone';
49-
export { default as ZhiPuProvider } from './zhipu';
37+
export { default as AnthropicProviderCard } from './anthropic';
38+
export { default as AzureProviderCard } from './azure';
39+
export { default as BedrockProviderCard } from './bedrock';
40+
export { default as GoogleProviderCard } from './google';
41+
export { default as GroqProviderCard } from './groq';
42+
export { default as MistralProviderCard } from './mistral';
43+
export { default as MoonshotProviderCard } from './moonshot';
44+
export { default as OllamaProviderCard } from './ollama';
45+
export { default as OpenAIProviderCard } from './openai';
46+
export { default as OpenRouterProviderCard } from './openrouter';
47+
export { default as PerplexityProviderCard } from './perplexity';
48+
export { default as TogetherAIProviderCard } from './togetherai';
49+
export { default as ZeroOneProviderCard } from './zeroone';
50+
export { default as ZhiPuProviderCard } from './zhipu';

src/const/settings/index.ts

+26-27
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import {
2-
AnthropicProvider,
3-
BedrockProvider,
4-
GoogleProvider,
5-
GroqProvider,
6-
MistralProvider,
7-
MoonshotProvider,
8-
OllamaProvider,
9-
OpenAIProvider,
10-
OpenRouterProvider,
11-
PerplexityProvider,
12-
TogetherAIProvider,
13-
ZeroOneProvider,
14-
ZhiPuProvider,
2+
AnthropicProviderCard,
3+
BedrockProviderCard,
4+
GoogleProviderCard,
5+
GroqProviderCard,
6+
MistralProviderCard,
7+
MoonshotProviderCard,
8+
OllamaProviderCard,
9+
OpenAIProviderCard,
10+
OpenRouterProviderCard,
11+
PerplexityProviderCard,
12+
TogetherAIProviderCard,
13+
ZeroOneProviderCard,
14+
ZhiPuProviderCard,
1515
filterEnabledModels,
1616
} from '@/config/modelProviders';
1717
import { DEFAULT_AGENT_META } from '@/const/meta';
@@ -66,75 +66,74 @@ export const DEFAULT_LLM_CONFIG: GlobalLLMConfig = {
6666
anthropic: {
6767
apiKey: '',
6868
enabled: false,
69-
enabledModels: filterEnabledModels(AnthropicProvider),
69+
enabledModels: filterEnabledModels(AnthropicProviderCard),
7070
},
7171
azure: {
7272
apiKey: '',
73-
deployments: '',
7473
enabled: false,
7574
endpoint: '',
7675
},
7776
bedrock: {
7877
accessKeyId: '',
7978
enabled: false,
80-
enabledModels: filterEnabledModels(BedrockProvider),
79+
enabledModels: filterEnabledModels(BedrockProviderCard),
8180
region: 'us-east-1',
8281
secretAccessKey: '',
8382
},
8483
google: {
8584
apiKey: '',
8685
enabled: false,
87-
enabledModels: filterEnabledModels(GoogleProvider),
86+
enabledModels: filterEnabledModels(GoogleProviderCard),
8887
},
8988
groq: {
9089
apiKey: '',
9190
enabled: false,
92-
enabledModels: filterEnabledModels(GroqProvider),
91+
enabledModels: filterEnabledModels(GroqProviderCard),
9392
},
9493
mistral: {
9594
apiKey: '',
9695
enabled: false,
97-
enabledModels: filterEnabledModels(MistralProvider),
96+
enabledModels: filterEnabledModels(MistralProviderCard),
9897
},
9998
moonshot: {
10099
apiKey: '',
101100
enabled: false,
102-
enabledModels: filterEnabledModels(MoonshotProvider),
101+
enabledModels: filterEnabledModels(MoonshotProviderCard),
103102
},
104103
ollama: {
105104
enabled: false,
106-
enabledModels: filterEnabledModels(OllamaProvider),
105+
enabledModels: filterEnabledModels(OllamaProviderCard),
107106
endpoint: '',
108107
},
109108
openai: {
110109
apiKey: '',
111110
enabled: true,
112-
enabledModels: filterEnabledModels(OpenAIProvider),
111+
enabledModels: filterEnabledModels(OpenAIProviderCard),
113112
},
114113
openrouter: {
115114
apiKey: '',
116115
enabled: false,
117-
enabledModels: filterEnabledModels(OpenRouterProvider),
116+
enabledModels: filterEnabledModels(OpenRouterProviderCard),
118117
},
119118
perplexity: {
120119
apiKey: '',
121120
enabled: false,
122-
enabledModels: filterEnabledModels(PerplexityProvider),
121+
enabledModels: filterEnabledModels(PerplexityProviderCard),
123122
},
124123
togetherai: {
125124
apiKey: '',
126125
enabled: false,
127-
enabledModels: filterEnabledModels(TogetherAIProvider),
126+
enabledModels: filterEnabledModels(TogetherAIProviderCard),
128127
},
129128
zeroone: {
130129
apiKey: '',
131130
enabled: false,
132-
enabledModels: filterEnabledModels(ZeroOneProvider),
131+
enabledModels: filterEnabledModels(ZeroOneProviderCard),
133132
},
134133
zhipu: {
135134
apiKey: '',
136135
enabled: false,
137-
enabledModels: filterEnabledModels(ZhiPuProvider),
136+
enabledModels: filterEnabledModels(ZhiPuProviderCard),
138137
},
139138
};
140139

src/locales/default/setting.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,13 @@ export default {
5050
fetch: '获取列表',
5151
title: 'Azure Api Version',
5252
},
53+
empty: '请输入模型 ID 添加第一个模型',
5354
endpoint: {
5455
desc: '从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值',
5556
placeholder: 'https://docs-test-001.openai.azure.com',
5657
title: 'Azure API 地址',
5758
},
58-
modelListPlaceholder: '请选择或添加你的部署模型',
59+
modelListPlaceholder: '请选择或添加你部署的 OpenAI 模型',
5960
title: 'Azure OpenAI',
6061
token: {
6162
desc: '从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1 或 KEY2',
@@ -96,6 +97,7 @@ export default {
9697
confirmDelete: '即将删除该自定义模型,删除后将不可恢复,请谨慎操作。',
9798
modelConfig: {
9899
azureDeployName: {
100+
extra: '在 Azure OpenAI 中实际请求的字段',
99101
placeholder: '请输入 Azure 中的模型部署名称',
100102
title: '模型部署名称',
101103
},
@@ -114,6 +116,7 @@ export default {
114116
title: '支持函数调用',
115117
},
116118
id: {
119+
extra: '将作为模型标签进行展示',
117120
placeholder: '请输入模型id,例如 gpt-4-turbo-preview 或 claude-2.1',
118121
title: '模型 ID',
119122
},

0 commit comments

Comments
 (0)