@didim365/agent-cli-core 0.2.3 → 0.2.4
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/src/agents/llmAgentChatSession.d.ts +117 -0
- package/dist/src/agents/llmAgentChatSession.js +252 -0
- package/dist/src/agents/llmAgentChatSession.js.map +1 -0
- package/dist/src/agents/local-invocation.d.ts +7 -0
- package/dist/src/agents/local-invocation.js +71 -1
- package/dist/src/agents/local-invocation.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +16 -0
- package/dist/src/core/baseLlmClient.js +134 -2
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/client.d.ts +6 -0
- package/dist/src/core/client.js +75 -1
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/llmMessageUtils.d.ts +36 -0
- package/dist/src/core/llmMessageUtils.js +66 -0
- package/dist/src/core/llmMessageUtils.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/ide/types.d.ts +4 -4
- package/dist/src/providers/gemini/requestBuilder.js +7 -1
- package/dist/src/providers/gemini/requestBuilder.js.map +1 -1
- package/dist/src/providers/gemini/typeConversion.d.ts +11 -2
- package/dist/src/providers/gemini/typeConversion.js +42 -0
- package/dist/src/providers/gemini/typeConversion.js.map +1 -1
- package/dist/src/services/sessionSummaryUtils.js +1 -8
- package/dist/src/services/sessionSummaryUtils.js.map +1 -1
- package/dist/src/utils/tokenCalculation.js +37 -0
- package/dist/src/utils/tokenCalculation.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/utils/messageInspectors.d.ts +0 -16
- package/dist/src/utils/messageInspectors.js +0 -24
- package/dist/src/utils/messageInspectors.js.map +0 -1
package/dist/src/ide/types.d.ts
CHANGED
|
@@ -362,23 +362,23 @@ export declare const IdeDiffAcceptedNotificationSchema: z.ZodObject<{
|
|
|
362
362
|
*/
|
|
363
363
|
content: z.ZodString;
|
|
364
364
|
}, "strip", z.ZodTypeAny, {
|
|
365
|
-
filePath: string;
|
|
366
365
|
content: string;
|
|
367
|
-
}, {
|
|
368
366
|
filePath: string;
|
|
367
|
+
}, {
|
|
369
368
|
content: string;
|
|
369
|
+
filePath: string;
|
|
370
370
|
}>;
|
|
371
371
|
}, "strip", z.ZodTypeAny, {
|
|
372
372
|
params: {
|
|
373
|
-
filePath: string;
|
|
374
373
|
content: string;
|
|
374
|
+
filePath: string;
|
|
375
375
|
};
|
|
376
376
|
jsonrpc: "2.0";
|
|
377
377
|
method: "ide/diffAccepted";
|
|
378
378
|
}, {
|
|
379
379
|
params: {
|
|
380
|
-
filePath: string;
|
|
381
380
|
content: string;
|
|
381
|
+
filePath: string;
|
|
382
382
|
};
|
|
383
383
|
jsonrpc: "2.0";
|
|
384
384
|
method: "ide/diffAccepted";
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2026 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { fixToolResultRoles } from '../../core/llmMessageUtils.js';
|
|
6
7
|
import { convertContentsToLlmMessages, convertPartListUnionToLlmContents, } from './typeConversion.js';
|
|
7
8
|
// ============================================================================
|
|
8
9
|
// Tool conversion: Gemini Tool[] → LlmToolDefinition[]
|
|
@@ -100,10 +101,15 @@ export function buildLlmRequestFromGeminiState(opts) {
|
|
|
100
101
|
// Convert current request PartListUnion → LlmContent[]
|
|
101
102
|
const currentContents = convertPartListUnionToLlmContents(opts.currentRequest);
|
|
102
103
|
// Append current request as a user message
|
|
103
|
-
const
|
|
104
|
+
const rawMessages = [
|
|
104
105
|
...historyMessages,
|
|
105
106
|
{ role: 'user', content: currentContents },
|
|
106
107
|
];
|
|
108
|
+
// Fix tool_result roles: Gemini stores functionResponse as role:'user',
|
|
109
|
+
// but OpenAI requires role:'tool' with tool_call_id.
|
|
110
|
+
// fixToolResultRoles() converts { role:'user', content:[tool_result] }
|
|
111
|
+
// → { role:'tool', content:[tool_result] } for provider compatibility.
|
|
112
|
+
const messages = fixToolResultRoles(rawMessages);
|
|
107
113
|
// Build the request with required fields
|
|
108
114
|
const request = {
|
|
109
115
|
model: opts.model,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestBuilder.js","sourceRoot":"","sources":["../../../../src/providers/gemini/requestBuilder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"requestBuilder.js","sourceRoot":"","sources":["../../../../src/providers/gemini/requestBuilder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,GAClC,MAAM,qBAAqB,CAAC;AAE7B,+EAA+E;AAC/E,uDAAuD;AACvD,+EAA+E;AAE/E,gEAAgE;AAChE,MAAM,eAAe,GAAwC;IAC3D,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,MAA+B;IAE/B,MAAM,OAAO,GAAI,MAAM,CAAC,MAAM,CAAwB,IAAI,QAAQ,CAAC;IACnE,MAAM,IAAI,GAAoB;QAC5B,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,QAAQ;KAC3C,CAAC;IAEF,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,aAAa,CAAW,CAAC;IACrD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAa,CAAC;IACzC,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAGtC,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAChC,MAAM,CAAC,OAAO,CAA4B,CAC3C,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAC/C,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAiD,CAAC;YACtE,MAAM,UAAU,GAAoC,EAAE,CAAC;YAEvD,IAAI,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAGnC,CAAC;gBACF,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClD,UAAU,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAsB;gBACpC,IAAI,EAAE,QAAQ;gBACd,UAAU;aACX,CAAC;YAEF,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzB,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAa,CAAC;YACvD,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,IAAK;gBAChB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAwBD;;;;;;;;;GASG;AACH,MAAM,UAAU,8BAA8B,CAC5C,IAA4B;IAE5B,2CAA2C;IAC3C,MAAM,eAAe,GAAG,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnE,uDAAuD;IACvD,MAAM,eAAe,GAAG,iCAAiC,CACvD,IAAI,CAAC,cAAc,CACpB,CAAC;IAEF,2CAA2C;IAC3C,MAAM,WAAW,GAAG;QAClB,GAAG,eAAe;QAClB,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,eAAe,EAAE;KACpD,CAAC;IAEF,wEAAwE;IACxE,qDAAqD;IACrD,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAEjD,yCAAyC;IACzC,MAAM,OAAO,GAAuB;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ;KACT,CAAC;IAEF,sBAAsB;IACtB,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAC3C,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACzC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;QAC7C,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* Used by routing call sites (client.ts, local-executor.ts) to bridge
|
|
13
13
|
* Gemini-specific chat history to provider-independent RoutingContext.
|
|
14
14
|
*/
|
|
15
|
-
import type { Content, PartListUnion } from '@google/genai';
|
|
16
|
-
import type { LlmContent, LlmMessage } from '../types.js';
|
|
15
|
+
import type { Content, GenerateContentResponse, PartListUnion } from '@google/genai';
|
|
16
|
+
import type { LlmContent, LlmGenerateResponse, LlmMessage } from '../types.js';
|
|
17
17
|
/**
|
|
18
18
|
* Convert a single Gemini Content to an LlmMessage.
|
|
19
19
|
*/
|
|
@@ -49,3 +49,12 @@ export declare function isContentToolCallMessage(content: Content): boolean;
|
|
|
49
49
|
* messageInspectors.ts. See {@link isContentToolCallMessage} for safety details.
|
|
50
50
|
*/
|
|
51
51
|
export declare function isContentToolResultMessage(content: Content): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Convert LlmGenerateResponse → GenerateContentResponse.
|
|
54
|
+
*
|
|
55
|
+
* Builds the minimal Gemini SDK response structure needed by callers
|
|
56
|
+
* that expect `candidates[0].content.parts[0].text` (e.g. getResponseText()).
|
|
57
|
+
*
|
|
58
|
+
* Handles text, tool_call, and thought content types.
|
|
59
|
+
*/
|
|
60
|
+
export declare function convertLlmResponseToGeminiResponse(llmResponse: LlmGenerateResponse): GenerateContentResponse;
|
|
@@ -162,4 +162,46 @@ export function isContentToolResultMessage(content) {
|
|
|
162
162
|
return false;
|
|
163
163
|
return llmMessage.content.every((c) => isToolResultContent(c));
|
|
164
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Convert LlmGenerateResponse → GenerateContentResponse.
|
|
167
|
+
*
|
|
168
|
+
* Builds the minimal Gemini SDK response structure needed by callers
|
|
169
|
+
* that expect `candidates[0].content.parts[0].text` (e.g. getResponseText()).
|
|
170
|
+
*
|
|
171
|
+
* Handles text, tool_call, and thought content types.
|
|
172
|
+
*/
|
|
173
|
+
export function convertLlmResponseToGeminiResponse(llmResponse) {
|
|
174
|
+
const parts = [];
|
|
175
|
+
for (const c of llmResponse.content) {
|
|
176
|
+
switch (c.type) {
|
|
177
|
+
case 'text':
|
|
178
|
+
parts.push({ text: c.text });
|
|
179
|
+
break;
|
|
180
|
+
case 'tool_call':
|
|
181
|
+
parts.push({
|
|
182
|
+
functionCall: {
|
|
183
|
+
id: c.id,
|
|
184
|
+
name: c.name,
|
|
185
|
+
args: c.arguments,
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
break;
|
|
189
|
+
case 'thought':
|
|
190
|
+
parts.push({ text: c.thought, thought: true });
|
|
191
|
+
break;
|
|
192
|
+
default:
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
candidates: [
|
|
198
|
+
{
|
|
199
|
+
content: {
|
|
200
|
+
role: 'model',
|
|
201
|
+
parts,
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
};
|
|
206
|
+
}
|
|
165
207
|
//# sourceMappingURL=typeConversion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeConversion.js","sourceRoot":"","sources":["../../../../src/providers/gemini/typeConversion.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"typeConversion.js","sourceRoot":"","sources":["../../../../src/providers/gemini/typeConversion.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,14 +33,7 @@ async function generateAndSaveSummary(config, sessionPath) {
|
|
|
33
33
|
debugLogger.debug('[SessionSummary] Content generator not available, skipping summary generation');
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
//
|
|
37
|
-
// BaseLlmClient uses legacy Gemini generateContent() which non-Gemini
|
|
38
|
-
// providers do not support, causing reportError → console.error.
|
|
39
|
-
if (contentGenerator.providerName &&
|
|
40
|
-
contentGenerator.providerName !== 'gemini') {
|
|
41
|
-
debugLogger.debug(`[SessionSummary] Non-Gemini provider (${contentGenerator.providerName}), skipping summary generation`);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
36
|
+
// [리뷰 #3] Non-Gemini providers now supported via BaseLlmClient llm* path (Phase 2).
|
|
44
37
|
const baseLlmClient = new BaseLlmClient(contentGenerator, config);
|
|
45
38
|
const summaryService = new SessionSummaryService(baseLlmClient);
|
|
46
39
|
// Generate summary
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionSummaryUtils.js","sourceRoot":"","sources":["../../../src/services/sessionSummaryUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAEnC;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,MAAc,EACd,WAAmB;IAEnB,oBAAoB;IACpB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,YAAY,GAAuB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE7D,iCAAiC;IACjC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,WAAW,CAAC,KAAK,CACf,+CAA+C,WAAW,YAAY,CACvE,CAAC;QACF,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,WAAW,CAAC,KAAK,CACf,gDAAgD,WAAW,EAAE,CAC9D,CAAC;QACF,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;IACtD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,WAAW,CAAC,KAAK,CACf,+EAA+E,CAChF,CAAC;QACF,OAAO;IACT,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"sessionSummaryUtils.js","sourceRoot":"","sources":["../../../src/services/sessionSummaryUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { convertPartListUnionToLlmContents } from '../providers/gemini/typeConversion.js';
|
|
6
7
|
import { debugLogger } from './debugLogger.js';
|
|
7
8
|
import { isTextContent, isImageContent } from './llmUtils.js';
|
|
8
9
|
// Token estimation constants
|
|
@@ -19,6 +20,9 @@ const PDF_TOKEN_ESTIMATE = 25800;
|
|
|
19
20
|
// Maximum number of characters to process with the full character-by-character heuristic.
|
|
20
21
|
// Above this, we use a faster approximation to avoid performance bottlenecks.
|
|
21
22
|
const MAX_CHARS_FOR_FULL_HEURISTIC = 100_000;
|
|
23
|
+
// Track providers that have already emitted llmCountTokens failure warning
|
|
24
|
+
// to avoid spamming logs on every media request (e.g. OpenAI supportsTokenCount=false).
|
|
25
|
+
const warnedProviders = new Set();
|
|
22
26
|
/**
|
|
23
27
|
* Estimates token count for parts synchronously using a heuristic.
|
|
24
28
|
* - Text: character-based heuristic (ASCII vs CJK) for small strings, length/4 for massive ones.
|
|
@@ -76,6 +80,39 @@ export async function calculateRequestTokenCount(request, contentGenerator, mode
|
|
|
76
80
|
return isMedia;
|
|
77
81
|
});
|
|
78
82
|
if (hasMedia) {
|
|
83
|
+
const providerName = contentGenerator.providerName;
|
|
84
|
+
const isNonGemini = providerName != null && providerName !== 'gemini';
|
|
85
|
+
// Non-Gemini: use llmCountTokens (provider-independent path)
|
|
86
|
+
// [리뷰 #2] llmCountTokens만 체크 — isProviderIndependentGenerator()는
|
|
87
|
+
// 3개 메서드 전수 요구라 토큰 계산에는 과도
|
|
88
|
+
if (isNonGemini && typeof contentGenerator.llmCountTokens === 'function') {
|
|
89
|
+
try {
|
|
90
|
+
// NOTE: 호출자(chatCompressionService 등)가 Content[] → flatMap → Part[]로
|
|
91
|
+
// 평탄화 후 전달하므로 원래 role/tool 문맥이 소실됨.
|
|
92
|
+
// 단일 user 메시지로 감싸서 전달하며, provider가 거부 시 catch → fallback.
|
|
93
|
+
// Gemini 경로도 동일 패턴 (pre-existing limitation). [리뷰 #1]
|
|
94
|
+
const llmContents = convertPartListUnionToLlmContents(parts);
|
|
95
|
+
const request = {
|
|
96
|
+
model,
|
|
97
|
+
messages: [{ role: 'user', content: llmContents }],
|
|
98
|
+
};
|
|
99
|
+
const response = await contentGenerator.llmCountTokens(request);
|
|
100
|
+
return response.totalTokens ?? 0;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
// [리뷰 #3] supportsTokenCount=false인 provider(OpenAI 등)는 항상 여기로
|
|
104
|
+
// 진입하여 heuristic fallback 사용. 성능 영향은 미미 (sync throw).
|
|
105
|
+
// [리뷰 #6] provider별 최초 1회만 warn 로그 출력 → 반복 경고 방지
|
|
106
|
+
const provider = contentGenerator.providerName ?? 'unknown';
|
|
107
|
+
if (!warnedProviders.has(provider)) {
|
|
108
|
+
warnedProviders.add(provider);
|
|
109
|
+
debugLogger.warn(`llmCountTokens not supported for ${provider}, using local estimate. ` +
|
|
110
|
+
`(This warning is shown once per provider.)`, error);
|
|
111
|
+
}
|
|
112
|
+
return estimateTokenCountSync(parts);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Gemini: use legacy countTokens
|
|
79
116
|
try {
|
|
80
117
|
const response = await contentGenerator.countTokens({
|
|
81
118
|
model,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenCalculation.js","sourceRoot":"","sources":["../../../src/utils/tokenCalculation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tokenCalculation.js","sourceRoot":"","sources":["../../../src/utils/tokenCalculation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import type { Content } from '@google/genai';
|
|
7
|
-
/**
|
|
8
|
-
* @deprecated Use {@link isToolResultMessage} from './llmUtils.js' for provider-independent code.
|
|
9
|
-
* This Content-based helper will be removed after full migration to LlmMessage types.
|
|
10
|
-
*/
|
|
11
|
-
export declare function isFunctionResponse(content: Content): boolean;
|
|
12
|
-
/**
|
|
13
|
-
* @deprecated Use {@link isToolCallMessage} from './llmUtils.js' for provider-independent code.
|
|
14
|
-
* This Content-based helper will be removed after full migration to LlmMessage types.
|
|
15
|
-
*/
|
|
16
|
-
export declare function isFunctionCall(content: Content): boolean;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* @deprecated Use {@link isToolResultMessage} from './llmUtils.js' for provider-independent code.
|
|
8
|
-
* This Content-based helper will be removed after full migration to LlmMessage types.
|
|
9
|
-
*/
|
|
10
|
-
export function isFunctionResponse(content) {
|
|
11
|
-
return (content.role === 'user' &&
|
|
12
|
-
!!content.parts &&
|
|
13
|
-
content.parts.every((part) => !!part.functionResponse));
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* @deprecated Use {@link isToolCallMessage} from './llmUtils.js' for provider-independent code.
|
|
17
|
-
* This Content-based helper will be removed after full migration to LlmMessage types.
|
|
18
|
-
*/
|
|
19
|
-
export function isFunctionCall(content) {
|
|
20
|
-
return (content.role === 'model' &&
|
|
21
|
-
!!content.parts &&
|
|
22
|
-
content.parts.every((part) => !!part.functionCall));
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=messageInspectors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messageInspectors.js","sourceRoot":"","sources":["../../../src/utils/messageInspectors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,MAAM;QACvB,CAAC,CAAC,OAAO,CAAC,KAAK;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CACvD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,OAAO;QACxB,CAAC,CAAC,OAAO,CAAC,KAAK;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CACnD,CAAC;AACJ,CAAC"}
|