@lobehub/chat 1.68.3 → 1.68.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.
- package/CHANGELOG.md +50 -0
- package/README.md +3 -3
- package/README.zh-CN.md +14 -17
- package/changelog/v1.json +18 -0
- package/docs/usage/providers/azureai.mdx +69 -0
- package/docs/usage/providers/azureai.zh-CN.mdx +69 -0
- package/docs/usage/providers/deepseek.mdx +3 -3
- package/docs/usage/providers/deepseek.zh-CN.mdx +5 -4
- package/docs/usage/providers/jina.mdx +51 -0
- package/docs/usage/providers/jina.zh-CN.mdx +51 -0
- package/docs/usage/providers/lmstudio.mdx +75 -0
- package/docs/usage/providers/lmstudio.zh-CN.mdx +75 -0
- package/docs/usage/providers/nvidia.mdx +55 -0
- package/docs/usage/providers/nvidia.zh-CN.mdx +55 -0
- package/docs/usage/providers/ppio.mdx +7 -7
- package/docs/usage/providers/ppio.zh-CN.mdx +6 -6
- package/docs/usage/providers/sambanova.mdx +50 -0
- package/docs/usage/providers/sambanova.zh-CN.mdx +50 -0
- package/docs/usage/providers/tencentcloud.mdx +49 -0
- package/docs/usage/providers/tencentcloud.zh-CN.mdx +49 -0
- package/docs/usage/providers/vertexai.mdx +59 -0
- package/docs/usage/providers/vertexai.zh-CN.mdx +59 -0
- package/docs/usage/providers/vllm.mdx +98 -0
- package/docs/usage/providers/vllm.zh-CN.mdx +98 -0
- package/docs/usage/providers/volcengine.mdx +47 -0
- package/docs/usage/providers/volcengine.zh-CN.mdx +48 -0
- package/locales/ar/chat.json +29 -0
- package/locales/ar/models.json +48 -0
- package/locales/ar/providers.json +3 -0
- package/locales/bg-BG/chat.json +29 -0
- package/locales/bg-BG/models.json +48 -0
- package/locales/bg-BG/providers.json +3 -0
- package/locales/de-DE/chat.json +29 -0
- package/locales/de-DE/models.json +48 -0
- package/locales/de-DE/providers.json +3 -0
- package/locales/en-US/chat.json +29 -0
- package/locales/en-US/models.json +48 -0
- package/locales/en-US/providers.json +3 -3
- package/locales/es-ES/chat.json +29 -0
- package/locales/es-ES/models.json +48 -0
- package/locales/es-ES/providers.json +3 -0
- package/locales/fa-IR/chat.json +29 -0
- package/locales/fa-IR/models.json +48 -0
- package/locales/fa-IR/providers.json +3 -0
- package/locales/fr-FR/chat.json +29 -0
- package/locales/fr-FR/models.json +48 -0
- package/locales/fr-FR/providers.json +3 -0
- package/locales/it-IT/chat.json +29 -0
- package/locales/it-IT/models.json +48 -0
- package/locales/it-IT/providers.json +3 -0
- package/locales/ja-JP/chat.json +29 -0
- package/locales/ja-JP/models.json +48 -0
- package/locales/ja-JP/providers.json +3 -0
- package/locales/ko-KR/chat.json +29 -0
- package/locales/ko-KR/models.json +48 -0
- package/locales/ko-KR/providers.json +3 -0
- package/locales/nl-NL/chat.json +29 -0
- package/locales/nl-NL/models.json +48 -0
- package/locales/nl-NL/providers.json +3 -0
- package/locales/pl-PL/chat.json +29 -0
- package/locales/pl-PL/models.json +48 -0
- package/locales/pl-PL/providers.json +3 -0
- package/locales/pt-BR/chat.json +29 -0
- package/locales/pt-BR/models.json +48 -0
- package/locales/pt-BR/providers.json +3 -0
- package/locales/ru-RU/chat.json +29 -0
- package/locales/ru-RU/models.json +48 -0
- package/locales/ru-RU/providers.json +3 -0
- package/locales/tr-TR/chat.json +29 -0
- package/locales/tr-TR/models.json +48 -0
- package/locales/tr-TR/providers.json +3 -0
- package/locales/vi-VN/chat.json +29 -0
- package/locales/vi-VN/models.json +48 -0
- package/locales/vi-VN/providers.json +3 -0
- package/locales/zh-CN/chat.json +29 -0
- package/locales/zh-CN/models.json +51 -3
- package/locales/zh-CN/providers.json +3 -4
- package/locales/zh-TW/chat.json +29 -0
- package/locales/zh-TW/models.json +48 -0
- package/locales/zh-TW/providers.json +3 -0
- package/package.json +1 -1
- package/packages/web-crawler/src/crawImpl/__test__/jina.test.ts +169 -0
- package/packages/web-crawler/src/crawImpl/naive.ts +29 -3
- package/packages/web-crawler/src/utils/errorType.ts +7 -0
- package/scripts/serverLauncher/startServer.js +11 -7
- package/src/config/modelProviders/index.ts +1 -1
- package/src/config/modelProviders/ppio.ts +1 -1
- package/src/features/Conversation/Extras/Assistant.tsx +12 -20
- package/src/features/Conversation/Extras/Usage/UsageDetail/ModelCard.tsx +130 -0
- package/src/features/Conversation/Extras/Usage/UsageDetail/TokenProgress.tsx +71 -0
- package/src/features/Conversation/Extras/Usage/UsageDetail/index.tsx +146 -0
- package/src/features/Conversation/Extras/Usage/UsageDetail/tokens.ts +94 -0
- package/src/features/Conversation/Extras/Usage/index.tsx +40 -0
- package/src/libs/agent-runtime/utils/streams/anthropic.test.ts +14 -0
- package/src/libs/agent-runtime/utils/streams/anthropic.ts +25 -0
- package/src/libs/agent-runtime/utils/streams/openai.test.ts +100 -10
- package/src/libs/agent-runtime/utils/streams/openai.ts +30 -4
- package/src/libs/agent-runtime/utils/streams/protocol.ts +4 -0
- package/src/locales/default/chat.ts +30 -1
- package/src/server/routers/tools/search.ts +1 -1
- package/src/store/aiInfra/slices/aiModel/initialState.ts +3 -1
- package/src/store/aiInfra/slices/aiModel/selectors.test.ts +1 -0
- package/src/store/aiInfra/slices/aiModel/selectors.ts +5 -0
- package/src/store/aiInfra/slices/aiProvider/action.ts +3 -1
- package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +5 -1
- package/src/store/chat/slices/message/action.ts +3 -0
- package/src/store/global/initialState.ts +1 -0
- package/src/store/global/selectors/systemStatus.ts +2 -0
- package/src/types/message/base.ts +18 -0
- package/src/types/message/chat.ts +4 -3
- package/src/utils/fetch/fetchSSE.ts +24 -1
- package/src/utils/format.ts +3 -1
@@ -13,6 +13,23 @@ export interface ModelReasoning {
|
|
13
13
|
signature?: string;
|
14
14
|
}
|
15
15
|
|
16
|
+
export interface ModelTokensUsage {
|
17
|
+
acceptedPredictionTokens?: number;
|
18
|
+
cachedTokens?: number;
|
19
|
+
inputAudioTokens?: number;
|
20
|
+
inputCacheMissTokens?: number;
|
21
|
+
inputTokens?: number;
|
22
|
+
outputAudioTokens?: number;
|
23
|
+
outputTokens?: number;
|
24
|
+
reasoningTokens?: number;
|
25
|
+
rejectedPredictionTokens?: number;
|
26
|
+
totalTokens?: number;
|
27
|
+
}
|
28
|
+
|
29
|
+
export interface MessageMetadata extends ModelTokensUsage {
|
30
|
+
tps?: number;
|
31
|
+
}
|
32
|
+
|
16
33
|
export type MessageRoleType = 'user' | 'system' | 'assistant' | 'tool';
|
17
34
|
|
18
35
|
export interface MessageItem {
|
@@ -23,6 +40,7 @@ export interface MessageItem {
|
|
23
40
|
error: any | null;
|
24
41
|
favorite: boolean | null;
|
25
42
|
id: string;
|
43
|
+
metadata?: MessageMetadata | null;
|
26
44
|
model: string | null;
|
27
45
|
observationId: string | null;
|
28
46
|
parentId: string | null;
|
@@ -6,7 +6,7 @@ import { MetaData } from '@/types/meta';
|
|
6
6
|
import { MessageSemanticSearchChunk } from '@/types/rag';
|
7
7
|
import { GroundingSearch } from '@/types/search';
|
8
8
|
|
9
|
-
import { MessageRoleType, ModelReasoning } from './base';
|
9
|
+
import { MessageMetadata, MessageRoleType, ModelReasoning } from './base';
|
10
10
|
import { ChatPluginPayload, ChatToolPayload } from './tools';
|
11
11
|
import { Translate } from './translate';
|
12
12
|
|
@@ -82,15 +82,16 @@ export interface ChatMessage {
|
|
82
82
|
imageList?: ChatImageItem[];
|
83
83
|
meta: MetaData;
|
84
84
|
|
85
|
+
metadata?: MessageMetadata | null;
|
85
86
|
/**
|
86
87
|
* observation id
|
87
88
|
*/
|
88
89
|
observationId?: string;
|
90
|
+
|
89
91
|
/**
|
90
92
|
* parent message id
|
91
93
|
*/
|
92
94
|
parentId?: string;
|
93
|
-
|
94
95
|
plugin?: ChatPluginPayload;
|
95
96
|
pluginError?: any;
|
96
97
|
pluginState?: any;
|
@@ -100,8 +101,8 @@ export interface ChatMessage {
|
|
100
101
|
quotaId?: string;
|
101
102
|
ragQuery?: string | null;
|
102
103
|
ragQueryId?: string | null;
|
103
|
-
ragRawQuery?: string | null;
|
104
104
|
|
105
|
+
ragRawQuery?: string | null;
|
105
106
|
reasoning?: ModelReasoning | null;
|
106
107
|
/**
|
107
108
|
* message role type
|
@@ -10,6 +10,7 @@ import {
|
|
10
10
|
MessageToolCallChunk,
|
11
11
|
MessageToolCallSchema,
|
12
12
|
ModelReasoning,
|
13
|
+
ModelTokensUsage,
|
13
14
|
} from '@/types/message';
|
14
15
|
import { GroundingSearch } from '@/types/search';
|
15
16
|
|
@@ -28,9 +29,15 @@ export type OnFinishHandler = (
|
|
28
29
|
toolCalls?: MessageToolCall[];
|
29
30
|
traceId?: string | null;
|
30
31
|
type?: SSEFinishType;
|
32
|
+
usage?: ModelTokensUsage;
|
31
33
|
},
|
32
34
|
) => Promise<void>;
|
33
35
|
|
36
|
+
export interface MessageUsageChunk {
|
37
|
+
type: 'usage';
|
38
|
+
usage: ModelTokensUsage;
|
39
|
+
}
|
40
|
+
|
34
41
|
export interface MessageTextChunk {
|
35
42
|
text: string;
|
36
43
|
type: 'text';
|
@@ -59,7 +66,12 @@ export interface FetchSSEOptions {
|
|
59
66
|
onErrorHandle?: (error: ChatMessageError) => void;
|
60
67
|
onFinish?: OnFinishHandler;
|
61
68
|
onMessageHandle?: (
|
62
|
-
chunk:
|
69
|
+
chunk:
|
70
|
+
| MessageTextChunk
|
71
|
+
| MessageToolCallsChunk
|
72
|
+
| MessageReasoningChunk
|
73
|
+
| MessageGroundingChunk
|
74
|
+
| MessageUsageChunk,
|
63
75
|
) => void;
|
64
76
|
smoothing?: SmoothingParams | boolean;
|
65
77
|
}
|
@@ -317,6 +329,7 @@ export const fetchSSE = async (url: string, options: RequestInit & FetchSSEOptio
|
|
317
329
|
});
|
318
330
|
|
319
331
|
let grounding: GroundingSearch | undefined = undefined;
|
332
|
+
let usage: ModelTokensUsage | undefined = undefined;
|
320
333
|
await fetchEventSource(url, {
|
321
334
|
body: options.body,
|
322
335
|
fetch: options?.fetcher,
|
@@ -377,6 +390,9 @@ export const fetchSSE = async (url: string, options: RequestInit & FetchSSEOptio
|
|
377
390
|
}
|
378
391
|
|
379
392
|
case 'text': {
|
393
|
+
// skip empty text
|
394
|
+
if (!data) break;
|
395
|
+
|
380
396
|
if (textSmoothing) {
|
381
397
|
textController.pushToQueue(data);
|
382
398
|
|
@@ -389,6 +405,12 @@ export const fetchSSE = async (url: string, options: RequestInit & FetchSSEOptio
|
|
389
405
|
break;
|
390
406
|
}
|
391
407
|
|
408
|
+
case 'usage': {
|
409
|
+
usage = data;
|
410
|
+
options.onMessageHandle?.({ type: 'usage', usage: data });
|
411
|
+
break;
|
412
|
+
}
|
413
|
+
|
392
414
|
case 'grounding': {
|
393
415
|
grounding = data;
|
394
416
|
options.onMessageHandle?.({ grounding: data, type: 'grounding' });
|
@@ -475,6 +497,7 @@ export const fetchSSE = async (url: string, options: RequestInit & FetchSSEOptio
|
|
475
497
|
toolCalls,
|
476
498
|
traceId,
|
477
499
|
type: finishedType,
|
500
|
+
usage,
|
478
501
|
});
|
479
502
|
}
|
480
503
|
}
|
package/src/utils/format.ts
CHANGED
@@ -116,7 +116,9 @@ export const formatPrice = (price: number, fractionDigits: number = 2) => {
|
|
116
116
|
return `${numeral(a).format('0,0')}.${b}`;
|
117
117
|
};
|
118
118
|
|
119
|
-
export const formatPriceByCurrency = (price
|
119
|
+
export const formatPriceByCurrency = (price?: number, currency?: ModelPriceCurrency) => {
|
120
|
+
if (!price) return '-';
|
121
|
+
|
120
122
|
if (currency === 'CNY') {
|
121
123
|
return formatPrice(price / USD_TO_CNY);
|
122
124
|
}
|