@lobehub/chat 1.136.11 → 1.136.13
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/.github/workflows/claude-translator.yml +13 -1
- package/CHANGELOG.md +60 -0
- package/changelog/v1.json +21 -0
- package/locales/ar/modelProvider.json +12 -0
- package/locales/ar/models.json +39 -24
- package/locales/bg-BG/modelProvider.json +12 -0
- package/locales/bg-BG/models.json +39 -24
- package/locales/de-DE/modelProvider.json +12 -0
- package/locales/de-DE/models.json +39 -24
- package/locales/en-US/modelProvider.json +12 -0
- package/locales/en-US/models.json +39 -24
- package/locales/es-ES/modelProvider.json +12 -0
- package/locales/es-ES/models.json +39 -24
- package/locales/fa-IR/modelProvider.json +12 -0
- package/locales/fa-IR/models.json +39 -24
- package/locales/fr-FR/modelProvider.json +12 -0
- package/locales/fr-FR/models.json +39 -24
- package/locales/it-IT/modelProvider.json +12 -0
- package/locales/it-IT/models.json +39 -24
- package/locales/ja-JP/modelProvider.json +12 -0
- package/locales/ja-JP/models.json +39 -24
- package/locales/ko-KR/modelProvider.json +12 -0
- package/locales/ko-KR/models.json +39 -24
- package/locales/nl-NL/modelProvider.json +12 -0
- package/locales/nl-NL/models.json +39 -24
- package/locales/pl-PL/modelProvider.json +12 -0
- package/locales/pl-PL/models.json +39 -24
- package/locales/pt-BR/modelProvider.json +12 -0
- package/locales/pt-BR/models.json +39 -24
- package/locales/ru-RU/modelProvider.json +12 -0
- package/locales/ru-RU/models.json +39 -24
- package/locales/tr-TR/modelProvider.json +12 -0
- package/locales/tr-TR/models.json +39 -24
- package/locales/vi-VN/modelProvider.json +12 -0
- package/locales/vi-VN/models.json +39 -24
- package/locales/zh-CN/modelProvider.json +12 -0
- package/locales/zh-CN/models.json +39 -24
- package/locales/zh-TW/modelProvider.json +12 -0
- package/locales/zh-TW/models.json +39 -24
- package/package.json +3 -3
- package/packages/const/src/settings/index.ts +1 -0
- package/packages/database/package.json +7 -5
- package/packages/electron-client-ipc/src/events/index.ts +2 -2
- package/packages/electron-client-ipc/src/events/{localFile.ts → localSystem.ts} +25 -6
- package/packages/electron-client-ipc/src/types/index.ts +1 -1
- package/packages/electron-client-ipc/src/types/{localFile.ts → localSystem.ts} +89 -4
- package/packages/file-loaders/package.json +1 -2
- package/packages/file-loaders/src/loadFile.ts +4 -1
- package/packages/file-loaders/src/loaders/doc/__snapshots__/index.test.ts.snap +46 -0
- package/packages/file-loaders/src/loaders/doc/index.test.ts +38 -0
- package/packages/file-loaders/src/loaders/doc/index.ts +57 -0
- package/packages/file-loaders/src/loaders/docx/index.ts +36 -45
- package/packages/file-loaders/src/loaders/index.ts +2 -0
- package/packages/file-loaders/src/types/word-extractor.d.ts +9 -0
- package/packages/file-loaders/src/types.ts +1 -1
- package/packages/model-bank/src/aiModels/infiniai.ts +465 -174
- package/packages/model-bank/src/aiModels/modelscope.ts +10 -20
- package/packages/model-bank/src/aiModels/novita.ts +2 -2
- package/packages/model-runtime/src/core/openaiCompatibleFactory/index.test.ts +267 -38
- package/packages/model-runtime/src/core/openaiCompatibleFactory/index.ts +45 -0
- package/packages/model-runtime/src/providerTestUtils.ts +0 -5
- package/packages/model-runtime/src/providers/anthropic/generateObject.test.ts +57 -44
- package/packages/model-runtime/src/providers/anthropic/generateObject.ts +28 -20
- package/packages/model-runtime/src/providers/deepseek/index.ts +5 -0
- package/packages/model-runtime/src/providers/infiniai/index.ts +8 -54
- package/packages/model-runtime/src/providers/openai/index.test.ts +0 -5
- package/packages/model-runtime/src/providers/openrouter/index.test.ts +3 -3
- package/packages/model-runtime/src/providers/openrouter/index.ts +32 -20
- package/packages/model-runtime/src/providers/openrouter/type.ts +25 -24
- package/packages/model-runtime/src/providers/zhipu/index.test.ts +0 -1
- package/packages/model-runtime/src/types/structureOutput.ts +13 -1
- package/packages/model-runtime/src/utils/handleOpenAIError.test.ts +0 -5
- package/packages/model-runtime/src/utils/handleOpenAIError.ts +2 -2
- package/packages/types/src/aiChat.ts +13 -1
- package/packages/types/src/index.ts +1 -0
- package/src/app/[variants]/(main)/settings/provider/detail/bedrock/index.tsx +36 -2
- package/src/config/modelProviders/infiniai.ts +2 -25
- package/src/config/modelProviders/modelscope.ts +1 -17
- package/src/features/ChatInput/InputEditor/index.tsx +39 -26
- package/src/features/Conversation/Messages/Assistant/Tool/Render/LoadingPlaceholder/index.tsx +1 -1
- package/src/server/routers/lambda/agent.ts +2 -3
- package/src/server/routers/lambda/aiChat.ts +33 -1
- package/src/server/routers/lambda/chunk.ts +2 -2
- package/src/services/electron/file.ts +1 -2
- package/src/services/electron/localFileService.ts +40 -0
- package/src/tools/local-system/Placeholder/ListFiles.tsx +23 -0
- package/src/tools/local-system/Placeholder/ReadLocalFile.tsx +9 -0
- package/src/tools/local-system/Placeholder/SearchFiles.tsx +55 -0
- package/src/tools/local-system/Placeholder/index.tsx +25 -0
- package/src/tools/placeholders.ts +3 -0
|
@@ -1,70 +1,61 @@
|
|
|
1
|
-
import { DocxLoader as LangchainDocxLoader } from '@langchain/community/document_loaders/fs/docx';
|
|
2
1
|
import debug from 'debug';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import mammoth from 'mammoth';
|
|
3
4
|
|
|
4
5
|
import type { DocumentPage, FileLoaderInterface } from '../../types';
|
|
5
6
|
|
|
6
7
|
const log = debug('file-loaders:docx');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
* Loads Word documents (.docx) using
|
|
10
|
+
* Loads Word documents (.docx) using mammoth library.
|
|
11
|
+
* Extracts text content and basic metadata from DOCX files.
|
|
10
12
|
*/
|
|
11
13
|
export class DocxLoader implements FileLoaderInterface {
|
|
12
14
|
async loadPages(filePath: string): Promise<DocumentPage[]> {
|
|
13
15
|
log('Loading DOCX file:', filePath);
|
|
14
16
|
try {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} else {
|
|
19
|
-
loader = new LangchainDocxLoader(filePath, { type: 'docx' });
|
|
20
|
-
}
|
|
21
|
-
log('LangChain DocxLoader created');
|
|
22
|
-
const docs = await loader.load(); // Langchain DocxLoader typically loads the whole doc as one
|
|
23
|
-
log('DOCX document loaded, parts:', docs.length);
|
|
24
|
-
|
|
25
|
-
const pages: DocumentPage[] = docs.map((doc) => {
|
|
26
|
-
const pageContent = doc.pageContent || '';
|
|
27
|
-
const lines = pageContent.split('\n');
|
|
28
|
-
const lineCount = lines.length;
|
|
29
|
-
const charCount = pageContent.length;
|
|
17
|
+
// Read file as buffer
|
|
18
|
+
const buffer = await fs.readFile(filePath);
|
|
19
|
+
log('File buffer read, size:', buffer.length);
|
|
30
20
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
pageNumber: 1,
|
|
36
|
-
};
|
|
21
|
+
// Extract text using mammoth
|
|
22
|
+
const result = await mammoth.extractRawText({ buffer });
|
|
23
|
+
const pageContent = result.value;
|
|
24
|
+
log('Text extracted, length:', pageContent.length);
|
|
37
25
|
|
|
38
|
-
|
|
39
|
-
|
|
26
|
+
// Count lines and characters
|
|
27
|
+
const lines = pageContent.split('\n');
|
|
28
|
+
const lineCount = lines.length;
|
|
29
|
+
const charCount = pageContent.length;
|
|
40
30
|
|
|
41
|
-
|
|
31
|
+
log('DOCX document processed, lines:', lineCount, 'chars:', charCount);
|
|
42
32
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
33
|
+
// Create single page with extracted content
|
|
34
|
+
const page: DocumentPage = {
|
|
35
|
+
charCount,
|
|
36
|
+
lineCount,
|
|
37
|
+
metadata: {
|
|
38
|
+
pageNumber: 1,
|
|
39
|
+
},
|
|
40
|
+
pageContent,
|
|
41
|
+
};
|
|
50
42
|
|
|
51
|
-
//
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
pageContent: '',
|
|
59
|
-
});
|
|
43
|
+
// Handle warnings if any
|
|
44
|
+
if (result.messages.length > 0) {
|
|
45
|
+
const warnings = result.messages.filter((msg) => msg.type === 'warning');
|
|
46
|
+
if (warnings.length > 0) {
|
|
47
|
+
log('Extraction warnings:', warnings.length);
|
|
48
|
+
warnings.forEach((warning) => log('Warning:', warning.message));
|
|
49
|
+
}
|
|
60
50
|
}
|
|
61
51
|
|
|
62
|
-
log('DOCX loading completed
|
|
63
|
-
return
|
|
52
|
+
log('DOCX loading completed');
|
|
53
|
+
return [page];
|
|
64
54
|
} catch (e) {
|
|
65
55
|
const error = e as Error;
|
|
66
56
|
log('Error encountered while loading DOCX file');
|
|
67
|
-
console.error(`Error loading DOCX file ${filePath}
|
|
57
|
+
console.error(`Error loading DOCX file ${filePath}: ${error.message}`);
|
|
58
|
+
|
|
68
59
|
const errorPage: DocumentPage = {
|
|
69
60
|
charCount: 0,
|
|
70
61
|
lineCount: 0,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FileLoaderInterface, SupportedFileType } from '../types';
|
|
2
|
+
import { DocLoader } from './doc';
|
|
2
3
|
import { DocxLoader } from './docx';
|
|
3
4
|
// import { EpubLoader } from './epub';
|
|
4
5
|
import { ExcelLoader } from './excel';
|
|
@@ -10,6 +11,7 @@ import { TextLoader } from './text';
|
|
|
10
11
|
// Key: file extension (lowercase, without leading dot) or specific type name
|
|
11
12
|
// Value: Loader Class implementing FileLoaderInterface
|
|
12
13
|
export const fileLoaders: Record<SupportedFileType, new () => FileLoaderInterface> = {
|
|
14
|
+
doc: DocLoader,
|
|
13
15
|
docx: DocxLoader,
|
|
14
16
|
// epub: EpubLoader,
|
|
15
17
|
excel: ExcelLoader,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Define supported file types - consider using an enum or const assertion
|
|
2
|
-
export type SupportedFileType = 'pdf' | 'docx' | 'txt' | 'excel' | 'pptx'; // | 'pptx' | 'latex' | 'epub' | 'code' | 'markdown';
|
|
2
|
+
export type SupportedFileType = 'pdf' | 'doc' | 'docx' | 'txt' | 'excel' | 'pptx'; // | 'pptx' | 'latex' | 'epub' | 'code' | 'markdown';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 代表一个完整的已加载文件,包含文件级信息和其所有页面/块。
|