@introspection-sdk/introspection-node 0.19.1 → 0.21.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 (211) hide show
  1. package/README.md +28 -8
  2. package/dist/auth.d.ts +1 -1
  3. package/dist/client.d.ts +4 -3
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +16 -7
  6. package/dist/client.js.map +1 -1
  7. package/dist/dev-target.js +1 -1
  8. package/dist/index.d.ts +4 -7
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +3 -6
  11. package/dist/index.js.map +1 -1
  12. package/dist/otel/index.d.ts +1 -14
  13. package/dist/otel/index.d.ts.map +1 -1
  14. package/dist/otel/index.js +10 -18
  15. package/dist/otel/index.js.map +1 -1
  16. package/dist/otel/init.d.ts +19 -21
  17. package/dist/otel/init.d.ts.map +1 -1
  18. package/dist/otel/init.js +62 -48
  19. package/dist/otel/init.js.map +1 -1
  20. package/dist/otel/integrations/base.d.ts +17 -37
  21. package/dist/otel/integrations/base.d.ts.map +1 -1
  22. package/dist/otel/integrations/base.js +6 -13
  23. package/dist/otel/integrations/base.js.map +1 -1
  24. package/dist/otel/integrations/index.d.ts +3 -4
  25. package/dist/otel/integrations/index.d.ts.map +1 -1
  26. package/dist/otel/integrations/index.js +6 -25
  27. package/dist/otel/integrations/index.js.map +1 -1
  28. package/dist/otel/integrations/pi.d.ts.map +1 -1
  29. package/dist/otel/integrations/pi.js +9 -1
  30. package/dist/otel/integrations/pi.js.map +1 -1
  31. package/dist/otel/logs.d.ts +41 -8
  32. package/dist/otel/logs.d.ts.map +1 -1
  33. package/dist/otel/logs.js +95 -66
  34. package/dist/otel/logs.js.map +1 -1
  35. package/dist/otel/pi.d.ts +18 -5
  36. package/dist/otel/pi.d.ts.map +1 -1
  37. package/dist/otel/pi.js +38 -9
  38. package/dist/otel/pi.js.map +1 -1
  39. package/dist/otel/register.d.ts +2 -2
  40. package/dist/otel/register.d.ts.map +1 -1
  41. package/dist/otel/register.js +7 -9
  42. package/dist/otel/register.js.map +1 -1
  43. package/dist/otel/setup.d.ts +2 -2
  44. package/dist/otel/setup.d.ts.map +1 -1
  45. package/dist/otel/setup.js +16 -6
  46. package/dist/otel/setup.js.map +1 -1
  47. package/dist/otel/span-processor.d.ts +18 -5
  48. package/dist/otel/span-processor.d.ts.map +1 -1
  49. package/dist/otel/span-processor.js +50 -65
  50. package/dist/otel/span-processor.js.map +1 -1
  51. package/dist/resources/experiments.d.ts +10 -5
  52. package/dist/resources/experiments.d.ts.map +1 -1
  53. package/dist/resources/experiments.js +9 -25
  54. package/dist/resources/experiments.js.map +1 -1
  55. package/dist/resources/recipes.d.ts +6 -6
  56. package/dist/resources/recipes.d.ts.map +1 -1
  57. package/dist/resources/recipes.js +5 -23
  58. package/dist/resources/recipes.js.map +1 -1
  59. package/dist/resources/runtimes.d.ts +2 -2
  60. package/dist/resources/runtimes.d.ts.map +1 -1
  61. package/dist/resources/runtimes.js +2 -2
  62. package/dist/resources/runtimes.js.map +1 -1
  63. package/dist/runner.d.ts +8 -4
  64. package/dist/runner.d.ts.map +1 -1
  65. package/dist/runner.js +26 -18
  66. package/dist/runner.js.map +1 -1
  67. package/dist/types.d.ts +1 -1
  68. package/dist/types.d.ts.map +1 -1
  69. package/dist/types.js +1 -1
  70. package/dist/types.js.map +1 -1
  71. package/dist/utils.d.ts +45 -0
  72. package/dist/utils.d.ts.map +1 -1
  73. package/dist/utils.js +61 -2
  74. package/dist/utils.js.map +1 -1
  75. package/dist/version.d.ts +1 -1
  76. package/dist/version.d.ts.map +1 -1
  77. package/dist/version.js +1 -1
  78. package/dist/version.js.map +1 -1
  79. package/package.json +18 -60
  80. package/.turbo/turbo-build.log +0 -4
  81. package/dist/converters/claude.d.ts +0 -150
  82. package/dist/converters/claude.d.ts.map +0 -1
  83. package/dist/converters/claude.js +0 -211
  84. package/dist/converters/claude.js.map +0 -1
  85. package/dist/converters/gemini.d.ts +0 -90
  86. package/dist/converters/gemini.d.ts.map +0 -1
  87. package/dist/converters/gemini.js +0 -171
  88. package/dist/converters/gemini.js.map +0 -1
  89. package/dist/converters/index.d.ts +0 -9
  90. package/dist/converters/index.d.ts.map +0 -1
  91. package/dist/converters/index.js +0 -9
  92. package/dist/converters/index.js.map +0 -1
  93. package/dist/converters/openai.d.ts +0 -51
  94. package/dist/converters/openai.d.ts.map +0 -1
  95. package/dist/converters/openai.js +0 -269
  96. package/dist/converters/openai.js.map +0 -1
  97. package/dist/converters/openinference.d.ts +0 -107
  98. package/dist/converters/openinference.d.ts.map +0 -1
  99. package/dist/converters/openinference.js +0 -553
  100. package/dist/converters/openinference.js.map +0 -1
  101. package/dist/converters/vercel.d.ts +0 -21
  102. package/dist/converters/vercel.d.ts.map +0 -1
  103. package/dist/converters/vercel.js +0 -236
  104. package/dist/converters/vercel.js.map +0 -1
  105. package/dist/otel/anthropic.d.ts +0 -63
  106. package/dist/otel/anthropic.d.ts.map +0 -1
  107. package/dist/otel/anthropic.js +0 -475
  108. package/dist/otel/anthropic.js.map +0 -1
  109. package/dist/otel/claude-hooks.d.ts +0 -346
  110. package/dist/otel/claude-hooks.d.ts.map +0 -1
  111. package/dist/otel/claude-hooks.js +0 -647
  112. package/dist/otel/claude-hooks.js.map +0 -1
  113. package/dist/otel/claude-wrapper.d.ts +0 -93
  114. package/dist/otel/claude-wrapper.d.ts.map +0 -1
  115. package/dist/otel/claude-wrapper.js +0 -155
  116. package/dist/otel/claude-wrapper.js.map +0 -1
  117. package/dist/otel/gemini.d.ts +0 -56
  118. package/dist/otel/gemini.d.ts.map +0 -1
  119. package/dist/otel/gemini.js +0 -350
  120. package/dist/otel/gemini.js.map +0 -1
  121. package/dist/otel/integrations/anthropic.d.ts +0 -10
  122. package/dist/otel/integrations/anthropic.d.ts.map +0 -1
  123. package/dist/otel/integrations/anthropic.js +0 -26
  124. package/dist/otel/integrations/anthropic.js.map +0 -1
  125. package/dist/otel/integrations/claude-agent.d.ts +0 -12
  126. package/dist/otel/integrations/claude-agent.d.ts.map +0 -1
  127. package/dist/otel/integrations/claude-agent.js +0 -28
  128. package/dist/otel/integrations/claude-agent.js.map +0 -1
  129. package/dist/otel/integrations/gemini.d.ts +0 -11
  130. package/dist/otel/integrations/gemini.d.ts.map +0 -1
  131. package/dist/otel/integrations/gemini.js +0 -23
  132. package/dist/otel/integrations/gemini.js.map +0 -1
  133. package/dist/otel/integrations/langchain.d.ts +0 -15
  134. package/dist/otel/integrations/langchain.d.ts.map +0 -1
  135. package/dist/otel/integrations/langchain.js +0 -43
  136. package/dist/otel/integrations/langchain.js.map +0 -1
  137. package/dist/otel/integrations/mastra.d.ts +0 -14
  138. package/dist/otel/integrations/mastra.d.ts.map +0 -1
  139. package/dist/otel/integrations/mastra.js +0 -31
  140. package/dist/otel/integrations/mastra.js.map +0 -1
  141. package/dist/otel/integrations/openai-agents.d.ts +0 -11
  142. package/dist/otel/integrations/openai-agents.d.ts.map +0 -1
  143. package/dist/otel/integrations/openai-agents.js +0 -30
  144. package/dist/otel/integrations/openai-agents.js.map +0 -1
  145. package/dist/otel/integrations/vercel.d.ts +0 -14
  146. package/dist/otel/integrations/vercel.d.ts.map +0 -1
  147. package/dist/otel/integrations/vercel.js +0 -20
  148. package/dist/otel/integrations/vercel.js.map +0 -1
  149. package/dist/otel/langchain-handler.d.ts +0 -112
  150. package/dist/otel/langchain-handler.d.ts.map +0 -1
  151. package/dist/otel/langchain-handler.js +0 -561
  152. package/dist/otel/langchain-handler.js.map +0 -1
  153. package/dist/otel/mastra-exporter.d.ts +0 -87
  154. package/dist/otel/mastra-exporter.d.ts.map +0 -1
  155. package/dist/otel/mastra-exporter.js +0 -530
  156. package/dist/otel/mastra-exporter.js.map +0 -1
  157. package/dist/otel/openai.d.ts +0 -20
  158. package/dist/otel/openai.d.ts.map +0 -1
  159. package/dist/otel/openai.js +0 -55
  160. package/dist/otel/openai.js.map +0 -1
  161. package/dist/otel/tracing-processor.d.ts +0 -139
  162. package/dist/otel/tracing-processor.d.ts.map +0 -1
  163. package/dist/otel/tracing-processor.js +0 -434
  164. package/dist/otel/tracing-processor.js.map +0 -1
  165. package/eslint.config.mjs +0 -4
  166. package/src/auth.ts +0 -236
  167. package/src/client.ts +0 -163
  168. package/src/converters/claude.ts +0 -343
  169. package/src/converters/gemini.ts +0 -243
  170. package/src/converters/index.ts +0 -50
  171. package/src/converters/openai.ts +0 -300
  172. package/src/converters/openinference.ts +0 -665
  173. package/src/converters/vercel.ts +0 -302
  174. package/src/dev-target.ts +0 -79
  175. package/src/http.ts +0 -43
  176. package/src/index.ts +0 -266
  177. package/src/otel/anthropic.ts +0 -619
  178. package/src/otel/claude-hooks.ts +0 -1116
  179. package/src/otel/claude-wrapper.ts +0 -239
  180. package/src/otel/gemini.ts +0 -483
  181. package/src/otel/index.ts +0 -128
  182. package/src/otel/init.ts +0 -411
  183. package/src/otel/integrations/anthropic.ts +0 -36
  184. package/src/otel/integrations/base.ts +0 -158
  185. package/src/otel/integrations/claude-agent.ts +0 -36
  186. package/src/otel/integrations/gemini.ts +0 -30
  187. package/src/otel/integrations/index.ts +0 -152
  188. package/src/otel/integrations/langchain.ts +0 -60
  189. package/src/otel/integrations/mastra.ts +0 -48
  190. package/src/otel/integrations/openai-agents.ts +0 -47
  191. package/src/otel/integrations/pi.ts +0 -28
  192. package/src/otel/integrations/vercel.ts +0 -26
  193. package/src/otel/langchain-handler.ts +0 -804
  194. package/src/otel/logs.ts +0 -395
  195. package/src/otel/mastra-exporter.ts +0 -714
  196. package/src/otel/openai.ts +0 -93
  197. package/src/otel/pi.ts +0 -94
  198. package/src/otel/register.ts +0 -50
  199. package/src/otel/setup.ts +0 -215
  200. package/src/otel/span-processor.ts +0 -512
  201. package/src/otel/tracing-processor.ts +0 -637
  202. package/src/pagination.ts +0 -10
  203. package/src/proxy-from-env.d.ts +0 -7
  204. package/src/resources/experiments.ts +0 -176
  205. package/src/resources/recipes.ts +0 -74
  206. package/src/resources/runtimes.ts +0 -31
  207. package/src/runner.ts +0 -213
  208. package/src/types.ts +0 -13
  209. package/src/utils.ts +0 -95
  210. package/src/version.ts +0 -2
  211. package/tsconfig.json +0 -8
