@theia/ai-core 1.62.1 → 1.63.0-next.24
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/lib/browser/token-usage-frontend-service-impl.d.ts.map +1 -1
- package/lib/browser/token-usage-frontend-service-impl.js +20 -2
- package/lib/browser/token-usage-frontend-service-impl.js.map +1 -1
- package/lib/browser/token-usage-frontend-service.d.ts +4 -0
- package/lib/browser/token-usage-frontend-service.d.ts.map +1 -1
- package/lib/browser/token-usage-frontend-service.js.map +1 -1
- package/lib/common/token-usage-service.d.ts +8 -0
- package/lib/common/token-usage-service.d.ts.map +1 -1
- package/lib/common/tool-invocation-registry.d.ts +7 -0
- package/lib/common/tool-invocation-registry.d.ts.map +1 -1
- package/lib/common/tool-invocation-registry.js +12 -1
- package/lib/common/tool-invocation-registry.js.map +1 -1
- package/lib/node/token-usage-service-impl.d.ts.map +1 -1
- package/lib/node/token-usage-service-impl.js +14 -1
- package/lib/node/token-usage-service-impl.js.map +1 -1
- package/package.json +10 -10
- package/src/browser/token-usage-frontend-service-impl.ts +27 -2
- package/src/browser/token-usage-frontend-service.ts +4 -0
- package/src/common/token-usage-service.ts +8 -0
- package/src/common/tool-invocation-registry.ts +20 -2
- package/src/node/token-usage-service-impl.ts +19 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-frontend-service-impl.d.ts","sourceRoot":"","sources":["../../src/browser/token-usage-frontend-service-impl.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,qBACa,2BAA4B,YAAW,uBAAuB;IACvE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAClE,QAAQ,CAAC,mBAAmB,0CAAmC;IAE/D,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAI5C;AAED,qBACa,6BAA8B,YAAW,yBAAyB;IAG3E,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAGpE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAExD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwC;IAC7E,QAAQ,CAAC,mBAAmB,qDAAmC;IAE/D,OAAO,CAAC,eAAe,CAA6B;IAGpD,SAAS,CAAC,IAAI,IAAI,IAAI;IAQtB;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAWzD;;OAEG;IACH,OAAO,CAAC,oBAAoB;
|
|
1
|
+
{"version":3,"file":"token-usage-frontend-service-impl.d.ts","sourceRoot":"","sources":["../../src/browser/token-usage-frontend-service-impl.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,qBACa,2BAA4B,YAAW,uBAAuB;IACvE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAClE,QAAQ,CAAC,mBAAmB,0CAAmC;IAE/D,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAI5C;AAED,qBACa,6BAA8B,YAAW,yBAAyB;IAG3E,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAGpE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAExD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwC;IAC7E,QAAQ,CAAC,mBAAmB,qDAAmC;IAE/D,OAAO,CAAC,eAAe,CAA6B;IAGpD,SAAS,CAAC,IAAI,IAAI,IAAI;IAQtB;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAWzD;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAoE/B"}
|
|
@@ -73,6 +73,14 @@ let TokenUsageFrontendServiceImpl = class TokenUsageFrontendServiceImpl {
|
|
|
73
73
|
if (existing) {
|
|
74
74
|
existing.inputTokens += usage.inputTokens;
|
|
75
75
|
existing.outputTokens += usage.outputTokens;
|
|
76
|
+
// Add cached tokens if they exist
|
|
77
|
+
if (usage.cachedInputTokens !== undefined) {
|
|
78
|
+
existing.cachedInputTokens += usage.cachedInputTokens;
|
|
79
|
+
}
|
|
80
|
+
// Add read cached tokens if they exist
|
|
81
|
+
if (usage.readCachedInputTokens !== undefined) {
|
|
82
|
+
existing.readCachedInputTokens += usage.readCachedInputTokens;
|
|
83
|
+
}
|
|
76
84
|
// Update last used if this usage is more recent
|
|
77
85
|
if (!existing.lastUsed || (usage.timestamp && usage.timestamp > existing.lastUsed)) {
|
|
78
86
|
existing.lastUsed = usage.timestamp;
|
|
@@ -82,6 +90,8 @@ let TokenUsageFrontendServiceImpl = class TokenUsageFrontendServiceImpl {
|
|
|
82
90
|
modelMap.set(usage.model, {
|
|
83
91
|
inputTokens: usage.inputTokens,
|
|
84
92
|
outputTokens: usage.outputTokens,
|
|
93
|
+
cachedInputTokens: usage.cachedInputTokens || 0,
|
|
94
|
+
readCachedInputTokens: usage.readCachedInputTokens || 0,
|
|
85
95
|
lastUsed: usage.timestamp
|
|
86
96
|
});
|
|
87
97
|
}
|
|
@@ -89,12 +99,20 @@ let TokenUsageFrontendServiceImpl = class TokenUsageFrontendServiceImpl {
|
|
|
89
99
|
// Convert map to array of model usage data
|
|
90
100
|
const result = [];
|
|
91
101
|
for (const [modelId, data] of modelMap.entries()) {
|
|
92
|
-
|
|
102
|
+
const modelData = {
|
|
93
103
|
modelId,
|
|
94
104
|
inputTokens: data.inputTokens,
|
|
95
105
|
outputTokens: data.outputTokens,
|
|
96
106
|
lastUsed: data.lastUsed
|
|
97
|
-
}
|
|
107
|
+
};
|
|
108
|
+
// Only include cache-related fields if they have non-zero values
|
|
109
|
+
if (data.cachedInputTokens > 0) {
|
|
110
|
+
modelData.cachedInputTokens = data.cachedInputTokens;
|
|
111
|
+
}
|
|
112
|
+
if (data.readCachedInputTokens > 0) {
|
|
113
|
+
modelData.readCachedInputTokens = data.readCachedInputTokens;
|
|
114
|
+
}
|
|
115
|
+
result.push(modelData);
|
|
98
116
|
}
|
|
99
117
|
return result;
|
|
100
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-frontend-service-impl.js","sourceRoot":"","sources":["../../src/browser/token-usage-frontend-service-impl.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4DAAiF;AACjF,sCAAsC;AAEtC,uEAA8E;AAC9E,iDAA6D;AAGtD,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAAjC;QACc,yBAAoB,GAAG,IAAI,cAAO,EAAc,CAAC;QACzD,wBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;IAMnE,CAAC;IAJG,gBAAgB,CAAC,KAAiB;QAC9B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;CAEJ,CAAA;AARY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,sBAAU,GAAE;GACA,2BAA2B,CAQvC;AAGM,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAAnC;QAQc,yBAAoB,GAAG,IAAI,cAAO,EAAyB,CAAC;QACpE,wBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAEvD,oBAAe,GAA0B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"token-usage-frontend-service-impl.js","sourceRoot":"","sources":["../../src/browser/token-usage-frontend-service-impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,10 @@ export interface ModelTokenUsageData {
|
|
|
9
9
|
inputTokens: number;
|
|
10
10
|
/** Number of output tokens used */
|
|
11
11
|
outputTokens: number;
|
|
12
|
+
/** Number of input tokens written to cache */
|
|
13
|
+
cachedInputTokens?: number;
|
|
14
|
+
/** Number of input tokens read from cache */
|
|
15
|
+
readCachedInputTokens?: number;
|
|
12
16
|
/** Date when the model was last used */
|
|
13
17
|
lastUsed?: Date;
|
|
14
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-frontend-service.d.ts","sourceRoot":"","sources":["../../src/browser/token-usage-frontend-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,eAAsC,CAAC;AAC7E,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE3D;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;CACvD"}
|
|
1
|
+
{"version":3,"file":"token-usage-frontend-service.d.ts","sourceRoot":"","sources":["../../src/browser/token-usage-frontend-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,eAAsC,CAAC;AAC7E,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE3D;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;CACvD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-frontend-service.js","sourceRoot":"","sources":["../../src/browser/token-usage-frontend-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;
|
|
1
|
+
{"version":3,"file":"token-usage-frontend-service.js","sourceRoot":"","sources":["../../src/browser/token-usage-frontend-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAsBhF;;GAEG;AACU,QAAA,yBAAyB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC"}
|
|
@@ -5,6 +5,10 @@ export interface TokenUsage {
|
|
|
5
5
|
inputTokens: number;
|
|
6
6
|
/** The output token count */
|
|
7
7
|
outputTokens: number;
|
|
8
|
+
/** Input tokens written to cache */
|
|
9
|
+
cachedInputTokens?: number;
|
|
10
|
+
/** Input tokens read from cache */
|
|
11
|
+
readCachedInputTokens?: number;
|
|
8
12
|
/** The model identifier */
|
|
9
13
|
model: string;
|
|
10
14
|
/** The timestamp of when the tokens were used */
|
|
@@ -17,6 +21,10 @@ export interface TokenUsageParams {
|
|
|
17
21
|
inputTokens: number;
|
|
18
22
|
/** The output token count */
|
|
19
23
|
outputTokens: number;
|
|
24
|
+
/** Input tokens placed in cache */
|
|
25
|
+
cachedInputTokens?: number;
|
|
26
|
+
/** Input tokens read from cache */
|
|
27
|
+
readCachedInputTokens?: number;
|
|
20
28
|
/** Request identifier */
|
|
21
29
|
requestId: string;
|
|
22
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-service.d.ts","sourceRoot":"","sources":["../../src/common/token-usage-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D,MAAM,WAAW,UAAU;IACvB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,EAAE,IAAI,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAExC,SAAS,CAAC,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC9D"}
|
|
1
|
+
{"version":3,"file":"token-usage-service.d.ts","sourceRoot":"","sources":["../../src/common/token-usage-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D,MAAM,WAAW,UAAU;IACvB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,EAAE,IAAI,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAExC,SAAS,CAAC,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC9D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { interfaces } from '@theia/core/shared/inversify';
|
|
2
2
|
import { ToolRequest } from './language-model';
|
|
3
|
+
import { Event } from '@theia/core';
|
|
3
4
|
export declare const ToolInvocationRegistry: unique symbol;
|
|
4
5
|
/**
|
|
5
6
|
* Registry for all the function calls available to Agents.
|
|
@@ -39,6 +40,10 @@ export interface ToolInvocationRegistry {
|
|
|
39
40
|
* @param providerName - The name of the tool provider whose tools should be removed (as specificed in the `ToolRequest`).
|
|
40
41
|
*/
|
|
41
42
|
unregisterAllTools(providerName: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Event that is fired whenever the registry changes (tool registered or unregistered).
|
|
45
|
+
*/
|
|
46
|
+
onDidChange: Event<void>;
|
|
42
47
|
}
|
|
43
48
|
export declare const ToolProvider: unique symbol;
|
|
44
49
|
export interface ToolProvider {
|
|
@@ -48,6 +53,8 @@ export interface ToolProvider {
|
|
|
48
53
|
export declare function bindToolProvider(identifier: interfaces.Newable<ToolProvider>, bind: interfaces.Bind): void;
|
|
49
54
|
export declare class ToolInvocationRegistryImpl implements ToolInvocationRegistry {
|
|
50
55
|
private tools;
|
|
56
|
+
private readonly onDidChangeEmitter;
|
|
57
|
+
readonly onDidChange: Event<void>;
|
|
51
58
|
private providers;
|
|
52
59
|
init(): void;
|
|
53
60
|
unregisterAllTools(providerName: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-invocation-registry.d.ts","sourceRoot":"","sources":["../../src/common/tool-invocation-registry.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA4C,UAAU,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-invocation-registry.d.ts","sourceRoot":"","sources":["../../src/common/tool-invocation-registry.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA4C,UAAU,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAiC,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnE,eAAO,MAAM,sBAAsB,eAAmC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAEtC;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAErD;;;;;;OAMG;IACH,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAElD;;;;OAIG;IACH,eAAe,IAAI,WAAW,EAAE,CAAC;IAEjC;;;;OAIG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/C;;OAEG;IACH,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,YAAY,eAAyB,CAAC;AACnD,MAAM,WAAW,YAAY;IACzB,OAAO,IAAI,WAAW,CAAC;CAC1B;AAED,qGAAqG;AACrG,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,IAAI,CAG1G;AAED,qBACa,0BAA2B,YAAW,sBAAsB;IAErE,OAAO,CAAC,KAAK,CAA4D;IAEzE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuB;IAC1D,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAiC;IAIlE,OAAO,CAAC,SAAS,CAAqC;IAGtD,IAAI,IAAI,IAAI;IAMZ,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAiB9C,eAAe,IAAI,WAAW,EAAE;IAIhC,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IASrC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIpD,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;CAWpD"}
|
|
@@ -30,6 +30,8 @@ exports.bindToolProvider = bindToolProvider;
|
|
|
30
30
|
let ToolInvocationRegistryImpl = class ToolInvocationRegistryImpl {
|
|
31
31
|
constructor() {
|
|
32
32
|
this.tools = new Map();
|
|
33
|
+
this.onDidChangeEmitter = new core_1.Emitter();
|
|
34
|
+
this.onDidChange = this.onDidChangeEmitter.event;
|
|
33
35
|
}
|
|
34
36
|
init() {
|
|
35
37
|
this.providers.getContributions().forEach(provider => {
|
|
@@ -43,7 +45,15 @@ let ToolInvocationRegistryImpl = class ToolInvocationRegistryImpl {
|
|
|
43
45
|
toolsToRemove.push(id);
|
|
44
46
|
}
|
|
45
47
|
}
|
|
46
|
-
|
|
48
|
+
let changed = false;
|
|
49
|
+
toolsToRemove.forEach(id => {
|
|
50
|
+
if (this.tools.delete(id)) {
|
|
51
|
+
changed = true;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
if (changed) {
|
|
55
|
+
this.onDidChangeEmitter.fire();
|
|
56
|
+
}
|
|
47
57
|
}
|
|
48
58
|
getAllFunctions() {
|
|
49
59
|
return Array.from(this.tools.values());
|
|
@@ -54,6 +64,7 @@ let ToolInvocationRegistryImpl = class ToolInvocationRegistryImpl {
|
|
|
54
64
|
}
|
|
55
65
|
else {
|
|
56
66
|
this.tools.set(tool.id, tool);
|
|
67
|
+
this.onDidChangeEmitter.fire();
|
|
57
68
|
}
|
|
58
69
|
}
|
|
59
70
|
getFunction(toolId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-invocation-registry.js","sourceRoot":"","sources":["../../src/common/tool-invocation-registry.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4DAAoG;AAEpG,
|
|
1
|
+
{"version":3,"file":"tool-invocation-registry.js","sourceRoot":"","sources":["../../src/common/tool-invocation-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-service-impl.d.ts","sourceRoot":"","sources":["../../src/node/token-usage-service-impl.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,qBACa,qBAAsB,YAAW,iBAAiB;IAC3D,OAAO,CAAC,MAAM,CAAsC;IAEpD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,GAAG,IAAI;IAI5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAEhD;;;;;;OAMG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"token-usage-service-impl.d.ts","sourceRoot":"","sources":["../../src/node/token-usage-service-impl.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,qBACa,qBAAsB,YAAW,iBAAiB;IAC3D,OAAO,CAAC,MAAM,CAAsC;IAEpD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,GAAG,IAAI;IAI5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAEhD;;;;;;OAMG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC9E;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAGhD"}
|
|
@@ -39,6 +39,8 @@ let TokenUsageServiceImpl = class TokenUsageServiceImpl {
|
|
|
39
39
|
var _a;
|
|
40
40
|
const usage = {
|
|
41
41
|
inputTokens: params.inputTokens,
|
|
42
|
+
cachedInputTokens: params.cachedInputTokens,
|
|
43
|
+
readCachedInputTokens: params.readCachedInputTokens,
|
|
42
44
|
outputTokens: params.outputTokens,
|
|
43
45
|
model,
|
|
44
46
|
timestamp: new Date(),
|
|
@@ -46,7 +48,18 @@ let TokenUsageServiceImpl = class TokenUsageServiceImpl {
|
|
|
46
48
|
};
|
|
47
49
|
this.tokenUsages.push(usage);
|
|
48
50
|
(_a = this.client) === null || _a === void 0 ? void 0 : _a.notifyTokenUsage(usage);
|
|
49
|
-
|
|
51
|
+
let logMessage = `Input Tokens: ${params.inputTokens};`;
|
|
52
|
+
if (params.cachedInputTokens) {
|
|
53
|
+
logMessage += ` Input Tokens written to cache: ${params.cachedInputTokens};`;
|
|
54
|
+
}
|
|
55
|
+
if (params.readCachedInputTokens) {
|
|
56
|
+
logMessage += ` Input Tokens read from cache: ${params.readCachedInputTokens};`;
|
|
57
|
+
}
|
|
58
|
+
logMessage += ` Output Tokens: ${params.outputTokens}; Model: ${model};`;
|
|
59
|
+
if (params.requestId) {
|
|
60
|
+
logMessage += `; RequestId: ${params.requestId}`;
|
|
61
|
+
}
|
|
62
|
+
console.debug(logMessage);
|
|
50
63
|
// For now we just store in memory
|
|
51
64
|
// In the future, this could be persisted to disk, a database, or sent to a service
|
|
52
65
|
return Promise.resolve();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage-service-impl.js","sourceRoot":"","sources":["../../src/node/token-usage-service-impl.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4DAA0D;AAKnD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAA3B;QAUc,gBAAW,GAAiB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"token-usage-service-impl.js","sourceRoot":"","sources":["../../src/node/token-usage-service-impl.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4DAA0D;AAKnD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAA3B;QAUc,gBAAW,GAAiB,EAAE,CAAC;IAmDpD,CAAC;IA1DG;;OAEG;IACH,SAAS,CAAC,MAA2C;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAID;;;;;;OAMG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,MAAwB;;QAC1D,MAAM,KAAK,GAAe;YACtB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,KAAK;YACL,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC9B,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAA,IAAI,CAAC,MAAM,0CAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,UAAU,GAAG,iBAAiB,MAAM,CAAC,WAAW,GAAG,CAAC;QAExD,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC3B,UAAU,IAAI,mCAAmC,MAAM,CAAC,iBAAiB,GAAG,CAAC;QACjF,CAAC;QAED,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAC/B,UAAU,IAAI,kCAAkC,MAAM,CAAC,qBAAqB,GAAG,CAAC;QACpF,CAAC;QAED,UAAU,IAAI,mBAAmB,MAAM,CAAC,YAAY,YAAY,KAAK,GAAG,CAAC;QAEzE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,UAAU,IAAI,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC;QACrD,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,kCAAkC;QAClC,mFAAmF;QACnF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAChB,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;CACJ,CAAA;AA7DY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,sBAAU,GAAE;GACA,qBAAqB,CA6DjC"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.63.0-next.24+83b50cc66",
|
|
4
4
|
"description": "Theia - AI Core",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.
|
|
7
|
-
"@theia/editor": "1.
|
|
8
|
-
"@theia/filesystem": "1.
|
|
9
|
-
"@theia/monaco": "1.
|
|
6
|
+
"@theia/core": "1.63.0-next.24+83b50cc66",
|
|
7
|
+
"@theia/editor": "1.63.0-next.24+83b50cc66",
|
|
8
|
+
"@theia/filesystem": "1.63.0-next.24+83b50cc66",
|
|
9
|
+
"@theia/monaco": "1.63.0-next.24+83b50cc66",
|
|
10
10
|
"@theia/monaco-editor-core": "1.96.302",
|
|
11
|
-
"@theia/output": "1.
|
|
12
|
-
"@theia/variable-resolver": "1.
|
|
13
|
-
"@theia/workspace": "1.
|
|
11
|
+
"@theia/output": "1.63.0-next.24+83b50cc66",
|
|
12
|
+
"@theia/variable-resolver": "1.63.0-next.24+83b50cc66",
|
|
13
|
+
"@theia/workspace": "1.63.0-next.24+83b50cc66",
|
|
14
14
|
"@types/js-yaml": "^4.0.9",
|
|
15
15
|
"fast-deep-equal": "^3.1.3",
|
|
16
16
|
"js-yaml": "^4.1.0",
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
"watch": "theiaext watch"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@theia/ext-scripts": "1.62.
|
|
56
|
+
"@theia/ext-scripts": "1.62.0"
|
|
57
57
|
},
|
|
58
58
|
"nyc": {
|
|
59
59
|
"extends": "../../configs/nyc.json"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "83b50cc66b001a5b9100ccd944dcace04cd4ae2e"
|
|
62
62
|
}
|
|
@@ -76,6 +76,8 @@ export class TokenUsageFrontendServiceImpl implements TokenUsageFrontendService
|
|
|
76
76
|
const modelMap = new Map<string, {
|
|
77
77
|
inputTokens: number;
|
|
78
78
|
outputTokens: number;
|
|
79
|
+
cachedInputTokens: number;
|
|
80
|
+
readCachedInputTokens: number;
|
|
79
81
|
lastUsed?: Date;
|
|
80
82
|
}>();
|
|
81
83
|
|
|
@@ -87,6 +89,16 @@ export class TokenUsageFrontendServiceImpl implements TokenUsageFrontendService
|
|
|
87
89
|
existing.inputTokens += usage.inputTokens;
|
|
88
90
|
existing.outputTokens += usage.outputTokens;
|
|
89
91
|
|
|
92
|
+
// Add cached tokens if they exist
|
|
93
|
+
if (usage.cachedInputTokens !== undefined) {
|
|
94
|
+
existing.cachedInputTokens += usage.cachedInputTokens;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Add read cached tokens if they exist
|
|
98
|
+
if (usage.readCachedInputTokens !== undefined) {
|
|
99
|
+
existing.readCachedInputTokens += usage.readCachedInputTokens;
|
|
100
|
+
}
|
|
101
|
+
|
|
90
102
|
// Update last used if this usage is more recent
|
|
91
103
|
if (!existing.lastUsed || (usage.timestamp && usage.timestamp > existing.lastUsed)) {
|
|
92
104
|
existing.lastUsed = usage.timestamp;
|
|
@@ -95,6 +107,8 @@ export class TokenUsageFrontendServiceImpl implements TokenUsageFrontendService
|
|
|
95
107
|
modelMap.set(usage.model, {
|
|
96
108
|
inputTokens: usage.inputTokens,
|
|
97
109
|
outputTokens: usage.outputTokens,
|
|
110
|
+
cachedInputTokens: usage.cachedInputTokens || 0,
|
|
111
|
+
readCachedInputTokens: usage.readCachedInputTokens || 0,
|
|
98
112
|
lastUsed: usage.timestamp
|
|
99
113
|
});
|
|
100
114
|
}
|
|
@@ -104,12 +118,23 @@ export class TokenUsageFrontendServiceImpl implements TokenUsageFrontendService
|
|
|
104
118
|
const result: ModelTokenUsageData[] = [];
|
|
105
119
|
|
|
106
120
|
for (const [modelId, data] of modelMap.entries()) {
|
|
107
|
-
|
|
121
|
+
const modelData: ModelTokenUsageData = {
|
|
108
122
|
modelId,
|
|
109
123
|
inputTokens: data.inputTokens,
|
|
110
124
|
outputTokens: data.outputTokens,
|
|
111
125
|
lastUsed: data.lastUsed
|
|
112
|
-
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// Only include cache-related fields if they have non-zero values
|
|
129
|
+
if (data.cachedInputTokens > 0) {
|
|
130
|
+
modelData.cachedInputTokens = data.cachedInputTokens;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (data.readCachedInputTokens > 0) {
|
|
134
|
+
modelData.readCachedInputTokens = data.readCachedInputTokens;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
result.push(modelData);
|
|
113
138
|
}
|
|
114
139
|
|
|
115
140
|
return result;
|
|
@@ -26,6 +26,10 @@ export interface ModelTokenUsageData {
|
|
|
26
26
|
inputTokens: number;
|
|
27
27
|
/** Number of output tokens used */
|
|
28
28
|
outputTokens: number;
|
|
29
|
+
/** Number of input tokens written to cache */
|
|
30
|
+
cachedInputTokens?: number;
|
|
31
|
+
/** Number of input tokens read from cache */
|
|
32
|
+
readCachedInputTokens?: number;
|
|
29
33
|
/** Date when the model was last used */
|
|
30
34
|
lastUsed?: Date;
|
|
31
35
|
}
|
|
@@ -23,6 +23,10 @@ export interface TokenUsage {
|
|
|
23
23
|
inputTokens: number;
|
|
24
24
|
/** The output token count */
|
|
25
25
|
outputTokens: number;
|
|
26
|
+
/** Input tokens written to cache */
|
|
27
|
+
cachedInputTokens?: number;
|
|
28
|
+
/** Input tokens read from cache */
|
|
29
|
+
readCachedInputTokens?: number;
|
|
26
30
|
/** The model identifier */
|
|
27
31
|
model: string;
|
|
28
32
|
/** The timestamp of when the tokens were used */
|
|
@@ -36,6 +40,10 @@ export interface TokenUsageParams {
|
|
|
36
40
|
inputTokens: number;
|
|
37
41
|
/** The output token count */
|
|
38
42
|
outputTokens: number;
|
|
43
|
+
/** Input tokens placed in cache */
|
|
44
|
+
cachedInputTokens?: number;
|
|
45
|
+
/** Input tokens read from cache */
|
|
46
|
+
readCachedInputTokens?: number;
|
|
39
47
|
/** Request identifier */
|
|
40
48
|
requestId: string;
|
|
41
49
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import { inject, injectable, named, postConstruct, interfaces } from '@theia/core/shared/inversify';
|
|
18
18
|
import { ToolRequest } from './language-model';
|
|
19
|
-
import { ContributionProvider } from '@theia/core';
|
|
19
|
+
import { ContributionProvider, Emitter, Event } from '@theia/core';
|
|
20
20
|
|
|
21
21
|
export const ToolInvocationRegistry = Symbol('ToolInvocationRegistry');
|
|
22
22
|
|
|
@@ -62,6 +62,11 @@ export interface ToolInvocationRegistry {
|
|
|
62
62
|
* @param providerName - The name of the tool provider whose tools should be removed (as specificed in the `ToolRequest`).
|
|
63
63
|
*/
|
|
64
64
|
unregisterAllTools(providerName: string): void;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Event that is fired whenever the registry changes (tool registered or unregistered).
|
|
68
|
+
*/
|
|
69
|
+
onDidChange: Event<void>;
|
|
65
70
|
}
|
|
66
71
|
|
|
67
72
|
export const ToolProvider = Symbol('ToolProvider');
|
|
@@ -80,6 +85,9 @@ export class ToolInvocationRegistryImpl implements ToolInvocationRegistry {
|
|
|
80
85
|
|
|
81
86
|
private tools: Map<string, ToolRequest> = new Map<string, ToolRequest>();
|
|
82
87
|
|
|
88
|
+
private readonly onDidChangeEmitter = new Emitter<void>();
|
|
89
|
+
readonly onDidChange: Event<void> = this.onDidChangeEmitter.event;
|
|
90
|
+
|
|
83
91
|
@inject(ContributionProvider)
|
|
84
92
|
@named(ToolProvider)
|
|
85
93
|
private providers: ContributionProvider<ToolProvider>;
|
|
@@ -98,7 +106,15 @@ export class ToolInvocationRegistryImpl implements ToolInvocationRegistry {
|
|
|
98
106
|
toolsToRemove.push(id);
|
|
99
107
|
}
|
|
100
108
|
}
|
|
101
|
-
|
|
109
|
+
let changed = false;
|
|
110
|
+
toolsToRemove.forEach(id => {
|
|
111
|
+
if (this.tools.delete(id)) {
|
|
112
|
+
changed = true;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
if (changed) {
|
|
116
|
+
this.onDidChangeEmitter.fire();
|
|
117
|
+
}
|
|
102
118
|
}
|
|
103
119
|
getAllFunctions(): ToolRequest[] {
|
|
104
120
|
return Array.from(this.tools.values());
|
|
@@ -109,6 +125,7 @@ export class ToolInvocationRegistryImpl implements ToolInvocationRegistry {
|
|
|
109
125
|
console.warn(`Function with id ${tool.id} is already registered.`);
|
|
110
126
|
} else {
|
|
111
127
|
this.tools.set(tool.id, tool);
|
|
128
|
+
this.onDidChangeEmitter.fire();
|
|
112
129
|
}
|
|
113
130
|
}
|
|
114
131
|
|
|
@@ -128,3 +145,4 @@ export class ToolInvocationRegistryImpl implements ToolInvocationRegistry {
|
|
|
128
145
|
return tools;
|
|
129
146
|
}
|
|
130
147
|
}
|
|
148
|
+
|
|
@@ -41,6 +41,8 @@ export class TokenUsageServiceImpl implements TokenUsageService {
|
|
|
41
41
|
async recordTokenUsage(model: string, params: TokenUsageParams): Promise<void> {
|
|
42
42
|
const usage: TokenUsage = {
|
|
43
43
|
inputTokens: params.inputTokens,
|
|
44
|
+
cachedInputTokens: params.cachedInputTokens,
|
|
45
|
+
readCachedInputTokens: params.readCachedInputTokens,
|
|
44
46
|
outputTokens: params.outputTokens,
|
|
45
47
|
model,
|
|
46
48
|
timestamp: new Date(),
|
|
@@ -50,7 +52,23 @@ export class TokenUsageServiceImpl implements TokenUsageService {
|
|
|
50
52
|
this.tokenUsages.push(usage);
|
|
51
53
|
this.client?.notifyTokenUsage(usage);
|
|
52
54
|
|
|
53
|
-
|
|
55
|
+
let logMessage = `Input Tokens: ${params.inputTokens};`;
|
|
56
|
+
|
|
57
|
+
if (params.cachedInputTokens) {
|
|
58
|
+
logMessage += ` Input Tokens written to cache: ${params.cachedInputTokens};`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (params.readCachedInputTokens) {
|
|
62
|
+
logMessage += ` Input Tokens read from cache: ${params.readCachedInputTokens};`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
logMessage += ` Output Tokens: ${params.outputTokens}; Model: ${model};`;
|
|
66
|
+
|
|
67
|
+
if (params.requestId) {
|
|
68
|
+
logMessage += `; RequestId: ${params.requestId}`;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
console.debug(logMessage);
|
|
54
72
|
// For now we just store in memory
|
|
55
73
|
// In the future, this could be persisted to disk, a database, or sent to a service
|
|
56
74
|
return Promise.resolve();
|