Skip to content

Commit

Permalink
✨ feat: add Upstage model provider support (#3670)
Browse files Browse the repository at this point in the history
* ✨ feat: add Upstage model provider support

* πŸ’„ style: uncomment for icon display

* πŸ”¨ chore: remove groundedness-check model

* πŸ”¨ chore: remove proxyUrl for Upstage
  • Loading branch information
hezhijie0327 authored Aug 30, 2024
1 parent e13aa39 commit 4b8591b
Show file tree
Hide file tree
Showing 15 changed files with 355 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ ENV \
TAICHU_API_KEY="" \
# TogetherAI
TOGETHERAI_API_KEY="" TOGETHERAI_MODEL_LIST="" \
# Upstage
UPSTAGE_API_KEY="" \
# 01.AI
ZEROONE_API_KEY="" \
# Zhipu
Expand Down
2 changes: 2 additions & 0 deletions Dockerfile.database
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,8 @@ ENV \
TAICHU_API_KEY="" \
# TogetherAI
TOGETHERAI_API_KEY="" TOGETHERAI_MODEL_LIST="" \
# Upstage
UPSTAGE_API_KEY="" \
# 01.AI
ZEROONE_API_KEY="" \
# Zhipu
Expand Down
2 changes: 2 additions & 0 deletions src/app/(main)/settings/llm/ProviderList/providers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
StepfunProviderCard,
TaichuProviderCard,
TogetherAIProviderCard,
UpstageProviderCard,
ZeroOneProviderCard,
ZhiPuProviderCard,
} from '@/config/modelProviders';
Expand Down Expand Up @@ -59,6 +60,7 @@ export const useProviderList = (): ProviderItem[] => {
TaichuProviderCard,
Ai360ProviderCard,
SiliconCloudProviderCard,
UpstageProviderCard,
],
[AzureProvider, OllamaProvider, OpenAIProvider, BedrockProvider],
);
Expand Down
7 changes: 7 additions & 0 deletions src/app/api/chat/agentRuntime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,13 @@ const getLlmOptionsFromPayload = (provider: string, payload: JWTPayload) => {

return { apiKey, baseURL };
}
case ModelProvider.Upstage: {
const { UPSTAGE_API_KEY } = getLLMConfig();

const apiKey = apiKeyManager.pick(payload?.apiKey || UPSTAGE_API_KEY);

return { apiKey };
}
}
};

Expand Down
6 changes: 6 additions & 0 deletions src/config/llm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ export const getLLMConfig = () => {
SILICONCLOUD_API_KEY: z.string().optional(),
SILICONCLOUD_MODEL_LIST: z.string().optional(),
SILICONCLOUD_PROXY_URL: z.string().optional(),

ENABLED_UPSTAGE: z.boolean(),
UPSTAGE_API_KEY: z.string().optional(),
},
runtimeEnv: {
API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE,
Expand Down Expand Up @@ -183,6 +186,9 @@ export const getLLMConfig = () => {
SILICONCLOUD_API_KEY: process.env.SILICONCLOUD_API_KEY,
SILICONCLOUD_MODEL_LIST: process.env.SILICONCLOUD_MODEL_LIST,
SILICONCLOUD_PROXY_URL: process.env.SILICONCLOUD_PROXY_URL,

ENABLED_UPSTAGE: !!process.env.UPSTAGE_API_KEY,
UPSTAGE_API_KEY: process.env.UPSTAGE_API_KEY,
},
});
};
Expand Down
4 changes: 4 additions & 0 deletions src/config/modelProviders/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import SiliconCloudProvider from './siliconcloud';
import StepfunProvider from './stepfun';
import TaichuProvider from './taichu';
import TogetherAIProvider from './togetherai';
import UpstageProvider from './upstage';
import ZeroOneProvider from './zeroone';
import ZhiPuProvider from './zhipu';

Expand All @@ -47,6 +48,7 @@ export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
TaichuProvider.chatModels,
Ai360Provider.chatModels,
SiliconCloudProvider.chatModels,
UpstageProvider.chatModels,
].flat();

