@lobehub/chat 0.92.0 → 0.94.0
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.
- package/CHANGELOG.md +58 -0
- package/docs/Deploy-with-Azure-OpenAI.md +3 -3
- package/locales/en_US/chat.json +10 -10
- package/locales/en_US/setting.json +7 -0
- package/locales/ja_JP/setting.json +7 -0
- package/locales/ko_KR/setting.json +7 -0
- package/locales/ru_RU/common.json +2 -1
- package/locales/ru_RU/setting.json +7 -0
- package/locales/zh_CN/setting.json +7 -0
- package/locales/zh_TW/setting.json +7 -0
- package/package.json +5 -4
- package/scripts/i18nWorkflow/utils.ts +4 -1
- package/src/app/chat/features/Conversation/ChatList/Actions/customAction.ts +6 -4
- package/src/app/chat/features/Conversation/ChatList/index.tsx +21 -14
- package/src/app/chat/features/TopicListContent/SystemRole/index.tsx +4 -1
- package/src/app/chat/settings/(desktop)/{Header/Desktop.tsx → features/Header.tsx} +4 -3
- package/src/app/chat/settings/(desktop)/layout.desktop.tsx +1 -1
- package/src/app/chat/settings/{components/Header/Mobile.tsx → (mobile)/features/Header.tsx} +4 -3
- package/src/app/chat/settings/(mobile)/layout.mobile.tsx +1 -1
- package/src/app/chat/settings/{components/Header/index.tsx → features/HeaderContent.tsx} +11 -3
- package/src/app/chat/settings/features/SubmitAgentButton/Inner.tsx +86 -0
- package/src/app/chat/settings/features/SubmitAgentButton/index.tsx +37 -0
- package/src/app/chat/settings/features/SubmitAgentButton/style.ts +46 -0
- package/src/app/market/features/AgentSearchBar/index.tsx +6 -3
- package/src/chains/langDetect.ts +31 -0
- package/src/chains/pickEmoji.ts +31 -0
- package/src/chains/summaryAgentName.ts +30 -0
- package/src/chains/summaryDescription.ts +26 -0
- package/src/chains/summaryTags.ts +27 -0
- package/src/chains/summaryTitle.ts +32 -0
- package/src/chains/translate.ts +17 -0
- package/src/components/HotKeys/index.tsx +2 -2
- package/src/components/ResponsiveIndex/index.tsx +4 -2
- package/src/const/url.ts +1 -0
- package/src/features/AgentInfo/index.tsx +69 -0
- package/src/features/AgentSetting/AgentMeta/AutoGenerateSelect.tsx +48 -0
- package/src/features/AgentSetting/AgentMeta/index.tsx +16 -5
- package/src/features/AgentSetting/store/action.ts +66 -12
- package/src/locales/default/chat.ts +0 -1
- package/src/locales/default/setting.ts +8 -0
- package/src/locales/resources/index.ts +0 -1
- package/src/store/session/slices/chat/actions/topic.ts +1 -1
- package/src/store/session/slices/chat/actions/translate.ts +2 -1
- package/src/store/session/slices/session/reducers/session.ts +1 -1
- package/src/app/chat/settings/(desktop)/Header/index.tsx +0 -13
- package/src/app/chat/settings/(mobile)/Header.tsx +0 -12
- package/src/chains/agent.ts +0 -76
- package/src/chains/chat.ts +0 -77
|
@@ -109,6 +109,7 @@ export default {
|
|
|
109
109
|
},
|
|
110
110
|
title: '助手信息',
|
|
111
111
|
},
|
|
112
|
+
|
|
112
113
|
settingChat: {
|
|
113
114
|
chatStyleType: {
|
|
114
115
|
title: '聊天窗口样式',
|
|
@@ -222,6 +223,13 @@ export default {
|
|
|
222
223
|
},
|
|
223
224
|
title: '主题设置',
|
|
224
225
|
},
|
|
226
|
+
submitAgentModal: {
|
|
227
|
+
button: '提交助手',
|
|
228
|
+
identifier: 'identifier 助手标识符',
|
|
229
|
+
metaMiss: '请补全助手信息后提交,需要包含名称、描述和标签',
|
|
230
|
+
placeholder: '请输入助手的标识符,需要是唯一的,比如 web-development',
|
|
231
|
+
tooltips: '分享到助手市场',
|
|
232
|
+
},
|
|
225
233
|
tab: {
|
|
226
234
|
agent: '默认助手',
|
|
227
235
|
common: '通用设置',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StateCreator } from 'zustand/vanilla';
|
|
2
2
|
|
|
3
|
-
import { chainSummaryTitle } from '@/chains/
|
|
3
|
+
import { chainSummaryTitle } from '@/chains/summaryTitle';
|
|
4
4
|
import { LOADING_FLAT } from '@/const/message';
|
|
5
5
|
import { SessionStore } from '@/store/session';
|
|
6
6
|
import { fetchPresetTaskResult } from '@/utils/fetch';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { produce } from 'immer';
|
|
2
2
|
import { StateCreator } from 'zustand/vanilla';
|
|
3
3
|
|
|
4
|
-
import { chainLangDetect
|
|
4
|
+
import { chainLangDetect } from '@/chains/langDetect';
|
|
5
|
+
import { chainTranslate } from '@/chains/translate';
|
|
5
6
|
import { supportLocales } from '@/locales/options';
|
|
6
7
|
import { SessionStore } from '@/store/session';
|
|
7
8
|
import { fetchPresetTaskResult } from '@/utils/fetch';
|
|
@@ -112,7 +112,7 @@ export const sessionsReducer = (state: LobeSessions, payload: SessionDispatch):
|
|
|
112
112
|
|
|
113
113
|
const { key, value } = payload;
|
|
114
114
|
|
|
115
|
-
const validKeys = ['avatar', 'backgroundColor', 'description', '
|
|
115
|
+
const validKeys = ['avatar', 'backgroundColor', 'description', 'tags', 'title'];
|
|
116
116
|
|
|
117
117
|
if (validKeys.includes(key)) chat.meta[key] = value;
|
|
118
118
|
});
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { memo } from 'react';
|
|
2
|
-
|
|
3
|
-
import { HeaderContent } from '@/app/chat/settings/components/Header';
|
|
4
|
-
import Layout from '@/app/chat/settings/components/Header/Mobile';
|
|
5
|
-
|
|
6
|
-
const Header = memo(() => (
|
|
7
|
-
<Layout>
|
|
8
|
-
<HeaderContent />
|
|
9
|
-
</Layout>
|
|
10
|
-
));
|
|
11
|
-
|
|
12
|
-
export default Header;
|
package/src/chains/agent.ts
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { OpenAIChatStreamPayload } from '@/types/openai/chat';
|
|
2
|
-
|
|
3
|
-
// 自动起名
|
|
4
|
-
export const promptSummaryAgentName = (content: string): Partial<OpenAIChatStreamPayload> => ({
|
|
5
|
-
messages: [
|
|
6
|
-
{
|
|
7
|
-
content: `你是一名擅长起名的起名大师,你需要将用户的描述总结为 20 个字以内的角色,格式要求如下:
|
|
8
|
-
输入: {文本作为JSON引用字符串}
|
|
9
|
-
输出: {角色名}
|
|
10
|
-
`,
|
|
11
|
-
role: 'system',
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
content: `输入: {你是一名专业的前端开发者,擅长结合 vitest 和\`testing-library/react\` 书写单元测试。接下来用户会输入一串 ts 代码,你需要给出完善的单元测试。\n你需要注意,单元测试代码中,不应该使用 jest 。如果需要使用 \`jest.fn\`,请使用 \`vi.fn\` 替换}`,
|
|
15
|
-
role: 'user',
|
|
16
|
-
},
|
|
17
|
-
{ content: '前端 vitest 测试专家', role: 'assistant' },
|
|
18
|
-
{
|
|
19
|
-
content: `输入: {你是一名前端专家,请将下面的代码转成 ts,不要修改实现。如果原本 js 中没有定义的全局变量,需要补充 declare 的类型声明。}`,
|
|
20
|
-
role: 'user',
|
|
21
|
-
},
|
|
22
|
-
{ content: 'js 转 ts 专家', role: 'assistant' },
|
|
23
|
-
{
|
|
24
|
-
content: `输入:{你是一名擅长比喻和隐喻的UX Writter。用户会输入文案,你需要给出3个优化后的结果,使用 markdown格式的文本。下面是一个例子:
|
|
25
|
-
输入:页面加载中
|
|
26
|
-
输出:页面似乎在思考,一会儿才能准备好}`,
|
|
27
|
-
role: 'user',
|
|
28
|
-
},
|
|
29
|
-
{ content: '文案比喻优化专家', role: 'assistant' },
|
|
30
|
-
{ content: `输入: {${content}}`, role: 'user' },
|
|
31
|
-
],
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
// 自动挑选 emoji 和背景色
|
|
35
|
-
export const promptPickEmoji = (content: string): Partial<OpenAIChatStreamPayload> => ({
|
|
36
|
-
messages: [
|
|
37
|
-
{
|
|
38
|
-
content: '你是一名非常懂设计与时尚的设计师,你需要从用户的描述中匹配一个合适的 emoji。',
|
|
39
|
-
role: 'system',
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
content: `输入:你是一名精通体验设计的设计系统设计师,设计系统存在诸多类别的 token,比如品牌色、成功色等,你需要为各个类别的 token 提供说明文案。`,
|
|
43
|
-
role: 'user',
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
content: `💅`,
|
|
47
|
-
role: 'assistant',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
content: `输入:用户会输入一串 ts 代码,为了确保所有功能和分支的 100% 的覆盖率,你需要给出需要考虑哪些数据场景。`,
|
|
51
|
-
role: 'user',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
content: `🧪`,
|
|
55
|
-
role: 'assistant',
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
content: `输入:${content}`,
|
|
59
|
-
role: 'user',
|
|
60
|
-
},
|
|
61
|
-
],
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
export const promptSummaryDescription = (content: string): Partial<OpenAIChatStreamPayload> => ({
|
|
65
|
-
messages: [
|
|
66
|
-
{
|
|
67
|
-
content:
|
|
68
|
-
'你是一名擅长会话的助理,你需要将用户的输入的内容总结为一个专家的简介,不超过 20 个字',
|
|
69
|
-
role: 'system',
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
content: `${content}`,
|
|
73
|
-
role: 'user',
|
|
74
|
-
},
|
|
75
|
-
],
|
|
76
|
-
});
|
package/src/chains/chat.ts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { chatHelpers } from '@/store/session/helpers';
|
|
2
|
-
import { LanguageModel } from '@/types/llm';
|
|
3
|
-
import { OpenAIChatMessage, OpenAIChatStreamPayload } from '@/types/openai/chat';
|
|
4
|
-
|
|
5
|
-
export const chainSummaryTitle = async (
|
|
6
|
-
messages: OpenAIChatMessage[],
|
|
7
|
-
): Promise<Partial<OpenAIChatStreamPayload>> => {
|
|
8
|
-
const finalMessages: OpenAIChatMessage[] = [
|
|
9
|
-
{
|
|
10
|
-
content:
|
|
11
|
-
'你是一名擅长会话的助理,你需要将用户的会话总结为 10 个字以内的标题,不需要包含标点符号',
|
|
12
|
-
role: 'system',
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
content: `${messages.map((message) => `${message.role}: ${message.content}`).join('\n')}
|
|
16
|
-
|
|
17
|
-
请总结上述对话为10个字以内的标题,不需要包含标点符号`,
|
|
18
|
-
role: 'user',
|
|
19
|
-
},
|
|
20
|
-
];
|
|
21
|
-
// 如果超过 4k,则使用 GPT3.5 16K 模型
|
|
22
|
-
const tokens = await chatHelpers.getMessagesTokenCount(finalMessages);
|
|
23
|
-
let model: LanguageModel | undefined = undefined;
|
|
24
|
-
if (tokens > 4000) {
|
|
25
|
-
model = LanguageModel.GPT3_5_16K;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
messages: finalMessages,
|
|
30
|
-
model,
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export const chainTranslate = (
|
|
35
|
-
content: string,
|
|
36
|
-
targetLang: string,
|
|
37
|
-
): Partial<OpenAIChatStreamPayload> => ({
|
|
38
|
-
messages: [
|
|
39
|
-
{
|
|
40
|
-
content: '你是一名擅长翻译的助理,你需要将输入的语言翻译为目标语言',
|
|
41
|
-
role: 'system',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
content: `请将以下内容 ${content},翻译为 ${targetLang} `,
|
|
45
|
-
role: 'user',
|
|
46
|
-
},
|
|
47
|
-
],
|
|
48
|
-
});
|
|
49
|
-
export const chainLangDetect = (content: string): Partial<OpenAIChatStreamPayload> => ({
|
|
50
|
-
messages: [
|
|
51
|
-
{
|
|
52
|
-
content:
|
|
53
|
-
'你是一名精通全世界语言的语言专家,你需要识别用户输入的内容,以国际标准 locale 进行输出',
|
|
54
|
-
role: 'system',
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
content: '{你好}',
|
|
58
|
-
role: 'user',
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
content: 'zh-CN',
|
|
62
|
-
role: 'assistant',
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
content: '{hello}',
|
|
66
|
-
role: 'user',
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
content: 'en-US',
|
|
70
|
-
role: 'assistant',
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
content: `{${content}}`,
|
|
74
|
-
role: 'user',
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
});
|