@dexto/core 1.6.16 → 1.6.17
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/dist/agent/DextoAgent.cjs +21 -2
- package/dist/agent/DextoAgent.d.ts +1 -0
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +21 -2
- package/dist/agent/types.d.ts +7 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/context/manager.cjs +6 -1
- package/dist/context/manager.d.ts +3 -0
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +6 -1
- package/dist/context/types.d.ts +7 -1
- package/dist/context/types.d.ts.map +1 -1
- package/dist/events/index.d.ts +19 -17
- package/dist/events/index.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.cjs +63 -17
- package/dist/llm/executor/stream-processor.d.ts +2 -0
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +63 -17
- package/dist/llm/index.cjs +6 -0
- package/dist/llm/index.d.ts +3 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +3 -0
- package/dist/llm/registry/index.cjs +18 -6
- package/dist/llm/registry/index.d.ts +9 -0
- package/dist/llm/registry/index.d.ts.map +1 -1
- package/dist/llm/registry/index.js +17 -6
- package/dist/llm/services/types.d.ts +2 -0
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/types.cjs +3 -0
- package/dist/llm/types.d.ts +2 -0
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +2 -0
- package/dist/llm/usage-metadata.cjs +50 -0
- package/dist/llm/usage-metadata.d.ts +12 -0
- package/dist/llm/usage-metadata.d.ts.map +1 -0
- package/dist/llm/usage-metadata.js +26 -0
- package/dist/llm/usage-scope.cjs +38 -0
- package/dist/llm/usage-scope.d.ts +3 -0
- package/dist/llm/usage-scope.d.ts.map +1 -0
- package/dist/llm/usage-scope.js +14 -0
- package/dist/llm/usage-summary.cjs +112 -0
- package/dist/llm/usage-summary.d.ts +28 -0
- package/dist/llm/usage-summary.d.ts.map +1 -0
- package/dist/llm/usage-summary.js +86 -0
- package/dist/session/chat-session.cjs +21 -15
- package/dist/session/chat-session.d.ts +0 -1
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +21 -15
- package/dist/session/session-manager.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var usage_summary_exports = {};
|
|
20
|
+
__export(usage_summary_exports, {
|
|
21
|
+
accumulateTokenUsage: () => accumulateTokenUsage,
|
|
22
|
+
createEmptyAssistantUsageSummary: () => createEmptyAssistantUsageSummary,
|
|
23
|
+
createEmptyCumulativeTokenUsage: () => createEmptyCumulativeTokenUsage,
|
|
24
|
+
summarizeAssistantUsage: () => summarizeAssistantUsage
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(usage_summary_exports);
|
|
27
|
+
var import_types = require("../context/types.js");
|
|
28
|
+
function createEmptyCumulativeTokenUsage() {
|
|
29
|
+
return {
|
|
30
|
+
inputTokens: 0,
|
|
31
|
+
outputTokens: 0,
|
|
32
|
+
reasoningTokens: 0,
|
|
33
|
+
cacheReadTokens: 0,
|
|
34
|
+
cacheWriteTokens: 0,
|
|
35
|
+
totalTokens: 0
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function createEmptyAssistantUsageSummary() {
|
|
39
|
+
return {
|
|
40
|
+
tokenUsage: createEmptyCumulativeTokenUsage(),
|
|
41
|
+
estimatedCost: 0,
|
|
42
|
+
hasUnpricedResponses: false
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function hasUnpricedTokenUsage(usage) {
|
|
46
|
+
if (!usage) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return (usage.inputTokens ?? 0) > 0 || (usage.outputTokens ?? 0) > 0 || (usage.reasoningTokens ?? 0) > 0 || (usage.cacheReadTokens ?? 0) > 0 || (usage.cacheWriteTokens ?? 0) > 0 || (usage.totalTokens ?? 0) > 0;
|
|
50
|
+
}
|
|
51
|
+
function accumulateTokenUsage(target, usage) {
|
|
52
|
+
if (!usage) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
target.inputTokens += usage.inputTokens ?? 0;
|
|
56
|
+
target.outputTokens += usage.outputTokens ?? 0;
|
|
57
|
+
target.reasoningTokens += usage.reasoningTokens ?? 0;
|
|
58
|
+
target.cacheReadTokens += usage.cacheReadTokens ?? 0;
|
|
59
|
+
target.cacheWriteTokens += usage.cacheWriteTokens ?? 0;
|
|
60
|
+
target.totalTokens += usage.totalTokens ?? 0;
|
|
61
|
+
}
|
|
62
|
+
function summarizeAssistantUsage(messages, usageScopeId) {
|
|
63
|
+
const summary = createEmptyAssistantUsageSummary();
|
|
64
|
+
const modelStats = /* @__PURE__ */ new Map();
|
|
65
|
+
for (const message of messages) {
|
|
66
|
+
if (!(0, import_types.isAssistantMessage)(message)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (usageScopeId && message.usageScopeId !== usageScopeId) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
accumulateTokenUsage(summary.tokenUsage, message.tokenUsage);
|
|
73
|
+
if (message.estimatedCost !== void 0) {
|
|
74
|
+
summary.estimatedCost += message.estimatedCost;
|
|
75
|
+
}
|
|
76
|
+
if (message.pricingStatus === "unpriced" || hasUnpricedTokenUsage(message.tokenUsage) && message.estimatedCost === void 0 && message.pricingStatus === void 0) {
|
|
77
|
+
summary.hasUnpricedResponses = true;
|
|
78
|
+
}
|
|
79
|
+
if (!message.provider || !message.model) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const modelKey = `${message.provider}:${message.model}`;
|
|
83
|
+
const existingModelStat = modelStats.get(modelKey);
|
|
84
|
+
const modelStat = existingModelStat ?? (() => {
|
|
85
|
+
const newModelStat = {
|
|
86
|
+
provider: message.provider,
|
|
87
|
+
model: message.model,
|
|
88
|
+
messageCount: 0,
|
|
89
|
+
tokenUsage: createEmptyCumulativeTokenUsage(),
|
|
90
|
+
estimatedCost: 0
|
|
91
|
+
};
|
|
92
|
+
modelStats.set(modelKey, newModelStat);
|
|
93
|
+
return newModelStat;
|
|
94
|
+
})();
|
|
95
|
+
modelStat.messageCount += 1;
|
|
96
|
+
accumulateTokenUsage(modelStat.tokenUsage, message.tokenUsage);
|
|
97
|
+
if (message.estimatedCost !== void 0) {
|
|
98
|
+
modelStat.estimatedCost += message.estimatedCost;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (modelStats.size > 0) {
|
|
102
|
+
summary.modelStats = [...modelStats.values()];
|
|
103
|
+
}
|
|
104
|
+
return summary;
|
|
105
|
+
}
|
|
106
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
107
|
+
0 && (module.exports = {
|
|
108
|
+
accumulateTokenUsage,
|
|
109
|
+
createEmptyAssistantUsageSummary,
|
|
110
|
+
createEmptyCumulativeTokenUsage,
|
|
111
|
+
summarizeAssistantUsage
|
|
112
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type InternalMessage } from '../context/types.js';
|
|
2
|
+
import type { TokenUsage } from './types.js';
|
|
3
|
+
export interface CumulativeTokenUsage {
|
|
4
|
+
inputTokens: number;
|
|
5
|
+
outputTokens: number;
|
|
6
|
+
reasoningTokens: number;
|
|
7
|
+
cacheReadTokens: number;
|
|
8
|
+
cacheWriteTokens: number;
|
|
9
|
+
totalTokens: number;
|
|
10
|
+
}
|
|
11
|
+
export interface AssistantUsageSummary {
|
|
12
|
+
tokenUsage: CumulativeTokenUsage;
|
|
13
|
+
estimatedCost: number;
|
|
14
|
+
hasUnpricedResponses: boolean;
|
|
15
|
+
modelStats?: AssistantUsageModelStatistics[];
|
|
16
|
+
}
|
|
17
|
+
export interface AssistantUsageModelStatistics {
|
|
18
|
+
provider: string;
|
|
19
|
+
model: string;
|
|
20
|
+
messageCount: number;
|
|
21
|
+
tokenUsage: CumulativeTokenUsage;
|
|
22
|
+
estimatedCost: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function createEmptyCumulativeTokenUsage(): CumulativeTokenUsage;
|
|
25
|
+
export declare function createEmptyAssistantUsageSummary(): AssistantUsageSummary;
|
|
26
|
+
export declare function accumulateTokenUsage(target: CumulativeTokenUsage, usage: TokenUsage | undefined): void;
|
|
27
|
+
export declare function summarizeAssistantUsage(messages: readonly InternalMessage[], usageScopeId?: string): AssistantUsageSummary;
|
|
28
|
+
//# sourceMappingURL=usage-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-summary.d.ts","sourceRoot":"","sources":["../../src/llm/usage-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,oBAAoB,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,oBAAoB,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,+BAA+B,IAAI,oBAAoB,CAStE;AAED,wBAAgB,gCAAgC,IAAI,qBAAqB,CAMxE;AAiBD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,UAAU,GAAG,SAAS,GAC9B,IAAI,CAYN;AAED,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,YAAY,CAAC,EAAE,MAAM,GACtB,qBAAqB,CA4DvB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import "../chunk-PTJYTZNU.js";
|
|
2
|
+
import { isAssistantMessage } from "../context/types.js";
|
|
3
|
+
function createEmptyCumulativeTokenUsage() {
|
|
4
|
+
return {
|
|
5
|
+
inputTokens: 0,
|
|
6
|
+
outputTokens: 0,
|
|
7
|
+
reasoningTokens: 0,
|
|
8
|
+
cacheReadTokens: 0,
|
|
9
|
+
cacheWriteTokens: 0,
|
|
10
|
+
totalTokens: 0
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function createEmptyAssistantUsageSummary() {
|
|
14
|
+
return {
|
|
15
|
+
tokenUsage: createEmptyCumulativeTokenUsage(),
|
|
16
|
+
estimatedCost: 0,
|
|
17
|
+
hasUnpricedResponses: false
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function hasUnpricedTokenUsage(usage) {
|
|
21
|
+
if (!usage) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return (usage.inputTokens ?? 0) > 0 || (usage.outputTokens ?? 0) > 0 || (usage.reasoningTokens ?? 0) > 0 || (usage.cacheReadTokens ?? 0) > 0 || (usage.cacheWriteTokens ?? 0) > 0 || (usage.totalTokens ?? 0) > 0;
|
|
25
|
+
}
|
|
26
|
+
function accumulateTokenUsage(target, usage) {
|
|
27
|
+
if (!usage) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
target.inputTokens += usage.inputTokens ?? 0;
|
|
31
|
+
target.outputTokens += usage.outputTokens ?? 0;
|
|
32
|
+
target.reasoningTokens += usage.reasoningTokens ?? 0;
|
|
33
|
+
target.cacheReadTokens += usage.cacheReadTokens ?? 0;
|
|
34
|
+
target.cacheWriteTokens += usage.cacheWriteTokens ?? 0;
|
|
35
|
+
target.totalTokens += usage.totalTokens ?? 0;
|
|
36
|
+
}
|
|
37
|
+
function summarizeAssistantUsage(messages, usageScopeId) {
|
|
38
|
+
const summary = createEmptyAssistantUsageSummary();
|
|
39
|
+
const modelStats = /* @__PURE__ */ new Map();
|
|
40
|
+
for (const message of messages) {
|
|
41
|
+
if (!isAssistantMessage(message)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (usageScopeId && message.usageScopeId !== usageScopeId) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
accumulateTokenUsage(summary.tokenUsage, message.tokenUsage);
|
|
48
|
+
if (message.estimatedCost !== void 0) {
|
|
49
|
+
summary.estimatedCost += message.estimatedCost;
|
|
50
|
+
}
|
|
51
|
+
if (message.pricingStatus === "unpriced" || hasUnpricedTokenUsage(message.tokenUsage) && message.estimatedCost === void 0 && message.pricingStatus === void 0) {
|
|
52
|
+
summary.hasUnpricedResponses = true;
|
|
53
|
+
}
|
|
54
|
+
if (!message.provider || !message.model) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const modelKey = `${message.provider}:${message.model}`;
|
|
58
|
+
const existingModelStat = modelStats.get(modelKey);
|
|
59
|
+
const modelStat = existingModelStat ?? (() => {
|
|
60
|
+
const newModelStat = {
|
|
61
|
+
provider: message.provider,
|
|
62
|
+
model: message.model,
|
|
63
|
+
messageCount: 0,
|
|
64
|
+
tokenUsage: createEmptyCumulativeTokenUsage(),
|
|
65
|
+
estimatedCost: 0
|
|
66
|
+
};
|
|
67
|
+
modelStats.set(modelKey, newModelStat);
|
|
68
|
+
return newModelStat;
|
|
69
|
+
})();
|
|
70
|
+
modelStat.messageCount += 1;
|
|
71
|
+
accumulateTokenUsage(modelStat.tokenUsage, message.tokenUsage);
|
|
72
|
+
if (message.estimatedCost !== void 0) {
|
|
73
|
+
modelStat.estimatedCost += message.estimatedCost;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (modelStats.size > 0) {
|
|
77
|
+
summary.modelStats = [...modelStats.values()];
|
|
78
|
+
}
|
|
79
|
+
return summary;
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
accumulateTokenUsage,
|
|
83
|
+
createEmptyAssistantUsageSummary,
|
|
84
|
+
createEmptyCumulativeTokenUsage,
|
|
85
|
+
summarizeAssistantUsage
|
|
86
|
+
};
|
|
@@ -21,13 +21,14 @@ __export(chat_session_exports, {
|
|
|
21
21
|
ChatSession: () => ChatSession
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(chat_session_exports);
|
|
24
|
+
var import_crypto = require("crypto");
|
|
24
25
|
var import_factory = require("./history/factory.js");
|
|
25
26
|
var import_factory2 = require("../llm/services/factory.js");
|
|
26
27
|
var import_events = require("../events/index.js");
|
|
27
28
|
var import_types = require("../logger/v2/types.js");
|
|
28
29
|
var import_errors = require("../errors/index.js");
|
|
29
30
|
var import_error_codes = require("../hooks/error-codes.js");
|
|
30
|
-
var
|
|
31
|
+
var import_usage_metadata = require("../llm/usage-metadata.js");
|
|
31
32
|
var import_codex_base_url = require("../llm/providers/codex-base-url.js");
|
|
32
33
|
class ChatSession {
|
|
33
34
|
/**
|
|
@@ -88,12 +89,6 @@ class ChatSession {
|
|
|
88
89
|
* Calling cancel() aborts the in-flight LLM request and tool execution checks.
|
|
89
90
|
*/
|
|
90
91
|
currentRunController = null;
|
|
91
|
-
isMeaningfulTokenUsage(tokenUsage) {
|
|
92
|
-
if (!tokenUsage) {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
return (tokenUsage.inputTokens ?? 0) > 0 || (tokenUsage.outputTokens ?? 0) > 0 || (tokenUsage.reasoningTokens ?? 0) > 0 || (tokenUsage.cacheReadTokens ?? 0) > 0 || (tokenUsage.cacheWriteTokens ?? 0) > 0 || (tokenUsage.totalTokens ?? 0) > 0;
|
|
96
|
-
}
|
|
97
92
|
logger;
|
|
98
93
|
/**
|
|
99
94
|
* Initialize the session services asynchronously.
|
|
@@ -133,7 +128,7 @@ class ChatSession {
|
|
|
133
128
|
if (payload.tokenUsage) {
|
|
134
129
|
const llmConfig = this.services.stateManager.getLLMConfig(this.id);
|
|
135
130
|
const isChatGPTLogin = llmConfig.provider === "openai-compatible" && (0, import_codex_base_url.parseCodexBaseURL)(llmConfig.baseURL)?.authMode === "chatgpt";
|
|
136
|
-
const hasMeaningfulUsage =
|
|
131
|
+
const hasMeaningfulUsage = (0, import_usage_metadata.hasMeaningfulTokenUsage)(payload.tokenUsage);
|
|
137
132
|
if (isChatGPTLogin && !hasMeaningfulUsage) {
|
|
138
133
|
this.services.sessionManager.markUntrackedChatGPTLoginUsage(this.id).catch((err) => {
|
|
139
134
|
this.logger.warn(
|
|
@@ -146,12 +141,17 @@ class ChatSession {
|
|
|
146
141
|
provider: payload.provider ?? llmConfig.provider,
|
|
147
142
|
model: payload.model ?? llmConfig.model
|
|
148
143
|
};
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
this.services.sessionManager.accumulateTokenUsage(
|
|
144
|
+
const pricingMetadata = (0, import_usage_metadata.getUsagePricingMetadata)({
|
|
145
|
+
provider: modelInfo.provider,
|
|
146
|
+
model: modelInfo.model,
|
|
147
|
+
tokenUsage: payload.tokenUsage
|
|
148
|
+
});
|
|
149
|
+
this.services.sessionManager.accumulateTokenUsage(
|
|
150
|
+
this.id,
|
|
151
|
+
payload.tokenUsage,
|
|
152
|
+
payload.estimatedCost ?? pricingMetadata.estimatedCost,
|
|
153
|
+
modelInfo
|
|
154
|
+
).catch((err) => {
|
|
155
155
|
this.logger.warn(
|
|
156
156
|
`Failed to accumulate token usage: ${err instanceof Error ? err.message : String(err)}`
|
|
157
157
|
);
|
|
@@ -202,13 +202,18 @@ class ChatSession {
|
|
|
202
202
|
* @private
|
|
203
203
|
*/
|
|
204
204
|
async saveBlockedInteraction(userInput, errorMessage, _imageData, _fileData) {
|
|
205
|
+
const timestamp = Date.now();
|
|
205
206
|
const userMessage = {
|
|
207
|
+
id: (0, import_crypto.randomUUID)(),
|
|
206
208
|
role: "user",
|
|
209
|
+
timestamp,
|
|
207
210
|
content: [{ type: "text", text: "[Blocked by content policy: input redacted]" }]
|
|
208
211
|
};
|
|
209
212
|
const errorContent = `Error: ${errorMessage}`;
|
|
210
213
|
const assistantMessage = {
|
|
214
|
+
id: (0, import_crypto.randomUUID)(),
|
|
211
215
|
role: "assistant",
|
|
216
|
+
timestamp: timestamp + 1,
|
|
212
217
|
content: [{ type: "text", text: errorContent }]
|
|
213
218
|
};
|
|
214
219
|
await this.historyProvider.saveMessage(userMessage);
|
|
@@ -217,7 +222,8 @@ class ChatSession {
|
|
|
217
222
|
this.eventBus.emit("llm:response", {
|
|
218
223
|
content: errorContent,
|
|
219
224
|
provider: llmConfig.provider,
|
|
220
|
-
model: llmConfig.model
|
|
225
|
+
model: llmConfig.model,
|
|
226
|
+
...assistantMessage.id && { messageId: assistantMessage.id }
|
|
221
227
|
});
|
|
222
228
|
}
|
|
223
229
|
/**
|
|
@@ -98,7 +98,6 @@ export declare class ChatSession {
|
|
|
98
98
|
* Calling cancel() aborts the in-flight LLM request and tool execution checks.
|
|
99
99
|
*/
|
|
100
100
|
private currentRunController;
|
|
101
|
-
private isMeaningfulTokenUsage;
|
|
102
101
|
readonly logger: Logger;
|
|
103
102
|
/**
|
|
104
103
|
* Creates a new ChatSession instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "../chunk-PTJYTZNU.js";
|
|
2
|
+
import { randomUUID } from "crypto";
|
|
2
3
|
import { createDatabaseHistoryProvider } from "./history/factory.js";
|
|
3
4
|
import { createLLMService } from "../llm/services/factory.js";
|
|
4
5
|
import {
|
|
@@ -8,7 +9,7 @@ import {
|
|
|
8
9
|
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
9
10
|
import { DextoRuntimeError, ErrorScope, ErrorType } from "../errors/index.js";
|
|
10
11
|
import { HookErrorCode } from "../hooks/error-codes.js";
|
|
11
|
-
import {
|
|
12
|
+
import { getUsagePricingMetadata, hasMeaningfulTokenUsage } from "../llm/usage-metadata.js";
|
|
12
13
|
import { parseCodexBaseURL } from "../llm/providers/codex-base-url.js";
|
|
13
14
|
class ChatSession {
|
|
14
15
|
/**
|
|
@@ -69,12 +70,6 @@ class ChatSession {
|
|
|
69
70
|
* Calling cancel() aborts the in-flight LLM request and tool execution checks.
|
|
70
71
|
*/
|
|
71
72
|
currentRunController = null;
|
|
72
|
-
isMeaningfulTokenUsage(tokenUsage) {
|
|
73
|
-
if (!tokenUsage) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
return (tokenUsage.inputTokens ?? 0) > 0 || (tokenUsage.outputTokens ?? 0) > 0 || (tokenUsage.reasoningTokens ?? 0) > 0 || (tokenUsage.cacheReadTokens ?? 0) > 0 || (tokenUsage.cacheWriteTokens ?? 0) > 0 || (tokenUsage.totalTokens ?? 0) > 0;
|
|
77
|
-
}
|
|
78
73
|
logger;
|
|
79
74
|
/**
|
|
80
75
|
* Initialize the session services asynchronously.
|
|
@@ -114,7 +109,7 @@ class ChatSession {
|
|
|
114
109
|
if (payload.tokenUsage) {
|
|
115
110
|
const llmConfig = this.services.stateManager.getLLMConfig(this.id);
|
|
116
111
|
const isChatGPTLogin = llmConfig.provider === "openai-compatible" && parseCodexBaseURL(llmConfig.baseURL)?.authMode === "chatgpt";
|
|
117
|
-
const hasMeaningfulUsage =
|
|
112
|
+
const hasMeaningfulUsage = hasMeaningfulTokenUsage(payload.tokenUsage);
|
|
118
113
|
if (isChatGPTLogin && !hasMeaningfulUsage) {
|
|
119
114
|
this.services.sessionManager.markUntrackedChatGPTLoginUsage(this.id).catch((err) => {
|
|
120
115
|
this.logger.warn(
|
|
@@ -127,12 +122,17 @@ class ChatSession {
|
|
|
127
122
|
provider: payload.provider ?? llmConfig.provider,
|
|
128
123
|
model: payload.model ?? llmConfig.model
|
|
129
124
|
};
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
this.services.sessionManager.accumulateTokenUsage(
|
|
125
|
+
const pricingMetadata = getUsagePricingMetadata({
|
|
126
|
+
provider: modelInfo.provider,
|
|
127
|
+
model: modelInfo.model,
|
|
128
|
+
tokenUsage: payload.tokenUsage
|
|
129
|
+
});
|
|
130
|
+
this.services.sessionManager.accumulateTokenUsage(
|
|
131
|
+
this.id,
|
|
132
|
+
payload.tokenUsage,
|
|
133
|
+
payload.estimatedCost ?? pricingMetadata.estimatedCost,
|
|
134
|
+
modelInfo
|
|
135
|
+
).catch((err) => {
|
|
136
136
|
this.logger.warn(
|
|
137
137
|
`Failed to accumulate token usage: ${err instanceof Error ? err.message : String(err)}`
|
|
138
138
|
);
|
|
@@ -183,13 +183,18 @@ class ChatSession {
|
|
|
183
183
|
* @private
|
|
184
184
|
*/
|
|
185
185
|
async saveBlockedInteraction(userInput, errorMessage, _imageData, _fileData) {
|
|
186
|
+
const timestamp = Date.now();
|
|
186
187
|
const userMessage = {
|
|
188
|
+
id: randomUUID(),
|
|
187
189
|
role: "user",
|
|
190
|
+
timestamp,
|
|
188
191
|
content: [{ type: "text", text: "[Blocked by content policy: input redacted]" }]
|
|
189
192
|
};
|
|
190
193
|
const errorContent = `Error: ${errorMessage}`;
|
|
191
194
|
const assistantMessage = {
|
|
195
|
+
id: randomUUID(),
|
|
192
196
|
role: "assistant",
|
|
197
|
+
timestamp: timestamp + 1,
|
|
193
198
|
content: [{ type: "text", text: errorContent }]
|
|
194
199
|
};
|
|
195
200
|
await this.historyProvider.saveMessage(userMessage);
|
|
@@ -198,7 +203,8 @@ class ChatSession {
|
|
|
198
203
|
this.eventBus.emit("llm:response", {
|
|
199
204
|
content: errorContent,
|
|
200
205
|
provider: llmConfig.provider,
|
|
201
|
-
model: llmConfig.model
|
|
206
|
+
model: llmConfig.model,
|
|
207
|
+
...assistantMessage.id && { messageId: assistantMessage.id }
|
|
202
208
|
});
|
|
203
209
|
}
|
|
204
210
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|