@azure/ai-projects 1.0.0-alpha.20250626.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 (149) 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/constants.d.ts +1 -1
  26. package/dist/browser/constants.js +1 -1
  27. package/dist/browser/constants.js.map +1 -1
  28. package/dist/browser/index.d.ts +1 -1
  29. package/dist/browser/index.d.ts.map +1 -1
  30. package/dist/browser/index.js.map +1 -1
  31. package/dist/browser/models/models.d.ts +2 -2
  32. package/dist/browser/models/models.d.ts.map +1 -1
  33. package/dist/browser/models/models.js.map +1 -1
  34. package/dist/commonjs/aiProjectClient.d.ts +1 -4
  35. package/dist/commonjs/aiProjectClient.d.ts.map +1 -1
  36. package/dist/commonjs/aiProjectClient.js +0 -2
  37. package/dist/commonjs/aiProjectClient.js.map +1 -1
  38. package/dist/commonjs/api/datasets/operations.d.ts +4 -4
  39. package/dist/commonjs/api/datasets/operations.d.ts.map +1 -1
  40. package/dist/commonjs/api/datasets/operations.js +8 -8
  41. package/dist/commonjs/api/datasets/operations.js.map +1 -1
  42. package/dist/commonjs/api/indexes/operations.d.ts +2 -2
  43. package/dist/commonjs/api/indexes/operations.d.ts.map +1 -1
  44. package/dist/commonjs/api/indexes/operations.js +4 -4
  45. package/dist/commonjs/api/indexes/operations.js.map +1 -1
  46. package/dist/commonjs/classic/datasets/index.d.ts +2 -2
  47. package/dist/commonjs/classic/datasets/index.d.ts.map +1 -1
  48. package/dist/commonjs/classic/datasets/index.js +2 -2
  49. package/dist/commonjs/classic/datasets/index.js.map +1 -1
  50. package/dist/commonjs/classic/indexes/index.d.ts +1 -1
  51. package/dist/commonjs/classic/indexes/index.d.ts.map +1 -1
  52. package/dist/commonjs/classic/indexes/index.js +1 -1
  53. package/dist/commonjs/classic/indexes/index.js.map +1 -1
  54. package/dist/commonjs/classic/telemetry/index.d.ts +0 -3
  55. package/dist/commonjs/classic/telemetry/index.d.ts.map +1 -1
  56. package/dist/commonjs/classic/telemetry/index.js +0 -3
  57. package/dist/commonjs/classic/telemetry/index.js.map +1 -1
  58. package/dist/commonjs/constants.d.ts +1 -1
  59. package/dist/commonjs/constants.js +1 -1
  60. package/dist/commonjs/constants.js.map +1 -1
  61. package/dist/commonjs/index.d.ts +1 -1
  62. package/dist/commonjs/index.d.ts.map +1 -1
  63. package/dist/commonjs/index.js.map +1 -1
  64. package/dist/commonjs/models/models.d.ts +2 -2
  65. package/dist/commonjs/models/models.d.ts.map +1 -1
  66. package/dist/commonjs/models/models.js.map +1 -1
  67. package/dist/esm/aiProjectClient.d.ts +1 -4
  68. package/dist/esm/aiProjectClient.d.ts.map +1 -1
  69. package/dist/esm/aiProjectClient.js +1 -3
  70. package/dist/esm/aiProjectClient.js.map +1 -1
  71. package/dist/esm/api/datasets/operations.d.ts +4 -4
  72. package/dist/esm/api/datasets/operations.d.ts.map +1 -1
  73. package/dist/esm/api/datasets/operations.js +8 -8
  74. package/dist/esm/api/datasets/operations.js.map +1 -1
  75. package/dist/esm/api/indexes/operations.d.ts +2 -2
  76. package/dist/esm/api/indexes/operations.d.ts.map +1 -1
  77. package/dist/esm/api/indexes/operations.js +4 -4
  78. package/dist/esm/api/indexes/operations.js.map +1 -1
  79. package/dist/esm/classic/datasets/index.d.ts +2 -2
  80. package/dist/esm/classic/datasets/index.d.ts.map +1 -1
  81. package/dist/esm/classic/datasets/index.js +2 -2
  82. package/dist/esm/classic/datasets/index.js.map +1 -1
  83. package/dist/esm/classic/indexes/index.d.ts +1 -1
  84. package/dist/esm/classic/indexes/index.d.ts.map +1 -1
  85. package/dist/esm/classic/indexes/index.js +1 -1
  86. package/dist/esm/classic/indexes/index.js.map +1 -1
  87. package/dist/esm/classic/telemetry/index.d.ts +0 -3
  88. package/dist/esm/classic/telemetry/index.d.ts.map +1 -1
  89. package/dist/esm/classic/telemetry/index.js +0 -1
  90. package/dist/esm/classic/telemetry/index.js.map +1 -1
  91. package/dist/esm/constants.d.ts +1 -1
  92. package/dist/esm/constants.js +1 -1
  93. package/dist/esm/constants.js.map +1 -1
  94. package/dist/esm/index.d.ts +1 -1
  95. package/dist/esm/index.d.ts.map +1 -1
  96. package/dist/esm/index.js.map +1 -1
  97. package/dist/esm/models/models.d.ts +2 -2
  98. package/dist/esm/models/models.d.ts.map +1 -1
  99. package/dist/esm/models/models.js.map +1 -1
  100. package/dist/react-native/aiProjectClient.d.ts +1 -4
  101. package/dist/react-native/aiProjectClient.d.ts.map +1 -1
  102. package/dist/react-native/aiProjectClient.js +1 -3
  103. package/dist/react-native/aiProjectClient.js.map +1 -1
  104. package/dist/react-native/api/datasets/operations.d.ts +4 -4
  105. package/dist/react-native/api/datasets/operations.d.ts.map +1 -1
  106. package/dist/react-native/api/datasets/operations.js +8 -8
  107. package/dist/react-native/api/datasets/operations.js.map +1 -1
  108. package/dist/react-native/api/indexes/operations.d.ts +2 -2
  109. package/dist/react-native/api/indexes/operations.d.ts.map +1 -1
  110. package/dist/react-native/api/indexes/operations.js +4 -4
  111. package/dist/react-native/api/indexes/operations.js.map +1 -1
  112. package/dist/react-native/classic/datasets/index.d.ts +2 -2
  113. package/dist/react-native/classic/datasets/index.d.ts.map +1 -1
  114. package/dist/react-native/classic/datasets/index.js +2 -2
  115. package/dist/react-native/classic/datasets/index.js.map +1 -1
  116. package/dist/react-native/classic/indexes/index.d.ts +1 -1
  117. package/dist/react-native/classic/indexes/index.d.ts.map +1 -1
  118. package/dist/react-native/classic/indexes/index.js +1 -1
  119. package/dist/react-native/classic/indexes/index.js.map +1 -1
  120. package/dist/react-native/classic/telemetry/index.d.ts +0 -3
  121. package/dist/react-native/classic/telemetry/index.d.ts.map +1 -1
  122. package/dist/react-native/classic/telemetry/index.js +0 -1
  123. package/dist/react-native/classic/telemetry/index.js.map +1 -1
  124. package/dist/react-native/constants.d.ts +1 -1
  125. package/dist/react-native/constants.js +1 -1
  126. package/dist/react-native/constants.js.map +1 -1
  127. package/dist/react-native/index.d.ts +1 -1
  128. package/dist/react-native/index.d.ts.map +1 -1
  129. package/dist/react-native/index.js.map +1 -1
  130. package/dist/react-native/models/models.d.ts +2 -2
  131. package/dist/react-native/models/models.d.ts.map +1 -1
  132. package/dist/react-native/models/models.js.map +1 -1
  133. package/package.json +7 -13
  134. package/dist/browser/api/inference/enableTelemetry.d.ts +0 -21
  135. package/dist/browser/api/inference/enableTelemetry.d.ts.map +0 -1
  136. package/dist/browser/api/inference/enableTelemetry.js +0 -185
  137. package/dist/browser/api/inference/enableTelemetry.js.map +0 -1
  138. package/dist/commonjs/api/inference/enableTelemetry.d.ts +0 -21
  139. package/dist/commonjs/api/inference/enableTelemetry.d.ts.map +0 -1
  140. package/dist/commonjs/api/inference/enableTelemetry.js +0 -189
  141. package/dist/commonjs/api/inference/enableTelemetry.js.map +0 -1
  142. package/dist/esm/api/inference/enableTelemetry.d.ts +0 -21
  143. package/dist/esm/api/inference/enableTelemetry.d.ts.map +0 -1
  144. package/dist/esm/api/inference/enableTelemetry.js +0 -185
  145. package/dist/esm/api/inference/enableTelemetry.js.map +0 -1
  146. package/dist/react-native/api/inference/enableTelemetry.d.ts +0 -21
  147. package/dist/react-native/api/inference/enableTelemetry.d.ts.map +0 -1
  148. package/dist/react-native/api/inference/enableTelemetry.js +0 -185
  149. package/dist/react-native/api/inference/enableTelemetry.js.map +0 -1
@@ -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
@@ -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"]}