@respan/tracing 1.0.45
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/LICENSE +201 -0
- package/README.md +860 -0
- package/dist/constants/index.d.ts +8 -0
- package/dist/constants/index.js +9 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/contexts/index.d.ts +1 -0
- package/dist/contexts/index.js +2 -0
- package/dist/contexts/index.js.map +1 -0
- package/dist/contexts/span.d.ts +9 -0
- package/dist/contexts/span.js +39 -0
- package/dist/contexts/span.js.map +1 -0
- package/dist/decorators/base.d.ts +32 -0
- package/dist/decorators/base.js +242 -0
- package/dist/decorators/base.js.map +1 -0
- package/dist/decorators/index.d.ts +1 -0
- package/dist/decorators/index.js +2 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumentation/index.d.ts +2 -0
- package/dist/instrumentation/index.js +3 -0
- package/dist/instrumentation/index.js.map +1 -0
- package/dist/instrumentation/loader.d.ts +5 -0
- package/dist/instrumentation/loader.js +104 -0
- package/dist/instrumentation/loader.js.map +1 -0
- package/dist/instrumentation/manager.d.ts +29 -0
- package/dist/instrumentation/manager.js +564 -0
- package/dist/instrumentation/manager.js.map +1 -0
- package/dist/main.d.ts +162 -0
- package/dist/main.js +212 -0
- package/dist/main.js.map +1 -0
- package/dist/processor/composite.d.ts +29 -0
- package/dist/processor/composite.js +106 -0
- package/dist/processor/composite.js.map +1 -0
- package/dist/processor/filtering.d.ts +19 -0
- package/dist/processor/filtering.js +78 -0
- package/dist/processor/filtering.js.map +1 -0
- package/dist/processor/index.d.ts +3 -0
- package/dist/processor/index.js +4 -0
- package/dist/processor/index.js.map +1 -0
- package/dist/processor/manager.d.ts +61 -0
- package/dist/processor/manager.js +111 -0
- package/dist/processor/manager.js.map +1 -0
- package/dist/types/clientTypes.d.ts +188 -0
- package/dist/types/clientTypes.js +22 -0
- package/dist/types/clientTypes.js.map +1 -0
- package/dist/types/decoratorTypes.d.ts +6 -0
- package/dist/types/decoratorTypes.js +2 -0
- package/dist/types/decoratorTypes.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/instrumentationTypes.d.ts +25 -0
- package/dist/types/instrumentationTypes.js +82 -0
- package/dist/types/instrumentationTypes.js.map +1 -0
- package/dist/utils/client.d.ts +168 -0
- package/dist/utils/client.js +151 -0
- package/dist/utils/client.js.map +1 -0
- package/dist/utils/context.d.ts +28 -0
- package/dist/utils/context.js +44 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/span.d.ts +65 -0
- package/dist/utils/span.js +269 -0
- package/dist/utils/span.js.map +1 -0
- package/dist/utils/spanBuffer.d.ts +94 -0
- package/dist/utils/spanBuffer.js +147 -0
- package/dist/utils/spanBuffer.js.map +1 -0
- package/dist/utils/tracing.d.ts +31 -0
- package/dist/utils/tracing.js +239 -0
- package/dist/utils/tracing.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
import { loadInstrumentation } from "./loader.js";
|
|
2
|
+
import { INSTRUMENTATION_INFO } from "../types/index.js";
|
|
3
|
+
// Array to hold all instrumentations that will be loaded dynamically
|
|
4
|
+
const instrumentations = [];
|
|
5
|
+
// Store instrumentation instances for configuration
|
|
6
|
+
let openAIInstrumentation;
|
|
7
|
+
let anthropicInstrumentation;
|
|
8
|
+
let azureOpenAIInstrumentation;
|
|
9
|
+
let cohereInstrumentation;
|
|
10
|
+
let vertexaiInstrumentation;
|
|
11
|
+
let bedrockInstrumentation;
|
|
12
|
+
let langchainInstrumentation;
|
|
13
|
+
let llamaIndexInstrumentation;
|
|
14
|
+
let pineconeInstrumentation;
|
|
15
|
+
let chromadbInstrumentation;
|
|
16
|
+
let qdrantInstrumentation;
|
|
17
|
+
let togetherInstrumentation;
|
|
18
|
+
/**
|
|
19
|
+
* Get all loaded instrumentations
|
|
20
|
+
*/
|
|
21
|
+
export const getInstrumentations = () => {
|
|
22
|
+
return [...instrumentations];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Get a specific instrumentation instance by name
|
|
26
|
+
*/
|
|
27
|
+
export const getInstrumentationInstance = (name) => {
|
|
28
|
+
switch (name) {
|
|
29
|
+
case "openAI": return openAIInstrumentation;
|
|
30
|
+
case "anthropic": return anthropicInstrumentation;
|
|
31
|
+
case "azureOpenAI": return azureOpenAIInstrumentation;
|
|
32
|
+
case "cohere": return cohereInstrumentation;
|
|
33
|
+
case "googleVertexAI": return vertexaiInstrumentation;
|
|
34
|
+
case "bedrock": return bedrockInstrumentation;
|
|
35
|
+
case "langChain": return langchainInstrumentation;
|
|
36
|
+
case "llamaIndex": return llamaIndexInstrumentation;
|
|
37
|
+
case "pinecone": return pineconeInstrumentation;
|
|
38
|
+
case "chromaDB": return chromadbInstrumentation;
|
|
39
|
+
case "qdrant": return qdrantInstrumentation;
|
|
40
|
+
case "together": return togetherInstrumentation;
|
|
41
|
+
default: return undefined;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Configure trace content for instrumentations
|
|
46
|
+
*/
|
|
47
|
+
export const configureTraceContent = (enabled) => {
|
|
48
|
+
const traceContent = enabled;
|
|
49
|
+
console.debug(`[Respan Debug] Configuring trace content: ${enabled ? 'enabled' : 'disabled'}`);
|
|
50
|
+
openAIInstrumentation?.setConfig?.({ traceContent });
|
|
51
|
+
anthropicInstrumentation?.setConfig?.({ traceContent });
|
|
52
|
+
azureOpenAIInstrumentation?.setConfig?.({ traceContent });
|
|
53
|
+
llamaIndexInstrumentation?.setConfig?.({ traceContent });
|
|
54
|
+
vertexaiInstrumentation?.setConfig?.({ traceContent });
|
|
55
|
+
bedrockInstrumentation?.setConfig?.({ traceContent });
|
|
56
|
+
cohereInstrumentation?.setConfig?.({ traceContent });
|
|
57
|
+
chromadbInstrumentation?.setConfig?.({ traceContent });
|
|
58
|
+
togetherInstrumentation?.setConfig?.({ traceContent });
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Initialize all available instrumentations automatically.
|
|
62
|
+
* This is used when no specific instrumentModules are provided.
|
|
63
|
+
*/
|
|
64
|
+
export const initInstrumentations = async (disabledInstrumentations = [], showInstallWarnings = true) => {
|
|
65
|
+
const exceptionLogger = (e) => console.error("Instrumentation error:", e);
|
|
66
|
+
console.info("[Respan] Initializing automatic instrumentation discovery...");
|
|
67
|
+
// Track instrumentation loading results
|
|
68
|
+
const loadingResults = [];
|
|
69
|
+
// Clear the instrumentations array
|
|
70
|
+
instrumentations.length = 0;
|
|
71
|
+
// Define all instrumentations to attempt loading
|
|
72
|
+
const instrumentationsToLoad = [
|
|
73
|
+
{
|
|
74
|
+
name: "openAI",
|
|
75
|
+
description: "OpenAI API instrumentation",
|
|
76
|
+
loadFunction: async () => {
|
|
77
|
+
const { OpenAIInstrumentation } = await import("@traceloop/instrumentation-openai");
|
|
78
|
+
openAIInstrumentation = new OpenAIInstrumentation({
|
|
79
|
+
exceptionLogger: (e) => console.error("OpenAI instrumentation error:", e),
|
|
80
|
+
});
|
|
81
|
+
return openAIInstrumentation;
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: "anthropic",
|
|
86
|
+
description: "Anthropic API instrumentation",
|
|
87
|
+
loadFunction: async () => {
|
|
88
|
+
const { AnthropicInstrumentation } = await import("@traceloop/instrumentation-anthropic");
|
|
89
|
+
anthropicInstrumentation = new AnthropicInstrumentation({
|
|
90
|
+
exceptionLogger,
|
|
91
|
+
});
|
|
92
|
+
return anthropicInstrumentation;
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "azureOpenAI",
|
|
97
|
+
description: "Azure OpenAI instrumentation",
|
|
98
|
+
loadFunction: async () => {
|
|
99
|
+
const { AzureOpenAIInstrumentation } = await import("@traceloop/instrumentation-azure");
|
|
100
|
+
azureOpenAIInstrumentation = new AzureOpenAIInstrumentation({
|
|
101
|
+
exceptionLogger,
|
|
102
|
+
});
|
|
103
|
+
return azureOpenAIInstrumentation;
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: "cohere",
|
|
108
|
+
description: "Cohere API instrumentation",
|
|
109
|
+
loadFunction: async () => {
|
|
110
|
+
const { CohereInstrumentation } = await import("@traceloop/instrumentation-cohere");
|
|
111
|
+
cohereInstrumentation = new CohereInstrumentation({ exceptionLogger });
|
|
112
|
+
return cohereInstrumentation;
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: "googleVertexAI",
|
|
117
|
+
description: "Google Vertex AI instrumentation",
|
|
118
|
+
loadFunction: async () => {
|
|
119
|
+
const { VertexAIInstrumentation } = await import("@traceloop/instrumentation-vertexai");
|
|
120
|
+
vertexaiInstrumentation = new VertexAIInstrumentation({
|
|
121
|
+
exceptionLogger,
|
|
122
|
+
});
|
|
123
|
+
return vertexaiInstrumentation;
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: "bedrock",
|
|
128
|
+
description: "AWS Bedrock instrumentation",
|
|
129
|
+
loadFunction: async () => {
|
|
130
|
+
const { BedrockInstrumentation } = await import("@traceloop/instrumentation-bedrock");
|
|
131
|
+
bedrockInstrumentation = new BedrockInstrumentation({
|
|
132
|
+
exceptionLogger,
|
|
133
|
+
});
|
|
134
|
+
return bedrockInstrumentation;
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: "langChain",
|
|
139
|
+
description: "LangChain framework instrumentation",
|
|
140
|
+
loadFunction: async () => {
|
|
141
|
+
const { LangChainInstrumentation } = await import("@traceloop/instrumentation-langchain");
|
|
142
|
+
langchainInstrumentation = new LangChainInstrumentation({
|
|
143
|
+
exceptionLogger,
|
|
144
|
+
});
|
|
145
|
+
return langchainInstrumentation;
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: "llamaIndex",
|
|
150
|
+
description: "LlamaIndex framework instrumentation",
|
|
151
|
+
loadFunction: async () => {
|
|
152
|
+
const { LlamaIndexInstrumentation } = await import("@traceloop/instrumentation-llamaindex");
|
|
153
|
+
llamaIndexInstrumentation = new LlamaIndexInstrumentation({
|
|
154
|
+
exceptionLogger,
|
|
155
|
+
});
|
|
156
|
+
return llamaIndexInstrumentation;
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: "pinecone",
|
|
161
|
+
description: "Pinecone vector database instrumentation",
|
|
162
|
+
loadFunction: async () => {
|
|
163
|
+
const { PineconeInstrumentation } = await import("@traceloop/instrumentation-pinecone");
|
|
164
|
+
pineconeInstrumentation = new PineconeInstrumentation({
|
|
165
|
+
exceptionLogger,
|
|
166
|
+
});
|
|
167
|
+
return pineconeInstrumentation;
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: "chromaDB",
|
|
172
|
+
description: "ChromaDB vector database instrumentation",
|
|
173
|
+
loadFunction: async () => {
|
|
174
|
+
const { ChromaDBInstrumentation } = await import("@traceloop/instrumentation-chromadb");
|
|
175
|
+
chromadbInstrumentation = new ChromaDBInstrumentation({
|
|
176
|
+
exceptionLogger,
|
|
177
|
+
});
|
|
178
|
+
return chromadbInstrumentation;
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: "qdrant",
|
|
183
|
+
description: "Qdrant vector database instrumentation",
|
|
184
|
+
loadFunction: async () => {
|
|
185
|
+
const { QdrantInstrumentation } = await import("@traceloop/instrumentation-qdrant");
|
|
186
|
+
qdrantInstrumentation = new QdrantInstrumentation({ exceptionLogger });
|
|
187
|
+
return qdrantInstrumentation;
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
name: "together",
|
|
192
|
+
description: "Together AI instrumentation",
|
|
193
|
+
loadFunction: async () => {
|
|
194
|
+
const { TogetherInstrumentation } = await import("@traceloop/instrumentation-together");
|
|
195
|
+
togetherInstrumentation = new TogetherInstrumentation({
|
|
196
|
+
exceptionLogger,
|
|
197
|
+
});
|
|
198
|
+
return togetherInstrumentation;
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
];
|
|
202
|
+
// Load each instrumentation
|
|
203
|
+
for (const { name, description, loadFunction } of instrumentationsToLoad) {
|
|
204
|
+
if (disabledInstrumentations.includes(name)) {
|
|
205
|
+
loadingResults.push({ name, status: "disabled", description });
|
|
206
|
+
console.debug(`[Respan Debug] Skipping ${description} (disabled by configuration)`);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
console.debug(`[Respan Debug] Attempting to load ${description}...`);
|
|
211
|
+
const instrumentation = await loadFunction();
|
|
212
|
+
instrumentations.push(instrumentation);
|
|
213
|
+
loadingResults.push({ name, status: "success", description });
|
|
214
|
+
console.debug(`[Respan Debug] Successfully loaded ${description}`);
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
loadingResults.push({ name, status: "failed", description, error });
|
|
218
|
+
// Provide installation instructions for failed instrumentations (only if showInstallWarnings is true)
|
|
219
|
+
if (showInstallWarnings) {
|
|
220
|
+
const info = INSTRUMENTATION_INFO[name];
|
|
221
|
+
if (info) {
|
|
222
|
+
console.info(`[Respan] ${description} is not available. To enable it, install the required package:\n ${info.installCommand}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
console.debug(`[Respan Debug] Failed to load ${description}:`, error);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Print summary
|
|
229
|
+
const successful = loadingResults.filter((r) => r.status === "success");
|
|
230
|
+
const failed = loadingResults.filter((r) => r.status === "failed");
|
|
231
|
+
const disabled = loadingResults.filter((r) => r.status === "disabled");
|
|
232
|
+
console.info(`[Respan] Instrumentation loading complete: ${successful.length} loaded, ${failed.length} failed, ${disabled.length} disabled`);
|
|
233
|
+
if (successful.length > 0) {
|
|
234
|
+
console.info(`[Respan] Successfully loaded: ${successful
|
|
235
|
+
.map((r) => r.name)
|
|
236
|
+
.join(", ")}`);
|
|
237
|
+
}
|
|
238
|
+
if (disabled.length > 0) {
|
|
239
|
+
console.info(`[Respan] Disabled instrumentations: ${disabled
|
|
240
|
+
.map((r) => r.name)
|
|
241
|
+
.join(", ")}`);
|
|
242
|
+
}
|
|
243
|
+
if (failed.length > 0) {
|
|
244
|
+
console.debug(`[Respan Debug] Failed to load: ${failed
|
|
245
|
+
.map((r) => r.name)
|
|
246
|
+
.join(", ")}`);
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* Manually initialize instrumentations with provided modules.
|
|
251
|
+
* This is similar to Traceloop's approach for environments like Next.js
|
|
252
|
+
* where dynamic imports might not work properly.
|
|
253
|
+
*/
|
|
254
|
+
export const manuallyInitInstrumentations = async (instrumentModules, disabledInstrumentations = []) => {
|
|
255
|
+
const exceptionLogger = (e) => console.error("Instrumentation error:", e);
|
|
256
|
+
console.info("[Respan] Initializing manual instrumentation with provided modules...");
|
|
257
|
+
console.debug("[Respan Debug] Provided modules:", Object.keys(instrumentModules));
|
|
258
|
+
// Track instrumentation loading results (using string for name to allow custom modules)
|
|
259
|
+
const loadingResults = [];
|
|
260
|
+
// Clear the instrumentations array
|
|
261
|
+
instrumentations.length = 0;
|
|
262
|
+
// Define all possible manual instrumentations
|
|
263
|
+
const manualInstrumentationConfigs = [
|
|
264
|
+
{
|
|
265
|
+
name: "openAI",
|
|
266
|
+
description: "OpenAI API instrumentation",
|
|
267
|
+
moduleKey: "openAI",
|
|
268
|
+
initFunction: async (module) => {
|
|
269
|
+
const { OpenAIInstrumentation } = await import("@traceloop/instrumentation-openai");
|
|
270
|
+
openAIInstrumentation = new OpenAIInstrumentation({
|
|
271
|
+
exceptionLogger,
|
|
272
|
+
});
|
|
273
|
+
instrumentations.push(openAIInstrumentation);
|
|
274
|
+
openAIInstrumentation.manuallyInstrument(module);
|
|
275
|
+
return openAIInstrumentation;
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
name: "anthropic",
|
|
280
|
+
description: "Anthropic API instrumentation",
|
|
281
|
+
moduleKey: "anthropic",
|
|
282
|
+
initFunction: async (module) => {
|
|
283
|
+
const { AnthropicInstrumentation } = await import("@traceloop/instrumentation-anthropic");
|
|
284
|
+
anthropicInstrumentation = new AnthropicInstrumentation({
|
|
285
|
+
exceptionLogger,
|
|
286
|
+
});
|
|
287
|
+
instrumentations.push(anthropicInstrumentation);
|
|
288
|
+
anthropicInstrumentation.manuallyInstrument(module);
|
|
289
|
+
return anthropicInstrumentation;
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
name: "azureOpenAI",
|
|
294
|
+
description: "Azure OpenAI instrumentation",
|
|
295
|
+
moduleKey: "azureOpenAI",
|
|
296
|
+
initFunction: async (module) => {
|
|
297
|
+
const { AzureOpenAIInstrumentation } = await import("@traceloop/instrumentation-azure");
|
|
298
|
+
azureOpenAIInstrumentation = new AzureOpenAIInstrumentation({
|
|
299
|
+
exceptionLogger,
|
|
300
|
+
});
|
|
301
|
+
instrumentations.push(azureOpenAIInstrumentation);
|
|
302
|
+
azureOpenAIInstrumentation.manuallyInstrument(module);
|
|
303
|
+
return azureOpenAIInstrumentation;
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
name: "cohere",
|
|
308
|
+
description: "Cohere API instrumentation",
|
|
309
|
+
moduleKey: "cohere",
|
|
310
|
+
initFunction: async (module) => {
|
|
311
|
+
const { CohereInstrumentation } = await import("@traceloop/instrumentation-cohere");
|
|
312
|
+
cohereInstrumentation = new CohereInstrumentation({ exceptionLogger });
|
|
313
|
+
instrumentations.push(cohereInstrumentation);
|
|
314
|
+
cohereInstrumentation.manuallyInstrument(module);
|
|
315
|
+
return cohereInstrumentation;
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: "googleVertexAI",
|
|
320
|
+
description: "Google Vertex AI instrumentation",
|
|
321
|
+
moduleKey: "googleVertexAI",
|
|
322
|
+
initFunction: async (module) => {
|
|
323
|
+
const { VertexAIInstrumentation } = await import("@traceloop/instrumentation-vertexai");
|
|
324
|
+
vertexaiInstrumentation = new VertexAIInstrumentation({
|
|
325
|
+
exceptionLogger,
|
|
326
|
+
});
|
|
327
|
+
instrumentations.push(vertexaiInstrumentation);
|
|
328
|
+
vertexaiInstrumentation.manuallyInstrument(module);
|
|
329
|
+
return vertexaiInstrumentation;
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
name: "googleAIPlatform",
|
|
334
|
+
description: "Google AI Platform instrumentation",
|
|
335
|
+
moduleKey: "googleAIPlatform",
|
|
336
|
+
initFunction: async (module) => {
|
|
337
|
+
const { AIPlatformInstrumentation } = await import("@traceloop/instrumentation-vertexai");
|
|
338
|
+
const aiplatformInstrumentation = new AIPlatformInstrumentation({
|
|
339
|
+
exceptionLogger,
|
|
340
|
+
});
|
|
341
|
+
instrumentations.push(aiplatformInstrumentation);
|
|
342
|
+
aiplatformInstrumentation.manuallyInstrument(module);
|
|
343
|
+
return aiplatformInstrumentation;
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
name: "bedrock",
|
|
348
|
+
description: "AWS Bedrock instrumentation",
|
|
349
|
+
moduleKey: "bedrock",
|
|
350
|
+
initFunction: async (module) => {
|
|
351
|
+
const { BedrockInstrumentation } = await import("@traceloop/instrumentation-bedrock");
|
|
352
|
+
bedrockInstrumentation = new BedrockInstrumentation({
|
|
353
|
+
exceptionLogger,
|
|
354
|
+
});
|
|
355
|
+
instrumentations.push(bedrockInstrumentation);
|
|
356
|
+
bedrockInstrumentation.manuallyInstrument(module);
|
|
357
|
+
return bedrockInstrumentation;
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
name: "pinecone",
|
|
362
|
+
description: "Pinecone vector database instrumentation",
|
|
363
|
+
moduleKey: "pinecone",
|
|
364
|
+
initFunction: async (module) => {
|
|
365
|
+
const { PineconeInstrumentation } = await import("@traceloop/instrumentation-pinecone");
|
|
366
|
+
pineconeInstrumentation = new PineconeInstrumentation({
|
|
367
|
+
exceptionLogger,
|
|
368
|
+
});
|
|
369
|
+
instrumentations.push(pineconeInstrumentation);
|
|
370
|
+
pineconeInstrumentation.manuallyInstrument(module);
|
|
371
|
+
return pineconeInstrumentation;
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
name: "langChain",
|
|
376
|
+
description: "LangChain framework instrumentation",
|
|
377
|
+
moduleKey: "langChain",
|
|
378
|
+
initFunction: async (module) => {
|
|
379
|
+
const { LangChainInstrumentation } = await import("@traceloop/instrumentation-langchain");
|
|
380
|
+
langchainInstrumentation = new LangChainInstrumentation({
|
|
381
|
+
exceptionLogger,
|
|
382
|
+
});
|
|
383
|
+
instrumentations.push(langchainInstrumentation);
|
|
384
|
+
langchainInstrumentation.manuallyInstrument(module);
|
|
385
|
+
return langchainInstrumentation;
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
name: "llamaIndex",
|
|
390
|
+
description: "LlamaIndex framework instrumentation",
|
|
391
|
+
moduleKey: "llamaIndex",
|
|
392
|
+
initFunction: async (module) => {
|
|
393
|
+
const { LlamaIndexInstrumentation } = await import("@traceloop/instrumentation-llamaindex");
|
|
394
|
+
llamaIndexInstrumentation = new LlamaIndexInstrumentation({
|
|
395
|
+
exceptionLogger,
|
|
396
|
+
});
|
|
397
|
+
instrumentations.push(llamaIndexInstrumentation);
|
|
398
|
+
llamaIndexInstrumentation.manuallyInstrument(module);
|
|
399
|
+
return llamaIndexInstrumentation;
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
name: "chromaDB",
|
|
404
|
+
description: "ChromaDB vector database instrumentation",
|
|
405
|
+
moduleKey: "chromaDB",
|
|
406
|
+
initFunction: async (module) => {
|
|
407
|
+
const { ChromaDBInstrumentation } = await import("@traceloop/instrumentation-chromadb");
|
|
408
|
+
chromadbInstrumentation = new ChromaDBInstrumentation({
|
|
409
|
+
exceptionLogger,
|
|
410
|
+
});
|
|
411
|
+
instrumentations.push(chromadbInstrumentation);
|
|
412
|
+
chromadbInstrumentation.manuallyInstrument(module);
|
|
413
|
+
return chromadbInstrumentation;
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
name: "qdrant",
|
|
418
|
+
description: "Qdrant vector database instrumentation",
|
|
419
|
+
moduleKey: "qdrant",
|
|
420
|
+
initFunction: async (module) => {
|
|
421
|
+
const { QdrantInstrumentation } = await import("@traceloop/instrumentation-qdrant");
|
|
422
|
+
qdrantInstrumentation = new QdrantInstrumentation({ exceptionLogger });
|
|
423
|
+
instrumentations.push(qdrantInstrumentation);
|
|
424
|
+
qdrantInstrumentation.manuallyInstrument(module);
|
|
425
|
+
return qdrantInstrumentation;
|
|
426
|
+
},
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
name: "together",
|
|
430
|
+
description: "Together AI instrumentation",
|
|
431
|
+
moduleKey: "together",
|
|
432
|
+
initFunction: async (module) => {
|
|
433
|
+
const { TogetherInstrumentation } = await import("@traceloop/instrumentation-together");
|
|
434
|
+
togetherInstrumentation = new TogetherInstrumentation({
|
|
435
|
+
exceptionLogger,
|
|
436
|
+
});
|
|
437
|
+
instrumentations.push(togetherInstrumentation);
|
|
438
|
+
togetherInstrumentation.manuallyInstrument(module);
|
|
439
|
+
return togetherInstrumentation;
|
|
440
|
+
},
|
|
441
|
+
},
|
|
442
|
+
];
|
|
443
|
+
// Keep track of processed module keys
|
|
444
|
+
const processedModuleKeys = new Set();
|
|
445
|
+
// Process each pre-defined instrumentation
|
|
446
|
+
for (const { name, description, moduleKey, initFunction, } of manualInstrumentationConfigs) {
|
|
447
|
+
const module = instrumentModules[moduleKey];
|
|
448
|
+
processedModuleKeys.add(moduleKey);
|
|
449
|
+
if (disabledInstrumentations.includes(name)) {
|
|
450
|
+
loadingResults.push({ name, status: "disabled", description });
|
|
451
|
+
console.debug(`[Respan Debug] Skipping ${description} (disabled by configuration)`);
|
|
452
|
+
continue;
|
|
453
|
+
}
|
|
454
|
+
if (!module) {
|
|
455
|
+
loadingResults.push({ name, status: "not-provided", description });
|
|
456
|
+
console.debug(`[Respan Debug] No module provided for ${description}`);
|
|
457
|
+
continue;
|
|
458
|
+
}
|
|
459
|
+
try {
|
|
460
|
+
console.debug(`[Respan Debug] Attempting to manually initialize ${description}...`);
|
|
461
|
+
await initFunction(module);
|
|
462
|
+
loadingResults.push({ name, status: "success", description });
|
|
463
|
+
console.debug(`[Respan Debug] Successfully initialized ${description}`);
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
loadingResults.push({ name, status: "failed", description, error });
|
|
467
|
+
// Provide installation instructions for failed instrumentations (always show for manual instrumentation)
|
|
468
|
+
const info = INSTRUMENTATION_INFO[name];
|
|
469
|
+
if (info) {
|
|
470
|
+
console.info(`[Respan] ${description} failed to initialize. Make sure you have the required package installed:\n ${info.installCommand}`);
|
|
471
|
+
}
|
|
472
|
+
console.debug(`[Respan Debug] Failed to initialize ${description}:`, error);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
// Process any additional modules not in our pre-defined list
|
|
476
|
+
for (const [moduleKey, module] of Object.entries(instrumentModules)) {
|
|
477
|
+
if (processedModuleKeys.has(moduleKey) || !module) {
|
|
478
|
+
continue; // Skip already processed or null modules
|
|
479
|
+
}
|
|
480
|
+
const customName = moduleKey; // Use the actual module key name
|
|
481
|
+
const customDescription = `Custom ${moduleKey} instrumentation`;
|
|
482
|
+
console.debug(`[Respan Debug] Found custom module: ${moduleKey}, attempting generic instrumentation...`);
|
|
483
|
+
try {
|
|
484
|
+
// Generic approach: try to call manuallyInstrument if it exists
|
|
485
|
+
if (typeof module.manuallyInstrument === "function") {
|
|
486
|
+
console.debug(`[Respan Debug] Attempting generic manual instrumentation for ${customDescription}...`);
|
|
487
|
+
module.manuallyInstrument(module);
|
|
488
|
+
loadingResults.push({
|
|
489
|
+
name: customName,
|
|
490
|
+
status: "success",
|
|
491
|
+
description: customDescription,
|
|
492
|
+
});
|
|
493
|
+
console.debug(`[Respan Debug] Successfully initialized ${customDescription}`);
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
// Check if it's a valid instrumentation instance (has required OpenTelemetry methods)
|
|
497
|
+
if (typeof module.setTracerProvider === "function" &&
|
|
498
|
+
typeof module.getConfig === "function") {
|
|
499
|
+
console.debug(`[Respan Debug] Module ${moduleKey} appears to be an instrumentation instance, adding it...`);
|
|
500
|
+
instrumentations.push(module);
|
|
501
|
+
loadingResults.push({
|
|
502
|
+
name: customName,
|
|
503
|
+
status: "success",
|
|
504
|
+
description: customDescription,
|
|
505
|
+
});
|
|
506
|
+
console.debug(`[Respan Debug] Successfully added ${customDescription} as instrumentation instance`);
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
// Not a valid instrumentation, skip it with a helpful message
|
|
510
|
+
console.debug(`[Respan Debug] Module ${moduleKey} is not a valid OpenTelemetry instrumentation (missing required methods)`);
|
|
511
|
+
loadingResults.push({
|
|
512
|
+
name: customName,
|
|
513
|
+
status: "failed",
|
|
514
|
+
description: customDescription,
|
|
515
|
+
error: "Not a valid instrumentation",
|
|
516
|
+
});
|
|
517
|
+
console.info(`[Respan] Custom module '${moduleKey}' is not a valid OpenTelemetry instrumentation. It should either have a manuallyInstrument() method or be an Instrumentation instance.`);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
catch (error) {
|
|
522
|
+
loadingResults.push({
|
|
523
|
+
name: customName,
|
|
524
|
+
status: "failed",
|
|
525
|
+
description: customDescription,
|
|
526
|
+
error,
|
|
527
|
+
});
|
|
528
|
+
console.info(`[Respan] Failed to initialize custom module '${moduleKey}'. Make sure it's a valid OpenTelemetry instrumentation.`);
|
|
529
|
+
console.debug(`[Respan Debug] Failed to initialize ${customDescription}:`, error);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
// Print summary
|
|
533
|
+
const successful = loadingResults.filter((r) => r.status === "success");
|
|
534
|
+
const failed = loadingResults.filter((r) => r.status === "failed");
|
|
535
|
+
const disabled = loadingResults.filter((r) => r.status === "disabled");
|
|
536
|
+
const notProvided = loadingResults.filter((r) => r.status === "not-provided");
|
|
537
|
+
console.info(`[Respan] Manual instrumentation complete: ${successful.length} initialized, ${failed.length} failed, ${disabled.length} disabled, ${notProvided.length} not provided`);
|
|
538
|
+
if (successful.length > 0) {
|
|
539
|
+
console.info(`[Respan] Successfully initialized: ${successful
|
|
540
|
+
.map((r) => r.name)
|
|
541
|
+
.join(", ")}`);
|
|
542
|
+
}
|
|
543
|
+
if (disabled.length > 0) {
|
|
544
|
+
console.info(`[Respan] Disabled instrumentations: ${disabled
|
|
545
|
+
.map((r) => r.name)
|
|
546
|
+
.join(", ")}`);
|
|
547
|
+
}
|
|
548
|
+
if (failed.length > 0) {
|
|
549
|
+
console.debug(`[Respan Debug] Failed to initialize: ${failed
|
|
550
|
+
.map((r) => r.name)
|
|
551
|
+
.join(", ")}`);
|
|
552
|
+
}
|
|
553
|
+
};
|
|
554
|
+
/**
|
|
555
|
+
* Add an instrumentation to the collection
|
|
556
|
+
*/
|
|
557
|
+
export const enableInstrumentation = async (name) => {
|
|
558
|
+
const instrumentation = await loadInstrumentation(name);
|
|
559
|
+
if (instrumentation) {
|
|
560
|
+
instrumentations.push(instrumentation);
|
|
561
|
+
console.log(`Enabled ${name} instrumentation`);
|
|
562
|
+
}
|
|
563
|
+
};
|
|
564
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/instrumentation/manager.ts"],"names":[],"mappings":"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"}
|