@azure/ai-projects 1.0.0-alpha.20250627.1 → 1.0.0-alpha.20250704.1

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 (137) hide show
  1. package/dist/browser/aiProjectClient.d.ts +1 -4
  2. package/dist/browser/aiProjectClient.d.ts.map +1 -1
  3. package/dist/browser/aiProjectClient.js +1 -3
  4. package/dist/browser/aiProjectClient.js.map +1 -1
  5. package/dist/browser/api/datasets/operations.d.ts +4 -4
  6. package/dist/browser/api/datasets/operations.d.ts.map +1 -1
  7. package/dist/browser/api/datasets/operations.js +8 -8
  8. package/dist/browser/api/datasets/operations.js.map +1 -1
  9. package/dist/browser/api/indexes/operations.d.ts +2 -2
  10. package/dist/browser/api/indexes/operations.d.ts.map +1 -1
  11. package/dist/browser/api/indexes/operations.js +4 -4
  12. package/dist/browser/api/indexes/operations.js.map +1 -1
  13. package/dist/browser/classic/datasets/index.d.ts +2 -2
  14. package/dist/browser/classic/datasets/index.d.ts.map +1 -1
  15. package/dist/browser/classic/datasets/index.js +2 -2
  16. package/dist/browser/classic/datasets/index.js.map +1 -1
  17. package/dist/browser/classic/indexes/index.d.ts +1 -1
  18. package/dist/browser/classic/indexes/index.d.ts.map +1 -1
  19. package/dist/browser/classic/indexes/index.js +1 -1
  20. package/dist/browser/classic/indexes/index.js.map +1 -1
  21. package/dist/browser/classic/telemetry/index.d.ts +0 -3
  22. package/dist/browser/classic/telemetry/index.d.ts.map +1 -1
  23. package/dist/browser/classic/telemetry/index.js +0 -1
  24. package/dist/browser/classic/telemetry/index.js.map +1 -1
  25. package/dist/browser/index.d.ts +1 -1
  26. package/dist/browser/index.d.ts.map +1 -1
  27. package/dist/browser/index.js.map +1 -1
  28. package/dist/browser/models/models.d.ts +2 -2
  29. package/dist/browser/models/models.d.ts.map +1 -1
  30. package/dist/browser/models/models.js.map +1 -1
  31. package/dist/commonjs/aiProjectClient.d.ts +1 -4
  32. package/dist/commonjs/aiProjectClient.d.ts.map +1 -1
  33. package/dist/commonjs/aiProjectClient.js +0 -2
  34. package/dist/commonjs/aiProjectClient.js.map +1 -1
  35. package/dist/commonjs/api/datasets/operations.d.ts +4 -4
  36. package/dist/commonjs/api/datasets/operations.d.ts.map +1 -1
  37. package/dist/commonjs/api/datasets/operations.js +8 -8
  38. package/dist/commonjs/api/datasets/operations.js.map +1 -1
  39. package/dist/commonjs/api/indexes/operations.d.ts +2 -2
  40. package/dist/commonjs/api/indexes/operations.d.ts.map +1 -1
  41. package/dist/commonjs/api/indexes/operations.js +4 -4
  42. package/dist/commonjs/api/indexes/operations.js.map +1 -1
  43. package/dist/commonjs/classic/datasets/index.d.ts +2 -2
  44. package/dist/commonjs/classic/datasets/index.d.ts.map +1 -1
  45. package/dist/commonjs/classic/datasets/index.js +2 -2
  46. package/dist/commonjs/classic/datasets/index.js.map +1 -1
  47. package/dist/commonjs/classic/indexes/index.d.ts +1 -1
  48. package/dist/commonjs/classic/indexes/index.d.ts.map +1 -1
  49. package/dist/commonjs/classic/indexes/index.js +1 -1
  50. package/dist/commonjs/classic/indexes/index.js.map +1 -1
  51. package/dist/commonjs/classic/telemetry/index.d.ts +0 -3
  52. package/dist/commonjs/classic/telemetry/index.d.ts.map +1 -1
  53. package/dist/commonjs/classic/telemetry/index.js +0 -3
  54. package/dist/commonjs/classic/telemetry/index.js.map +1 -1
  55. package/dist/commonjs/index.d.ts +1 -1
  56. package/dist/commonjs/index.d.ts.map +1 -1
  57. package/dist/commonjs/index.js.map +1 -1
  58. package/dist/commonjs/models/models.d.ts +2 -2
  59. package/dist/commonjs/models/models.d.ts.map +1 -1
  60. package/dist/commonjs/models/models.js.map +1 -1
  61. package/dist/esm/aiProjectClient.d.ts +1 -4
  62. package/dist/esm/aiProjectClient.d.ts.map +1 -1
  63. package/dist/esm/aiProjectClient.js +1 -3
  64. package/dist/esm/aiProjectClient.js.map +1 -1
  65. package/dist/esm/api/datasets/operations.d.ts +4 -4
  66. package/dist/esm/api/datasets/operations.d.ts.map +1 -1
  67. package/dist/esm/api/datasets/operations.js +8 -8
  68. package/dist/esm/api/datasets/operations.js.map +1 -1
  69. package/dist/esm/api/indexes/operations.d.ts +2 -2
  70. package/dist/esm/api/indexes/operations.d.ts.map +1 -1
  71. package/dist/esm/api/indexes/operations.js +4 -4
  72. package/dist/esm/api/indexes/operations.js.map +1 -1
  73. package/dist/esm/classic/datasets/index.d.ts +2 -2
  74. package/dist/esm/classic/datasets/index.d.ts.map +1 -1
  75. package/dist/esm/classic/datasets/index.js +2 -2
  76. package/dist/esm/classic/datasets/index.js.map +1 -1
  77. package/dist/esm/classic/indexes/index.d.ts +1 -1
  78. package/dist/esm/classic/indexes/index.d.ts.map +1 -1
  79. package/dist/esm/classic/indexes/index.js +1 -1
  80. package/dist/esm/classic/indexes/index.js.map +1 -1
  81. package/dist/esm/classic/telemetry/index.d.ts +0 -3
  82. package/dist/esm/classic/telemetry/index.d.ts.map +1 -1
  83. package/dist/esm/classic/telemetry/index.js +0 -1
  84. package/dist/esm/classic/telemetry/index.js.map +1 -1
  85. package/dist/esm/index.d.ts +1 -1
  86. package/dist/esm/index.d.ts.map +1 -1
  87. package/dist/esm/index.js.map +1 -1
  88. package/dist/esm/models/models.d.ts +2 -2
  89. package/dist/esm/models/models.d.ts.map +1 -1
  90. package/dist/esm/models/models.js.map +1 -1
  91. package/dist/react-native/aiProjectClient.d.ts +1 -4
  92. package/dist/react-native/aiProjectClient.d.ts.map +1 -1
  93. package/dist/react-native/aiProjectClient.js +1 -3
  94. package/dist/react-native/aiProjectClient.js.map +1 -1
  95. package/dist/react-native/api/datasets/operations.d.ts +4 -4
  96. package/dist/react-native/api/datasets/operations.d.ts.map +1 -1
  97. package/dist/react-native/api/datasets/operations.js +8 -8
  98. package/dist/react-native/api/datasets/operations.js.map +1 -1
  99. package/dist/react-native/api/indexes/operations.d.ts +2 -2
  100. package/dist/react-native/api/indexes/operations.d.ts.map +1 -1
  101. package/dist/react-native/api/indexes/operations.js +4 -4
  102. package/dist/react-native/api/indexes/operations.js.map +1 -1
  103. package/dist/react-native/classic/datasets/index.d.ts +2 -2
  104. package/dist/react-native/classic/datasets/index.d.ts.map +1 -1
  105. package/dist/react-native/classic/datasets/index.js +2 -2
  106. package/dist/react-native/classic/datasets/index.js.map +1 -1
  107. package/dist/react-native/classic/indexes/index.d.ts +1 -1
  108. package/dist/react-native/classic/indexes/index.d.ts.map +1 -1
  109. package/dist/react-native/classic/indexes/index.js +1 -1
  110. package/dist/react-native/classic/indexes/index.js.map +1 -1
  111. package/dist/react-native/classic/telemetry/index.d.ts +0 -3
  112. package/dist/react-native/classic/telemetry/index.d.ts.map +1 -1
  113. package/dist/react-native/classic/telemetry/index.js +0 -1
  114. package/dist/react-native/classic/telemetry/index.js.map +1 -1
  115. package/dist/react-native/index.d.ts +1 -1
  116. package/dist/react-native/index.d.ts.map +1 -1
  117. package/dist/react-native/index.js.map +1 -1
  118. package/dist/react-native/models/models.d.ts +2 -2
  119. package/dist/react-native/models/models.d.ts.map +1 -1
  120. package/dist/react-native/models/models.js.map +1 -1
  121. package/package.json +6 -12
  122. package/dist/browser/api/inference/enableTelemetry.d.ts +0 -21
  123. package/dist/browser/api/inference/enableTelemetry.d.ts.map +0 -1
  124. package/dist/browser/api/inference/enableTelemetry.js +0 -185
  125. package/dist/browser/api/inference/enableTelemetry.js.map +0 -1
  126. package/dist/commonjs/api/inference/enableTelemetry.d.ts +0 -21
  127. package/dist/commonjs/api/inference/enableTelemetry.d.ts.map +0 -1
  128. package/dist/commonjs/api/inference/enableTelemetry.js +0 -189
  129. package/dist/commonjs/api/inference/enableTelemetry.js.map +0 -1
  130. package/dist/esm/api/inference/enableTelemetry.d.ts +0 -21
  131. package/dist/esm/api/inference/enableTelemetry.d.ts.map +0 -1
  132. package/dist/esm/api/inference/enableTelemetry.js +0 -185
  133. package/dist/esm/api/inference/enableTelemetry.js.map +0 -1
  134. package/dist/react-native/api/inference/enableTelemetry.d.ts +0 -21
  135. package/dist/react-native/api/inference/enableTelemetry.d.ts.map +0 -1
  136. package/dist/react-native/api/inference/enableTelemetry.js +0 -185
  137. package/dist/react-native/api/inference/enableTelemetry.js.map +0 -1