package/src/otel/logs.ts DELETED
@@ -1,395 +0,0 @@
1
- /**
2
- * IntrospectionLogs — OTel logs exporter for Introspection.
3
- *
4
- * Owns its own `LoggerProvider` and OTLP log exporter. Provides `track`,
5
- * `feedback`, `identify`, and async-context helpers (`withBaggage`,
6
- * `withAgent`, `withConversation`, etc.) that propagate identity and
7
- * gen_ai context through OpenTelemetry baggage.
8
- *
9
- * Fully independent of {@link IntrospectionClient}. Construct it directly
10
- * with the OTel peer dependencies installed.
11
- *
12
- * @example
13
- * ```typescript
14
- * import { IntrospectionLogs } from "@introspection-sdk/introspection-node/otel";
15
- *
16
- * const logs = new IntrospectionLogs({
17
- * token: process.env.INTROSPECTION_TOKEN,
18
- * serviceName: "my-service",
19
- * });
20
- *
21
- * await logs.withAgent("support-bot", "agent_1", () =>
22
- * logs.withConversation("conv_123", undefined, () => {
23
- * logs.feedback("thumbs_up", { comments: "Great answer" });
24
- * }),
25
- * );
26
- *
27
- * await logs.shutdown();
28
- * ```
29
- */
30
-
31
- import { SeverityNumber, type LogAttributes } from "@opentelemetry/api-logs";
32
- import {
33
- LoggerProvider,
34
- BatchLogRecordProcessor,
35
- } from "@opentelemetry/sdk-logs";
36
- import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-proto";
37
- import {
38
- resourceFromAttributes,
39
- defaultResource,
40
- } from "@opentelemetry/resources";
41
- import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
42
- import { propagation, context } from "@opentelemetry/api";
43
-
44
- import { logger as sdkLogger, withOtlpHttpsProxy } from "../utils.js";
45
- import { VERSION } from "../version.js";
46
- import {
47
- generateEventId,
48
- type FeedbackOptions,
49
- type UserTraits,
50
- type GenAiContext,
51
- type IdentityContext,
52
- } from "../types.js";
53
-
54
- /**
55
- * Configuration for {@link IntrospectionLogs}.
56
- */
57
- export interface IntrospectionLogsOptions {
58
- /** Authentication token (env: INTROSPECTION_TOKEN). */
59
- token?: string;
60
- /** Service name for telemetry (env: INTROSPECTION_SERVICE_NAME, default: "introspection-client"). */
61
- serviceName?: string;
62
- /**
63
- * Base URL for the OTLP collector (env: INTROSPECTION_BASE_OTEL_URL,
64
- * default: "https://otel.introspection.dev").
65
- */
66
- baseOtelUrl?: string;
67
- /** Additional HTTP headers to include in exporter requests. */
68
- additionalHeaders?: Record<string, string>;
69
- /** Flush interval in milliseconds (default: 5000). */
70
- flushInterval?: number;
71
- /** Maximum queue size before auto-flush (default: 100). */
72
- maxBatchSize?: number;
73
- }
74
-
75
- export class IntrospectionLogs {
76
- private loggerProvider: LoggerProvider;
77
- private otelLogger: ReturnType<LoggerProvider["getLogger"]>;
78
- private userId: string | undefined;
79
- private anonymousId: string | undefined;
80
- private traits: Record<string, unknown> = {};
81
-
82
- constructor(options: IntrospectionLogsOptions = {}) {
83
- const token = options.token || process.env.INTROSPECTION_TOKEN || "";
84
- const serviceName =
85
- options.serviceName ||
86
- process.env.INTROSPECTION_SERVICE_NAME ||
87
- "introspection-client";
88
- const baseOtelUrl =
89
- options.baseOtelUrl ||
90
- process.env.INTROSPECTION_BASE_OTEL_URL ||
91
- "https://otel.introspection.dev";
92
-
93
- if (!token) {
94
- sdkLogger.warn(
95
- "IntrospectionLogs: No token provided. Events will not be sent.",
96
- );
97
- }
98
-
99
- // Construct endpoint URL for logs.
100
- const endpoint = baseOtelUrl.endsWith("/v1/logs")
101
- ? baseOtelUrl
102
- : `${baseOtelUrl.replace(/\/$/, "")}/v1/logs`;
103
-
104
- const headers: Record<string, string> = {
105
- Authorization: `Bearer ${token}`,
106
- ...(options.additionalHeaders || {}),
107
- };
108
-
109
- const exporter = new OTLPLogExporter(
110
- withOtlpHttpsProxy({
111
- url: endpoint,
112
- headers,
113
- }),
114
- );
115
-
116
- const processor = new BatchLogRecordProcessor({
117
- exporter,
118
- maxQueueSize: options.maxBatchSize ?? 100,
119
- scheduledDelayMillis: options.flushInterval ?? 5000,
120
- });
121
-
122
- const baseResource = defaultResource();
123
- const introspectionResource = resourceFromAttributes({
124
- [ATTR_SERVICE_NAME]: serviceName,
125
- });
126
- const resource = baseResource.merge(introspectionResource);
127
-
128
- this.loggerProvider = new LoggerProvider({
129
- resource,
130
- processors: [processor],
131
- });
132
-
133
- this.otelLogger = this.loggerProvider.getLogger(
134
- "@introspection-sdk/introspection-node",
135
- VERSION,
136
- );
137
-
138
- sdkLogger.info(
139
- `IntrospectionLogs initialized: service=${serviceName}, otlp=${endpoint}`,
140
- );
141
- }
142
-
143
- /** Get gen_ai context from baggage */
144
- private getGenAiFromContext(): GenAiContext {
145
- const baggage = propagation.getBaggage(context.active());
146
- return {
147
- conversationId: baggage?.getEntry("gen_ai.conversation.id")?.value,
148
- previousResponseId: baggage?.getEntry(
149
- "gen_ai.request.previous_response_id",
150
- )?.value,
151
- agentName: baggage?.getEntry("gen_ai.agent.name")?.value,
152
- agentId: baggage?.getEntry("gen_ai.agent.id")?.value,
153
- };
154
- }
155
-
156
- /** Get identity from baggage or instance state */
157
- private getIdentityFromContext(): IdentityContext {
158
- const baggage = propagation.getBaggage(context.active());
159
- return {
160
- userId: baggage?.getEntry("identity.user_id")?.value || this.userId,
161
- anonymousId:
162
- baggage?.getEntry("identity.anonymous_id")?.value || this.anonymousId,
163
- };
164
- }
165
-
166
- private getTimestamp(): [number, number] {
167
- const hrTimeNs = process.hrtime.bigint();
168
- const epochNs = BigInt(Date.now()) * BigInt(1_000_000);
169
- const offsetNs = hrTimeNs - process.hrtime.bigint() + epochNs;
170
- const seconds = Number(offsetNs / BigInt(1_000_000_000));
171
- const nanos = Number(offsetNs % BigInt(1_000_000_000));
172
- return [seconds, nanos];
173
- }
174
-
175
- private buildAttributes(
176
- eventName: string,
177
- options: {
178
- properties?: Record<string, unknown>;
179
- traits?: Record<string, unknown>;
180
- conversationId?: string;
181
- previousResponseId?: string;
182
- eventId?: string;
183
- } = {},
184
- ): LogAttributes {
185
- const { properties, traits, conversationId, previousResponseId, eventId } =
186
- options;
187
-
188
- const attributes: LogAttributes = {
189
- "event.name": eventName,
190
- "event.id": eventId || generateEventId(),
191
- };
192
-
193
- const identity = this.getIdentityFromContext();
194
- if (identity.userId) attributes["identity.user.id"] = identity.userId;
195
- if (identity.anonymousId)
196
- attributes["identity.anonymous.id"] = identity.anonymousId;
197
-
198
- const genAi = this.getGenAiFromContext();
199
- const finalConversationId = conversationId || genAi.conversationId;
200
- const finalPreviousResponseId =
201
- previousResponseId || genAi.previousResponseId;
202
-
203
- if (finalConversationId)
204
- attributes["gen_ai.conversation.id"] = finalConversationId;
205
- if (finalPreviousResponseId)
206
- attributes["gen_ai.request.previous_response_id"] =
207
- finalPreviousResponseId;
208
- if (genAi.agentName) attributes["gen_ai.agent.name"] = genAi.agentName;
209
- if (genAi.agentId) attributes["gen_ai.agent.id"] = genAi.agentId;
210
-
211
- if (properties) {
212
- for (const [key, value] of Object.entries(properties)) {
213
- if (value != null) {
214
- const attrKey = `properties.${key}`;
215
- if (typeof value === "object") {
216
- attributes[attrKey] = JSON.stringify(value);
217
- } else if (
218
- typeof value === "string" ||
219
- typeof value === "number" ||
220
- typeof value === "boolean"
221
- ) {
222
- attributes[attrKey] = value;
223
- }
224
- }
225
- }
226
- }
227
-
228
- if (traits) {
229
- for (const [key, value] of Object.entries(traits)) {
230
- if (value != null) {
231
- const attrKey = `context.traits.${key}`;
232
- if (typeof value === "object") {
233
- attributes[attrKey] = JSON.stringify(value);
234
- } else if (
235
- typeof value === "string" ||
236
- typeof value === "number" ||
237
- typeof value === "boolean"
238
- ) {
239
- attributes[attrKey] = value;
240
- }
241
- }
242
- }
243
- }
244
-
245
- return attributes;
246
- }
247
-
248
- track(
249
- eventName: string,
250
- properties?: Record<string, unknown>,
251
- options?: { eventId?: string },
252
- ): void {
253
- const attributes = this.buildAttributes(eventName, {
254
- properties,
255
- eventId: options?.eventId,
256
- });
257
- this.otelLogger.emit({
258
- timestamp: this.getTimestamp(),
259
- context: context.active(),
260
- severityNumber: SeverityNumber.INFO,
261
- severityText: "INFO",
262
- attributes,
263
- });
264
- sdkLogger.debug(`Tracked: ${eventName}`);
265
- }
266
-
267
- feedback(name: string, options: FeedbackOptions = {}): void {
268
- const { comments, conversationId, previousResponseId, eventId, ...extra } =
269
- options;
270
- const properties: Record<string, unknown> = { name, ...extra };
271
- if (comments) properties.comments = comments;
272
- const attributes = this.buildAttributes("introspection.feedback", {
273
- properties,
274
- conversationId: conversationId as string | undefined,
275
- previousResponseId: previousResponseId as string | undefined,
276
- eventId: eventId as string | undefined,
277
- });
278
- this.otelLogger.emit({
279
- timestamp: this.getTimestamp(),
280
- context: context.active(),
281
- severityNumber: SeverityNumber.INFO,
282
- severityText: "INFO",
283
- attributes,
284
- });
285
- sdkLogger.debug(`Feedback: ${name}`);
286
- }
287
-
288
- identify(
289
- userId: string,
290
- traits?: UserTraits,
291
- anonymousId?: string,
292
- eventId?: string,
293
- ): void {
294
- this.userId = userId;
295
- if (anonymousId) this.anonymousId = anonymousId;
296
- if (traits) this.traits = { ...this.traits, ...traits };
297
- const attributes = this.buildAttributes("identify", { traits, eventId });
298
- this.otelLogger.emit({
299
- timestamp: this.getTimestamp(),
300
- context: context.active(),
301
- severityNumber: SeverityNumber.INFO,
302
- severityText: "INFO",
303
- attributes,
304
- });
305
- sdkLogger.debug(`Identified: ${userId}`);
306
- }
307
-
308
- createBaggageContext(values: Record<string, string>) {
309
- const ctx = context.active();
310
- let bag = propagation.getBaggage(ctx) || propagation.createBaggage();
311
- for (const [key, value] of Object.entries(values)) {
312
- bag = bag.setEntry(key, { value });
313
- }
314
- return propagation.setBaggage(ctx, bag);
315
- }
316
-
317
- async withBaggage<T>(
318
- values: Record<string, string>,
319
- callback: () => T | Promise<T>,
320
- ): Promise<T> {
321
- const ctx = this.createBaggageContext(values);
322
- return await context.with(ctx, callback);
323
- }
324
-
325
- async withAgent<T>(
326
- agentName: string,
327
- agentId: string | undefined,
328
- callback: () => T | Promise<T>,
329
- ): Promise<T> {
330
- const values: Record<string, string> = { "gen_ai.agent.name": agentName };
331
- if (agentId) values["gen_ai.agent.id"] = agentId;
332
- return await context.with(this.createBaggageContext(values), callback);
333
- }
334
-
335
- async withConversation<T>(
336
- conversationId: string | undefined,
337
- previousResponseId: string | undefined,
338
- callback: () => T | Promise<T>,
339
- ): Promise<T> {
340
- const values: Record<string, string> = {};
341
- if (conversationId) values["gen_ai.conversation.id"] = conversationId;
342
- if (previousResponseId)
343
- values["gen_ai.request.previous_response_id"] = previousResponseId;
344
- return await context.with(this.createBaggageContext(values), callback);
345
- }
346
-
347
- setUserId(userId: string): void {
348
- this.userId = userId;
349
- }
350
-
351
- setAnonymousId(anonymousId: string): void {
352
- this.anonymousId = anonymousId;
353
- }
354
-
355
- async withUserId<T>(
356
- userId: string,
357
- callback: () => T | Promise<T>,
358
- ): Promise<T> {
359
- return await context.with(
360
- this.createBaggageContext({ "identity.user_id": userId }),
361
- callback,
362
- );
363
- }
364
-
365
- async withAnonymousId<T>(
366
- anonymousId: string,
367
- callback: () => T | Promise<T>,
368
- ): Promise<T> {
369
- return await context.with(
370
- this.createBaggageContext({ "identity.anonymous_id": anonymousId }),
371
- callback,
372
- );
373
- }
374
-
375
- getAnonymousId(): string | undefined {
376
- return this.anonymousId;
377
- }
378
-
379
- reset(): void {
380
- this.userId = undefined;
381
- this.anonymousId = undefined;
382
- this.traits = {};
383
- sdkLogger.debug("IntrospectionLogs state reset");
384
- }
385
-
386
- async flush(): Promise<void> {
387
- await this.loggerProvider.forceFlush();
388
- sdkLogger.debug("Flushed pending log records");
389
- }
390
-
391
- async shutdown(): Promise<void> {
392
- await this.loggerProvider.shutdown();
393
- sdkLogger.debug("IntrospectionLogs shutdown complete");
394
- }
395
- }