@lobehub/chat 1.84.23 → 1.84.25
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 +50 -0
- package/apps/desktop/src/main/controllers/__tests__/BrowserWindowsCtr.test.ts +195 -0
- package/apps/desktop/src/main/controllers/__tests__/DevtoolsCtr.test.ts +44 -0
- package/apps/desktop/src/main/controllers/__tests__/MenuCtr.test.ts +82 -0
- package/apps/desktop/src/main/controllers/__tests__/ShortcutCtr.test.ts +64 -0
- package/apps/desktop/src/main/controllers/__tests__/TrayMenuCtr.test.ts +256 -0
- package/apps/desktop/src/main/controllers/__tests__/UpdaterCtr.test.ts +82 -0
- package/apps/desktop/src/main/services/fileSrv.ts +49 -10
- package/apps/desktop/vitest.config.ts +17 -0
- package/changelog/v1.json +18 -0
- package/locales/ar/hotkey.json +4 -0
- package/locales/ar/models.json +55 -13
- package/locales/ar/providers.json +0 -3
- package/locales/bg-BG/hotkey.json +4 -0
- package/locales/bg-BG/models.json +55 -13
- package/locales/bg-BG/providers.json +0 -3
- package/locales/de-DE/hotkey.json +4 -0
- package/locales/de-DE/models.json +55 -13
- package/locales/de-DE/providers.json +0 -3
- package/locales/en-US/hotkey.json +4 -0
- package/locales/en-US/models.json +55 -13
- package/locales/en-US/providers.json +0 -3
- package/locales/es-ES/hotkey.json +4 -0
- package/locales/es-ES/models.json +55 -13
- package/locales/es-ES/providers.json +0 -3
- package/locales/fa-IR/hotkey.json +4 -0
- package/locales/fa-IR/models.json +55 -13
- package/locales/fa-IR/providers.json +0 -3
- package/locales/fr-FR/hotkey.json +4 -0
- package/locales/fr-FR/models.json +55 -13
- package/locales/fr-FR/providers.json +0 -3
- package/locales/it-IT/hotkey.json +4 -0
- package/locales/it-IT/models.json +55 -13
- package/locales/it-IT/providers.json +0 -3
- package/locales/ja-JP/hotkey.json +4 -0
- package/locales/ja-JP/models.json +55 -13
- package/locales/ja-JP/providers.json +0 -3
- package/locales/ko-KR/hotkey.json +4 -0
- package/locales/ko-KR/models.json +55 -13
- package/locales/ko-KR/providers.json +0 -3
- package/locales/nl-NL/hotkey.json +4 -0
- package/locales/nl-NL/models.json +55 -13
- package/locales/nl-NL/providers.json +0 -3
- package/locales/pl-PL/hotkey.json +4 -0
- package/locales/pl-PL/models.json +55 -13
- package/locales/pl-PL/providers.json +0 -3
- package/locales/pt-BR/hotkey.json +4 -0
- package/locales/pt-BR/models.json +55 -13
- package/locales/pt-BR/providers.json +0 -3
- package/locales/ru-RU/hotkey.json +4 -0
- package/locales/ru-RU/models.json +55 -13
- package/locales/ru-RU/providers.json +0 -3
- package/locales/tr-TR/hotkey.json +4 -0
- package/locales/tr-TR/models.json +55 -13
- package/locales/tr-TR/providers.json +0 -3
- package/locales/vi-VN/hotkey.json +4 -0
- package/locales/vi-VN/models.json +55 -13
- package/locales/vi-VN/providers.json +0 -3
- package/locales/zh-CN/hotkey.json +4 -0
- package/locales/zh-CN/models.json +55 -13
- package/locales/zh-CN/providers.json +0 -3
- package/locales/zh-TW/hotkey.json +4 -0
- package/locales/zh-TW/models.json +55 -13
- package/locales/zh-TW/providers.json +0 -3
- package/package.json +1 -1
- package/packages/electron-server-ipc/package.json +3 -0
- package/packages/electron-server-ipc/src/ipcClient.ts +58 -21
- package/packages/electron-server-ipc/src/ipcServer.test.ts +417 -0
- package/packages/electron-server-ipc/src/ipcServer.ts +21 -16
- package/src/const/hotkeys.ts +7 -0
- package/src/const/url.ts +1 -1
- package/src/features/User/UserPanel/useMenu.tsx +2 -1
- package/src/locales/default/hotkey.ts +4 -0
- package/src/services/__tests__/_url.test.ts +23 -0
- package/src/types/hotkey.ts +1 -0
- package/vitest.config.ts +3 -2
@@ -0,0 +1,82 @@
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
2
|
+
|
3
|
+
import type { App } from '@/core/App';
|
4
|
+
|
5
|
+
// 模拟 logger
|
6
|
+
vi.mock('@/utils/logger', () => ({
|
7
|
+
createLogger: () => ({
|
8
|
+
info: vi.fn(),
|
9
|
+
}),
|
10
|
+
}));
|
11
|
+
|
12
|
+
import UpdaterCtr from '../UpdaterCtr';
|
13
|
+
|
14
|
+
// 模拟 App 及其依赖项
|
15
|
+
const mockCheckForUpdates = vi.fn();
|
16
|
+
const mockDownloadUpdate = vi.fn();
|
17
|
+
const mockInstallNow = vi.fn();
|
18
|
+
const mockInstallLater = vi.fn();
|
19
|
+
|
20
|
+
const mockApp = {
|
21
|
+
updaterManager: {
|
22
|
+
checkForUpdates: mockCheckForUpdates,
|
23
|
+
downloadUpdate: mockDownloadUpdate,
|
24
|
+
installNow: mockInstallNow,
|
25
|
+
installLater: mockInstallLater,
|
26
|
+
},
|
27
|
+
} as unknown as App;
|
28
|
+
|
29
|
+
describe('UpdaterCtr', () => {
|
30
|
+
let updaterCtr: UpdaterCtr;
|
31
|
+
|
32
|
+
beforeEach(() => {
|
33
|
+
vi.clearAllMocks();
|
34
|
+
updaterCtr = new UpdaterCtr(mockApp);
|
35
|
+
});
|
36
|
+
|
37
|
+
describe('checkForUpdates', () => {
|
38
|
+
it('should call updaterManager.checkForUpdates', async () => {
|
39
|
+
await updaterCtr.checkForUpdates();
|
40
|
+
expect(mockCheckForUpdates).toHaveBeenCalled();
|
41
|
+
});
|
42
|
+
});
|
43
|
+
|
44
|
+
describe('downloadUpdate', () => {
|
45
|
+
it('should call updaterManager.downloadUpdate', async () => {
|
46
|
+
await updaterCtr.downloadUpdate();
|
47
|
+
expect(mockDownloadUpdate).toHaveBeenCalled();
|
48
|
+
});
|
49
|
+
});
|
50
|
+
|
51
|
+
describe('quitAndInstallUpdate', () => {
|
52
|
+
it('should call updaterManager.installNow', () => {
|
53
|
+
updaterCtr.quitAndInstallUpdate();
|
54
|
+
expect(mockInstallNow).toHaveBeenCalled();
|
55
|
+
});
|
56
|
+
});
|
57
|
+
|
58
|
+
describe('installLater', () => {
|
59
|
+
it('should call updaterManager.installLater', () => {
|
60
|
+
updaterCtr.installLater();
|
61
|
+
expect(mockInstallLater).toHaveBeenCalled();
|
62
|
+
});
|
63
|
+
});
|
64
|
+
|
65
|
+
// 测试错误处理
|
66
|
+
describe('error handling', () => {
|
67
|
+
it('should handle errors when checking for updates', async () => {
|
68
|
+
const error = new Error('Network error');
|
69
|
+
mockCheckForUpdates.mockRejectedValueOnce(error);
|
70
|
+
|
71
|
+
// 由于控制器并未明确处理并返回错误,这里我们只验证调用发生且错误正确冒泡
|
72
|
+
await expect(updaterCtr.checkForUpdates()).rejects.toThrow(error);
|
73
|
+
});
|
74
|
+
|
75
|
+
it('should handle errors when downloading updates', async () => {
|
76
|
+
const error = new Error('Download failed');
|
77
|
+
mockDownloadUpdate.mockRejectedValueOnce(error);
|
78
|
+
|
79
|
+
await expect(updaterCtr.downloadUpdate()).rejects.toThrow(error);
|
80
|
+
});
|
81
|
+
});
|
82
|
+
});
|
@@ -6,12 +6,16 @@ import { promisify } from 'node:util';
|
|
6
6
|
|
7
7
|
import { FILE_STORAGE_DIR } from '@/const/dir';
|
8
8
|
import { makeSureDirExist } from '@/utils/file-system';
|
9
|
+
import { createLogger } from '@/utils/logger';
|
9
10
|
|
10
11
|
import { ServiceModule } from './index';
|
11
12
|
|
12
13
|
const readFilePromise = promisify(fs.readFile);
|
13
14
|
const unlinkPromise = promisify(fs.unlink);
|
14
15
|
|
16
|
+
// Create logger
|
17
|
+
const logger = createLogger('services:FileService');
|
18
|
+
|
15
19
|
interface UploadFileParams {
|
16
20
|
content: ArrayBuffer;
|
17
21
|
filename: string;
|
@@ -35,8 +39,10 @@ export default class FileService extends ServiceModule {
|
|
35
39
|
constructor(app) {
|
36
40
|
super(app);
|
37
41
|
|
38
|
-
//
|
42
|
+
// Initialize file storage directory
|
43
|
+
logger.info('Initializing file storage directory');
|
39
44
|
makeSureDirExist(this.UPLOADS_DIR);
|
45
|
+
logger.debug(`Upload directory created: ${this.UPLOADS_DIR}`);
|
40
46
|
}
|
41
47
|
|
42
48
|
/**
|
@@ -48,19 +54,23 @@ export default class FileService extends ServiceModule {
|
|
48
54
|
hash,
|
49
55
|
type,
|
50
56
|
}: UploadFileParams): Promise<{ metadata: FileMetadata; success: boolean }> {
|
57
|
+
logger.info(`Starting to upload file: ${filename}, hash: ${hash}`);
|
51
58
|
try {
|
52
59
|
// 创建时间戳目录
|
53
60
|
const date = (Date.now() / 1000 / 60 / 60).toFixed(0);
|
54
61
|
const dirname = join(this.UPLOADS_DIR, date);
|
62
|
+
logger.debug(`Creating timestamp directory: ${dirname}`);
|
55
63
|
makeSureDirExist(dirname);
|
56
64
|
|
57
65
|
// 生成文件保存路径
|
58
66
|
const fileExt = filename.split('.').pop() || '';
|
59
67
|
const savedFilename = `${hash}${fileExt ? `.${fileExt}` : ''}`;
|
60
68
|
const savedPath = join(dirname, savedFilename);
|
69
|
+
logger.debug(`Generated file save path: ${savedPath}`);
|
61
70
|
|
62
71
|
// 写入文件内容
|
63
72
|
const buffer = Buffer.from(content);
|
73
|
+
logger.debug(`Writing file content, size: ${buffer.length} bytes`);
|
64
74
|
await writeFile(savedPath, buffer);
|
65
75
|
|
66
76
|
// 写入元数据文件
|
@@ -72,10 +82,12 @@ export default class FileService extends ServiceModule {
|
|
72
82
|
size: buffer.length,
|
73
83
|
type,
|
74
84
|
};
|
85
|
+
logger.debug(`Writing metadata file: ${metaFilePath}`);
|
75
86
|
await writeFile(metaFilePath, JSON.stringify(metadata, null, 2));
|
76
87
|
|
77
88
|
// 返回与S3兼容的元数据格式
|
78
89
|
const desktopPath = `desktop://${date}/${savedFilename}`;
|
90
|
+
logger.info(`File upload successful: ${desktopPath}`);
|
79
91
|
|
80
92
|
return {
|
81
93
|
metadata: {
|
@@ -87,7 +99,7 @@ export default class FileService extends ServiceModule {
|
|
87
99
|
success: true,
|
88
100
|
};
|
89
101
|
} catch (error) {
|
90
|
-
|
102
|
+
logger.error(`File upload failed:`, error);
|
91
103
|
throw new Error(`File upload failed: ${(error as Error).message}`);
|
92
104
|
}
|
93
105
|
}
|
@@ -96,35 +108,41 @@ export default class FileService extends ServiceModule {
|
|
96
108
|
* 获取文件内容
|
97
109
|
*/
|
98
110
|
async getFile(path: string): Promise<{ content: ArrayBuffer; mimeType: string }> {
|
111
|
+
logger.info(`Getting file content: ${path}`);
|
99
112
|
try {
|
100
113
|
// 处理desktop://路径
|
101
114
|
if (!path.startsWith('desktop://')) {
|
115
|
+
logger.error(`Invalid desktop file path: ${path}`);
|
102
116
|
throw new Error(`Invalid desktop file path: ${path}`);
|
103
117
|
}
|
104
118
|
|
105
119
|
// 标准化路径格式
|
106
120
|
// 可能收到的格式: desktop:/12345/file.png 或 desktop://12345/file.png
|
107
121
|
const normalizedPath = path.replace(/^desktop:\/+/, 'desktop://');
|
122
|
+
logger.debug(`Normalized path: ${normalizedPath}`);
|
108
123
|
|
109
124
|
// 解析路径
|
110
125
|
const relativePath = normalizedPath.replace('desktop://', '');
|
111
126
|
const filePath = join(this.UPLOADS_DIR, relativePath);
|
112
|
-
|
113
|
-
console.log('Reading file from:', filePath);
|
127
|
+
logger.debug(`Reading file from path: ${filePath}`);
|
114
128
|
|
115
129
|
// 读取文件内容
|
130
|
+
logger.debug(`Starting to read file content`);
|
116
131
|
const content = await readFilePromise(filePath);
|
132
|
+
logger.debug(`File content read complete, size: ${content.length} bytes`);
|
117
133
|
|
118
134
|
// 读取元数据获取MIME类型
|
119
135
|
const metaFilePath = `${filePath}.meta`;
|
120
136
|
let mimeType = 'application/octet-stream'; // 默认MIME类型
|
137
|
+
logger.debug(`Attempting to read metadata file: ${metaFilePath}`);
|
121
138
|
|
122
139
|
try {
|
123
140
|
const metaContent = await readFilePromise(metaFilePath, 'utf8');
|
124
141
|
const metadata = JSON.parse(metaContent);
|
125
142
|
mimeType = metadata.type || mimeType;
|
143
|
+
logger.debug(`Got MIME type from metadata: ${mimeType}`);
|
126
144
|
} catch (metaError) {
|
127
|
-
|
145
|
+
logger.warn(`Failed to read metadata file: ${(metaError as Error).message}, using default MIME type`);
|
128
146
|
// 如果元数据文件不存在,尝试从文件扩展名猜测MIME类型
|
129
147
|
const ext = path.split('.').pop()?.toLowerCase();
|
130
148
|
if (ext) {
|
@@ -155,15 +173,17 @@ export default class FileService extends ServiceModule {
|
|
155
173
|
break;
|
156
174
|
}
|
157
175
|
}
|
176
|
+
logger.debug(`Set MIME type based on file extension: ${mimeType}`);
|
158
177
|
}
|
159
178
|
}
|
160
179
|
|
180
|
+
logger.info(`File retrieval successful: ${path}`);
|
161
181
|
return {
|
162
182
|
content: content.buffer as ArrayBuffer,
|
163
183
|
mimeType,
|
164
184
|
};
|
165
185
|
} catch (error) {
|
166
|
-
|
186
|
+
logger.error(`File retrieval failed:`, error);
|
167
187
|
throw new Error(`File retrieval failed: ${(error as Error).message}`);
|
168
188
|
}
|
169
189
|
}
|
@@ -172,29 +192,37 @@ export default class FileService extends ServiceModule {
|
|
172
192
|
* 删除文件
|
173
193
|
*/
|
174
194
|
async deleteFile(path: string): Promise<{ success: boolean }> {
|
195
|
+
logger.info(`Deleting file: ${path}`);
|
175
196
|
try {
|
176
197
|
// 处理desktop://路径
|
177
198
|
if (!path.startsWith('desktop://')) {
|
199
|
+
logger.error(`Invalid desktop file path: ${path}`);
|
178
200
|
throw new Error(`Invalid desktop file path: ${path}`);
|
179
201
|
}
|
180
202
|
|
181
203
|
// 解析路径
|
182
204
|
const relativePath = path.replace('desktop://', '');
|
183
205
|
const filePath = join(this.UPLOADS_DIR, relativePath);
|
206
|
+
logger.debug(`File deletion path: ${filePath}`);
|
184
207
|
|
185
208
|
// 删除文件及其元数据
|
209
|
+
logger.debug(`Starting file deletion`);
|
186
210
|
await unlinkPromise(filePath);
|
211
|
+
logger.debug(`File deletion successful`);
|
187
212
|
|
188
213
|
// 尝试删除元数据文件,但不强制要求存在
|
189
214
|
try {
|
215
|
+
logger.debug(`Attempting to delete metadata file`);
|
190
216
|
await unlinkPromise(`${filePath}.meta`);
|
217
|
+
logger.debug(`Metadata file deletion successful`);
|
191
218
|
} catch (error) {
|
192
|
-
|
219
|
+
logger.warn(`Failed to delete metadata file: ${(error as Error).message}`);
|
193
220
|
}
|
194
221
|
|
222
|
+
logger.info(`File deletion operation complete: ${path}`);
|
195
223
|
return { success: true };
|
196
224
|
} catch (error) {
|
197
|
-
|
225
|
+
logger.error(`File deletion failed:`, error);
|
198
226
|
throw new Error(`File deletion failed: ${(error as Error).message}`);
|
199
227
|
}
|
200
228
|
}
|
@@ -203,15 +231,18 @@ export default class FileService extends ServiceModule {
|
|
203
231
|
* 批量删除文件
|
204
232
|
*/
|
205
233
|
async deleteFiles(paths: string[]): Promise<DeleteFilesResponse> {
|
234
|
+
logger.info(`Batch deleting files, count: ${paths.length}`);
|
206
235
|
const errors: { message: string; path: string }[] = [];
|
207
236
|
|
208
237
|
// 并行处理所有删除请求
|
238
|
+
logger.debug(`Starting parallel deletion requests`);
|
209
239
|
const results = await Promise.allSettled(
|
210
240
|
paths.map(async (path) => {
|
211
241
|
try {
|
212
242
|
await this.deleteFile(path);
|
213
243
|
return { path, success: true };
|
214
244
|
} catch (error) {
|
245
|
+
logger.warn(`Failed to delete file: ${path}, error: ${(error as Error).message}`);
|
215
246
|
return {
|
216
247
|
error: (error as Error).message,
|
217
248
|
path,
|
@@ -222,8 +253,10 @@ export default class FileService extends ServiceModule {
|
|
222
253
|
);
|
223
254
|
|
224
255
|
// 处理结果
|
256
|
+
logger.debug(`Processing batch deletion results`);
|
225
257
|
results.forEach((result) => {
|
226
258
|
if (result.status === 'rejected') {
|
259
|
+
logger.error(`Unexpected error: ${result.reason}`);
|
227
260
|
errors.push({
|
228
261
|
message: `Unexpected error: ${result.reason}`,
|
229
262
|
path: 'unknown',
|
@@ -236,20 +269,26 @@ export default class FileService extends ServiceModule {
|
|
236
269
|
}
|
237
270
|
});
|
238
271
|
|
272
|
+
const success = errors.length === 0;
|
273
|
+
logger.info(`Batch deletion operation complete, success: ${success}, error count: ${errors.length}`);
|
239
274
|
return {
|
240
|
-
success
|
275
|
+
success,
|
241
276
|
...(errors.length > 0 && { errors }),
|
242
277
|
};
|
243
278
|
}
|
244
279
|
|
245
280
|
async getFilePath(path: string): Promise<string> {
|
281
|
+
logger.debug(`Getting filesystem path: ${path}`);
|
246
282
|
// 处理desktop://路径
|
247
283
|
if (!path.startsWith('desktop://')) {
|
284
|
+
logger.error(`Invalid desktop file path: ${path}`);
|
248
285
|
throw new Error(`Invalid desktop file path: ${path}`);
|
249
286
|
}
|
250
287
|
|
251
288
|
// 解析路径
|
252
289
|
const relativePath = path.replace('desktop://', '');
|
253
|
-
|
290
|
+
const fullPath = join(this.UPLOADS_DIR, relativePath);
|
291
|
+
logger.debug(`Resolved filesystem path: ${fullPath}`);
|
292
|
+
return fullPath;
|
254
293
|
}
|
255
294
|
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { resolve } from 'node:path';
|
2
|
+
import { defineConfig } from 'vitest/config';
|
3
|
+
|
4
|
+
export default defineConfig({
|
5
|
+
test: {
|
6
|
+
alias: {
|
7
|
+
'@': resolve(__dirname, './src/main'),
|
8
|
+
},
|
9
|
+
coverage: {
|
10
|
+
all: false,
|
11
|
+
provider: 'v8',
|
12
|
+
reporter: ['text', 'json', 'lcov', 'text-summary'],
|
13
|
+
reportsDirectory: './coverage/app',
|
14
|
+
},
|
15
|
+
environment: 'node',
|
16
|
+
},
|
17
|
+
});
|
package/changelog/v1.json
CHANGED
@@ -1,4 +1,22 @@
|
|
1
1
|
[
|
2
|
+
{
|
3
|
+
"children": {
|
4
|
+
"fixes": [
|
5
|
+
"Fix desktop upload image on macOS."
|
6
|
+
]
|
7
|
+
},
|
8
|
+
"date": "2025-05-08",
|
9
|
+
"version": "1.84.25"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"children": {
|
13
|
+
"fixes": [
|
14
|
+
"Fix changelog issue on desktop app."
|
15
|
+
]
|
16
|
+
},
|
17
|
+
"date": "2025-05-08",
|
18
|
+
"version": "1.84.24"
|
19
|
+
},
|
2
20
|
{
|
3
21
|
"children": {
|
4
22
|
"improvements": [
|
package/locales/ar/hotkey.json
CHANGED
@@ -35,6 +35,10 @@
|
|
35
35
|
"desc": "استدعاء مربع البحث الرئيسي في الصفحة الحالية",
|
36
36
|
"title": "بحث"
|
37
37
|
},
|
38
|
+
"showApp": {
|
39
|
+
"desc": "استدعاء نافذة التطبيق الرئيسية بسرعة",
|
40
|
+
"title": "عرض النافذة الرئيسية"
|
41
|
+
},
|
38
42
|
"switchAgent": {
|
39
43
|
"desc": "تبديل المساعد المثبت في الشريط الجانبي عن طريق الضغط على Ctrl مع الأرقام من 0 إلى 9",
|
40
44
|
"title": "تبديل المساعد بسرعة"
|
package/locales/ar/models.json
CHANGED
@@ -71,6 +71,9 @@
|
|
71
71
|
"DeepSeek-V3": {
|
72
72
|
"description": "DeepSeek-V3 هو نموذج MoE تم تطويره ذاتيًا بواسطة شركة DeepSeek. حقق DeepSeek-V3 نتائج تقييم تفوقت على نماذج مفتوحة المصدر الأخرى مثل Qwen2.5-72B و Llama-3.1-405B، وفي الأداء ينافس النماذج المغلقة الرائدة عالميًا مثل GPT-4o و Claude-3.5-Sonnet."
|
73
73
|
},
|
74
|
+
"Doubao-1.5-thinking-pro-m": {
|
75
|
+
"description": "Doubao-1.5 هو نموذج تفكير عميق جديد (نسخة m تأتي مع قدرة استدلال عميق متعددة الوسائط أصلية)، يظهر أداءً بارزًا في مجالات الرياضيات، البرمجة، الاستدلال العلمي، والكتابة الإبداعية، حيث حقق أو اقترب من المستوى الأول في عدة معايير مرموقة مثل AIME 2024، Codeforces، وGPQA. يدعم نافذة سياق تصل إلى 128k، وإخراج يصل إلى 16k."
|
76
|
+
},
|
74
77
|
"Doubao-1.5-vision-pro": {
|
75
78
|
"description": "Doubao-1.5-vision-pro هو نموذج كبير متعدد الوسائط تم ترقيته حديثًا، يدعم التعرف على الصور بدقة غير محدودة ونسب عرض إلى ارتفاع متطرفة، ويعزز قدرات الاستدلال البصري، التعرف على الوثائق، فهم المعلومات التفصيلية، واتباع التعليمات."
|
76
79
|
},
|
@@ -293,6 +296,21 @@
|
|
293
296
|
"Qwen/Qwen2.5-VL-72B-Instruct": {
|
294
297
|
"description": "Qwen2.5-VL هو نموذج اللغة البصرية في سلسلة Qwen2.5. يتميز هذا النموذج بتحسينات كبيرة في جوانب متعددة: قدرة أقوى على الفهم البصري، مع القدرة على التعرف على الأشياء الشائعة وتحليل النصوص والرسوم البيانية والتخطيطات؛ كوسيط بصري يمكنه التفكير وتوجيه استخدام الأدوات ديناميكيًا؛ يدعم فهم مقاطع الفيديو الطويلة التي تزيد عن ساعة واحدة مع القدرة على التقاط الأحداث الرئيسية؛ يمكنه تحديد موقع الأشياء في الصور بدقة من خلال إنشاء مربعات حدودية أو نقاط؛ يدعم إنشاء مخرجات منظمة، وهو مفيد بشكل خاص للبيانات الممسوحة ضوئيًا مثل الفواتير والجداول."
|
295
298
|
},
|
299
|
+
"Qwen/Qwen3-14B": {
|
300
|
+
"description": "Qwen3 هو نموذج جديد من الجيل التالي مع تحسينات كبيرة في القدرات، حيث يصل إلى مستويات رائدة في الاستدلال، المهام العامة، الوكلاء، واللغات المتعددة، ويدعم تبديل وضع التفكير."
|
301
|
+
},
|
302
|
+
"Qwen/Qwen3-235B-A22B": {
|
303
|
+
"description": "Qwen3 هو نموذج جديد من الجيل التالي مع تحسينات كبيرة في القدرات، حيث يصل إلى مستويات رائدة في الاستدلال، المهام العامة، الوكلاء، واللغات المتعددة، ويدعم تبديل وضع التفكير."
|
304
|
+
},
|
305
|
+
"Qwen/Qwen3-30B-A3B": {
|
306
|
+
"description": "Qwen3 هو نموذج جديد من الجيل التالي مع تحسينات كبيرة في القدرات، حيث يصل إلى مستويات رائدة في الاستدلال، المهام العامة، الوكلاء، واللغات المتعددة، ويدعم تبديل وضع التفكير."
|
307
|
+
},
|
308
|
+
"Qwen/Qwen3-32B": {
|
309
|
+
"description": "Qwen3 هو نموذج جديد من الجيل التالي مع تحسينات كبيرة في القدرات، حيث يصل إلى مستويات رائدة في الاستدلال، المهام العامة، الوكلاء، واللغات المتعددة، ويدعم تبديل وضع التفكير."
|
310
|
+
},
|
311
|
+
"Qwen/Qwen3-8B": {
|
312
|
+
"description": "Qwen3 هو نموذج جديد من الجيل التالي مع تحسينات كبيرة في القدرات، حيث يصل إلى مستويات رائدة في الاستدلال، المهام العامة، الوكلاء، واللغات المتعددة، ويدعم تبديل وضع التفكير."
|
313
|
+
},
|
296
314
|
"Qwen2-72B-Instruct": {
|
297
315
|
"description": "Qwen2 هو أحدث سلسلة من نموذج Qwen، ويدعم سياقًا يصل إلى 128 ألف، مقارنةً بأفضل النماذج مفتوحة المصدر الحالية، يتفوق Qwen2-72B بشكل ملحوظ في فهم اللغة الطبيعية والمعرفة والترميز والرياضيات والقدرات متعددة اللغات."
|
298
316
|
},
|
@@ -398,9 +416,6 @@
|
|
398
416
|
"THUDM/glm-4-9b-chat": {
|
399
417
|
"description": "GLM-4 9B هو إصدار مفتوح المصدر، يوفر تجربة حوار محسنة لتطبيقات الحوار."
|
400
418
|
},
|
401
|
-
"TeleAI/TeleChat2": {
|
402
|
-
"description": "نموذج TeleChat2 هو نموذج كبير تم تطويره ذاتيًا من قبل China Telecom، يدعم وظائف مثل الأسئلة والأجوبة الموسوعية، وتوليد الشيفرة، وتوليد النصوص الطويلة، ويقدم خدمات استشارية للمستخدمين، مما يمكنه من التفاعل مع المستخدمين، والإجابة على الأسئلة، والمساعدة في الإبداع، وتوفير المعلومات والمعرفة والإلهام بكفاءة وسهولة. أظهر النموذج أداءً ممتازًا في معالجة مشكلات الهلوسة، وتوليد النصوص الطويلة، وفهم المنطق."
|
403
|
-
},
|
404
419
|
"Vendor-A/Qwen/Qwen2.5-72B-Instruct": {
|
405
420
|
"description": "Qwen2.5-72B-Instruct هو أحد أحدث نماذج اللغة الكبيرة التي أصدرتها Alibaba Cloud. يتمتع هذا النموذج بقدرات محسنة بشكل ملحوظ في مجالات الترميز والرياضيات. كما يوفر دعمًا للغات متعددة، تغطي أكثر من 29 لغة، بما في ذلك الصينية والإنجليزية. أظهر النموذج تحسينات ملحوظة في اتباع التعليمات، وفهم البيانات الهيكلية، وتوليد المخرجات الهيكلية (خاصة JSON)."
|
406
421
|
},
|
@@ -800,6 +815,12 @@
|
|
800
815
|
"deepseek/deepseek-chat": {
|
801
816
|
"description": "نموذج مفتوح المصدر جديد يجمع بين القدرات العامة وقدرات البرمجة، لا يحتفظ فقط بقدرات الحوار العامة لنموذج الدردشة الأصلي وقدرات معالجة الأكواد القوية لنموذج Coder، بل يتماشى أيضًا بشكل أفضل مع تفضيلات البشر. بالإضافة إلى ذلك، حقق DeepSeek-V2.5 تحسينات كبيرة في مهام الكتابة، واتباع التعليمات، وغيرها من المجالات."
|
802
817
|
},
|
818
|
+
"deepseek/deepseek-chat-v3-0324": {
|
819
|
+
"description": "DeepSeek V3 هو نموذج مختلط خبير يحتوي على 685B من المعلمات، وهو أحدث إصدار من سلسلة نماذج الدردشة الرائدة لفريق DeepSeek.\n\nيستفيد من نموذج [DeepSeek V3](/deepseek/deepseek-chat-v3) ويظهر أداءً ممتازًا في مجموعة متنوعة من المهام."
|
820
|
+
},
|
821
|
+
"deepseek/deepseek-chat-v3-0324:free": {
|
822
|
+
"description": "DeepSeek V3 هو نموذج مختلط خبير يحتوي على 685B من المعلمات، وهو أحدث إصدار من سلسلة نماذج الدردشة الرائدة لفريق DeepSeek.\n\nيستفيد من نموذج [DeepSeek V3](/deepseek/deepseek-chat-v3) ويظهر أداءً ممتازًا في مجموعة متنوعة من المهام."
|
823
|
+
},
|
803
824
|
"deepseek/deepseek-r1": {
|
804
825
|
"description": "DeepSeek-R1 يعزز بشكل كبير من قدرة النموذج على الاستدلال في ظل وجود بيانات محدودة جدًا. قبل تقديم الإجابة النهائية، يقوم النموذج أولاً بإخراج سلسلة من التفكير لتحسين دقة الإجابة النهائية."
|
805
826
|
},
|
@@ -851,9 +872,6 @@
|
|
851
872
|
"doubao-1.5-thinking-pro": {
|
852
873
|
"description": "نموذج Doubao-1.5 الجديد للتفكير العميق، يتميز بأداء بارز في مجالات الرياضيات، البرمجة، الاستدلال العلمي، وكذلك في المهام العامة مثل الكتابة الإبداعية. حقق أو اقترب من المستوى الأول في العديد من المعايير المرموقة مثل AIME 2024 وCodeforces وGPQA. يدعم نافذة سياق بحجم 128k و16k للإخراج."
|
853
874
|
},
|
854
|
-
"doubao-1.5-thinking-pro-vision": {
|
855
|
-
"description": "نموذج Doubao-1.5 الجديد للتفكير العميق، يتميز بأداء بارز في مجالات الرياضيات، البرمجة، الاستدلال العلمي، وكذلك في المهام العامة مثل الكتابة الإبداعية. حقق أو اقترب من المستوى الأول في العديد من المعايير المرموقة مثل AIME 2024 وCodeforces وGPQA. يدعم نافذة سياق بحجم 128k و16k للإخراج."
|
856
|
-
},
|
857
875
|
"doubao-1.5-vision-lite": {
|
858
876
|
"description": "Doubao-1.5-vision-lite هو نموذج كبير متعدد الوسائط تم ترقيته حديثًا، يدعم التعرف على الصور بدقة غير محدودة ونسب عرض إلى ارتفاع متطرفة، ويعزز قدرات الاستدلال البصري، التعرف على الوثائق، فهم المعلومات التفصيلية، واتباع التعليمات. يدعم نافذة سياق 128k، وطول الإخراج يدعم حتى 16k توكن."
|
859
877
|
},
|
@@ -995,9 +1013,6 @@
|
|
995
1013
|
"gemini-2.0-flash-thinking-exp-01-21": {
|
996
1014
|
"description": "Gemini 2.0 Flash Exp هو أحدث نموذج تجريبي متعدد الوسائط من Google، يتمتع بميزات الجيل التالي، وسرعة فائقة، واستدعاء أدوات أصلية، وتوليد متعدد الوسائط."
|
997
1015
|
},
|
998
|
-
"gemini-2.0-pro-exp-02-05": {
|
999
|
-
"description": "Gemini 2.0 Pro Experimental هو أحدث نموذج ذكاء اصطناعي متعدد الوسائط التجريبي من Google، مع تحسينات ملحوظة في الجودة مقارنة بالإصدارات السابقة، خاصة في المعرفة العالمية، والبرمجة، والسياقات الطويلة."
|
1000
|
-
},
|
1001
1016
|
"gemini-2.5-flash-preview-04-17": {
|
1002
1017
|
"description": "معاينة فلاش جمنّي 2.5 هي النموذج الأكثر كفاءة من جوجل، حيث تقدم مجموعة شاملة من الميزات."
|
1003
1018
|
},
|
@@ -1007,6 +1022,9 @@
|
|
1007
1022
|
"gemini-2.5-pro-preview-03-25": {
|
1008
1023
|
"description": "معاينة Gemini 2.5 Pro هي نموذج التفكير الأكثر تقدمًا من Google، قادر على الاستدلال حول الشيفرات، الرياضيات، والمشكلات المعقدة في مجالات STEM، بالإضافة إلى تحليل مجموعات البيانات الكبيرة، مكتبات الشيفرات، والمستندات باستخدام سياقات طويلة."
|
1009
1024
|
},
|
1025
|
+
"gemini-2.5-pro-preview-05-06": {
|
1026
|
+
"description": "Gemini 2.5 Pro Preview هو نموذج التفكير الأكثر تقدمًا من Google، قادر على الاستدلال حول الشيفرات، الرياضيات، والمشكلات المعقدة في مجالات STEM، بالإضافة إلى تحليل مجموعات البيانات الكبيرة، ومكتبات الشيفرات، والمستندات باستخدام سياقات طويلة."
|
1027
|
+
},
|
1010
1028
|
"gemma-7b-it": {
|
1011
1029
|
"description": "Gemma 7B مناسب لمعالجة المهام المتوسطة والصغيرة، ويجمع بين الكفاءة من حيث التكلفة."
|
1012
1030
|
},
|
@@ -1091,8 +1109,17 @@
|
|
1091
1109
|
"google/gemini-2.0-flash-001": {
|
1092
1110
|
"description": "Gemini 2.0 Flash يقدم ميزات وتحسينات من الجيل التالي، بما في ذلك سرعة فائقة، واستخدام أدوات أصلية، وتوليد متعدد الوسائط، ونافذة سياق تصل إلى 1M توكن."
|
1093
1111
|
},
|
1094
|
-
"google/gemini-2.0-
|
1095
|
-
"description": "Gemini 2.0
|
1112
|
+
"google/gemini-2.0-flash-exp:free": {
|
1113
|
+
"description": "Gemini 2.0 Flash Experimental هو أحدث نموذج ذكاء اصطناعي متعدد الوسائط من Google، مع تحسينات ملحوظة في الجودة مقارنة بالإصدارات السابقة، خاصة في المعرفة العالمية، الشيفرات، والسياقات الطويلة."
|
1114
|
+
},
|
1115
|
+
"google/gemini-2.5-flash-preview": {
|
1116
|
+
"description": "Gemini 2.5 Flash هو النموذج الرائد الأكثر تقدمًا من Google، مصمم للاستدلال المتقدم، الترميز، المهام الرياضية والعلمية. يحتوي على قدرة \"التفكير\" المدمجة، مما يمكّنه من تقديم استجابات بدقة أعلى ومعالجة سياقات أكثر تفصيلاً.\n\nملاحظة: يحتوي هذا النموذج على نوعين: التفكير وغير التفكير. تختلف تسعير الإخراج بشكل ملحوظ بناءً على ما إذا كانت قدرة التفكير مفعلة. إذا اخترت النوع القياسي (بدون لاحقة \" :thinking \")، سيتجنب النموذج بشكل صريح توليد رموز التفكير.\n\nلاستغلال قدرة التفكير واستقبال رموز التفكير، يجب عليك اختيار النوع \" :thinking \"، مما سيؤدي إلى تسعير إخراج تفكير أعلى.\n\nبالإضافة إلى ذلك، يمكن تكوين Gemini 2.5 Flash من خلال معلمة \"الحد الأقصى لعدد رموز الاستدلال\"، كما هو موضح في الوثائق (https://openrouter.ai/docs/use-cases/reasoning-tokens#max-tokens-for-reasoning)."
|
1117
|
+
},
|
1118
|
+
"google/gemini-2.5-flash-preview:thinking": {
|
1119
|
+
"description": "Gemini 2.5 Flash هو النموذج الرائد الأكثر تقدمًا من Google، مصمم للاستدلال المتقدم، الترميز، المهام الرياضية والعلمية. يحتوي على قدرة \"التفكير\" المدمجة، مما يمكّنه من تقديم استجابات بدقة أعلى ومعالجة سياقات أكثر تفصيلاً.\n\nملاحظة: يحتوي هذا النموذج على نوعين: التفكير وغير التفكير. تختلف تسعير الإخراج بشكل ملحوظ بناءً على ما إذا كانت قدرة التفكير مفعلة. إذا اخترت النوع القياسي (بدون لاحقة \" :thinking \")، سيتجنب النموذج بشكل صريح توليد رموز التفكير.\n\nلاستغلال قدرة التفكير واستقبال رموز التفكير، يجب عليك اختيار النوع \" :thinking \"، مما سيؤدي إلى تسعير إخراج تفكير أعلى.\n\nبالإضافة إلى ذلك، يمكن تكوين Gemini 2.5 Flash من خلال معلمة \"الحد الأقصى لعدد رموز الاستدلال\"، كما هو موضح في الوثائق (https://openrouter.ai/docs/use-cases/reasoning-tokens#max-tokens-for-reasoning)."
|
1120
|
+
},
|
1121
|
+
"google/gemini-2.5-pro-preview-03-25": {
|
1122
|
+
"description": "Gemini 2.5 Pro هو نموذج الذكاء الاصطناعي الأكثر تقدمًا من Google، مصمم للاستدلال المتقدم، الترميز، المهام الرياضية والعلمية. يتميز بقدرة \"التفكير\"، مما يمكّنه من الاستدلال بدقة أعلى ومعالجة سياقات أكثر تفصيلاً. حقق Gemini 2.5 Pro أداءً رائدًا في عدة اختبارات معيارية، بما في ذلك تصدره في تصنيف LMArena، مما يعكس تميز توافق تفضيلات البشر وقدرته على حل المشكلات المعقدة."
|
1096
1123
|
},
|
1097
1124
|
"google/gemini-flash-1.5": {
|
1098
1125
|
"description": "يقدم Gemini 1.5 Flash قدرات معالجة متعددة الوسائط محسّنة، مناسبة لمجموعة متنوعة من سيناريوهات المهام المعقدة."
|
@@ -1592,6 +1619,9 @@
|
|
1592
1619
|
"mistral-large-latest": {
|
1593
1620
|
"description": "Mistral Large هو النموذج الرائد، يتفوق في المهام متعددة اللغات، والاستدلال المعقد، وتوليد الشيفرة، وهو الخيار المثالي للتطبيقات الراقية."
|
1594
1621
|
},
|
1622
|
+
"mistral-medium-latest": {
|
1623
|
+
"description": "Mistral Medium 3 يقدم أداءً متقدمًا بتكلفة 8 مرات أقل، مما يبسط بشكل جذري نشر المؤسسات."
|
1624
|
+
},
|
1595
1625
|
"mistral-nemo": {
|
1596
1626
|
"description": "Mistral Nemo تم تطويره بالتعاون بين Mistral AI وNVIDIA، وهو نموذج 12B عالي الأداء."
|
1597
1627
|
},
|
@@ -1763,8 +1793,8 @@
|
|
1763
1793
|
"qvq-72b-preview": {
|
1764
1794
|
"description": "نموذج QVQ هو نموذج بحث تجريبي تم تطويره بواسطة فريق Qwen، يركز على تعزيز قدرات الاستدلال البصري، خاصة في مجال الاستدلال الرياضي."
|
1765
1795
|
},
|
1766
|
-
"qvq-max": {
|
1767
|
-
"description": "نموذج
|
1796
|
+
"qvq-max-latest": {
|
1797
|
+
"description": "نموذج QVQ للرؤية البصرية، يدعم الإدخال البصري وإخراج سلسلة التفكير، ويظهر قدرات أقوى في الرياضيات، البرمجة، التحليل البصري، الإبداع، والمهام العامة."
|
1768
1798
|
},
|
1769
1799
|
"qwen-coder-plus-latest": {
|
1770
1800
|
"description": "نموذج كود Qwen الشامل."
|
@@ -2075,12 +2105,24 @@
|
|
2075
2105
|
"text-embedding-3-small": {
|
2076
2106
|
"description": "نموذج التضمين من الجيل الجديد، فعال واقتصادي، مناسب لاسترجاع المعرفة وتطبيقات RAG وغيرها."
|
2077
2107
|
},
|
2108
|
+
"thudm/glm-4-32b": {
|
2109
|
+
"description": "GLM-4-32B-0414 هو نموذج لغوي مفتوح الوزن ثنائي اللغة (صيني وإنجليزي) بحجم 32B، تم تحسينه لتوليد الشيفرات، استدعاءات الوظائف، والمهام الوكيلة. تم تدريبه مسبقًا على 15T من البيانات عالية الجودة وإعادة الاستدلال، وتم تحسينه باستخدام توافق تفضيلات البشر، أخذ العينات الرفض، والتعلم المعزز. يظهر هذا النموذج أداءً ممتازًا في الاستدلال المعقد، توليد القطع، ومهام الإخراج الهيكلي، حيث حقق أداءً يعادل GPT-4o وDeepSeek-V3-0324 في عدة اختبارات معيارية."
|
2110
|
+
},
|
2111
|
+
"thudm/glm-4-32b:free": {
|
2112
|
+
"description": "GLM-4-32B-0414 هو نموذج لغوي مفتوح الوزن ثنائي اللغة (صيني وإنجليزي) بحجم 32B، تم تحسينه لتوليد الشيفرات، استدعاءات الوظائف، والمهام الوكيلة. تم تدريبه مسبقًا على 15T من البيانات عالية الجودة وإعادة الاستدلال، وتم تحسينه باستخدام توافق تفضيلات البشر، أخذ العينات الرفض، والتعلم المعزز. يظهر هذا النموذج أداءً ممتازًا في الاستدلال المعقد، توليد القطع، ومهام الإخراج الهيكلي، حيث حقق أداءً يعادل GPT-4o وDeepSeek-V3-0324 في عدة اختبارات معيارية."
|
2113
|
+
},
|
2078
2114
|
"thudm/glm-4-9b-chat": {
|
2079
2115
|
"description": "الإصدار المفتوح من الجيل الأحدث من نموذج GLM-4 الذي أطلقته Zhizhu AI."
|
2080
2116
|
},
|
2081
2117
|
"thudm/glm-4-9b:free": {
|
2082
2118
|
"description": "GLM-4-9B-0414 هو نموذج لغوي يحتوي على 9 مليار معلمة من سلسلة GLM-4 التي تم تطويرها بواسطة THUDM. يستخدم GLM-4-9B-0414 نفس استراتيجيات تعزيز التعلم والتوافق المستخدمة في النموذج المقابل الأكبر 32B، مما يحقق أداءً عاليًا بالنسبة لحجمه، مما يجعله مناسبًا للنشر في البيئات المحدودة الموارد التي لا تزال تتطلب قدرات قوية في فهم اللغة وتوليدها."
|
2083
2119
|
},
|
2120
|
+
"thudm/glm-z1-32b": {
|
2121
|
+
"description": "GLM-Z1-32B-0414 هو نسخة محسنة من GLM-4-32B، مصممة لحل المشكلات المعقدة في الرياضيات العميقة، المنطق، والشيفرات. يستخدم التعلم المعزز الموسع (المخصص للمهام والمبني على تفضيلات عامة) لتحسين الأداء في المهام المعقدة متعددة الخطوات. مقارنةً بنموذج GLM-4-32B الأساسي، زادت Z1 بشكل ملحوظ من قدرات الاستدلال الهيكلي والمجالات الرسمية.\n\nيدعم هذا النموذج تنفيذ خطوات \"التفكير\" من خلال هندسة التلميحات، ويقدم اتساقًا محسنًا للإخراج الطويل. تم تحسينه لعمليات سير العمل الخاصة بالوكيل، ويدعم السياقات الطويلة (عبر YaRN)، واستدعاءات أدوات JSON، وتكوينات أخذ العينات الدقيقة للاستدلال المستقر. مثالي للحالات التي تتطلب تفكيرًا عميقًا، استدلالًا متعدد الخطوات، أو استنتاجات رسمية."
|
2122
|
+
},
|
2123
|
+
"thudm/glm-z1-32b:free": {
|
2124
|
+
"description": "GLM-Z1-32B-0414 هو نسخة محسنة من GLM-4-32B، مصممة لحل المشكلات المعقدة في الرياضيات العميقة، المنطق، والشيفرات. يستخدم التعلم المعزز الموسع (المخصص للمهام والمبني على تفضيلات عامة) لتحسين الأداء في المهام المعقدة متعددة الخطوات. مقارنةً بنموذج GLM-4-32B الأساسي، زادت Z1 بشكل ملحوظ من قدرات الاستدلال الهيكلي والمجالات الرسمية.\n\nيدعم هذا النموذج تنفيذ خطوات \"التفكير\" من خلال هندسة التلميحات، ويقدم اتساقًا محسنًا للإخراج الطويل. تم تحسينه لعمليات سير العمل الخاصة بالوكيل، ويدعم السياقات الطويلة (عبر YaRN)، واستدعاءات أدوات JSON، وتكوينات أخذ العينات الدقيقة للاستدلال المستقر. مثالي للحالات التي تتطلب تفكيرًا عميقًا، استدلالًا متعدد الخطوات، أو استنتاجات رسمية."
|
2125
|
+
},
|
2084
2126
|
"thudm/glm-z1-9b:free": {
|
2085
2127
|
"description": "GLM-Z1-9B-0414 هو نموذج لغوي يحتوي على 9 مليار معلمة من سلسلة GLM-4 التي تم تطويرها بواسطة THUDM. يستخدم تقنيات تم تطبيقها في الأصل على نموذج GLM-Z1 الأكبر، بما في ذلك تعزيز التعلم الموسع، والتوافق القائم على الترتيب الثنائي، والتدريب على المهام التي تتطلب استدلالًا مكثفًا مثل الرياضيات، والترميز، والمنطق. على الرغم من حجمه الأصغر، إلا أنه يظهر أداءً قويًا في المهام العامة للاستدلال، ويتفوق على العديد من النماذج مفتوحة المصدر في مستوى وزنه."
|
2086
2128
|
},
|
@@ -29,9 +29,6 @@
|
|
29
29
|
"deepseek": {
|
30
30
|
"description": "DeepSeek هي شركة تركز على أبحاث وتطبيقات تقنيات الذكاء الاصطناعي، حيث يجمع نموذجها الأحدث DeepSeek-V2.5 بين قدرات الحوار العامة ومعالجة الشيفرات، وقد حقق تحسينات ملحوظة في محاذاة تفضيلات البشر، ومهام الكتابة، واتباع التعليمات."
|
31
31
|
},
|
32
|
-
"doubao": {
|
33
|
-
"description": "نموذج كبير تم تطويره داخليًا بواسطة بايت دانس. تم التحقق من صحته من خلال أكثر من 50 سيناريو عمل داخلي، مع استخدام يومي يتجاوز تريليون توكن، مما يتيح تقديم قدرات متعددة الأنماط، ويعمل على توفير تجربة عمل غنية للشركات من خلال نموذج عالي الجودة."
|
34
|
-
},
|
35
32
|
"fireworksai": {
|
36
33
|
"description": "Fireworks AI هي شركة رائدة في تقديم خدمات نماذج اللغة المتقدمة، تركز على استدعاء الوظائف والمعالجة متعددة الوسائط. نموذجها الأحدث Firefunction V2 مبني على Llama-3، مُحسّن لاستدعاء الوظائف، والحوار، واتباع التعليمات. يدعم نموذج اللغة البصرية FireLLaVA-13B إدخال الصور والنصوص المختلطة. تشمل النماذج البارزة الأخرى سلسلة Llama وسلسلة Mixtral، مما يوفر دعمًا فعالًا لاتباع التعليمات وتوليدها بلغات متعددة."
|
37
34
|
},
|
@@ -35,6 +35,10 @@
|
|
35
35
|
"desc": "Активирайте основното поле за търсене на текущата страница",
|
36
36
|
"title": "Търсене"
|
37
37
|
},
|
38
|
+
"showApp": {
|
39
|
+
"desc": "Бързо отваряне на основния прозорец на приложението",
|
40
|
+
"title": "Покажи основния прозорец"
|
41
|
+
},
|
38
42
|
"switchAgent": {
|
39
43
|
"desc": "Сменете помощника, фиксиран в страничната лента, като задържите Ctrl и натиснете число от 0 до 9",
|
40
44
|
"title": "Бърза смяна на помощника"
|