@@ -1,185 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
- import * as opentelemetry from "@opentelemetry/api";
4
- import { registerInstrumentations } from "@opentelemetry/instrumentation";
5
- import { createAzureSdkInstrumentation } from "@azure/opentelemetry-instrumentation-azure-sdk";
6
- import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai";
7
- import { LangChainInstrumentation } from "@traceloop/instrumentation-langchain";
8
- import { ConsoleSpanExporter, NodeTracerProvider, SimpleSpanProcessor, } from "@opentelemetry/sdk-trace-node";
9
- import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc";
10
- import { logs } from "@opentelemetry/api-logs";
11
- import { LoggerProvider, SimpleLogRecordProcessor, ConsoleLogRecordExporter, } from "@opentelemetry/sdk-logs";
12
- import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-grpc";
13
- import { logger } from "../../logger.js";
14
- /**
15
- * Enables telemetry collection with OpenTelemetry for Azure AI clients and popular GenAI libraries.
16
- *
17
- * Following instrumentations are enabled (when corresponding packages are installed):
18
- * - Azure AI Agents (`@azure/ai-agents`)
19
- * - Azure AI Inference (`@azure-rest/ai-inference`)
20
- * - OpenAI (`@traceloop/instrumentation-openai`)
21
- * - Langchain (`@traceloop/instrumentation-langchain`)
22
- *
23
- * When destination is provided, the method configures OpenTelemetry SDK to export traces to
24
- * stdout or OTLP (OpenTelemetry protocol) gRPC endpoint. It's recommended for local
25
- * development only. For production use, make sure to configure OpenTelemetry SDK directly.
26
- *
27
- * @param destination - Recommended for local testing only. Set it to `"stdout"` for
28
- * tracing to console output, or a string holding the OpenTelemetry protocol (OTLP)
29
- * endpoint such as "http://localhost:4317".
30
- * If not provided, the method enables instrumentations, but does not configure OpenTelemetry
31
- * SDK to export traces.
32
- */
33
- export function enableTelemetry(destination) {
34
- const spanExporter = getTraceExporter(destination);
35
- configureTracing(spanExporter);
36
- const logExporter = getLogExporter(destination);
37
- configureLogging(logExporter);
38
- // Try to configure Azure SDK tracing and instrument AI Inference
39
- try {
40
- registerInstrumentations({
41
- instrumentations: [createAzureSdkInstrumentation()],
42
- });
43
- }
44
- catch (error) {
45
- logger.warning("Could not register `createAzureSdkInstrumentation()`");
46
- }
47
- // TODO: Try to instrument AI Agents
48
- // Try to instrument OpenAI
49
- try {
50
- registerInstrumentations({
51
- instrumentations: [new OpenAIInstrumentation()],
52
- });
53
- }
54
- catch (error) {
55
- logger.warning("Could not register `new OpenAIInstrumentation()`");
56
- }
57
- // Try to instrument Langchain
58
- try {
59
- registerInstrumentations({
60
- instrumentations: [new LangChainInstrumentation()],
61
- });
62
- }
63
- catch (error) {
64
- logger.warning("Could not call LangchainInstrumentor().instrument()` since " +
65
- "`@traceloop/instrumentation-langchain` is not installed");
66
- }
67
- }
68
- /**
69
- * Gets the appropriate trace exporter based on the destination
70
- * @param destination - The destination for exporting traces
71
- * @returns The trace exporter instance or undefined
72
- */
73
- function getTraceExporter(destination) {
74
- if (!destination) {
75
- return undefined;
76
- }
77
- try {
78
- if (destination === "stdout") {
79
- return new ConsoleSpanExporter();
80
- }
81
- else if (typeof destination === "string") {
82
- return new OTLPTraceExporter({ url: destination });
83
- }
84
- }
85
- catch (error) {
86
- logger.error("Failed to create trace exporter", error);
87
- return undefined;
88
- }
89
- return undefined;
90
- }
91
- /**
92
- * Gets the appropriate log exporter based on the destination
93
- * @param destination - The destination for exporting logs
94
- * @returns The log exporter instance or undefined
95
- */
96
- function getLogExporter(destination) {
97
- if (!destination) {
98
- return undefined;
99
- }
100
- try {
101
- if (destination === "stdout") {
102
- return new ConsoleLogRecordExporter();
103
- }
104
- else if (typeof destination === "string") {
105
- return new OTLPLogExporter({ url: destination });
106
- }
107
- }
108
- catch (error) {
109
- logger.warning("Failed to configure OpenTelemetry logging exporter.");
110
- return undefined;
111
- }
112
- return undefined;
113
- }
114
- /**
115
- * Configures OpenTelemetry tracing
116
- * @param spanExporter - The span exporter to use
117
- */
118
- function configureTracing(spanExporter) {
119
- if (!spanExporter) {
120
- return;
121
- }
122
- try {
123
- let provider;
124
- // Check if tracing was not set up before
125
- try {
126
- const existingProvider = opentelemetry.trace.getTracerProvider();
127
- // Check if the provider is already a NodeTracerProvider by checking for addSpanProcessor method
128
- if (!("register" in existingProvider) ||
129
- typeof existingProvider.register !== "function" ||
130
- existingProvider.register.name !== "register") {
131
- // If the provider is not a NodeTracerProvider, we need to set up a new provider
132
- provider = new NodeTracerProvider({
133
- spanProcessors: [new SimpleSpanProcessor(spanExporter)],
134
- });
135
- provider.register();
136
- }
137
- else {
138
- // If the provider is already a NodeTracerProvider, we can use it
139
- provider = existingProvider;
140
- }
141
- }
142
- catch (error) {
143
- // If we get here, we need to set up a new provider
144
- provider = new NodeTracerProvider({
145
- spanProcessors: [new SimpleSpanProcessor(spanExporter)],
146
- });
147
- provider.register();
148
- }
149
- }
150
- catch (error) {
151
- throw error;
152
- }
153
- }
154
- /**
155
- * Configures OpenTelemetry logging
156
- * @param logExporter - The log exporter to use
157
- */
158
- function configureLogging(logExporter) {
159
- if (!logExporter) {
160
- return;
161
- }
162
- try {
163
- let loggerProvider;
164
- try {
165
- const existingProvider = logs.getLoggerProvider();
166
- if (!(existingProvider instanceof LoggerProvider)) {
167
- loggerProvider = new LoggerProvider();
168
- logs.setGlobalLoggerProvider(loggerProvider);
169
- }
170
- else {
171
- loggerProvider = existingProvider;
172
- }
173
- }
174
- catch (error) {
175
- // If we get here, we need to set up a new provider
176
- loggerProvider = new LoggerProvider();
177
- logs.setGlobalLoggerProvider(loggerProvider);
178
- }
179
- loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(logExporter));
180
- }
181
- catch (error) {
182
- logger.warning("Failed to configure OpenTelemetry logging. This might be because OpenTelemetry logs API is still experimental.");
183
- }
184
- }
185
- //# sourceMappingURL=enableTelemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enableTelemetry.js","sourceRoot":"","sources":["../../../../src/api/inference/enableTelemetry.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as opentelemetry from \"@opentelemetry/api\";\nimport { registerInstrumentations } from \"@opentelemetry/instrumentation\";\nimport { createAzureSdkInstrumentation } from \"@azure/opentelemetry-instrumentation-azure-sdk\";\nimport { OpenAIInstrumentation } from \"@traceloop/instrumentation-openai\";\nimport { LangChainInstrumentation } from \"@traceloop/instrumentation-langchain\";\nimport {\n ConsoleSpanExporter,\n NodeTracerProvider,\n SimpleSpanProcessor,\n} from \"@opentelemetry/sdk-trace-node\";\nimport type { SpanExporter } from \"@opentelemetry/sdk-trace-node\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-grpc\";\nimport { logs } from \"@opentelemetry/api-logs\";\nimport {\n LoggerProvider,\n SimpleLogRecordProcessor,\n ConsoleLogRecordExporter,\n} from \"@opentelemetry/sdk-logs\";\nimport { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-grpc\";\nimport { logger } from \"../../logger.js\";\n\n/**\n * Enables telemetry collection with OpenTelemetry for Azure AI clients and popular GenAI libraries.\n *\n * Following instrumentations are enabled (when corresponding packages are installed):\n * - Azure AI Agents (`@azure/ai-agents`)\n * - Azure AI Inference (`@azure-rest/ai-inference`)\n * - OpenAI (`@traceloop/instrumentation-openai`)\n * - Langchain (`@traceloop/instrumentation-langchain`)\n *\n * When destination is provided, the method configures OpenTelemetry SDK to export traces to\n * stdout or OTLP (OpenTelemetry protocol) gRPC endpoint. It's recommended for local\n * development only. For production use, make sure to configure OpenTelemetry SDK directly.\n *\n * @param destination - Recommended for local testing only. Set it to `\"stdout\"` for\n * tracing to console output, or a string holding the OpenTelemetry protocol (OTLP)\n * endpoint such as \"http://localhost:4317\".\n * If not provided, the method enables instrumentations, but does not configure OpenTelemetry\n * SDK to export traces.\n */\nexport function enableTelemetry(destination?: string): void {\n const spanExporter = getTraceExporter(destination);\n configureTracing(spanExporter);\n\n const logExporter = getLogExporter(destination);\n configureLogging(logExporter);\n\n // Try to configure Azure SDK tracing and instrument AI Inference\n try {\n registerInstrumentations({\n instrumentations: [createAzureSdkInstrumentation()],\n });\n } catch (error) {\n logger.warning(\"Could not register `createAzureSdkInstrumentation()`\");\n }\n\n // TODO: Try to instrument AI Agents\n\n // Try to instrument OpenAI\n try {\n registerInstrumentations({\n instrumentations: [new OpenAIInstrumentation()],\n });\n } catch (error) {\n logger.warning(\"Could not register `new OpenAIInstrumentation()`\");\n }\n\n // Try to instrument Langchain\n try {\n registerInstrumentations({\n instrumentations: [new LangChainInstrumentation()],\n });\n } catch (error) {\n logger.warning(\n \"Could not call LangchainInstrumentor().instrument()` since \" +\n \"`@traceloop/instrumentation-langchain` is not installed\",\n );\n }\n}\n\n/**\n * Gets the appropriate trace exporter based on the destination\n * @param destination - The destination for exporting traces\n * @returns The trace exporter instance or undefined\n */\nfunction getTraceExporter(\n destination?: string,\n): ConsoleSpanExporter | OTLPTraceExporter | undefined {\n if (!destination) {\n return undefined;\n }\n\n try {\n if (destination === \"stdout\") {\n return new ConsoleSpanExporter();\n } else if (typeof destination === \"string\") {\n return new OTLPTraceExporter({ url: destination });\n }\n } catch (error) {\n logger.error(\"Failed to create trace exporter\", error);\n return undefined;\n }\n\n return undefined;\n}\n\n/**\n * Gets the appropriate log exporter based on the destination\n * @param destination - The destination for exporting logs\n * @returns The log exporter instance or undefined\n */\nfunction getLogExporter(\n destination?: string,\n): ConsoleLogRecordExporter | OTLPLogExporter | undefined {\n if (!destination) {\n return undefined;\n }\n\n try {\n if (destination === \"stdout\") {\n return new ConsoleLogRecordExporter();\n } else if (typeof destination === \"string\") {\n return new OTLPLogExporter({ url: destination });\n }\n } catch (error) {\n logger.warning(\"Failed to configure OpenTelemetry logging exporter.\");\n return undefined;\n }\n\n return undefined;\n}\n\n/**\n * Configures OpenTelemetry tracing\n * @param spanExporter - The span exporter to use\n */\nfunction configureTracing(spanExporter?: ConsoleSpanExporter | OTLPTraceExporter): void {\n if (!spanExporter) {\n return;\n }\n\n try {\n let provider: NodeTracerProvider;\n // Check if tracing was not set up before\n try {\n const existingProvider = opentelemetry.trace.getTracerProvider();\n // Check if the provider is already a NodeTracerProvider by checking for addSpanProcessor method\n if (\n !(\"register\" in existingProvider) ||\n typeof existingProvider.register !== \"function\" ||\n existingProvider.register.name !== \"register\"\n ) {\n // If the provider is not a NodeTracerProvider, we need to set up a new provider\n provider = new NodeTracerProvider({\n spanProcessors: [new SimpleSpanProcessor(spanExporter as SpanExporter)],\n });\n provider.register();\n } else {\n // If the provider is already a NodeTracerProvider, we can use it\n provider = existingProvider as NodeTracerProvider;\n }\n } catch (error) {\n // If we get here, we need to set up a new provider\n provider = new NodeTracerProvider({\n spanProcessors: [new SimpleSpanProcessor(spanExporter as SpanExporter)],\n });\n provider.register();\n }\n } catch (error) {\n throw error as Error;\n }\n}\n\n/**\n * Configures OpenTelemetry logging\n * @param logExporter - The log exporter to use\n */\nfunction configureLogging(logExporter?: ConsoleLogRecordExporter | OTLPLogExporter): void {\n if (!logExporter) {\n return;\n }\n\n try {\n let loggerProvider: LoggerProvider;\n try {\n const existingProvider = logs.getLoggerProvider();\n if (!(existingProvider instanceof LoggerProvider)) {\n loggerProvider = new LoggerProvider();\n logs.setGlobalLoggerProvider(loggerProvider);\n } else {\n loggerProvider = existingProvider as LoggerProvider;\n }\n } catch (error) {\n // If we get here, we need to set up a new provider\n loggerProvider = new LoggerProvider();\n logs.setGlobalLoggerProvider(loggerProvider);\n }\n\n loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(logExporter));\n } catch (error) {\n logger.warning(\n \"Failed to configure OpenTelemetry logging. This might be because OpenTelemetry logs API is still experimental.\",\n );\n }\n}\n"]}
@@ -1,21 +0,0 @@
1
- /**
2
- * Enables telemetry collection with OpenTelemetry for Azure AI clients and popular GenAI libraries.
3
- *
4
- * Following instrumentations are enabled (when corresponding packages are installed):
5
- * - Azure AI Agents (`@azure/ai-agents`)
6
- * - Azure AI Inference (`@azure-rest/ai-inference`)
7
- * - OpenAI (`@traceloop/instrumentation-openai`)
8
- * - Langchain (`@traceloop/instrumentation-langchain`)
9
- *
10
- * When destination is provided, the method configures OpenTelemetry SDK to export traces to
11
- * stdout or OTLP (OpenTelemetry protocol) gRPC endpoint. It's recommended for local
12
- * development only. For production use, make sure to configure OpenTelemetry SDK directly.
13
- *
14
- * @param destination - Recommended for local testing only. Set it to `"stdout"` for
15
- * tracing to console output, or a string holding the OpenTelemetry protocol (OTLP)
16
- * endpoint such as "http://localhost:4317".
17
- * If not provided, the method enables instrumentations, but does not configure OpenTelemetry
18
- * SDK to export traces.
19
- */
20
- export declare function enableTelemetry(destination?: string): void;
21
- //# sourceMappingURL=enableTelemetry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enableTelemetry.d.ts","sourceRoot":"","sources":["../../../../src/api/inference/enableTelemetry.ts"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAsC1D"}
@@ -1,189 +0,0 @@
1
- "use strict";
2
- // Copyright (c) Microsoft Corporation.
3
- // Licensed under the MIT License.
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.enableTelemetry = enableTelemetry;
6
- const tslib_1 = require("tslib");
7
- const opentelemetry = tslib_1.__importStar(require("@opentelemetry/api"));
8
- const instrumentation_1 = require("@opentelemetry/instrumentation");
9
- const opentelemetry_instrumentation_azure_sdk_1 = require("@azure/opentelemetry-instrumentation-azure-sdk");
10
- const instrumentation_openai_1 = require("@traceloop/instrumentation-openai");
11
- const instrumentation_langchain_1 = require("@traceloop/instrumentation-langchain");
12
- const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
13
- const exporter_trace_otlp_grpc_1 = require("@opentelemetry/exporter-trace-otlp-grpc");
14
- const api_logs_1 = require("@opentelemetry/api-logs");
15
- const sdk_logs_1 = require("@opentelemetry/sdk-logs");
16
- const exporter_logs_otlp_grpc_1 = require("@opentelemetry/exporter-logs-otlp-grpc");
17
- const logger_js_1 = require("../../logger.js");
18
- /**
19
- * Enables telemetry collection with OpenTelemetry for Azure AI clients and popular GenAI libraries.
20
- *
21
- * Following instrumentations are enabled (when corresponding packages are installed):
22
- * - Azure AI Agents (`@azure/ai-agents`)
23
- * - Azure AI Inference (`@azure-rest/ai-inference`)
24
- * - OpenAI (`@traceloop/instrumentation-openai`)
25
- * - Langchain (`@traceloop/instrumentation-langchain`)
26
- *
27
- * When destination is provided, the method configures OpenTelemetry SDK to export traces to
28
- * stdout or OTLP (OpenTelemetry protocol) gRPC endpoint. It's recommended for local
29
- * development only. For production use, make sure to configure OpenTelemetry SDK directly.
30
- *
31
- * @param destination - Recommended for local testing only. Set it to `"stdout"` for
32
- * tracing to console output, or a string holding the OpenTelemetry protocol (OTLP)
33
- * endpoint such as "http://localhost:4317".
34
- * If not provided, the method enables instrumentations, but does not configure OpenTelemetry
35
- * SDK to export traces.
36
- */
37
- function enableTelemetry(destination) {
38
- const spanExporter = getTraceExporter(destination);
39
- configureTracing(spanExporter);
40
- const logExporter = getLogExporter(destination);
41
- configureLogging(logExporter);
42
- // Try to configure Azure SDK tracing and instrument AI Inference
43
- try {
44
- (0, instrumentation_1.registerInstrumentations)({
45
- instrumentations: [(0, opentelemetry_instrumentation_azure_sdk_1.createAzureSdkInstrumentation)()],
46
- });
47
- }
48
- catch (error) {
49
- logger_js_1.logger.warning("Could not register `createAzureSdkInstrumentation()`");
50
- }
51
- // TODO: Try to instrument AI Agents
52
- // Try to instrument OpenAI
53
- try {
54
- (0, instrumentation_1.registerInstrumentations)({
55
- instrumentations: [new instrumentation_openai_1.OpenAIInstrumentation()],
56
- });
57
- }
58
- catch (error) {
59
- logger_js_1.logger.warning("Could not register `new OpenAIInstrumentation()`");
60
- }
61
- // Try to instrument Langchain
62
- try {
63
- (0, instrumentation_1.registerInstrumentations)({
64
- instrumentations: [new instrumentation_langchain_1.LangChainInstrumentation()],
65
- });
66
- }
67
- catch (error) {
68
- logger_js_1.logger.warning("Could not call LangchainInstrumentor().instrument()` since " +
69
- "`@traceloop/instrumentation-langchain` is not installed");
70
- }
71
- }
72
- /**
73
- * Gets the appropriate trace exporter based on the destination
74
- * @param destination - The destination for exporting traces
75
- * @returns The trace exporter instance or undefined
76
- */
77
- function getTraceExporter(destination) {
78
- if (!destination) {
79
- return undefined;
80
- }
81
- try {
82
- if (destination === "stdout") {
83
- return new sdk_trace_node_1.ConsoleSpanExporter();
84
- }
85
- else if (typeof destination === "string") {
86
- return new exporter_trace_otlp_grpc_1.OTLPTraceExporter({ url: destination });
87
- }
88
- }
89
- catch (error) {
90
- logger_js_1.logger.error("Failed to create trace exporter", error);
91
- return undefined;
92
- }
93
- return undefined;
94
- }
95
- /**
96
- * Gets the appropriate log exporter based on the destination
97
- * @param destination - The destination for exporting logs
98
- * @returns The log exporter instance or undefined
99
- */
100
- function getLogExporter(destination) {
101
- if (!destination) {
102
- return undefined;
103
- }
104
- try {
105
- if (destination === "stdout") {
106
- return new sdk_logs_1.ConsoleLogRecordExporter();
107
- }
108
- else if (typeof destination === "string") {
109
- return new exporter_logs_otlp_grpc_1.OTLPLogExporter({ url: destination });
110
- }
111
- }
112
- catch (error) {
113
- logger_js_1.logger.warning("Failed to configure OpenTelemetry logging exporter.");
114
- return undefined;
115
- }
116
- return undefined;
117
- }
118
- /**
119
- * Configures OpenTelemetry tracing
120
- * @param spanExporter - The span exporter to use
121
- */
122
- function configureTracing(spanExporter) {
123
- if (!spanExporter) {
124
- return;
125
- }
126
- try {
127
- let provider;
128
- // Check if tracing was not set up before
129
- try {
130
- const existingProvider = opentelemetry.trace.getTracerProvider();
131
- // Check if the provider is already a NodeTracerProvider by checking for addSpanProcessor method
132
- if (!("register" in existingProvider) ||
133
- typeof existingProvider.register !== "function" ||
134
- existingProvider.register.name !== "register") {
135
- // If the provider is not a NodeTracerProvider, we need to set up a new provider
136
- provider = new sdk_trace_node_1.NodeTracerProvider({
137
- spanProcessors: [new sdk_trace_node_1.SimpleSpanProcessor(spanExporter)],
138
- });
139
- provider.register();
140
- }
141
- else {
142
- // If the provider is already a NodeTracerProvider, we can use it
143
- provider = existingProvider;
144
- }
145
- }
146
- catch (error) {
147
- // If we get here, we need to set up a new provider
148
- provider = new sdk_trace_node_1.NodeTracerProvider({
149
- spanProcessors: [new sdk_trace_node_1.SimpleSpanProcessor(spanExporter)],
150
- });
151
- provider.register();
152
- }
153
- }
154
- catch (error) {
155
- throw error;
156
- }
157
- }
158
- /**
159
- * Configures OpenTelemetry logging
160
- * @param logExporter - The log exporter to use
161
- */
162
- function configureLogging(logExporter) {
163
- if (!logExporter) {
164
- return;
165
- }
166
- try {
167
- let loggerProvider;
168
- try {
169
- const existingProvider = api_logs_1.logs.getLoggerProvider();
170
- if (!(existingProvider instanceof sdk_logs_1.LoggerProvider)) {
171
- loggerProvider = new sdk_logs_1.LoggerProvider();
172
- api_logs_1.logs.setGlobalLoggerProvider(loggerProvider);
173
- }
174
- else {
175
- loggerProvider = existingProvider;
176
- }
177
- }
178
- catch (error) {
179
- // If we get here, we need to set up a new provider
180
- loggerProvider = new sdk_logs_1.LoggerProvider();
181
- api_logs_1.logs.setGlobalLoggerProvider(loggerProvider);
182
- }
183
- loggerProvider.addLogRecordProcessor(new sdk_logs_1.SimpleLogRecordProcessor(logExporter));
184
- }
185
- catch (error) {
186
- logger_js_1.logger.warning("Failed to configure OpenTelemetry logging. This might be because OpenTelemetry logs API is still experimental.");
187
- }
188
- }
189
- //# sourceMappingURL=enableTelemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enableTelemetry.js","sourceRoot":"","sources":["../../../../src/api/inference/enableTelemetry.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as opentelemetry from \"@opentelemetry/api\";\nimport { registerInstrumentations } from \"@opentelemetry/instrumentation\";\nimport { createAzureSdkInstrumentation } from \"@azure/opentelemetry-instrumentation-azure-sdk\";\nimport { OpenAIInstrumentation } from \"@traceloop/instrumentation-openai\";\nimport { LangChainInstrumentation } from \"@traceloop/instrumentation-langchain\";\nimport {\n ConsoleSpanExporter,\n NodeTracerProvider,\n SimpleSpanProcessor,\n} from \"@opentelemetry/sdk-trace-node\";\nimport type { SpanExporter } from \"@opentelemetry/sdk-trace-node\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-grpc\";\nimport { logs } from \"@opentelemetry/api-logs\";\nimport {\n LoggerProvider,\n SimpleLogRecordProcessor,\n ConsoleLogRecordExporter,\n} from \"@opentelemetry/sdk-logs\";\nimport { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-grpc\";\nimport { logger } from \"../../logger.js\";\n\n/**\n * Enables telemetry collection with OpenTelemetry for Azure AI clients and popular GenAI libraries.\n *\n * Following instrumentations are enabled (when corresponding packages are installed):\n * - Azure AI Agents (`@azure/ai-agents`)\n * - Azure AI Inference (`@azure-rest/ai-inference`)\n * - OpenAI (`@traceloop/instrumentation-openai`)\n * - Langchain (`@traceloop/instrumentation-langchain`)\n *\n * When destination is provided, the method configures OpenTelemetry SDK to export traces to\n * stdout or OTLP (OpenTelemetry protocol) gRPC endpoint. It's recommended for local\n * development only. For production use, make sure to configure OpenTelemetry SDK directly.\n *\n * @param destination - Recommended for local testing only. Set it to `\"stdout\"` for\n * tracing to console output, or a string holding the OpenTelemetry protocol (OTLP)\n * endpoint such as \"http://localhost:4317\".\n * If not provided, the method enables instrumentations, but does not configure OpenTelemetry\n * SDK to export traces.\n */\nexport function enableTelemetry(destination?: string): void {\n const spanExporter = getTraceExporter(destination);\n configureTracing(spanExporter);\n\n const logExporter = getLogExporter(destination);\n configureLogging(logExporter);\n\n // Try to configure Azure SDK tracing and instrument AI Inference\n try {\n registerInstrumentations({\n instrumentations: [createAzureSdkInstrumentation()],\n });\n } catch (error) {\n logger.warning(\"Could not register `createAzureSdkInstrumentation()`\");\n }\n\n // TODO: Try to instrument AI Agents\n\n // Try to instrument OpenAI\n try {\n registerInstrumentations({\n instrumentations: [new OpenAIInstrumentation()],\n });\n } catch (error) {\n logger.warning(\"Could not register `new OpenAIInstrumentation()`\");\n }\n\n // Try to instrument Langchain\n try {\n registerInstrumentations({\n instrumentations: [new LangChainInstrumentation()],\n });\n } catch (error) {\n logger.warning(\n \"Could not call LangchainInstrumentor().instrument()` since \" +\n \"`@traceloop/instrumentation-langchain` is not installed\",\n );\n }\n}\n\n/**\n * Gets the appropriate trace exporter based on the destination\n * @param destination - The destination for exporting traces\n * @returns The trace exporter instance or undefined\n */\nfunction getTraceExporter(\n destination?: string,\n): ConsoleSpanExporter | OTLPTraceExporter | undefined {\n if (!destination) {\n return undefined;\n }\n\n try {\n if (destination === \"stdout\") {\n return new ConsoleSpanExporter();\n } else if (typeof destination === \"string\") {\n return new OTLPTraceExporter({ url: destination });\n }\n } catch (error) {\n logger.error(\"Failed to create trace exporter\", error);\n return undefined;\n }\n\n return undefined;\n}\n\n/**\n * Gets the appropriate log exporter based on the destination\n * @param destination - The destination for exporting logs\n * @returns The log exporter instance or undefined\n */\nfunction getLogExporter(\n destination?: string,\n): ConsoleLogRecordExporter | OTLPLogExporter | undefined {\n if (!destination) {\n return undefined;\n }\n\n try {\n if (destination === \"stdout\") {\n return new ConsoleLogRecordExporter();\n } else if (typeof destination === \"string\") {\n return new OTLPLogExporter({ url: destination });\n }\n } catch (error) {\n logger.warning(\"Failed to configure OpenTelemetry logging exporter.\");\n return undefined;\n }\n\n return undefined;\n}\n\n/**\n * Configures OpenTelemetry tracing\n * @param spanExporter - The span exporter to use\n */\nfunction configureTracing(spanExporter?: ConsoleSpanExporter | OTLPTraceExporter): void {\n if (!spanExporter) {\n return;\n }\n\n try {\n let provider: NodeTracerProvider;\n // Check if tracing was not set up before\n try {\n const existingProvider = opentelemetry.trace.getTracerProvider();\n // Check if the provider is already a NodeTracerProvider by checking for addSpanProcessor method\n if (\n !(\"register\" in existingProvider) ||\n typeof existingProvider.register !== \"function\" ||\n existingProvider.register.name !== \"register\"\n ) {\n // If the provider is not a NodeTracerProvider, we need to set up a new provider\n provider = new NodeTracerProvider({\n spanProcessors: [new SimpleSpanProcessor(spanExporter as SpanExporter)],\n });\n provider.register();\n } else {\n // If the provider is already a NodeTracerProvider, we can use it\n provider = existingProvider as NodeTracerProvider;\n }\n } catch (error) {\n // If we get here, we need to set up a new provider\n provider = new NodeTracerProvider({\n spanProcessors: [new SimpleSpanProcessor(spanExporter as SpanExporter)],\n });\n provider.register();\n }\n } catch (error) {\n throw error as Error;\n }\n}\n\n/**\n * Configures OpenTelemetry logging\n * @param logExporter - The log exporter to use\n */\nfunction configureLogging(logExporter?: ConsoleLogRecordExporter | OTLPLogExporter): void {\n if (!logExporter) {\n return;\n }\n\n try {\n let loggerProvider: LoggerProvider;\n try {\n const existingProvider = logs.getLoggerProvider();\n if (!(existingProvider instanceof LoggerProvider)) {\n loggerProvider = new LoggerProvider();\n logs.setGlobalLoggerProvider(loggerProvider);\n } else {\n loggerProvider = existingProvider as LoggerProvider;\n }\n } catch (error) {\n // If we get here, we need to set up a new provider\n loggerProvider = new LoggerProvider();\n logs.setGlobalLoggerProvider(loggerProvider);\n }\n\n loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(logExporter));\n } catch (error) {\n logger.warning(\n \"Failed to configure OpenTelemetry logging. This might be because OpenTelemetry logs API is still experimental.\",\n );\n }\n}\n"]}
@@ -1,21 +0,0 @@
1
- /**
2
- * Enables telemetry collection with OpenTelemetry for Azure AI clients and popular GenAI libraries.
3
- *
4
- * Following instrumentations are enabled (when corresponding packages are installed):
5
- * - Azure AI Agents (`@azure/ai-agents`)
6
- * - Azure AI Inference (`@azure-rest/ai-inference`)
7
- * - OpenAI (`@traceloop/instrumentation-openai`)
8
- * - Langchain (`@traceloop/instrumentation-langchain`)
9
- *
10
- * When destination is provided, the method configures OpenTelemetry SDK to export traces to
11
- * stdout or OTLP (OpenTelemetry protocol) gRPC endpoint. It's recommended for local
12
- * development only. For production use, make sure to configure OpenTelemetry SDK directly.
13
- *
14
- * @param destination - Recommended for local testing only. Set it to `"stdout"` for
15
- * tracing to console output, or a string holding the OpenTelemetry protocol (OTLP)
16
- * endpoint such as "http://localhost:4317".
17
- * If not provided, the method enables instrumentations, but does not configure OpenTelemetry
18
- * SDK to export traces.
19
- */
20
- export declare function enableTelemetry(destination?: string): void;
21
- //# sourceMappingURL=enableTelemetry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enableTelemetry.d.ts","sourceRoot":"","sources":["../../../../src/api/inference/enableTelemetry.ts"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAsC1D"}
@@ -1,185 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
- import * as opentelemetry from "@opentelemetry/api";
4
- import { registerInstrumentations } from "@opentelemetry/instrumentation";
5
- import { createAzureSdkInstrumentation } from "@azure/opentelemetry-instrumentation-azure-sdk";
6
- import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai";
7
- import { LangChainInstrumentation } from "@traceloop/instrumentation-langchain";
8
- import { ConsoleSpanExporter, NodeTracerProvider, SimpleSpanProcessor, } from "@opentelemetry/sdk-trace-node";
9
- import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc";
10
- import { logs } from "@opentelemetry/api-logs";
11
- import { LoggerProvider, SimpleLogRecordProcessor, ConsoleLogRecordExporter, } from "@opentelemetry/sdk-logs";
12
- import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-grpc";
13
- import { logger } from "../../logger.js";
14
- /**
15
- * Enables telemetry collection with OpenTelemetry for Azure AI clients and popular GenAI libraries.
16
- *
17
- * Following instrumentations are enabled (when corresponding packages are installed):
18
- * - Azure AI Agents (`@azure/ai-agents`)
19
- * - Azure AI Inference (`@azure-rest/ai-inference`)
20
- * - OpenAI (`@traceloop/instrumentation-openai`)
21
- * - Langchain (`@traceloop/instrumentation-langchain`)
22
- *
23
- * When destination is provided, the method configures OpenTelemetry SDK to export traces to
24
- * stdout or OTLP (OpenTelemetry protocol) gRPC endpoint. It's recommended for local
25
- * development only. For production use, make sure to configure OpenTelemetry SDK directly.
26
- *
27
- * @param destination - Recommended for local testing only. Set it to `"stdout"` for
28
- * tracing to console output, or a string holding the OpenTelemetry protocol (OTLP)
29
- * endpoint such as "http://localhost:4317".
30
- * If not provided, the method enables instrumentations, but does not configure OpenTelemetry
31
- * SDK to export traces.
32
- */
33
- export function enableTelemetry(destination) {
34
- const spanExporter = getTraceExporter(destination);
35
- configureTracing(spanExporter);
36
- const logExporter = getLogExporter(destination);
37
- configureLogging(logExporter);
38
- // Try to configure Azure SDK tracing and instrument AI Inference
39
- try {
40
- registerInstrumentations({
41
- instrumentations: [createAzureSdkInstrumentation()],
42
- });
43
- }
44
- catch (error) {
45
- logger.warning("Could not register `createAzureSdkInstrumentation()`");
46
- }
47
- // TODO: Try to instrument AI Agents
48
- // Try to instrument OpenAI
49
- try {
50
- registerInstrumentations({
51
- instrumentations: [new OpenAIInstrumentation()],
52
- });
53
- }
54
- catch (error) {
55
- logger.warning("Could not register `new OpenAIInstrumentation()`");
56
- }
57
- // Try to instrument Langchain
58
- try {
59
- registerInstrumentations({
60
- instrumentations: [new LangChainInstrumentation()],
61
- });
62
- }
63
- catch (error) {
64
- logger.warning("Could not call LangchainInstrumentor().instrument()` since " +
65
- "`@traceloop/instrumentation-langchain` is not installed");
66
- }
67
- }
68
- /**
69
- * Gets the appropriate trace exporter based on the destination
70
- * @param destination - The destination for exporting traces
71
- * @returns The trace exporter instance or undefined
72
- */
73
- function getTraceExporter(destination) {
74
- if (!destination) {
75
- return undefined;
76
- }
77
- try {
78
- if (destination === "stdout") {
79
- return new ConsoleSpanExporter();
80
- }
81
- else if (typeof destination === "string") {
82
- return new OTLPTraceExporter({ url: destination });
83
- }
84
- }
85
- catch (error) {
86
- logger.error("Failed to create trace exporter", error);
87
- return undefined;
88
- }
89
- return undefined;
90
- }
91
- /**
92
- * Gets the appropriate log exporter based on the destination
93
- * @param destination - The destination for exporting logs
94
- * @returns The log exporter instance or undefined
95
- */
96
- function getLogExporter(destination) {
97
- if (!destination) {
98
- return undefined;
99
- }
100
- try {
101
- if (destination === "stdout") {
102
- return new ConsoleLogRecordExporter();
103
- }
104
- else if (typeof destination === "string") {
105
- return new OTLPLogExporter({ url: destination });
106
- }
107
- }
108
- catch (error) {
109
- logger.warning("Failed to configure OpenTelemetry logging exporter.");
110
- return undefined;
111
- }
112
- return undefined;
113
- }
114
- /**
115
- * Configures OpenTelemetry tracing
116
- * @param spanExporter - The span exporter to use
117
- */
118
- function configureTracing(spanExporter) {
119
- if (!spanExporter) {
120
- return;
121
- }
122
- try {
123
- let provider;
124
- // Check if tracing was not set up before
125
- try {
126
- const existingProvider = opentelemetry.trace.getTracerProvider();
127
- // Check if the provider is already a NodeTracerProvider by checking for addSpanProcessor method
128
- if (!("register" in existingProvider) ||
129
- typeof existingProvider.register !== "function" ||
130
- existingProvider.register.name !== "register") {
131
- // If the provider is not a NodeTracerProvider, we need to set up a new provider
132
- provider = new NodeTracerProvider({
133
- spanProcessors: [new SimpleSpanProcessor(spanExporter)],
134
- });
135
- provider.register();
136
- }
137
- else {
138
- // If the provider is already a NodeTracerProvider, we can use it
139
- provider = existingProvider;
140
- }
141
- }
142
- catch (error) {
143
- // If we get here, we need to set up a new provider
144
- provider = new NodeTracerProvider({
145
- spanProcessors: [new SimpleSpanProcessor(spanExporter)],
146
- });
147
- provider.register();
148
- }
149
- }
150
- catch (error) {
151
- throw error;
152
- }
153
- }
154
- /**
155
- * Configures OpenTelemetry logging
156
- * @param logExporter - The log exporter to use
157
- */
158
- function configureLogging(logExporter) {
159
- if (!logExporter) {
160
- return;
161
- }
162
- try {
163
- let loggerProvider;
164
- try {
165
- const existingProvider = logs.getLoggerProvider();
166
- if (!(existingProvider instanceof LoggerProvider)) {
167
- loggerProvider = new LoggerProvider();
168
- logs.setGlobalLoggerProvider(loggerProvider);
169
- }
170
- else {
171
- loggerProvider = existingProvider;
172
- }
173
- }
174
- catch (error) {
175
- // If we get here, we need to set up a new provider
176
- loggerProvider = new LoggerProvider();
177
- logs.setGlobalLoggerProvider(loggerProvider);
178
- }
179
- loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(logExporter));
180
- }
181
- catch (error) {
182
- logger.warning("Failed to configure OpenTelemetry logging. This might be because OpenTelemetry logs API is still experimental.");
183
- }
184
- }
185
- //# sourceMappingURL=enableTelemetry.js.map