@lobehub/chat 1.19.3 → 1.19.5

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.

Files changed (30) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/next.config.mjs +10 -0
  3. package/package.json +6 -7
  4. package/scripts/buildSitemapIndex/index.ts +12 -0
  5. package/src/app/(main)/discover/(detail)/assistant/[slug]/page.tsx +1 -0
  6. package/src/app/(main)/discover/(detail)/model/[...slugs]/features/ProviderList/ProviderItem.tsx +1 -0
  7. package/src/app/(main)/discover/(detail)/model/[...slugs]/page.tsx +1 -0
  8. package/src/app/(main)/discover/(detail)/plugin/[slug]/page.tsx +1 -0
  9. package/src/app/(main)/discover/(detail)/provider/[slug]/features/ModelList/ModelItem.tsx +1 -0
  10. package/src/app/(main)/discover/(detail)/provider/[slug]/page.tsx +1 -0
  11. package/src/app/(main)/discover/(list)/_layout/Desktop/Nav.tsx +1 -0
  12. package/src/app/(main)/discover/_layout/Desktop/index.tsx +1 -0
  13. package/src/app/page.tsx +1 -1
  14. package/src/app/robots.tsx +16 -0
  15. package/src/app/sitemap.tsx +30 -0
  16. package/src/config/modelProviders/qwen.ts +112 -52
  17. package/src/config/modelProviders/stepfun.ts +8 -0
  18. package/src/const/url.ts +2 -2
  19. package/src/server/ld.test.ts +102 -0
  20. package/src/server/ld.ts +3 -9
  21. package/src/server/metadata.test.ts +138 -0
  22. package/src/server/metadata.ts +3 -3
  23. package/src/server/modules/AssistantStore/index.test.ts +1 -1
  24. package/src/server/modules/AssistantStore/index.ts +2 -6
  25. package/src/server/sitemap.test.ts +179 -0
  26. package/src/server/sitemap.ts +243 -0
  27. package/src/server/translation.test.ts +137 -0
  28. package/src/server/utils/url.test.ts +61 -0
  29. package/src/server/utils/url.ts +9 -0
  30. package/next-sitemap.config.mjs +0 -53
