@dexto/core 1.6.16 → 1.6.18
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 +84 -11
- package/dist/agent/DextoAgent.d.ts +12 -1
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +77 -4
- package/dist/agent/runtime-config.d.ts +2 -0
- package/dist/agent/runtime-config.d.ts.map +1 -1
- 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 +3 -0
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +63 -17
- package/dist/llm/executor/turn-executor.cjs +3 -0
- package/dist/llm/executor/turn-executor.d.ts +1 -0
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +3 -0
- 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/factory.cjs +3 -1
- package/dist/llm/services/factory.d.ts +7 -3
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +3 -1
- package/dist/llm/services/types.d.ts +2 -0
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/services/vercel.cjs +4 -1
- package/dist/llm/services/vercel.d.ts +2 -1
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +4 -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 +29 -0
- package/dist/llm/usage-scope.d.ts +4 -0
- package/dist/llm/usage-scope.d.ts.map +1 -0
- package/dist/llm/usage-scope.js +6 -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/mcp/bundled-config.cjs +206 -0
- package/dist/mcp/bundled-config.d.ts +10 -0
- package/dist/mcp/bundled-config.d.ts.map +1 -0
- package/dist/mcp/bundled-config.js +173 -0
- package/dist/mcp/index.cjs +43 -15
- package/dist/mcp/index.d.ts +11 -7
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +35 -7
- package/dist/prompts/providers/config-prompt-provider.cjs +15 -1
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +15 -1
- package/dist/session/chat-session.cjs +30 -19
- 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 +30 -19
- package/dist/session/session-manager.cjs +140 -67
- package/dist/session/session-manager.d.ts +8 -1
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +142 -67
- package/dist/systemPrompt/manager.cjs +7 -1
- package/dist/systemPrompt/manager.d.ts.map +1 -1
- package/dist/systemPrompt/manager.js +7 -1
- package/dist/systemPrompt/schemas.cjs +7 -0
- package/dist/systemPrompt/schemas.d.ts +14 -0
- package/dist/systemPrompt/schemas.d.ts.map +1 -1
- package/dist/systemPrompt/schemas.js +6 -0
- package/dist/systemPrompt/types.d.ts +2 -0
- package/dist/systemPrompt/types.d.ts.map +1 -1
- package/dist/tools/tool-manager.cjs +20 -1
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +21 -2
- package/package.json +2 -1
|
@@ -823,12 +823,22 @@ function isReasoningCapableModel(model, provider) {
|
|
|
823
823
|
return false;
|
|
824
824
|
}
|
|
825
825
|
function calculateCost(usage, pricing) {
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
const
|
|
830
|
-
const
|
|
831
|
-
|
|
826
|
+
return calculateCostBreakdown(usage, pricing).totalUsd;
|
|
827
|
+
}
|
|
828
|
+
function calculateCostBreakdown(usage, pricing) {
|
|
829
|
+
const inputUsd = (usage.inputTokens ?? 0) * pricing.inputPerM / 1e6;
|
|
830
|
+
const outputUsd = (usage.outputTokens ?? 0) * pricing.outputPerM / 1e6;
|
|
831
|
+
const cacheReadUsd = (usage.cacheReadTokens ?? 0) * (pricing.cacheReadPerM ?? 0) / 1e6;
|
|
832
|
+
const cacheWriteUsd = (usage.cacheWriteTokens ?? 0) * (pricing.cacheWritePerM ?? 0) / 1e6;
|
|
833
|
+
const reasoningUsd = (usage.reasoningTokens ?? 0) * (pricing.reasoningPerM ?? pricing.outputPerM) / 1e6;
|
|
834
|
+
return {
|
|
835
|
+
inputUsd,
|
|
836
|
+
outputUsd,
|
|
837
|
+
reasoningUsd,
|
|
838
|
+
cacheReadUsd,
|
|
839
|
+
cacheWriteUsd,
|
|
840
|
+
totalUsd: inputUsd + outputUsd + cacheReadUsd + cacheWriteUsd + reasoningUsd
|
|
841
|
+
};
|
|
832
842
|
}
|
|
833
843
|
export {
|
|
834
844
|
DEFAULT_MAX_INPUT_TOKENS,
|
|
@@ -836,6 +846,7 @@ export {
|
|
|
836
846
|
MIME_TYPE_TO_FILE_TYPE,
|
|
837
847
|
acceptsAnyModel,
|
|
838
848
|
calculateCost,
|
|
849
|
+
calculateCostBreakdown,
|
|
839
850
|
getAllModelsForProvider,
|
|
840
851
|
getAllSupportedModels,
|
|
841
852
|
getAllowedMimeTypes,
|
|
@@ -211,7 +211,8 @@ function createVercelModel(llmConfig, context) {
|
|
|
211
211
|
throw import_errors.LLMError.unsupportedProvider(provider);
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
|
-
function createLLMService(config, toolManager, systemPromptManager, historyProvider, sessionEventBus, sessionId, resourceManager, logger,
|
|
214
|
+
function createLLMService(config, toolManager, systemPromptManager, historyProvider, sessionEventBus, sessionId, resourceManager, logger, options = {}) {
|
|
215
|
+
const { usageScopeId, compactionStrategy } = options;
|
|
215
216
|
const model = createVercelModel(config, {
|
|
216
217
|
sessionId,
|
|
217
218
|
onCodexRateLimitStatus: (snapshot) => {
|
|
@@ -232,6 +233,7 @@ function createLLMService(config, toolManager, systemPromptManager, historyProvi
|
|
|
232
233
|
sessionId,
|
|
233
234
|
resourceManager,
|
|
234
235
|
logger,
|
|
236
|
+
usageScopeId,
|
|
235
237
|
compactionStrategy
|
|
236
238
|
);
|
|
237
239
|
}
|
|
@@ -7,6 +7,7 @@ import type { ConversationHistoryProvider } from '../../session/history/types.js
|
|
|
7
7
|
import type { SystemPromptManager } from '../../systemPrompt/manager.js';
|
|
8
8
|
import type { Logger } from '../../logger/v2/types.js';
|
|
9
9
|
import { type CodexRateLimitSnapshot } from '../providers/codex-app-server.js';
|
|
10
|
+
import type { CompactionStrategy } from '../../context/compaction/types.js';
|
|
10
11
|
/**
|
|
11
12
|
* Context for model creation, including session info for usage tracking.
|
|
12
13
|
*/
|
|
@@ -18,6 +19,10 @@ export interface DextoProviderContext {
|
|
|
18
19
|
/** Optional callback for ChatGPT Login rate-limit status updates from Codex. */
|
|
19
20
|
onCodexRateLimitStatus?: (snapshot: CodexRateLimitSnapshot) => void;
|
|
20
21
|
}
|
|
22
|
+
export interface CreateLLMServiceOptions {
|
|
23
|
+
usageScopeId?: string | undefined;
|
|
24
|
+
compactionStrategy?: CompactionStrategy | null | undefined;
|
|
25
|
+
}
|
|
21
26
|
/**
|
|
22
27
|
* Create a Vercel AI SDK LanguageModel from config.
|
|
23
28
|
*
|
|
@@ -41,9 +46,8 @@ export declare function createVercelModel(llmConfig: ValidatedLLMConfig, context
|
|
|
41
46
|
* @param sessionId Session ID
|
|
42
47
|
* @param resourceManager Resource manager for blob storage and resource access
|
|
43
48
|
* @param logger Logger instance for dependency injection
|
|
44
|
-
* @param
|
|
45
|
-
* @param compactionConfig Optional compaction configuration for thresholds
|
|
49
|
+
* @param options Session-scoped runtime options
|
|
46
50
|
* @returns VercelLLMService instance
|
|
47
51
|
*/
|
|
48
|
-
export declare function createLLMService(config: ValidatedLLMConfig, toolManager: ToolManager, systemPromptManager: SystemPromptManager, historyProvider: ConversationHistoryProvider, sessionEventBus: SessionEventBus, sessionId: string, resourceManager: import('../../resources/index.js').ResourceManager, logger: Logger,
|
|
52
|
+
export declare function createLLMService(config: ValidatedLLMConfig, toolManager: ToolManager, systemPromptManager: SystemPromptManager, historyProvider: ConversationHistoryProvider, sessionEventBus: SessionEventBus, sessionId: string, resourceManager: import('../../resources/index.js').ResourceManager, logger: Logger, options?: CreateLLMServiceOptions): VercelLLMService;
|
|
49
53
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/services/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAEH,KAAK,sBAAsB,EAC9B,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/services/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAEH,KAAK,sBAAsB,EAC9B,MAAM,kCAAkC,CAAC;AAO1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAmB5E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACrC,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,uBAAuB;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAC;CAC9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC/B,aAAa,CAwOf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,2BAA2B,EAC5C,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,OAAO,0BAA0B,EAAE,eAAe,EACnE,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACtC,gBAAgB,CA2BlB"}
|
|
@@ -193,7 +193,8 @@ function createVercelModel(llmConfig, context) {
|
|
|
193
193
|
throw LLMError.unsupportedProvider(provider);
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
|
-
function createLLMService(config, toolManager, systemPromptManager, historyProvider, sessionEventBus, sessionId, resourceManager, logger,
|
|
196
|
+
function createLLMService(config, toolManager, systemPromptManager, historyProvider, sessionEventBus, sessionId, resourceManager, logger, options = {}) {
|
|
197
|
+
const { usageScopeId, compactionStrategy } = options;
|
|
197
198
|
const model = createVercelModel(config, {
|
|
198
199
|
sessionId,
|
|
199
200
|
onCodexRateLimitStatus: (snapshot) => {
|
|
@@ -214,6 +215,7 @@ function createLLMService(config, toolManager, systemPromptManager, historyProvi
|
|
|
214
215
|
sessionId,
|
|
215
216
|
resourceManager,
|
|
216
217
|
logger,
|
|
218
|
+
usageScopeId,
|
|
217
219
|
compactionStrategy
|
|
218
220
|
);
|
|
219
221
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
|
|
@@ -93,13 +93,14 @@ class VercelLLMService {
|
|
|
93
93
|
messageQueue;
|
|
94
94
|
compactionStrategy;
|
|
95
95
|
modelLimits;
|
|
96
|
+
usageScopeId;
|
|
96
97
|
/**
|
|
97
98
|
* Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
|
|
98
99
|
*/
|
|
99
100
|
getModelId() {
|
|
100
101
|
return typeof this.model === "string" ? this.model : this.model.modelId;
|
|
101
102
|
}
|
|
102
|
-
constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, compactionStrategy) {
|
|
103
|
+
constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, usageScopeId, compactionStrategy) {
|
|
103
104
|
this.logger = logger.createChild(import_types2.DextoLogComponent.LLM);
|
|
104
105
|
this.model = model;
|
|
105
106
|
this.config = config;
|
|
@@ -107,6 +108,7 @@ class VercelLLMService {
|
|
|
107
108
|
this.sessionEventBus = sessionEventBus;
|
|
108
109
|
this.sessionId = sessionId;
|
|
109
110
|
this.resourceManager = resourceManager;
|
|
111
|
+
this.usageScopeId = usageScopeId;
|
|
110
112
|
this.compactionStrategy = compactionStrategy ?? null;
|
|
111
113
|
this.messageQueue = new import_message_queue.MessageQueueService(this.sessionEventBus, this.logger);
|
|
112
114
|
const formatter = new import_vercel.VercelMessageFormatter(this.logger);
|
|
@@ -150,6 +152,7 @@ class VercelLLMService {
|
|
|
150
152
|
maxOutputTokens: this.config.maxOutputTokens,
|
|
151
153
|
temperature: this.config.temperature,
|
|
152
154
|
baseURL: this.config.baseURL,
|
|
155
|
+
usageScopeId: this.usageScopeId,
|
|
153
156
|
// Provider-specific options
|
|
154
157
|
reasoning: this.config.reasoning
|
|
155
158
|
},
|
|
@@ -37,11 +37,12 @@ export declare class VercelLLMService {
|
|
|
37
37
|
private messageQueue;
|
|
38
38
|
private compactionStrategy;
|
|
39
39
|
private modelLimits?;
|
|
40
|
+
private readonly usageScopeId;
|
|
40
41
|
/**
|
|
41
42
|
* Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
|
|
42
43
|
*/
|
|
43
44
|
private getModelId;
|
|
44
|
-
constructor(toolManager: ToolManager, model: LanguageModel, systemPromptManager: SystemPromptManager, historyProvider: ConversationHistoryProvider, sessionEventBus: SessionEventBus, config: ValidatedLLMConfig, sessionId: string, resourceManager: ResourceManager, logger: Logger, compactionStrategy?: import('../../context/compaction/types.js').CompactionStrategy | null);
|
|
45
|
+
constructor(toolManager: ToolManager, model: LanguageModel, systemPromptManager: SystemPromptManager, historyProvider: ConversationHistoryProvider, sessionEventBus: SessionEventBus, config: ValidatedLLMConfig, sessionId: string, resourceManager: ResourceManager, logger: Logger, usageScopeId?: string, compactionStrategy?: import('../../context/compaction/types.js').CompactionStrategy | null);
|
|
45
46
|
getAllTools(): Promise<ToolSet>;
|
|
46
47
|
getEnabledTools(): Promise<ToolSet>;
|
|
47
48
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/services/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqB,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,qBAIa,gBAAgB;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,kBAAkB,CAEf;IACX,OAAO,CAAC,WAAW,CAAC,CAAc;
|
|
1
|
+
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/services/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqB,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,qBAIa,gBAAgB;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,kBAAkB,CAEf;IACX,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAElD;;OAEG;IACH,OAAO,CAAC,UAAU;gBAKd,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,aAAa,EACpB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,2BAA2B,EAC5C,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,kBAAkB,CAAC,EAAE,OAAO,mCAAmC,EAAE,kBAAkB,GAAG,IAAI;IAwC9F,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAMnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAc,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7C;;;;;;;OAOG;IACG,MAAM,CACR,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA0D5B;;;OAGG;IACH,SAAS,IAAI,gBAAgB;IA+B7B;;OAEG;IACH,iBAAiB,IAAI,cAAc,CAAC,OAAO,CAAC;IAI5C;;OAEG;IACH,eAAe,IAAI,mBAAmB;IAItC;;OAEG;IACH,qBAAqB,IAAI,OAAO,mCAAmC,EAAE,kBAAkB,GAAG,IAAI;IAI9F,gBAAgB,IAAI,aAAa;CAGpC"}
|
|
@@ -30,13 +30,14 @@ class VercelLLMService {
|
|
|
30
30
|
messageQueue;
|
|
31
31
|
compactionStrategy;
|
|
32
32
|
modelLimits;
|
|
33
|
+
usageScopeId;
|
|
33
34
|
/**
|
|
34
35
|
* Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
|
|
35
36
|
*/
|
|
36
37
|
getModelId() {
|
|
37
38
|
return typeof this.model === "string" ? this.model : this.model.modelId;
|
|
38
39
|
}
|
|
39
|
-
constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, compactionStrategy) {
|
|
40
|
+
constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, usageScopeId, compactionStrategy) {
|
|
40
41
|
this.logger = logger.createChild(DextoLogComponent.LLM);
|
|
41
42
|
this.model = model;
|
|
42
43
|
this.config = config;
|
|
@@ -44,6 +45,7 @@ class VercelLLMService {
|
|
|
44
45
|
this.sessionEventBus = sessionEventBus;
|
|
45
46
|
this.sessionId = sessionId;
|
|
46
47
|
this.resourceManager = resourceManager;
|
|
48
|
+
this.usageScopeId = usageScopeId;
|
|
47
49
|
this.compactionStrategy = compactionStrategy ?? null;
|
|
48
50
|
this.messageQueue = new MessageQueueService(this.sessionEventBus, this.logger);
|
|
49
51
|
const formatter = new VercelMessageFormatter(this.logger);
|
|
@@ -87,6 +89,7 @@ class VercelLLMService {
|
|
|
87
89
|
maxOutputTokens: this.config.maxOutputTokens,
|
|
88
90
|
temperature: this.config.temperature,
|
|
89
91
|
baseURL: this.config.baseURL,
|
|
92
|
+
usageScopeId: this.usageScopeId,
|
|
90
93
|
// Provider-specific options
|
|
91
94
|
reasoning: this.config.reasoning
|
|
92
95
|
},
|
package/dist/llm/types.cjs
CHANGED
|
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var types_exports = {};
|
|
20
20
|
__export(types_exports, {
|
|
21
|
+
LLM_PRICING_STATUSES: () => LLM_PRICING_STATUSES,
|
|
21
22
|
LLM_PROVIDERS: () => LLM_PROVIDERS,
|
|
22
23
|
SUPPORTED_FILE_TYPES: () => SUPPORTED_FILE_TYPES
|
|
23
24
|
});
|
|
@@ -44,9 +45,11 @@ const LLM_PROVIDERS = [
|
|
|
44
45
|
"dexto-nova"
|
|
45
46
|
// Dexto gateway - routes through api.dexto.ai/v1 with billing
|
|
46
47
|
];
|
|
48
|
+
const LLM_PRICING_STATUSES = ["estimated", "unpriced"];
|
|
47
49
|
const SUPPORTED_FILE_TYPES = ["pdf", "image", "audio"];
|
|
48
50
|
// Annotate the CommonJS export names for ESM import in node:
|
|
49
51
|
0 && (module.exports = {
|
|
52
|
+
LLM_PRICING_STATUSES,
|
|
50
53
|
LLM_PROVIDERS,
|
|
51
54
|
SUPPORTED_FILE_TYPES
|
|
52
55
|
});
|
package/dist/llm/types.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export declare const LLM_PROVIDERS: readonly ["openai", "openai-compatible", "anthropic", "google", "groq", "xai", "cohere", "minimax", "glm", "openrouter", "litellm", "glama", "vertex", "bedrock", "local", "ollama", "dexto-nova"];
|
|
2
2
|
export type LLMProvider = (typeof LLM_PROVIDERS)[number];
|
|
3
|
+
export declare const LLM_PRICING_STATUSES: readonly ["estimated", "unpriced"];
|
|
4
|
+
export type LLMPricingStatus = (typeof LLM_PRICING_STATUSES)[number];
|
|
3
5
|
export declare const SUPPORTED_FILE_TYPES: readonly ["pdf", "image", "audio"];
|
|
4
6
|
export type SupportedFileType = (typeof SUPPORTED_FILE_TYPES)[number];
|
|
5
7
|
export type ReasoningVariant = string;
|
package/dist/llm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,oMAkBhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACvB,mDAAmD;IACnD,QAAQ,EAAE,WAAW,CAAC;IAEtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,oMAkBhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACvB,mDAAmD;IACnD,QAAQ,EAAE,WAAW,CAAC;IAEtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
|
package/dist/llm/types.js
CHANGED
|
@@ -21,8 +21,10 @@ const LLM_PROVIDERS = [
|
|
|
21
21
|
"dexto-nova"
|
|
22
22
|
// Dexto gateway - routes through api.dexto.ai/v1 with billing
|
|
23
23
|
];
|
|
24
|
+
const LLM_PRICING_STATUSES = ["estimated", "unpriced"];
|
|
24
25
|
const SUPPORTED_FILE_TYPES = ["pdf", "image", "audio"];
|
|
25
26
|
export {
|
|
27
|
+
LLM_PRICING_STATUSES,
|
|
26
28
|
LLM_PROVIDERS,
|
|
27
29
|
SUPPORTED_FILE_TYPES
|
|
28
30
|
};
|
|
@@ -0,0 +1,50 @@
|
|
|
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_metadata_exports = {};
|
|
20
|
+
__export(usage_metadata_exports, {
|
|
21
|
+
getUsagePricingMetadata: () => getUsagePricingMetadata,
|
|
22
|
+
hasMeaningfulTokenUsage: () => hasMeaningfulTokenUsage
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(usage_metadata_exports);
|
|
25
|
+
var import_registry = require("./registry/index.js");
|
|
26
|
+
function hasMeaningfulTokenUsage(tokenUsage) {
|
|
27
|
+
if (!tokenUsage) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
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;
|
|
31
|
+
}
|
|
32
|
+
function getUsagePricingMetadata(config) {
|
|
33
|
+
const { provider, model, tokenUsage } = config;
|
|
34
|
+
if (!provider || !model || !tokenUsage || !hasMeaningfulTokenUsage(tokenUsage)) {
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
const pricing = (0, import_registry.getModelPricing)(provider, model);
|
|
38
|
+
if (!pricing) {
|
|
39
|
+
return { pricingStatus: "unpriced" };
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
estimatedCost: (0, import_registry.calculateCost)(tokenUsage, pricing),
|
|
43
|
+
pricingStatus: "estimated"
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
getUsagePricingMetadata,
|
|
49
|
+
hasMeaningfulTokenUsage
|
|
50
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LLMProvider, LLMPricingStatus, TokenUsage } from './types.js';
|
|
2
|
+
export interface LLMUsagePricingMetadata {
|
|
3
|
+
estimatedCost?: number;
|
|
4
|
+
pricingStatus?: LLMPricingStatus;
|
|
5
|
+
}
|
|
6
|
+
export declare function hasMeaningfulTokenUsage(tokenUsage: TokenUsage | undefined): boolean;
|
|
7
|
+
export declare function getUsagePricingMetadata(config: {
|
|
8
|
+
provider?: LLMProvider;
|
|
9
|
+
model?: string;
|
|
10
|
+
tokenUsage?: TokenUsage;
|
|
11
|
+
}): LLMUsagePricingMetadata;
|
|
12
|
+
//# sourceMappingURL=usage-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-metadata.d.ts","sourceRoot":"","sources":["../../src/llm/usage-metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,WAAW,uBAAuB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAanF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B,GAAG,uBAAuB,CAmB1B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import "../chunk-PTJYTZNU.js";
|
|
2
|
+
import { calculateCost, getModelPricing } from "./registry/index.js";
|
|
3
|
+
function hasMeaningfulTokenUsage(tokenUsage) {
|
|
4
|
+
if (!tokenUsage) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
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;
|
|
8
|
+
}
|
|
9
|
+
function getUsagePricingMetadata(config) {
|
|
10
|
+
const { provider, model, tokenUsage } = config;
|
|
11
|
+
if (!provider || !model || !tokenUsage || !hasMeaningfulTokenUsage(tokenUsage)) {
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
const pricing = getModelPricing(provider, model);
|
|
15
|
+
if (!pricing) {
|
|
16
|
+
return { pricingStatus: "unpriced" };
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
estimatedCost: calculateCost(tokenUsage, pricing),
|
|
20
|
+
pricingStatus: "estimated"
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
getUsagePricingMetadata,
|
|
25
|
+
hasMeaningfulTokenUsage
|
|
26
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
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_scope_exports = {};
|
|
20
|
+
__export(usage_scope_exports, {
|
|
21
|
+
UsageScopeIdSchema: () => UsageScopeIdSchema
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(usage_scope_exports);
|
|
24
|
+
var import_zod = require("zod");
|
|
25
|
+
const UsageScopeIdSchema = import_zod.z.string().trim().min(1);
|
|
26
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
27
|
+
0 && (module.exports = {
|
|
28
|
+
UsageScopeIdSchema
|
|
29
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-scope.d.ts","sourceRoot":"","sources":["../../src/llm/usage-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB,aAA2B,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -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
|
+
};
|