Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ feat: Add XVERSE (元象大模型) model provider #3185

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/app/(main)/settings/llm/ProviderList/providers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
Stepfun,
Together,
Tongyi,
// Xverse, // TODO: Change to xverse
ZeroOne,
Zhipu,
} from '@lobehub/icons';
Expand All @@ -39,6 +40,7 @@ import {
StepfunProviderCard,
TaichuProviderCard,
TogetherAIProviderCard,
XverseProviderCard,
ZeroOneProviderCard,
ZhiPuProviderCard,
} from '@/config/modelProviders';
Expand Down Expand Up @@ -184,6 +186,11 @@ export const useProviderList = (): ProviderItem[] => {
docUrl: urlJoin(BASE_DOC_URL, 'taichu'),
title: <AiMass.Combine size={ 28 } type={ 'color' } />,
},
{
...XverseProviderCard,
docUrl: urlJoin(BASE_DOC_URL, 'xverse'),
title: <Baichuan.Combine size={ 28 } type={ 'color' } />, // TODO: change icon to xverse
},
],
[azureProvider, ollamaProvider, ollamaProvider, 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 @@ -184,6 +184,13 @@ const getLlmOptionsFromPayload = (provider: string, payload: JWTPayload) => {

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

return { apiKey };
}
case ModelProvider.Xverse: {
const { XVERSE_API_KEY } = getLLMConfig();

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

return { apiKey };
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/components/ModelIcon/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import {
Stepfun,
Tongyi,
Wenxin,
// Xverse, // TODO: change icon to xverse
Yi,
} from '@lobehub/icons';
import { memo } from 'react';
Expand Down Expand Up @@ -68,6 +69,7 @@ const ModelIcon = memo<ModelProviderIconProps>(({ model: originModel, size = 12
if (model.includes('dbrx')) return <Dbrx.Avatar size={size} />;
if (model.includes('step')) return <Stepfun.Avatar size={size} />;
if (model.includes('taichu')) return <AiMass.Avatar size={size} />;
if (model.includes('xverse')) return <Baichuan.Avatar size={size} />; // TODO: change icon to xverse

// below: To be supported in providers, move up if supported
if (model.includes('baichuan'))
Expand Down
5 changes: 5 additions & 0 deletions src/components/ModelProviderIcon/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
Stepfun,
Together,
Tongyi,
// Xverse, // TODO: change the icon to xverse
ZeroOne,
Zhipu,
} from '@lobehub/icons';
Expand Down Expand Up @@ -124,6 +125,10 @@ const ModelProviderIcon = memo<ModelProviderIconProps>(({ provider }) => {
return <AiMass size={20} />;
}

case ModelProvider.Xverse: {
return <Baichuan size={20} />; // TODO: change icon to xverse
}

default: {
return null;
}
Expand Down
2 changes: 2 additions & 0 deletions src/components/ModelTag/ModelIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
Stability,
Tongyi,
Wenxin,
// Xverse, // TODO: change icon to xverse
Yi,
} from '@lobehub/icons';
import { memo } from 'react';
Expand Down Expand Up @@ -63,6 +64,7 @@ const ModelIcon = memo<ModelIconProps>(({ model, size = 12 }) => {
if (model.includes('command')) return <Cohere size={size} />;
if (model.includes('dbrx')) return <Dbrx size={size} />;
if (model.includes('taichu')) return <AiMass size={size} />;
if (model.includes('xverse')) return <Baichuan size={size} />; // TODO: change icon to xverse

// below: To be supported in providers, move up if supported
if (model.includes('baichuan')) return <Baichuan size={size} />;
Expand Down
6 changes: 6 additions & 0 deletions src/config/llm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ export const getLLMConfig = () => {

ENABLED_TAICHU: z.boolean(),
TAICHU_API_KEY: z.string().optional(),

ENABLED_XVERSE: z.boolean(),
XVERSE_API_KEY: z.string().optional(),
},
runtimeEnv: {
API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE,
Expand Down Expand Up @@ -167,6 +170,9 @@ export const getLLMConfig = () => {

ENABLED_TAICHU: !!process.env.TAICHU_API_KEY,
TAICHU_API_KEY: process.env.TAICHU_API_KEY,

ENABLED_XVERSE: !!process.env.XVERSE_API_KEY,
XVERSE_API_KEY: process.env.XVERSE_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 @@ -18,6 +18,7 @@ import QwenProvider from './qwen';
import StepfunProvider from './stepfun';
import TaichuProvider from './taichu';
import TogetherAIProvider from './togetherai';
import XverseProvider from './xverse';
import ZeroOneProvider from './zeroone';
import ZhiPuProvider from './zhipu';

Expand All @@ -41,6 +42,7 @@ export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
StepfunProvider.chatModels,
BaichuanProvider.chatModels,
TaichuProvider.chatModels,
XverseProvider.chatModels,
].flat();

export const DEFAULT_MODEL_PROVIDER_LIST = [
Expand All @@ -64,6 +66,7 @@ export const DEFAULT_MODEL_PROVIDER_LIST = [
StepfunProvider,
BaichuanProvider,
TaichuProvider,
XverseProvider,
];

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

// ref https://chat.xverse.cn/home/index.html
// ref https://chat.xverse.cn/docs/api-reference
const Xverse: ModelProviderCard = {
chatModels: [
{
displayName: 'XVERSE-13B-2',
enabled: true,
functionCall: false,
id: 'XVERSE-13B-2',
maxOutput: 2048,
tokens: 16_384,
},
{
displayName: 'XVERSE-65B-2',
enabled: true,
functionCall: false,
id: 'XVERSE-65B-2',
maxOutput: 2048,
tokens: 8192,
},
],
checkModel: 'XVERSE-13B-2',
id: 'xverse',
modelList: { showModelFetcher: true },
name: 'Xverse',
};

export default Xverse;
5 changes: 5 additions & 0 deletions src/const/settings/llm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
StepfunProviderCard,
TaichuProviderCard,
TogetherAIProviderCard,
XverseProviderCard,
ZeroOneProviderCard,
ZhiPuProviderCard,
filterEnabledModels,
Expand Down Expand Up @@ -96,6 +97,10 @@ export const DEFAULT_LLM_CONFIG: UserModelProviderConfig = {
enabled: false,
enabledModels: filterEnabledModels(TogetherAIProviderCard),
},
xverse: {
enabled: false,
enabledModels: filterEnabledModels(XverseProviderCard),
},
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 @@ -14,6 +14,7 @@ import {
Stepfun,
Together,
Tongyi,
// Xverse, // TODO: change icon to xverse
ZeroOne,
Zhipu,
} from '@lobehub/icons';
Expand Down Expand Up @@ -90,6 +91,10 @@ const ProviderAvatar = memo<ProviderAvatarProps>(({ provider }) => {
return <Together color={Together.colorPrimary} size={56} />;
}

case ModelProvider.Xverse: {
return <Baichuan color={Baichuan.colorPrimary} size={56} />; // TODO: Change icon to xverse
}

case ModelProvider.ZeroOne: {
return <ZeroOne color={ZeroOne.colorPrimary} size={56} />;
}
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 @@ -27,6 +27,7 @@ import {
ModelProvider,
TextToImagePayload,
} from './types';
import { LobeXverseAI } from './xverse';
import { LobeZeroOneAI } from './zeroone';
import { LobeZhipuAI } from './zhipu';

Expand Down Expand Up @@ -121,6 +122,7 @@ class AgentRuntime {
stepfun: Partial<ClientOptions>;
taichu: Partial<ClientOptions>;
togetherai: Partial<ClientOptions>;
xverse: Partial<ClientOptions>;
zeroone: Partial<ClientOptions>;
zhipu: Partial<ClientOptions>;
}>,
Expand Down Expand Up @@ -233,6 +235,11 @@ class AgentRuntime {
runtimeModel = new LobeTaichuAI(params.taichu ?? {});
break
}

case ModelProvider.Xverse: {
runtimeModel = new LobeXverseAI(params.xverse ?? {});
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 @@ -40,6 +40,7 @@ export enum ModelProvider {
Stepfun = 'stepfun',
Taichu = 'taichu',
TogetherAI = 'togetherai',
Xverse = 'xverse',
ZeroOne = 'zeroone',
ZhiPu = 'zhipu',
}
Expand Down
Loading
Loading