@lobehub/chat 1.15.34 → 1.15.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @lobehub/chat might be problematic. Click here for more details.
- package/CHANGELOG.md +25 -0
- package/package.json +1 -1
- package/src/components/Branding/CustomLogo.tsx +97 -44
- package/src/components/Branding/index.tsx +3 -10
- package/src/features/Conversation/Error/APIKeyForm/index.tsx +2 -2
- package/src/features/Conversation/Error/APIKeyForm/ProviderAvatar.tsx +0 -118
package/CHANGELOG.md
CHANGED
@@ -2,6 +2,31 @@
|
|
2
2
|
|
3
3
|
# Changelog
|
4
4
|
|
5
|
+
### [Version 1.15.35](https://github.com/lobehub/lobe-chat/compare/v1.15.34...v1.15.35)
|
6
|
+
|
7
|
+
<sup>Released on **2024-09-10**</sup>
|
8
|
+
|
9
|
+
#### 💄 Styles
|
10
|
+
|
11
|
+
- **misc**: Update CustomLogo.
|
12
|
+
|
13
|
+
<br/>
|
14
|
+
|
15
|
+
<details>
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
17
|
+
|
18
|
+
#### Styles
|
19
|
+
|
20
|
+
- **misc**: Update CustomLogo, closes [#3874](https://github.com/lobehub/lobe-chat/issues/3874) ([dd7c8df](https://github.com/lobehub/lobe-chat/commit/dd7c8df))
|
21
|
+
|
22
|
+
</details>
|
23
|
+
|
24
|
+
<div align="right">
|
25
|
+
|
26
|
+
[](#readme-top)
|
27
|
+
|
28
|
+
</div>
|
29
|
+
|
5
30
|
### [Version 1.15.34](https://github.com/lobehub/lobe-chat/compare/v1.15.33...v1.15.34)
|
6
31
|
|
7
32
|
<sup>Released on **2024-09-10**</sup>
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@lobehub/chat",
|
3
|
-
"version": "1.15.
|
3
|
+
"version": "1.15.35",
|
4
4
|
"description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
|
5
5
|
"keywords": [
|
6
6
|
"framework",
|
@@ -1,72 +1,125 @@
|
|
1
|
-
import {
|
2
|
-
import
|
3
|
-
import {
|
4
|
-
import {
|
1
|
+
import type { DivProps, SvgProps } from '@lobehub/ui';
|
2
|
+
import type { LobeChatProps } from '@lobehub/ui/brand';
|
3
|
+
import { createStyles, useTheme } from 'antd-style';
|
4
|
+
import Image, { ImageProps } from 'next/image';
|
5
|
+
import { ReactNode, memo } from 'react';
|
6
|
+
import { Flexbox, FlexboxProps } from 'react-layout-kit';
|
5
7
|
|
6
8
|
import { BRANDING_LOGO_URL, BRANDING_NAME } from '@/const/branding';
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
const useStyles = createStyles(({ css }) => {
|
11
|
+
return {
|
12
|
+
extraTitle: css`
|
13
|
+
font-weight: 300;
|
14
|
+
white-space: nowrap;
|
15
|
+
`,
|
16
|
+
};
|
17
|
+
});
|
14
18
|
|
15
|
-
const
|
16
|
-
|
19
|
+
const CustomTextLogo = memo<FlexboxProps & { size: number }>(({ size, style, ...rest }) => {
|
20
|
+
return (
|
17
21
|
<Flexbox
|
18
|
-
className={className}
|
19
22
|
height={size}
|
20
23
|
style={{
|
21
24
|
fontSize: size / 1.5,
|
22
|
-
fontWeight: '
|
25
|
+
fontWeight: 'bolder',
|
23
26
|
userSelect: 'none',
|
27
|
+
...style,
|
24
28
|
}}
|
29
|
+
{...rest}
|
25
30
|
>
|
26
31
|
{BRANDING_NAME}
|
27
32
|
</Flexbox>
|
28
33
|
);
|
34
|
+
});
|
35
|
+
|
36
|
+
const CustomImageLogo = memo<Omit<ImageProps, 'alt' | 'src'> & { size: number }>(
|
37
|
+
({ size, ...rest }) => {
|
38
|
+
return (
|
39
|
+
<Image
|
40
|
+
alt={BRANDING_NAME}
|
41
|
+
height={size}
|
42
|
+
src={BRANDING_LOGO_URL}
|
43
|
+
unoptimized={true}
|
44
|
+
width={size}
|
45
|
+
{...rest}
|
46
|
+
/>
|
47
|
+
);
|
48
|
+
},
|
49
|
+
);
|
29
50
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
51
|
+
const Divider = memo<SvgProps & DivProps & { size?: number }>(
|
52
|
+
({ size = '1em', style, ...rest }) => (
|
53
|
+
<svg
|
54
|
+
fill="none"
|
34
55
|
height={size}
|
35
|
-
|
36
|
-
|
56
|
+
shapeRendering="geometricPrecision"
|
57
|
+
stroke="currentColor"
|
58
|
+
strokeLinecap="round"
|
59
|
+
strokeLinejoin="round"
|
60
|
+
style={{ flex: 'none', lineHeight: 1, ...style }}
|
61
|
+
viewBox="0 0 24 24"
|
37
62
|
width={size}
|
38
|
-
|
39
|
-
|
63
|
+
{...rest}
|
64
|
+
>
|
65
|
+
<path d="M16.88 3.549L7.12 20.451" />
|
66
|
+
</svg>
|
67
|
+
),
|
68
|
+
);
|
69
|
+
|
70
|
+
const CustomLogo = memo<LobeChatProps>(({ extra, size = 32, className, style, type, ...rest }) => {
|
71
|
+
const theme = useTheme();
|
72
|
+
const { styles } = useStyles();
|
73
|
+
let logoComponent: ReactNode;
|
74
|
+
|
40
75
|
switch (type) {
|
76
|
+
case '3d':
|
77
|
+
case 'flat': {
|
78
|
+
logoComponent = <CustomImageLogo size={size} style={style} {...rest} />;
|
79
|
+
break;
|
80
|
+
}
|
81
|
+
case 'mono': {
|
82
|
+
logoComponent = (
|
83
|
+
<CustomImageLogo size={size} style={{ filter: 'grayscale(100%)', ...style }} {...rest} />
|
84
|
+
);
|
85
|
+
break;
|
86
|
+
}
|
41
87
|
case 'text': {
|
42
|
-
|
88
|
+
logoComponent = <CustomTextLogo size={size} style={style} {...rest} />;
|
89
|
+
break;
|
43
90
|
}
|
44
|
-
|
45
91
|
case 'combine': {
|
46
|
-
|
47
|
-
|
48
|
-
{
|
49
|
-
{
|
50
|
-
|
92
|
+
logoComponent = (
|
93
|
+
<>
|
94
|
+
<CustomImageLogo size={size} />
|
95
|
+
<CustomTextLogo size={size} style={{ marginLeft: Math.round(size / 4) }} />
|
96
|
+
</>
|
51
97
|
);
|
52
|
-
}
|
53
98
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
height={size}
|
63
|
-
src={BRANDING_LOGO_URL}
|
64
|
-
unoptimized={true}
|
65
|
-
width={size}
|
66
|
-
/>
|
67
|
-
);
|
99
|
+
if (!extra)
|
100
|
+
logoComponent = (
|
101
|
+
<Flexbox align={'center'} flex={'none'} horizontal {...rest}>
|
102
|
+
{logoComponent}
|
103
|
+
</Flexbox>
|
104
|
+
);
|
105
|
+
|
106
|
+
break;
|
68
107
|
}
|
69
108
|
}
|
109
|
+
|
110
|
+
if (!extra) return logoComponent;
|
111
|
+
|
112
|
+
const extraSize = Math.round((size / 3) * 1.9);
|
113
|
+
|
114
|
+
return (
|
115
|
+
<Flexbox align={'center'} className={className} flex={'none'} horizontal {...rest}>
|
116
|
+
{logoComponent}
|
117
|
+
<Divider size={extraSize} style={{ color: theme.colorFill }} />
|
118
|
+
<div className={styles.extraTitle} style={{ fontSize: extraSize }}>
|
119
|
+
{extra}
|
120
|
+
</div>
|
121
|
+
</Flexbox>
|
122
|
+
);
|
70
123
|
});
|
71
124
|
|
72
125
|
export default CustomLogo;
|
@@ -5,17 +5,10 @@ import { isCustomBranding } from '@/const/version';
|
|
5
5
|
|
6
6
|
import CustomLogo from './CustomLogo';
|
7
7
|
|
8
|
-
|
9
|
-
className?: string;
|
10
|
-
extra?: string;
|
11
|
-
size?: number;
|
12
|
-
type?: LobeChatProps['type'];
|
13
|
-
}
|
14
|
-
|
15
|
-
export const ProductLogo = memo<ProductLogoProps>(({ size, className, extra, type }) => {
|
8
|
+
export const ProductLogo = memo<LobeChatProps>((props) => {
|
16
9
|
if (isCustomBranding) {
|
17
|
-
return <CustomLogo
|
10
|
+
return <CustomLogo {...props} />;
|
18
11
|
}
|
19
12
|
|
20
|
-
return <LobeChat
|
13
|
+
return <LobeChat {...props} />;
|
21
14
|
});
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { ProviderIcon } from '@lobehub/icons';
|
1
2
|
import { Button } from 'antd';
|
2
3
|
import { memo, useMemo } from 'react';
|
3
4
|
import { useTranslation } from 'react-i18next';
|
@@ -9,7 +10,6 @@ import { GlobalLLMProviderKey } from '@/types/user/settings';
|
|
9
10
|
|
10
11
|
import BedrockForm from './Bedrock';
|
11
12
|
import ProviderApiKeyForm from './ProviderApiKeyForm';
|
12
|
-
import ProviderAvatar from './ProviderAvatar';
|
13
13
|
|
14
14
|
interface APIKeyFormProps {
|
15
15
|
id: string;
|
@@ -64,7 +64,7 @@ const APIKeyForm = memo<APIKeyFormProps>(({ id, provider }) => {
|
|
64
64
|
) : (
|
65
65
|
<ProviderApiKeyForm
|
66
66
|
apiKeyPlaceholder={apiKeyPlaceholder}
|
67
|
-
avatar={<
|
67
|
+
avatar={<ProviderIcon provider={provider} size={80} type={'avatar'} />}
|
68
68
|
provider={provider as GlobalLLMProviderKey}
|
69
69
|
showEndpoint={provider === ModelProvider.OpenAI}
|
70
70
|
/>
|
@@ -1,118 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
Ai360,
|
3
|
-
AiMass,
|
4
|
-
Anthropic,
|
5
|
-
Baichuan,
|
6
|
-
DeepSeek,
|
7
|
-
Google,
|
8
|
-
Groq,
|
9
|
-
Minimax,
|
10
|
-
Mistral,
|
11
|
-
Moonshot,
|
12
|
-
Novita,
|
13
|
-
OpenAI,
|
14
|
-
OpenRouter,
|
15
|
-
Perplexity,
|
16
|
-
Stepfun,
|
17
|
-
Together,
|
18
|
-
Tongyi,
|
19
|
-
Upstage,
|
20
|
-
ZeroOne,
|
21
|
-
Zhipu,
|
22
|
-
} from '@lobehub/icons';
|
23
|
-
import { useTheme } from 'antd-style';
|
24
|
-
import { memo } from 'react';
|
25
|
-
|
26
|
-
import { ModelProvider } from '@/libs/agent-runtime';
|
27
|
-
|
28
|
-
interface ProviderAvatarProps {
|
29
|
-
provider: ModelProvider;
|
30
|
-
}
|
31
|
-
|
32
|
-
const ProviderAvatar = memo<ProviderAvatarProps>(({ provider }) => {
|
33
|
-
const theme = useTheme();
|
34
|
-
|
35
|
-
switch (provider as ModelProvider) {
|
36
|
-
case ModelProvider.Google: {
|
37
|
-
return <Google.Color size={56} />;
|
38
|
-
}
|
39
|
-
|
40
|
-
case ModelProvider.ZhiPu: {
|
41
|
-
return <Zhipu.Color size={64} />;
|
42
|
-
}
|
43
|
-
|
44
|
-
case ModelProvider.Minimax: {
|
45
|
-
return <Minimax.Color size={56} />;
|
46
|
-
}
|
47
|
-
|
48
|
-
case ModelProvider.Mistral: {
|
49
|
-
return <Mistral.Color size={56} />;
|
50
|
-
}
|
51
|
-
|
52
|
-
case ModelProvider.Moonshot: {
|
53
|
-
return <Moonshot size={56} />;
|
54
|
-
}
|
55
|
-
|
56
|
-
case ModelProvider.Perplexity: {
|
57
|
-
return <Perplexity.Color size={56} />;
|
58
|
-
}
|
59
|
-
|
60
|
-
case ModelProvider.Anthropic: {
|
61
|
-
return <Anthropic color={Anthropic.colorPrimary} size={52} />;
|
62
|
-
}
|
63
|
-
|
64
|
-
case ModelProvider.Baichuan: {
|
65
|
-
return <Baichuan color={Baichuan.colorPrimary} size={56} />;
|
66
|
-
}
|
67
|
-
|
68
|
-
case ModelProvider.DeepSeek: {
|
69
|
-
return <DeepSeek color={DeepSeek.colorPrimary} size={56} />;
|
70
|
-
}
|
71
|
-
|
72
|
-
case ModelProvider.Groq: {
|
73
|
-
return <Groq color={Groq.colorPrimary} size={56} />;
|
74
|
-
}
|
75
|
-
|
76
|
-
case ModelProvider.OpenRouter: {
|
77
|
-
return <OpenRouter color={OpenRouter.colorPrimary} size={56} />;
|
78
|
-
}
|
79
|
-
|
80
|
-
case ModelProvider.Qwen: {
|
81
|
-
return <Tongyi color={Tongyi.colorPrimary} size={56} />;
|
82
|
-
}
|
83
|
-
|
84
|
-
case ModelProvider.Stepfun: {
|
85
|
-
return <Stepfun color={Stepfun.colorPrimary} size={56} />;
|
86
|
-
}
|
87
|
-
|
88
|
-
case ModelProvider.Taichu: {
|
89
|
-
return <AiMass.Color size={56} />;
|
90
|
-
}
|
91
|
-
|
92
|
-
case ModelProvider.TogetherAI: {
|
93
|
-
return <Together color={Together.colorPrimary} size={56} />;
|
94
|
-
}
|
95
|
-
|
96
|
-
case ModelProvider.ZeroOne: {
|
97
|
-
return <ZeroOne color={ZeroOne.colorPrimary} size={56} />;
|
98
|
-
}
|
99
|
-
case ModelProvider.Novita: {
|
100
|
-
return <Novita color={Novita.colorPrimary} size={56} />;
|
101
|
-
}
|
102
|
-
|
103
|
-
case ModelProvider.Ai360: {
|
104
|
-
return <Ai360 color={Ai360.colorPrimary} size={56} />;
|
105
|
-
}
|
106
|
-
|
107
|
-
case ModelProvider.Upstage: {
|
108
|
-
return <Upstage color={Upstage.colorPrimary} size={56} />;
|
109
|
-
}
|
110
|
-
|
111
|
-
default:
|
112
|
-
case ModelProvider.OpenAI: {
|
113
|
-
return <OpenAI color={theme.colorText} size={64} />;
|
114
|
-
}
|
115
|
-
}
|
116
|
-
});
|
117
|
-
|
118
|
-
export default ProviderAvatar;
|