package/CHANGELOG.md CHANGED
@@ -2,6 +2,57 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ### [Version 1.19.5](https://github.com/lobehub/lobe-chat/compare/v1.19.4...v1.19.5)
6
+
7
+ <sup>Released on **2024-09-19**</sup>
8
+
9
+ #### 💄 Styles
10
+
11
+ - **misc**: Enable functioncall for stepfun models, Update qwen models.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### Styles
19
+
20
+ - **misc**: Enable functioncall for stepfun models, closes [#4022](https://github.com/lobehub/lobe-chat/issues/4022) ([afb3509](https://github.com/lobehub/lobe-chat/commit/afb3509))
21
+ - **misc**: Update qwen models, closes [#4026](https://github.com/lobehub/lobe-chat/issues/4026) ([6169e8f](https://github.com/lobehub/lobe-chat/commit/6169e8f))
22
+
23
+ </details>
24
+
25
+ <div align="right">
26
+
27
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
28
+
29
+ </div>
30
+
31
+ ### [Version 1.19.4](https://github.com/lobehub/lobe-chat/compare/v1.19.3...v1.19.4)
32
+
33
+ <sup>Released on **2024-09-19**</sup>
34
+
35
+ #### ♻ Code Refactoring
36
+
37
+ - **misc**: Refactor the sitemap implement.
38
+
39
+ <br/>
40
+
41
+ <details>
42
+ <summary><kbd>Improvements and Fixes</kbd></summary>
43
+
44
+ #### Code refactoring
45
+
46
+ - **misc**: Refactor the sitemap implement, closes [#4012](https://github.com/lobehub/lobe-chat/issues/4012) ([d93a161](https://github.com/lobehub/lobe-chat/commit/d93a161))
47
+
48
+ </details>
49
+
50
+ <div align="right">
51
+
52
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
53
+
54
+ </div>
55
+
5
56
  ### [Version 1.19.3](https://github.com/lobehub/lobe-chat/compare/v1.19.2...v1.19.3)
6
57
 
7
58
  <sup>Released on **2024-09-19**</sup>
package/next.config.mjs CHANGED
@@ -107,6 +107,16 @@ const nextConfig = {
107
107
  output: buildWithDocker ? 'standalone' : undefined,
108
108
  reactStrictMode: true,
109
109
  redirects: async () => [
110
+ {
111
+ destination: '/sitemap-index.xml',
112
+ permanent: true,
113
+ source: '/sitemap.xml',
114
+ },
115
+ {
116
+ destination: '/discover',
117
+ permanent: true,
118
+ source: '/market',
119
+ },
110
120
  {
111
121
  destination: '/settings/common',
112
122
  permanent: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.19.3",
3
+ "version": "1.19.5",
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",
@@ -29,11 +29,11 @@
29
29
  "build": "next build",
30
30
  "postbuild": "npm run build-sitemap && npm run build-migrate-db",
31
31
  "build-migrate-db": "bun run db:migrate",
32
- "build-sitemap": "next-sitemap --config next-sitemap.config.mjs",
32
+ "build-sitemap": "tsx ./scripts/buildSitemapIndex/index.ts",
33
33
  "build:analyze": "ANALYZE=true next build",
34
34
  "build:docker": "DOCKER=true next build && npm run build-sitemap",
35
35
  "db:generate": "drizzle-kit generate",
36
- "db:migrate": "MIGRATION_DB=1 tsx scripts/migrateServerDB/index.ts",
36
+ "db:migrate": "MIGRATION_DB=1 tsx ./scripts/migrateServerDB/index.ts",
37
37
  "db:push": "drizzle-kit push",
38
38
  "db:push-test": "NODE_ENV=test drizzle-kit push",
39
39
  "db:studio": "drizzle-kit studio",
@@ -65,11 +65,11 @@
65
65
  "test:update": "vitest -u",
66
66
  "type-check": "tsc --noEmit",
67
67
  "webhook:ngrok": "ngrok http http://localhost:3011",
68
- "workflow:docs": "tsx scripts/docsWorkflow/index.ts",
69
- "workflow:i18n": "tsx scripts/i18nWorkflow/index.ts",
68
+ "workflow:docs": "tsx ./scripts/docsWorkflow/index.ts",
69
+ "workflow:i18n": "tsx ./scripts/i18nWorkflow/index.ts",
70
70
  "workflow:mdx": "tsx ./scripts/mdxWorkflow/index.ts",
71
71
  "workflow:mdx-with-lint": "tsx ./scripts/mdxWorkflow/index.ts && eslint \"docs/**/*.mdx\" --quiet --fix",
72
- "workflow:readme": "tsx scripts/readmeWorkflow/index.ts"
72
+ "workflow:readme": "tsx ./scripts/readmeWorkflow/index.ts"
73
73
  },
74
74
  "lint-staged": {
75
75
  "*.md": [
@@ -172,7 +172,6 @@
172
172
  "next": "14.2.8",
173
173
  "next-auth": "beta",
174
174
  "next-mdx-remote": "^4.4.1",
175
- "next-sitemap": "^4.2.3",
176
175
  "nextjs-toploader": "^3.6.15",
177
176
  "numeral": "^2.0.6",
178
177
  "nuqs": "^1.17.8",
@@ -0,0 +1,12 @@
1
+ import { writeFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+
4
+ import { sitemapModule } from '@/server/sitemap';
5
+
6
+ const genSitemap = () => {
7
+ const sitemapIndexXML = sitemapModule.getIndex();
8
+ const filename = resolve(__dirname, '../../', 'public', 'sitemap-index.xml');
9
+ writeFileSync(filename, sitemapIndexXML);
10
+ };
11
+
12
+ genSitemap();
@@ -105,6 +105,7 @@ const Page = async ({ params, searchParams }: Props) => {
105
105
  />
106
106
  }
107
107
  /* ↓ cloud slot ↓ */
108
+
108
109
  /* ↑ cloud slot ↑ */
109
110
  >
110
111
  <Temp data={data} identifier={identifier} />
@@ -67,6 +67,7 @@ const ProviderItem = memo<ProviderItemProps>(({ mobile, modelId, identifier }) =
67
67
  : '--',
68
68
  },
69
69
  /* ↓ cloud slot ↓ */
70
+
70
71
  /* ↑ cloud slot ↑ */
71
72
  ];
72
73
 
@@ -100,6 +100,7 @@ const Page = async ({ params, searchParams }: Props) => {
100
100
  mobile={mobile}
101
101
  sidebar={<InfoSidebar data={data} identifier={identifier} mobile={mobile} />}
102
102
  /* ↓ cloud slot ↓ */
103
+
103
104
  /* ↑ cloud slot ↑ */
104
105
  >
105
106
  <ProviderList data={providerData} identifier={identifier} mobile={mobile} />
@@ -89,6 +89,7 @@ const Page = async ({ params, searchParams }: Props) => {
89
89
  mobile={mobile}
90
90
  sidebar={<InfoSidebar data={data} identifier={identifier} mobile={mobile} />}
91
91
  /* ↓ cloud slot ↓ */
92
+
92
93
  /* ↑ cloud slot ↑ */
93
94
  >
94
95
  <ParameterList data={data} />
@@ -79,6 +79,7 @@ const ModelItem = memo<SuggestionItemProps>(({ mobile, meta, identifier }) => {
79
79
  : '--',
80
80
  },
81
81
  /* ↓ cloud slot ↓ */
82
+
82
83
  /* ↑ cloud slot ↑ */
83
84
  ];
84
85
 
@@ -102,6 +102,7 @@ const Page = async ({ params, searchParams }: Props) => {
102
102
  mobile={mobile}
103
103
  sidebar={<InfoSidebar data={data} identifier={identifier} />}
104
104
  /* ↓ cloud slot ↓ */
105
+
105
106
  /* ↑ cloud slot ↑ */
106
107
  >
107
108
  <ModelList identifier={identifier} mobile={mobile} modelData={modelData} />
@@ -108,6 +108,7 @@ const Nav = memo(() => {
108
108
  {!isHome && !isProviders && (
109
109
  <Flexbox align={'center'} gap={4} horizontal>
110
110
  {/* ↓ cloud slot ↓ */}
111
+
111
112
  {/* ↑ cloud slot ↑ */}
112
113
  </Flexbox>
113
114
  )}
@@ -14,6 +14,7 @@ const Layout = ({ children }: PropsWithChildren) => {
14
14
  {children}
15
15
  </Flexbox>
16
16
  {/* ↓ cloud slot ↓ */}
17
+
17
18
  {/* ↑ cloud slot ↑ */}
18
19
  </>
19
20
  );
package/src/app/page.tsx CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Metadata } from 'next';
2
2
 
3
- import { getCanonicalUrl } from '@/const/url';
3
+ import { getCanonicalUrl } from '@/server/utils/url';
4
4
 
5
5
  import Client from './(loading)/Client';
6
6
  import Redirect from './(loading)/Redirect';
@@ -0,0 +1,16 @@
1
+ import { MetadataRoute } from 'next';
2
+
3
+ import { sitemapModule } from '@/server/sitemap';
4
+ import { getCanonicalUrl } from '@/server/utils/url';
5
+
6
+ export default function robots(): MetadataRoute.Robots {
7
+ return {
8
+ host: getCanonicalUrl(),
9
+ rules: {
10
+ allow: ['/'],
11
+ disallow: ['/api/*'],
12
+ userAgent: '*',
13
+ },
14
+ sitemap: sitemapModule.getRobots(),
15
+ };
16
+ }
@@ -0,0 +1,30 @@
1
+ import { MetadataRoute } from 'next';
2
+
3
+ import { SitemapType, sitemapModule } from '@/server/sitemap';
4
+
5
+ export const generateSitemaps = async () => {
6
+ // Fetch the total number of products and calculate the number of sitemaps needed
7
+ return sitemapModule.sitemapIndexs;
8
+ };
9
+
10
+ const Sitemap = async ({ id }: { id: SitemapType }): Promise<MetadataRoute.Sitemap> => {
11
+ switch (id) {
12
+ case SitemapType.Pages: {
13
+ return sitemapModule.getPage();
14
+ }
15
+ case SitemapType.Assistants: {
16
+ return sitemapModule.getAssistants();
17
+ }
18
+ case SitemapType.Plugins: {
19
+ return sitemapModule.getPlugins();
20
+ }
21
+ case SitemapType.Models: {
22
+ return sitemapModule.getModels();
23
+ }
24
+ case SitemapType.Providers: {
25
+ return sitemapModule.getProviders();
26
+ }
27
+ }
28
+ };
29
+
30
+ export default Sitemap;
@@ -1,22 +1,10 @@
1
1
  import { ModelProviderCard } from '@/types/llm';
2
2
 
3
- // ref :https://help.aliyun.com/zh/dashscope/developer-reference/api-details
3
+ // ref: https://help.aliyun.com/zh/model-studio/getting-started/models
4
4
  const Qwen: ModelProviderCard = {
5
5
  chatModels: [
6
6
  {
7
- description:
8
- '通义千问超大规模语言模型,支持长文本上下文,以及基于长文档、多文档等多个场景的对话功能。',
9
- displayName: 'Qwen Long',
10
- id: 'qwen-long',
11
- pricing: {
12
- currency: 'CNY',
13
- input: 0.5,
14
- output: 2,
15
- },
16
- tokens: 1_000_000, // https://help.aliyun.com/zh/dashscope/developer-reference/model-introduction
17
- },
18
- {
19
- description: '通义千问超大规模语言模型,支持中文、英文等不同语言输入',
7
+ description: '通义千问超大规模语言模型,支持中文、英文等不同语言输入。',
20
8
  displayName: 'Qwen Turbo',
21
9
  enabled: true,
22
10
  functionCall: true,
@@ -26,10 +14,10 @@ const Qwen: ModelProviderCard = {
26
14
  input: 0.3,
27
15
  output: 0.6,
28
16
  },
29
- tokens: 131_072, // https://help.aliyun.com/zh/dashscope/developer-reference/model-introduction
17
+ tokens: 131_072,
30
18
  },
31
19
  {
32
- description: '通义千问超大规模语言模型增强版,支持中文、英文等不同语言输入',
20
+ description: '通义千问超大规模语言模型增强版,支持中文、英文等不同语言输入。',
33
21
  displayName: 'Qwen Plus',
34
22
  enabled: true,
35
23
  functionCall: true,
@@ -39,11 +27,11 @@ const Qwen: ModelProviderCard = {
39
27
  input: 0.8,
40
28
  output: 2,
41
29
  },
42
- tokens: 131_072, // https://help.aliyun.com/zh/dashscope/developer-reference/model-introduction
30
+ tokens: 131_072,
43
31
  },
44
32
  {
45
33
  description:
46
- '通义千问千亿级别超大规模语言模型,支持中文、英文等不同语言输入,当前通义千问2.5产品版本背后的API模型',
34
+ '通义千问千亿级别超大规模语言模型,支持中文、英文等不同语言输入,当前通义千问2.5产品版本背后的API模型。',
47
35
  displayName: 'Qwen Max',
48
36
  enabled: true,
49
37
  functionCall: true,
@@ -53,7 +41,30 @@ const Qwen: ModelProviderCard = {
53
41
  input: 20,
54
42
  output: 60,
55
43
  },
56
- tokens: 32_768, // https://help.aliyun.com/zh/dashscope/developer-reference/model-introduction
44
+ tokens: 32_768,
45
+ },
46
+ {
47
+ description: '通义千问代码模型。',
48
+ displayName: 'Qwen Coder',
49
+ id: 'qwen-coder-turbo-latest',
50
+ pricing: {
51
+ currency: 'CNY',
52
+ input: 2,
53
+ output: 6,
54
+ },
55
+ tokens: 131_072,
56
+ },
57
+ {
58
+ description:
59
+ '通义千问超大规模语言模型,支持长文本上下文,以及基于长文档、多文档等多个场景的对话功能。',
60
+ displayName: 'Qwen Long',
61
+ id: 'qwen-long',
62
+ pricing: {
63
+ currency: 'CNY',
64
+ input: 0.5,
65
+ output: 2,
66
+ },
67
+ tokens: 1_000_000,
57
68
  },
58
69
  {
59
70
  description:
@@ -66,8 +77,8 @@ const Qwen: ModelProviderCard = {
66
77
  input: 8,
67
78
  output: 8,
68
79
  },
69
- tokens: 8192,
70
- vision: true, // https://help.aliyun.com/zh/dashscope/developer-reference/tongyi-qianwen-vl-plus-api
80
+ tokens: 8000,
81
+ vision: true,
71
82
  },
72
83
  {
73
84
  description:
@@ -80,71 +91,120 @@ const Qwen: ModelProviderCard = {
80
91
  input: 20,
81
92
  output: 20,
82
93
  },
83
- tokens: 32_768,
84
- vision: true, // https://help.aliyun.com/zh/dashscope/developer-reference/tongyi-qianwen-vl-plus-api
94
+ tokens: 32_000,
95
+ vision: true,
85
96
  },
86
- // ref :https://help.aliyun.com/zh/dashscope/developer-reference/tongyi-qianwen-7b-14b-72b-api-detailes
87
97
  {
88
- description: '通义千问2.5对外开源的7B规模的模型',
98
+ description:
99
+ '通义千问数学模型是专门用于数学解题的语言模型。',
100
+ displayName: 'Qwen Math Turbo',
101
+ id: 'qwen-math-turbo-latest',
102
+ pricing: {
103
+ currency: 'CNY',
104
+ input: 2,
105
+ output: 6,
106
+ },
107
+ tokens: 4096,
108
+ },
109
+ {
110
+ description:
111
+ '通义千问数学模型是专门用于数学解题的语言模型。',
112
+ displayName: 'Qwen Math Plus',
113
+ id: 'qwen-math-plus-latest',
114
+ pricing: {
115
+ currency: 'CNY',
116
+ input: 4,
117
+ output: 12,
118
+ },
119
+ tokens: 4096,
120
+ },
121
+ {
122
+ description: '通义千问2.5对外开源的7B规模的模型。',
89
123
  displayName: 'Qwen2.5 7B',
90
124
  functionCall: true,
91
125
  id: 'qwen2.5-7b-instruct',
92
- tokens: 131_072, // https://huggingface.co/Qwen/Qwen2.5-7B-Instruct
126
+ tokens: 131_072,
127
+ },
128
+ {
129
+ description: '通义千问2.5对外开源的14B规模的模型。',
130
+ displayName: 'Qwen2.5 14B',
131
+ functionCall: true,
132
+ id: 'qwen2.5-14b-instruct',
133
+ tokens: 131_072,
93
134
  },
94
135
  {
95
- description: '通义千问2.5对外开源的32B规模的模型',
136
+ description: '通义千问2.5对外开源的32B规模的模型。',
96
137
  displayName: 'Qwen2.5 32B',
97
138
  functionCall: true,
98
139
  id: 'qwen2.5-32b-instruct',
99
- tokens: 131_072, // https://huggingface.co/Qwen/Qwen2.5-32B-Instruct
140
+ tokens: 131_072,
100
141
  },
101
142
  {
102
- description: '通义千问2.5对外开源的72B规模的模型',
143
+ description: '通义千问2.5对外开源的72B规模的模型。',
103
144
  displayName: 'Qwen2.5 72B',
104
145
  functionCall: true,
105
146
  id: 'qwen2.5-72b-instruct',
106
- tokens: 131_072, // https://huggingface.co/Qwen/Qwen2.5-72B-Instruct
147
+ tokens: 131_072,
107
148
  },
108
149
  {
109
- description: '通义千问2对外开源的7B规模的模型',
110
- displayName: 'Qwen2 7B',
111
- functionCall: true,
112
- id: 'qwen2-7b-instruct',
113
- tokens: 131_072, // https://huggingface.co/Qwen/Qwen2-7B-Instruct
114
- },
115
- {
116
- description: '通义千问2对外开源的57B规模14B激活参数的MOE模型',
150
+ description: '通义千问2对外开源的57B规模14B激活参数的MOE模型。',
117
151
  displayName: 'Qwen2 57B A14B MoE',
118
152
  functionCall: true,
119
153
  id: 'qwen2-57b-a14b-instruct',
120
- tokens: 65_536, // https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct
154
+ tokens: 65_536,
121
155
  },
122
156
  {
123
- description: '通义千问2对外开源的72B规模的模型',
124
- displayName: 'Qwen2 72B',
125
- functionCall: true,
126
- id: 'qwen2-72b-instruct',
127
- tokens: 131_072, // https://huggingface.co/Qwen/Qwen2-72B-Instruct
157
+ description: 'Qwen-Math 模型具有强大的数学解题能力。',
158
+ displayName: 'Qwen2.5 Math 1.5B',
159
+ id: 'qwen2.5-math-1.5b-instruct',
160
+ pricing: {
161
+ currency: 'CNY',
162
+ input: 0,
163
+ output: 0,
164
+ },
165
+ tokens: 4096,
128
166
  },
129
167
  {
130
- description: 'Qwen2-Math 模型具有强大的数学解题能力',
131
- displayName: 'Qwen2 Math 72B',
132
- functionCall: true,
133
- id: 'qwen2-math-72b-instruct',
134
- tokens: 4096, // https://help.aliyun.com/zh/dashscope/developer-reference/use-qwen2-math-by-calling-api
168
+ description: 'Qwen-Math 模型具有强大的数学解题能力。',
169
+ displayName: 'Qwen2.5 Math 7B',
170
+ id: 'qwen2.5-math-7b-instruct',
171
+ tokens: 4096,
172
+ },
173
+ {
174
+ description: 'Qwen-Math 模型具有强大的数学解题能力。',
175
+ displayName: 'Qwen2.5 Math 72B',
176
+ id: 'qwen2.5-math-72b-instruct',
177
+ tokens: 4096,
178
+ },
179
+ {
180
+ description: '通义千问代码模型开源版。',
181
+ displayName: 'Qwen2.5 Coder 1.5B',
182
+ id: 'qwen2.5-coder-1.5b-instruct',
183
+ pricing: {
184
+ currency: 'CNY',
185
+ input: 0,
186
+ output: 0,
187
+ },
188
+ tokens: 131_072,
189
+ },
190
+ {
191
+ description: '通义千问代码模型开源版。',
192
+ displayName: 'Qwen2.5 Coder 7B',
193
+ id: 'qwen2.5-coder-7b-instruct',
194
+ tokens: 131_072,
135
195
  },
136
196
  {
137
197
  description: '以 Qwen-7B 语言模型初始化,添加图像模型,图像输入分辨率为448的预训练模型。',
138
198
  displayName: 'Qwen VL',
139
199
  id: 'qwen-vl-v1',
140
- tokens: 8192, // https://huggingface.co/Qwen/Qwen-VL/blob/main/config.json
200
+ tokens: 8000,
141
201
  vision: true,
142
202
  },
143
203
  {
144
204
  description: '通义千问VL支持灵活的交互方式,包括多图、多轮问答、创作等能力的模型。',
145
205
  displayName: 'Qwen VL Chat',
146
206
  id: 'qwen-vl-chat-v1',
147
- tokens: 8192, // https://huggingface.co/Qwen/Qwen-VL-Chat/blob/main/config.json
207
+ tokens: 8000,
148
208
  vision: true,
149
209
  },
150
210
  ],
@@ -160,7 +220,7 @@ const Qwen: ModelProviderCard = {
160
220
  speed: 2,
161
221
  text: true,
162
222
  },
163
- url: 'https://tongyi.aliyun.com',
223
+ url: 'https://www.aliyun.com/product/bailian',
164
224
  };
165
225
 
166
226
  export default Qwen;
@@ -8,12 +8,14 @@ const Stepfun: ModelProviderCard = {
8
8
  description: '支持大规模上下文交互,适合复杂对话场景。',
9
9
  displayName: 'Step 2 16K',
10
10
  enabled: true,
11
+ functionCall: true,
11
12
  id: 'step-2-16k',
12
13
  tokens: 16_000,
13
14
  },
14
15
  {
15
16
  description: '具备超长上下文处理能力,尤其适合长文档分析。',
16
17
  displayName: 'Step 1 256K',
18
+ functionCall: true,
17
19
  id: 'step-1-256k',
18
20
  tokens: 256_000,
19
21
  },
@@ -21,6 +23,7 @@ const Stepfun: ModelProviderCard = {
21
23
  description: '平衡性能与成本,适合一般场景。',
22
24
  displayName: 'Step 1 128K',
23
25
  enabled: true,
26
+ functionCall: true,
24
27
  id: 'step-1-128k',
25
28
  tokens: 128_000,
26
29
  },
@@ -28,6 +31,7 @@ const Stepfun: ModelProviderCard = {
28
31
  description: '支持中等长度的对话,适用于多种应用场景。',
29
32
  displayName: 'Step 1 32K',
30
33
  enabled: true,
34
+ functionCall: true,
31
35
  id: 'step-1-32k',
32
36
  tokens: 32_000,
33
37
  },
@@ -35,6 +39,7 @@ const Stepfun: ModelProviderCard = {
35
39
  description: '小型模型,适合轻量级任务。',
36
40
  displayName: 'Step 1 8K',
37
41
  enabled: true,
42
+ functionCall: true,
38
43
  id: 'step-1-8k',
39
44
  tokens: 8000,
40
45
  },
@@ -42,6 +47,7 @@ const Stepfun: ModelProviderCard = {
42
47
  description: '高速模型,适合实时对话。',
43
48
  displayName: 'Step 1 Flash',
44
49
  enabled: true,
50
+ functionCall: true,
45
51
  id: 'step-1-flash',
46
52
  tokens: 8000,
47
53
  },
@@ -49,6 +55,7 @@ const Stepfun: ModelProviderCard = {
49
55
  description: '支持视觉输入,增强多模态交互体验。',
50
56
  displayName: 'Step 1V 32K',
51
57
  enabled: true,
58
+ functionCall: true,
52
59
  id: 'step-1v-32k',
53
60
  tokens: 32_000,
54
61
  vision: true,
@@ -57,6 +64,7 @@ const Stepfun: ModelProviderCard = {
57
64
  description: '小型视觉模型,适合基本的图文任务。',
58
65
  displayName: 'Step 1V 8K',
59
66
  enabled: true,
67
+ functionCall: true,
60
68
  id: 'step-1v-8k',
61
69
  tokens: 8000,
62
70
  vision: true,
package/src/const/url.ts CHANGED
@@ -2,6 +2,7 @@ import qs from 'query-string';
2
2
  import urlJoin from 'url-join';
3
3
 
4
4
  import { withBasePath } from '@/utils/basePath';
5
+ import { isDev } from '@/utils/env';
5
6
 
6
7
  import pkg from '../../package.json';
7
8
  import { INBOX_SESSION_ID } from './session';
@@ -12,8 +13,6 @@ export const OFFICIAL_URL = 'https://lobechat.com/';
12
13
  export const OFFICIAL_PREVIEW_URL = 'https://chat-preview.lobehub.com/';
13
14
  export const OFFICIAL_SITE = 'https://lobehub.com/';
14
15
 
15
- export const getCanonicalUrl = (path: string) => urlJoin(OFFICIAL_URL, path);
16
-
17
16
  export const OG_URL = '/og/cover.png?v=1';
18
17
 
19
18
  export const GITHUB = pkg.homepage;
@@ -73,3 +72,4 @@ export const mailTo = (email: string) => `mailto:${email}`;
73
72
 
74
73
  export const AES_GCM_URL = 'https://datatracker.ietf.org/doc/html/draft-ietf-avt-srtp-aes-gcm-01';
75
74
  export const BASE_PROVIDER_DOC_URL = 'https://lobehub.com/docs/usage/providers';
75
+ export const SITEMAP_BASE_URL = isDev ? '/sitemap.xml/' : 'sitemap';