@google/gemini-cli-core 0.12.0-nightly.20251027.cb0947c5 → 0.12.0-preview.0

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.
Files changed (126) hide show
  1. package/README.md +7 -5
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/code_assist/oauth2.js +8 -9
  6. package/dist/src/code_assist/oauth2.js.map +1 -1
  7. package/dist/src/code_assist/oauth2.test.js +32 -32
  8. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  9. package/dist/src/config/config.d.ts +11 -5
  10. package/dist/src/config/config.js +32 -9
  11. package/dist/src/config/config.js.map +1 -1
  12. package/dist/src/config/config.test.js +58 -11
  13. package/dist/src/config/config.test.js.map +1 -1
  14. package/dist/src/config/storage.d.ts +1 -0
  15. package/dist/src/config/storage.js +3 -0
  16. package/dist/src/config/storage.js.map +1 -1
  17. package/dist/src/core/contentGenerator.js +38 -31
  18. package/dist/src/core/contentGenerator.js.map +1 -1
  19. package/dist/src/core/contentGenerator.test.js +13 -0
  20. package/dist/src/core/contentGenerator.test.js.map +1 -1
  21. package/dist/src/core/coreToolScheduler.js +109 -96
  22. package/dist/src/core/coreToolScheduler.js.map +1 -1
  23. package/dist/src/core/fakeContentGenerator.d.ts +20 -13
  24. package/dist/src/core/fakeContentGenerator.js +21 -24
  25. package/dist/src/core/fakeContentGenerator.js.map +1 -1
  26. package/dist/src/core/fakeContentGenerator.test.js +71 -84
  27. package/dist/src/core/fakeContentGenerator.test.js.map +1 -1
  28. package/dist/src/core/loggingContentGenerator.d.ts +1 -0
  29. package/dist/src/core/loggingContentGenerator.js +113 -33
  30. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  31. package/dist/src/core/recordingContentGenerator.d.ts +18 -0
  32. package/dist/src/core/recordingContentGenerator.js +77 -0
  33. package/dist/src/core/recordingContentGenerator.js.map +1 -0
  34. package/dist/src/core/recordingContentGenerator.test.d.ts +6 -0
  35. package/dist/src/core/recordingContentGenerator.test.js +101 -0
  36. package/dist/src/core/recordingContentGenerator.test.js.map +1 -0
  37. package/dist/src/fallback/handler.js +2 -0
  38. package/dist/src/fallback/handler.js.map +1 -1
  39. package/dist/src/generated/git-commit.d.ts +2 -2
  40. package/dist/src/generated/git-commit.js +2 -2
  41. package/dist/src/generated/git-commit.js.map +1 -1
  42. package/dist/src/index.d.ts +2 -0
  43. package/dist/src/index.js +2 -0
  44. package/dist/src/index.js.map +1 -1
  45. package/dist/src/mcp/google-auth-provider.d.ts +0 -2
  46. package/dist/src/mcp/google-auth-provider.js +6 -40
  47. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  48. package/dist/src/mcp/google-auth-provider.test.js +2 -63
  49. package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
  50. package/dist/src/mcp/sa-impersonation-provider.js +3 -2
  51. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  52. package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +6 -2
  53. package/dist/src/mcp/token-storage/keychain-token-storage.js +57 -2
  54. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  55. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +33 -0
  56. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
  57. package/dist/src/mcp/token-storage/types.d.ts +6 -0
  58. package/dist/src/mcp/token-storage/types.js.map +1 -1
  59. package/dist/src/policy/policy-engine.js +4 -0
  60. package/dist/src/policy/policy-engine.js.map +1 -1
  61. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +5 -5
  62. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  63. package/dist/src/telemetry/index.d.ts +1 -0
  64. package/dist/src/telemetry/index.js +1 -0
  65. package/dist/src/telemetry/index.js.map +1 -1
  66. package/dist/src/telemetry/loggers.js +10 -17
  67. package/dist/src/telemetry/loggers.js.map +1 -1
  68. package/dist/src/telemetry/loggers.test.js +173 -30
  69. package/dist/src/telemetry/loggers.test.js.map +1 -1
  70. package/dist/src/telemetry/metrics.d.ts +1 -1
  71. package/dist/src/telemetry/metrics.js +1 -1
  72. package/dist/src/telemetry/metrics.js.map +1 -1
  73. package/dist/src/telemetry/semantic.d.ts +82 -0
  74. package/dist/src/telemetry/semantic.js +269 -0
  75. package/dist/src/telemetry/semantic.js.map +1 -0
  76. package/dist/src/telemetry/semantic.test.d.ts +6 -0
  77. package/dist/src/telemetry/semantic.test.js +387 -0
  78. package/dist/src/telemetry/semantic.test.js.map +1 -0
  79. package/dist/src/telemetry/trace.d.ts +46 -0
  80. package/dist/src/telemetry/trace.js +121 -0
  81. package/dist/src/telemetry/trace.js.map +1 -0
  82. package/dist/src/telemetry/types.d.ts +37 -18
  83. package/dist/src/telemetry/types.js +107 -36
  84. package/dist/src/telemetry/types.js.map +1 -1
  85. package/dist/src/telemetry/uiTelemetry.js +6 -6
  86. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  87. package/dist/src/telemetry/uiTelemetry.test.js +88 -66
  88. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  89. package/dist/src/tools/glob.test.js +203 -199
  90. package/dist/src/tools/glob.test.js.map +1 -1
  91. package/dist/src/tools/mcp-client-manager.js +2 -1
  92. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  93. package/dist/src/tools/mcp-client.d.ts +4 -1
  94. package/dist/src/tools/mcp-client.js +71 -92
  95. package/dist/src/tools/mcp-client.js.map +1 -1
  96. package/dist/src/tools/mcp-client.test.js +16 -6
  97. package/dist/src/tools/mcp-client.test.js.map +1 -1
  98. package/dist/src/tools/mcp-tool.d.ts +1 -1
  99. package/dist/src/tools/mcp-tool.js +11 -9
  100. package/dist/src/tools/mcp-tool.js.map +1 -1
  101. package/dist/src/tools/shell.d.ts +2 -2
  102. package/dist/src/tools/shell.js +4 -4
  103. package/dist/src/tools/shell.js.map +1 -1
  104. package/dist/src/tools/tool-registry.d.ts +3 -0
  105. package/dist/src/tools/tool-registry.js +9 -2
  106. package/dist/src/tools/tool-registry.js.map +1 -1
  107. package/dist/src/tools/tools.d.ts +1 -2
  108. package/dist/src/tools/tools.js +20 -3
  109. package/dist/src/tools/tools.js.map +1 -1
  110. package/dist/src/tools/write-todos.js +4 -1
  111. package/dist/src/tools/write-todos.js.map +1 -1
  112. package/dist/src/utils/events.d.ts +19 -1
  113. package/dist/src/utils/events.js +9 -0
  114. package/dist/src/utils/events.js.map +1 -1
  115. package/dist/src/utils/extensionLoader.d.ts +38 -0
  116. package/dist/src/utils/extensionLoader.js +20 -0
  117. package/dist/src/utils/extensionLoader.js.map +1 -0
  118. package/dist/src/utils/memoryDiscovery.d.ts +2 -2
  119. package/dist/src/utils/memoryDiscovery.js +3 -2
  120. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  121. package/dist/src/utils/memoryDiscovery.test.js +19 -35
  122. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  123. package/dist/src/utils/workspaceContext.js +1 -1
  124. package/dist/src/utils/workspaceContext.js.map +1 -1
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +1 -1
@@ -0,0 +1,269 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * This file contains functions and types for converting Gemini API request/response
8
+ * formats to the OpenTelemetry semantic conventions for generative AI.
9
+ *
10
+ * @see https://github.com/open-telemetry/semantic-conventions/blob/8b4f210f43136e57c1f6f47292eb6d38e3bf30bb/docs/gen-ai/gen-ai-events.md
11
+ */
12
+ import { FinishReason } from '@google/genai';
13
+ export function toInputMessages(contents) {
14
+ const messages = [];
15
+ for (const content of contents) {
16
+ messages.push(toChatMessage(content));
17
+ }
18
+ return messages;
19
+ }
20
+ function isPart(value) {
21
+ return (typeof value === 'object' &&
22
+ value !== null &&
23
+ !Array.isArray(value) &&
24
+ !('parts' in value));
25
+ }
26
+ function toPart(part) {
27
+ if (typeof part === 'string') {
28
+ return { text: part };
29
+ }
30
+ return part;
31
+ }
32
+ function toContent(content) {
33
+ if (typeof content === 'string') {
34
+ // 1. It's a string
35
+ return {
36
+ parts: [toPart(content)],
37
+ };
38
+ }
39
+ else if (Array.isArray(content)) {
40
+ // 2. It's an array of parts (PartUnion[])
41
+ return {
42
+ parts: content.map(toPart),
43
+ };
44
+ }
45
+ else if ('parts' in content) {
46
+ // 3. It's a Content object
47
+ return content;
48
+ }
49
+ else if (isPart(content)) {
50
+ // 4. It's a single Part object (asserted with type guard)
51
+ return {
52
+ parts: [content],
53
+ };
54
+ }
55
+ else {
56
+ // 5. Handle any other unexpected case
57
+ return undefined;
58
+ }
59
+ }
60
+ export function toSystemInstruction(systemInstruction) {
61
+ const parts = [];
62
+ if (systemInstruction) {
63
+ const content = toContent(systemInstruction);
64
+ if (content && content.parts) {
65
+ for (const part of content.parts) {
66
+ parts.push(toOTelPart(part));
67
+ }
68
+ }
69
+ }
70
+ return parts;
71
+ }
72
+ export function toOutputMessages(candidates) {
73
+ const messages = [];
74
+ if (candidates) {
75
+ for (const candidate of candidates) {
76
+ messages.push({
77
+ finish_reason: toOTelFinishReason(candidate.finishReason),
78
+ ...toChatMessage(candidate.content),
79
+ });
80
+ }
81
+ }
82
+ return messages;
83
+ }
84
+ export function toFinishReasons(candidates) {
85
+ const reasons = [];
86
+ if (candidates) {
87
+ for (const candidate of candidates) {
88
+ reasons.push(toOTelFinishReason(candidate.finishReason));
89
+ }
90
+ }
91
+ return reasons;
92
+ }
93
+ export function toOutputType(requested_mime) {
94
+ switch (requested_mime) {
95
+ // explictly support the known good values of responseMimeType
96
+ case 'text/plain':
97
+ return OTelOutputType.TEXT;
98
+ case 'application/json':
99
+ return OTelOutputType.JSON;
100
+ default:
101
+ // if none of the well-known values applies, a custom value may be used
102
+ return requested_mime;
103
+ }
104
+ }
105
+ export function toChatMessage(content) {
106
+ const message = {
107
+ role: undefined,
108
+ parts: [],
109
+ };
110
+ if (content && content.parts) {
111
+ message.role = toOTelRole(content.role);
112
+ for (const part of content.parts) {
113
+ message.parts.push(toOTelPart(part));
114
+ }
115
+ }
116
+ return message;
117
+ }
118
+ export function toOTelPart(part) {
119
+ if (part.thought) {
120
+ if (part.text) {
121
+ return new ReasoningPart(part.text);
122
+ }
123
+ else {
124
+ return new ReasoningPart('');
125
+ }
126
+ }
127
+ else if (part.text) {
128
+ return new TextPart(part.text);
129
+ }
130
+ else if (part.functionCall) {
131
+ return new ToolCallRequestPart(part.functionCall.name, part.functionCall.id, JSON.stringify(part.functionCall.args));
132
+ }
133
+ else if (part.functionResponse) {
134
+ return new ToolCallResponsePart(JSON.stringify(part.functionResponse.response), part.functionResponse.id);
135
+ }
136
+ else if (part.executableCode) {
137
+ const { executableCode, ...unexpectedData } = part;
138
+ return new GenericPart('executableCode', {
139
+ code: executableCode.code,
140
+ language: executableCode.language,
141
+ ...unexpectedData,
142
+ });
143
+ }
144
+ else if (part.codeExecutionResult) {
145
+ const { codeExecutionResult, ...unexpectedData } = part;
146
+ return new GenericPart('codeExecutionResult', {
147
+ outcome: codeExecutionResult.outcome,
148
+ output: codeExecutionResult.output,
149
+ ...unexpectedData,
150
+ });
151
+ }
152
+ // Assuming the above cases capture all the expected parts
153
+ // but adding a fallthrough just in case.
154
+ return new GenericPart('unknown', { ...part });
155
+ }
156
+ export var OTelRole;
157
+ (function (OTelRole) {
158
+ OTelRole["SYSTEM"] = "system";
159
+ OTelRole["USER"] = "user";
160
+ OTelRole["ASSISTANT"] = "assistant";
161
+ OTelRole["TOOL"] = "tool";
162
+ })(OTelRole || (OTelRole = {}));
163
+ export function toOTelRole(role) {
164
+ switch (role?.toLowerCase()) {
165
+ case 'system':
166
+ return OTelRole.SYSTEM;
167
+ // Our APIs seem to frequently use 'model'
168
+ case 'model':
169
+ return OTelRole.SYSTEM;
170
+ case 'user':
171
+ return OTelRole.USER;
172
+ case 'assistant':
173
+ return OTelRole.ASSISTANT;
174
+ case 'tool':
175
+ return OTelRole.TOOL;
176
+ default:
177
+ return OTelRole.SYSTEM;
178
+ }
179
+ }
180
+ export var OTelOutputType;
181
+ (function (OTelOutputType) {
182
+ OTelOutputType["IMAGE"] = "image";
183
+ OTelOutputType["JSON"] = "json";
184
+ OTelOutputType["SPEECH"] = "speech";
185
+ OTelOutputType["TEXT"] = "text";
186
+ })(OTelOutputType || (OTelOutputType = {}));
187
+ export var OTelFinishReason;
188
+ (function (OTelFinishReason) {
189
+ OTelFinishReason["STOP"] = "stop";
190
+ OTelFinishReason["LENGTH"] = "length";
191
+ OTelFinishReason["CONTENT_FILTER"] = "content_filter";
192
+ OTelFinishReason["TOOL_CALL"] = "tool_call";
193
+ OTelFinishReason["ERROR"] = "error";
194
+ })(OTelFinishReason || (OTelFinishReason = {}));
195
+ export function toOTelFinishReason(finishReason) {
196
+ switch (finishReason) {
197
+ // we have significantly more finish reasons than the spec
198
+ case FinishReason.FINISH_REASON_UNSPECIFIED:
199
+ return OTelFinishReason.STOP;
200
+ case FinishReason.STOP:
201
+ return OTelFinishReason.STOP;
202
+ case FinishReason.MAX_TOKENS:
203
+ return OTelFinishReason.LENGTH;
204
+ case FinishReason.SAFETY:
205
+ return OTelFinishReason.CONTENT_FILTER;
206
+ case FinishReason.RECITATION:
207
+ return OTelFinishReason.CONTENT_FILTER;
208
+ case FinishReason.LANGUAGE:
209
+ return OTelFinishReason.CONTENT_FILTER;
210
+ case FinishReason.OTHER:
211
+ return OTelFinishReason.STOP;
212
+ case FinishReason.BLOCKLIST:
213
+ return OTelFinishReason.CONTENT_FILTER;
214
+ case FinishReason.PROHIBITED_CONTENT:
215
+ return OTelFinishReason.CONTENT_FILTER;
216
+ case FinishReason.SPII:
217
+ return OTelFinishReason.CONTENT_FILTER;
218
+ case FinishReason.MALFORMED_FUNCTION_CALL:
219
+ return OTelFinishReason.ERROR;
220
+ case FinishReason.IMAGE_SAFETY:
221
+ return OTelFinishReason.CONTENT_FILTER;
222
+ case FinishReason.UNEXPECTED_TOOL_CALL:
223
+ return OTelFinishReason.ERROR;
224
+ default:
225
+ return OTelFinishReason.STOP;
226
+ }
227
+ }
228
+ export class TextPart {
229
+ type = 'text';
230
+ content;
231
+ constructor(content) {
232
+ this.content = content;
233
+ }
234
+ }
235
+ export class ToolCallRequestPart {
236
+ type = 'tool_call';
237
+ name;
238
+ id;
239
+ arguments;
240
+ constructor(name, id, args) {
241
+ this.name = name;
242
+ this.id = id;
243
+ this.arguments = args;
244
+ }
245
+ }
246
+ export class ToolCallResponsePart {
247
+ type = 'tool_call_response';
248
+ response;
249
+ id;
250
+ constructor(response, id) {
251
+ this.response = response;
252
+ this.id = id;
253
+ }
254
+ }
255
+ export class ReasoningPart {
256
+ type = 'reasoning';
257
+ content;
258
+ constructor(content) {
259
+ this.content = content;
260
+ }
261
+ }
262
+ export class GenericPart {
263
+ type;
264
+ constructor(type, data) {
265
+ this.type = type;
266
+ Object.assign(this, data);
267
+ }
268
+ }
269
+ //# sourceMappingURL=semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../src/telemetry/semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,387 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import { toChatMessage, toInputMessages, toSystemInstruction, toOutputMessages, toFinishReasons, OTelFinishReason, toOutputType, OTelOutputType, } from './semantic.js';
8
+ import { Language, Outcome, FinishReason, } from '@google/genai';
9
+ describe('toChatMessage', () => {
10
+ it('should correctly handle text parts', () => {
11
+ const content = {
12
+ role: 'user',
13
+ parts: [{ text: 'Hello' }],
14
+ };
15
+ expect(toChatMessage(content)).toEqual({
16
+ role: 'user',
17
+ parts: [
18
+ {
19
+ type: 'text',
20
+ content: 'Hello',
21
+ },
22
+ ],
23
+ });
24
+ });
25
+ it('should correctly handle function call parts', () => {
26
+ const content = {
27
+ role: 'model',
28
+ parts: [
29
+ {
30
+ functionCall: {
31
+ name: 'test-function',
32
+ args: {
33
+ arg1: 'test-value',
34
+ },
35
+ id: '12345',
36
+ },
37
+ // include field not specified in semantic specification that could be present
38
+ thoughtSignature: '1234',
39
+ },
40
+ ],
41
+ };
42
+ expect(toChatMessage(content)).toEqual({
43
+ role: 'system',
44
+ parts: [
45
+ {
46
+ type: 'tool_call',
47
+ name: 'test-function',
48
+ arguments: '{"arg1":"test-value"}',
49
+ id: '12345',
50
+ },
51
+ ],
52
+ });
53
+ });
54
+ it('should correctly handle function response parts', () => {
55
+ const content = {
56
+ role: 'user',
57
+ parts: [
58
+ {
59
+ functionResponse: {
60
+ name: 'test-function',
61
+ response: {
62
+ result: 'success',
63
+ },
64
+ id: '12345',
65
+ },
66
+ // include field not specified in semantic specification that could be present
67
+ fileData: {
68
+ displayName: 'greatfile',
69
+ },
70
+ },
71
+ ],
72
+ };
73
+ expect(toChatMessage(content)).toEqual({
74
+ role: 'user',
75
+ parts: [
76
+ {
77
+ type: 'tool_call_response',
78
+ response: '{"result":"success"}',
79
+ id: '12345',
80
+ },
81
+ ],
82
+ });
83
+ });
84
+ it('should correctly handle reasoning parts with text', () => {
85
+ const content = {
86
+ role: 'system',
87
+ parts: [{ text: 'Hmm', thought: true }],
88
+ };
89
+ expect(toChatMessage(content)).toEqual({
90
+ role: 'system',
91
+ parts: [
92
+ {
93
+ type: 'reasoning',
94
+ content: 'Hmm',
95
+ },
96
+ ],
97
+ });
98
+ });
99
+ it('should correctly handle reasoning parts without text', () => {
100
+ const content = {
101
+ role: 'system',
102
+ parts: [
103
+ {
104
+ thought: true,
105
+ // include field not specified in semantic specification that could be present
106
+ inlineData: {
107
+ displayName: 'wowdata',
108
+ },
109
+ },
110
+ ],
111
+ };
112
+ expect(toChatMessage(content)).toEqual({
113
+ role: 'system',
114
+ parts: [
115
+ {
116
+ type: 'reasoning',
117
+ content: '',
118
+ },
119
+ ],
120
+ });
121
+ });
122
+ it('should correctly handle text parts that are not reasoning parts', () => {
123
+ const content = {
124
+ role: 'user',
125
+ parts: [{ text: 'what a nice day', thought: false }],
126
+ };
127
+ expect(toChatMessage(content)).toEqual({
128
+ role: 'user',
129
+ parts: [
130
+ {
131
+ type: 'text',
132
+ content: 'what a nice day',
133
+ },
134
+ ],
135
+ });
136
+ });
137
+ it('should correctly handle "generic" parts', () => {
138
+ const content = {
139
+ role: 'model',
140
+ parts: [
141
+ {
142
+ executableCode: {
143
+ code: 'print("foo")',
144
+ language: Language.PYTHON,
145
+ },
146
+ },
147
+ {
148
+ codeExecutionResult: {
149
+ outcome: Outcome.OUTCOME_OK,
150
+ output: 'foo',
151
+ },
152
+ // include field not specified in semantic specification that could be present
153
+ videoMetadata: {
154
+ fps: 5,
155
+ },
156
+ },
157
+ ],
158
+ };
159
+ expect(toChatMessage(content)).toEqual({
160
+ role: 'system',
161
+ parts: [
162
+ {
163
+ type: 'executableCode',
164
+ code: 'print("foo")',
165
+ language: 'PYTHON',
166
+ },
167
+ {
168
+ type: 'codeExecutionResult',
169
+ outcome: 'OUTCOME_OK',
170
+ output: 'foo',
171
+ videoMetadata: {
172
+ fps: 5,
173
+ },
174
+ },
175
+ ],
176
+ });
177
+ });
178
+ it('should correctly handle unknown parts', () => {
179
+ const content = {
180
+ role: 'model',
181
+ parts: [
182
+ {
183
+ fileData: {
184
+ displayName: 'superfile',
185
+ },
186
+ },
187
+ ],
188
+ };
189
+ expect(toChatMessage(content)).toEqual({
190
+ role: 'system',
191
+ parts: [
192
+ {
193
+ type: 'unknown',
194
+ fileData: {
195
+ displayName: 'superfile',
196
+ },
197
+ },
198
+ ],
199
+ });
200
+ });
201
+ });
202
+ describe('toSystemInstruction', () => {
203
+ it('should correctly handle a string', () => {
204
+ const content = 'Hello';
205
+ expect(toSystemInstruction(content)).toEqual([
206
+ {
207
+ type: 'text',
208
+ content: 'Hello',
209
+ },
210
+ ]);
211
+ });
212
+ it('should correctly handle a Content object with a text part', () => {
213
+ const content = {
214
+ role: 'user',
215
+ parts: [{ text: 'Hello' }],
216
+ };
217
+ expect(toSystemInstruction(content)).toEqual([
218
+ {
219
+ type: 'text',
220
+ content: 'Hello',
221
+ },
222
+ ]);
223
+ });
224
+ it('should correctly handle a Content object with multiple parts', () => {
225
+ const content = {
226
+ role: 'user',
227
+ parts: [{ text: 'Hello' }, { text: 'Hmm', thought: true }],
228
+ };
229
+ expect(toSystemInstruction(content)).toEqual([
230
+ {
231
+ type: 'text',
232
+ content: 'Hello',
233
+ },
234
+ {
235
+ type: 'reasoning',
236
+ content: 'Hmm',
237
+ },
238
+ ]);
239
+ });
240
+ });
241
+ describe('toInputMessages', () => {
242
+ it('should correctly convert an array of Content objects', () => {
243
+ const contents = [
244
+ {
245
+ role: 'user',
246
+ parts: [{ text: 'Hello' }],
247
+ },
248
+ {
249
+ role: 'model',
250
+ parts: [{ text: 'Hi there!' }],
251
+ },
252
+ ];
253
+ expect(toInputMessages(contents)).toEqual([
254
+ {
255
+ role: 'user',
256
+ parts: [
257
+ {
258
+ type: 'text',
259
+ content: 'Hello',
260
+ },
261
+ ],
262
+ },
263
+ {
264
+ role: 'system',
265
+ parts: [
266
+ {
267
+ type: 'text',
268
+ content: 'Hi there!',
269
+ },
270
+ ],
271
+ },
272
+ ]);
273
+ });
274
+ });
275
+ describe('toOutputMessages', () => {
276
+ it('should correctly convert an array of Candidate objects', () => {
277
+ const candidates = [
278
+ {
279
+ index: 0,
280
+ finishReason: FinishReason.STOP,
281
+ content: {
282
+ role: 'model',
283
+ parts: [{ text: 'This is the first candidate.' }],
284
+ },
285
+ },
286
+ {
287
+ index: 1,
288
+ finishReason: FinishReason.MAX_TOKENS,
289
+ content: {
290
+ role: 'model',
291
+ parts: [{ text: 'This is the second candidate.' }],
292
+ },
293
+ },
294
+ ];
295
+ expect(toOutputMessages(candidates)).toEqual([
296
+ {
297
+ role: 'system',
298
+ finish_reason: 'stop',
299
+ parts: [
300
+ {
301
+ type: 'text',
302
+ content: 'This is the first candidate.',
303
+ },
304
+ ],
305
+ },
306
+ {
307
+ role: 'system',
308
+ finish_reason: 'length',
309
+ parts: [
310
+ {
311
+ type: 'text',
312
+ content: 'This is the second candidate.',
313
+ },
314
+ ],
315
+ },
316
+ ]);
317
+ });
318
+ });
319
+ describe('toFinishReasons', () => {
320
+ it('should return an empty array if candidates is undefined', () => {
321
+ expect(toFinishReasons(undefined)).toEqual([]);
322
+ });
323
+ it('should return an empty array if candidates is an empty array', () => {
324
+ expect(toFinishReasons([])).toEqual([]);
325
+ });
326
+ it('should correctly convert a single candidate', () => {
327
+ const candidates = [
328
+ {
329
+ index: 0,
330
+ finishReason: FinishReason.STOP,
331
+ content: {
332
+ role: 'model',
333
+ parts: [{ text: 'This is the first candidate.' }],
334
+ },
335
+ },
336
+ ];
337
+ expect(toFinishReasons(candidates)).toEqual([OTelFinishReason.STOP]);
338
+ });
339
+ it('should correctly convert multiple candidates', () => {
340
+ const candidates = [
341
+ {
342
+ index: 0,
343
+ finishReason: FinishReason.STOP,
344
+ content: {
345
+ role: 'model',
346
+ parts: [{ text: 'This is the first candidate.' }],
347
+ },
348
+ },
349
+ {
350
+ index: 1,
351
+ finishReason: FinishReason.MAX_TOKENS,
352
+ content: {
353
+ role: 'model',
354
+ parts: [{ text: 'This is the second candidate.' }],
355
+ },
356
+ },
357
+ {
358
+ index: 2,
359
+ finishReason: FinishReason.SAFETY,
360
+ content: {
361
+ role: 'model',
362
+ parts: [{ text: 'This is the third candidate.' }],
363
+ },
364
+ },
365
+ ];
366
+ expect(toFinishReasons(candidates)).toEqual([
367
+ OTelFinishReason.STOP,
368
+ OTelFinishReason.LENGTH,
369
+ OTelFinishReason.CONTENT_FILTER,
370
+ ]);
371
+ });
372
+ });
373
+ describe('toOutputType', () => {
374
+ it('should return TEXT for text/plain', () => {
375
+ expect(toOutputType('text/plain')).toBe(OTelOutputType.TEXT);
376
+ });
377
+ it('should return JSON for application/json', () => {
378
+ expect(toOutputType('application/json')).toBe(OTelOutputType.JSON);
379
+ });
380
+ it('should return the custom mime type for other strings', () => {
381
+ expect(toOutputType('application/vnd.custom-type')).toBe('application/vnd.custom-type');
382
+ });
383
+ it('should return undefined for undefined input', () => {
384
+ expect(toOutputType(undefined)).toBeUndefined();
385
+ });
386
+ });
387
+ //# sourceMappingURL=semantic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.test.js","sourceRoot":"","sources":["../../../src/telemetry/semantic.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EAER,OAAO,EAEP,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SAC3B,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,OAAO;iBACjB;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL;oBACE,YAAY,EAAE;wBACZ,IAAI,EAAE,eAAe;wBACrB,IAAI,EAAE;4BACJ,IAAI,EAAE,YAAY;yBACnB;wBACD,EAAE,EAAE,OAAO;qBACZ;oBACD,8EAA8E;oBAC9E,gBAAgB,EAAE,MAAM;iBACzB;aACF;SACF,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,eAAe;oBACrB,SAAS,EAAE,uBAAuB;oBAClC,EAAE,EAAE,OAAO;iBACZ;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL;oBACE,gBAAgB,EAAE;wBAChB,IAAI,EAAE,eAAe;wBACrB,QAAQ,EAAE;4BACR,MAAM,EAAE,SAAS;yBAClB;wBACD,EAAE,EAAE,OAAO;qBACZ;oBACD,8EAA8E;oBAC9E,QAAQ,EAAE;wBACR,WAAW,EAAE,WAAW;qBACzB;iBACF;aACF;SACF,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,sBAAsB;oBAChC,EAAE,EAAE,OAAO;iBACZ;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,KAAK;iBACf;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACL;oBACE,OAAO,EAAE,IAAI;oBACb,8EAA8E;oBAC9E,UAAU,EAAE;wBACV,WAAW,EAAE,SAAS;qBACvB;iBACF;aACF;SACF,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,EAAE;iBACZ;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SACrD,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,iBAAiB;iBAC3B;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL;oBACE,cAAc,EAAE;wBACd,IAAI,EAAE,cAAc;wBACpB,QAAQ,EAAE,QAAQ,CAAC,MAAM;qBAC1B;iBACF;gBACD;oBACE,mBAAmB,EAAE;wBACnB,OAAO,EAAE,OAAO,CAAC,UAAU;wBAC3B,MAAM,EAAE,KAAK;qBACd;oBACD,8EAA8E;oBAC9E,aAAa,EAAE;wBACb,GAAG,EAAE,CAAC;qBACP;iBACF;aACF;SACF,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,QAAQ;iBACnB;gBACD;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,YAAY;oBACrB,MAAM,EAAE,KAAK;oBACb,aAAa,EAAE;wBACb,GAAG,EAAE,CAAC;qBACP;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL;oBACE,QAAQ,EAAE;wBACR,WAAW,EAAE,WAAW;qBACzB;iBACF;aACF;SACF,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE;wBACR,WAAW,EAAE,WAAW;qBACzB;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC;QACxB,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3C;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SAC3B,CAAC;QACF,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3C;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,OAAO,GAAY;YACvB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAC3D,CAAC;QACF,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3C;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,OAAO;aACjB;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,QAAQ,GAAc;YAC1B;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;aAC3B;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;aAC/B;SACF,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACxC;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,OAAO;qBACjB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,WAAW;qBACrB;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,UAAU,GAAgB;YAC9B;gBACE,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,YAAY,CAAC,IAAI;gBAC/B,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;iBAClD;aACF;YACD;gBACE,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,YAAY,CAAC,UAAU;gBACrC,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;iBACnD;aACF;SACF,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3C;gBACE,IAAI,EAAE,QAAQ;gBACd,aAAa,EAAE,MAAM;gBACrB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,8BAA8B;qBACxC;iBACF;aACF;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,aAAa,EAAE,QAAQ;gBACvB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,+BAA+B;qBACzC;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,UAAU,GAAgB;YAC9B;gBACE,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,YAAY,CAAC,IAAI;gBAC/B,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;iBAClD;aACF;SACF,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,UAAU,GAAgB;YAC9B;gBACE,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,YAAY,CAAC,IAAI;gBAC/B,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;iBAClD;aACF;YACD;gBACE,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,YAAY,CAAC,UAAU;gBACrC,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;iBACnD;aACF;YACD;gBACE,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,YAAY,CAAC,MAAM;gBACjC,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;iBAClD;aACF;SACF,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1C,gBAAgB,CAAC,IAAI;YACrB,gBAAgB,CAAC,MAAM;YACvB,gBAAgB,CAAC,cAAc;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,CACtD,6BAA6B,CAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}