export const DEFAULT_MODEL_PROVIDER_LIST = [
Expand All @@ -73,6 +75,7 @@ export const DEFAULT_MODEL_PROVIDER_LIST = [
TaichuProvider,
Ai360Provider,
SiliconCloudProvider,
UpstageProvider,
];

export const filterEnabledModels = (provider: ModelProviderCard) => {
Expand Down Expand Up @@ -105,5 +108,6 @@ export { default as SiliconCloudProviderCard } from './siliconcloud';
export { default as StepfunProviderCard } from './stepfun';
export { default as TaichuProviderCard } from './taichu';
export { default as TogetherAIProviderCard } from './togetherai';
export { default as UpstageProviderCard } from './upstage';
export { default as ZeroOneProviderCard } from './zeroone';
export { default as ZhiPuProviderCard } from './zhipu';
45 changes: 45 additions & 0 deletions src/config/modelProviders/upstage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { ModelProviderCard } from '@/types/llm';

// ref https://developers.upstage.ai/docs/getting-started/models
const Upstage: ModelProviderCard = {
chatModels: [
{
description: 'A compact LLM offering superior performance to GPT-3.5, with robust multilingual capabilities for both English and Korean, delivering high efficiency in a smaller package. solar-1-mini-chat is alias for our latest solar-1-mini-chat model. (Currently solar-1-mini-chat-240612)',
displayName: 'Solar 1 Mini Chat',
enabled: true,
functionCall: true,
id: 'solar-1-mini-chat',
tokens: 32_768,
},
{
description: 'A compact LLM that extends the capabilities of solar-mini-chat with specialization in Japanese, while maintaining high efficiency and performance in English and Korean. solar-1-mini-chat-ja is alias for our latest solar-1-mini-chat-ja model.(Currently solar-1-mini-chat-ja-240612)',
displayName: 'Solar 1 Mini Chat Ja',
enabled: true,
functionCall: false,
id: 'solar-1-mini-chat-ja',
tokens: 32_768,
},
{
description: 'English-to-Korean translation specialized model based on the solar-mini. Maximum context length is 32k tokens. solar-1-mini-translate-enko is alias for our latest solar-1-mini-translate-enko model. (Currently solar-1-mini-translate-enko-240507)',
displayName: 'Solar 1 Mini Translate EnKo',
enabled: false,
functionCall: false,
id: 'solar-1-mini-translate-enko',
tokens: 32_768,
},
{
description: 'Korean-to-English translation specialized model based on the solar-mini. Maximum context length is 32k tokens. solar-1-mini-translate-koen is alias for our latest solar-1-mini-translate-koen model. (Currently solar-1-mini-translate-koen-240507)',
displayName: 'Solar 1 Mini Translate KoEn',
enabled: false,
functionCall: false,
id: 'solar-1-mini-translate-koen',
tokens: 32_768,
},
],
checkModel: 'solar-1-mini-chat',
id: 'upstage',
modelList: { showModelFetcher: true },
name: 'Upstage',
};

export default Upstage;
5 changes: 5 additions & 0 deletions src/const/settings/llm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
StepfunProviderCard,
TaichuProviderCard,
TogetherAIProviderCard,
UpstageProviderCard,
ZeroOneProviderCard,
ZhiPuProviderCard,
filterEnabledModels,
Expand Down Expand Up @@ -111,6 +112,10 @@ export const DEFAULT_LLM_CONFIG: UserModelProviderConfig = {
enabled: false,
enabledModels: filterEnabledModels(TogetherAIProviderCard),
},
upstage: {
enabled: false,
enabledModels: filterEnabledModels(UpstageProviderCard),
},
zeroone: {
enabled: false,
enabledModels: filterEnabledModels(ZeroOneProviderCard),
Expand Down
5 changes: 5 additions & 0 deletions src/features/Conversation/Error/APIKeyForm/ProviderAvatar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
Stepfun,
Together,
Tongyi,
Upstage,
ZeroOne,
Zhipu,
} from '@lobehub/icons';
Expand Down Expand Up @@ -103,6 +104,10 @@ const ProviderAvatar = memo<ProviderAvatarProps>(({ provider }) => {
return <Ai360 color={Ai360.colorPrimary} size={56} />;
}

case ModelProvider.Upstage: {
return <Upstage color={Upstage.colorPrimary} size={56} />;
}

default:
case ModelProvider.OpenAI: {
return <OpenAI color={theme.colorText} size={64} />;
Expand Down
7 changes: 7 additions & 0 deletions src/libs/agent-runtime/AgentRuntime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { LobeSiliconCloudAI } from './siliconcloud';
import { LobeStepfunAI } from './stepfun';
import { LobeTaichuAI } from './taichu';
import { LobeTogetherAI } from './togetherai';
import { LobeUpstageAI } from './upstage';
import {
ChatCompetitionOptions,
ChatStreamPayload,
Expand Down Expand Up @@ -134,6 +135,7 @@ class AgentRuntime {
stepfun: Partial<ClientOptions>;
taichu: Partial<ClientOptions>;
togetherai: Partial<ClientOptions>;
upstage: Partial<ClientOptions>;
zeroone: Partial<ClientOptions>;
zhipu: Partial<ClientOptions>;
}>,
Expand Down Expand Up @@ -261,6 +263,11 @@ class AgentRuntime {
runtimeModel = new LobeSiliconCloudAI(params.siliconcloud ?? {});
break;
}

case ModelProvider.Upstage: {
runtimeModel = new LobeUpstageAI(params.upstage);
break
}
}

return new AgentRuntime(runtimeModel);
Expand Down
1 change: 1 addition & 0 deletions src/libs/agent-runtime/types/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ export enum ModelProvider {
Stepfun = 'stepfun',
Taichu = 'taichu',
TogetherAI = 'togetherai',
Upstage = 'upstage',
ZeroOne = 'zeroone',
ZhiPu = 'zhipu',
}
Expand Down
Loading

0 comments on commit 4b8591b

Please sign in to comment.