@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.
- package/dist/browser/aiProjectClient.d.ts +1 -4
- package/dist/browser/aiProjectClient.d.ts.map +1 -1
- package/dist/browser/aiProjectClient.js +1 -3
- package/dist/browser/aiProjectClient.js.map +1 -1
- package/dist/browser/api/datasets/operations.d.ts +4 -4
- package/dist/browser/api/datasets/operations.d.ts.map +1 -1
- package/dist/browser/api/datasets/operations.js +8 -8
- package/dist/browser/api/datasets/operations.js.map +1 -1
- package/dist/browser/api/indexes/operations.d.ts +2 -2
- package/dist/browser/api/indexes/operations.d.ts.map +1 -1
- package/dist/browser/api/indexes/operations.js +4 -4
- package/dist/browser/api/indexes/operations.js.map +1 -1
- package/dist/browser/classic/datasets/index.d.ts +2 -2
- package/dist/browser/classic/datasets/index.d.ts.map +1 -1
- package/dist/browser/classic/datasets/index.js +2 -2
- package/dist/browser/classic/datasets/index.js.map +1 -1
- package/dist/browser/classic/indexes/index.d.ts +1 -1
- package/dist/browser/classic/indexes/index.d.ts.map +1 -1
- package/dist/browser/classic/indexes/index.js +1 -1
- package/dist/browser/classic/indexes/index.js.map +1 -1
- package/dist/browser/classic/telemetry/index.d.ts +0 -3
- package/dist/browser/classic/telemetry/index.d.ts.map +1 -1
- package/dist/browser/classic/telemetry/index.js +0 -1
- package/dist/browser/classic/telemetry/index.js.map +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/models/models.d.ts +2 -2
- package/dist/browser/models/models.d.ts.map +1 -1
- package/dist/browser/models/models.js.map +1 -1
- package/dist/commonjs/aiProjectClient.d.ts +1 -4
- package/dist/commonjs/aiProjectClient.d.ts.map +1 -1
- package/dist/commonjs/aiProjectClient.js +0 -2
- package/dist/commonjs/aiProjectClient.js.map +1 -1
- package/dist/commonjs/api/datasets/operations.d.ts +4 -4
- package/dist/commonjs/api/datasets/operations.d.ts.map +1 -1
- package/dist/commonjs/api/datasets/operations.js +8 -8
- package/dist/commonjs/api/datasets/operations.js.map +1 -1
- package/dist/commonjs/api/indexes/operations.d.ts +2 -2
- package/dist/commonjs/api/indexes/operations.d.ts.map +1 -1
- package/dist/commonjs/api/indexes/operations.js +4 -4
- package/dist/commonjs/api/indexes/operations.js.map +1 -1
- package/dist/commonjs/classic/datasets/index.d.ts +2 -2
- package/dist/commonjs/classic/datasets/index.d.ts.map +1 -1
- package/dist/commonjs/classic/datasets/index.js +2 -2
- package/dist/commonjs/classic/datasets/index.js.map +1 -1
- package/dist/commonjs/classic/indexes/index.d.ts +1 -1
- package/dist/commonjs/classic/indexes/index.d.ts.map +1 -1
- package/dist/commonjs/classic/indexes/index.js +1 -1
- package/dist/commonjs/classic/indexes/index.js.map +1 -1
- package/dist/commonjs/classic/telemetry/index.d.ts +0 -3
- package/dist/commonjs/classic/telemetry/index.d.ts.map +1 -1
- package/dist/commonjs/classic/telemetry/index.js +0 -3
- package/dist/commonjs/classic/telemetry/index.js.map +1 -1
- package/dist/commonjs/index.d.ts +1 -1
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/models/models.d.ts +2 -2
- package/dist/commonjs/models/models.d.ts.map +1 -1
- package/dist/commonjs/models/models.js.map +1 -1
- package/dist/esm/aiProjectClient.d.ts +1 -4
- package/dist/esm/aiProjectClient.d.ts.map +1 -1
- package/dist/esm/aiProjectClient.js +1 -3
- package/dist/esm/aiProjectClient.js.map +1 -1
- package/dist/esm/api/datasets/operations.d.ts +4 -4
- package/dist/esm/api/datasets/operations.d.ts.map +1 -1
- package/dist/esm/api/datasets/operations.js +8 -8
- package/dist/esm/api/datasets/operations.js.map +1 -1
- package/dist/esm/api/indexes/operations.d.ts +2 -2
- package/dist/esm/api/indexes/operations.d.ts.map +1 -1
- package/dist/esm/api/indexes/operations.js +4 -4
- package/dist/esm/api/indexes/operations.js.map +1 -1
- package/dist/esm/classic/datasets/index.d.ts +2 -2
- package/dist/esm/classic/datasets/index.d.ts.map +1 -1
- package/dist/esm/classic/datasets/index.js +2 -2
- package/dist/esm/classic/datasets/index.js.map +1 -1
- package/dist/esm/classic/indexes/index.d.ts +1 -1
- package/dist/esm/classic/indexes/index.d.ts.map +1 -1
- package/dist/esm/classic/indexes/index.js +1 -1
- package/dist/esm/classic/indexes/index.js.map +1 -1
- package/dist/esm/classic/telemetry/index.d.ts +0 -3
- package/dist/esm/classic/telemetry/index.d.ts.map +1 -1
- package/dist/esm/classic/telemetry/index.js +0 -1
- package/dist/esm/classic/telemetry/index.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/models.d.ts +2 -2
- package/dist/esm/models/models.d.ts.map +1 -1
- package/dist/esm/models/models.js.map +1 -1
- package/dist/react-native/aiProjectClient.d.ts +1 -4
- package/dist/react-native/aiProjectClient.d.ts.map +1 -1
- package/dist/react-native/aiProjectClient.js +1 -3
- package/dist/react-native/aiProjectClient.js.map +1 -1
- package/dist/react-native/api/datasets/operations.d.ts +4 -4
- package/dist/react-native/api/datasets/operations.d.ts.map +1 -1
- package/dist/react-native/api/datasets/operations.js +8 -8
- package/dist/react-native/api/datasets/operations.js.map +1 -1
- package/dist/react-native/api/indexes/operations.d.ts +2 -2
- package/dist/react-native/api/indexes/operations.d.ts.map +1 -1
- package/dist/react-native/api/indexes/operations.js +4 -4
- package/dist/react-native/api/indexes/operations.js.map +1 -1
- package/dist/react-native/classic/datasets/index.d.ts +2 -2
- package/dist/react-native/classic/datasets/index.d.ts.map +1 -1
- package/dist/react-native/classic/datasets/index.js +2 -2
- package/dist/react-native/classic/datasets/index.js.map +1 -1
- package/dist/react-native/classic/indexes/index.d.ts +1 -1
- package/dist/react-native/classic/indexes/index.d.ts.map +1 -1
- package/dist/react-native/classic/indexes/index.js +1 -1
- package/dist/react-native/classic/indexes/index.js.map +1 -1
- package/dist/react-native/classic/telemetry/index.d.ts +0 -3
- package/dist/react-native/classic/telemetry/index.d.ts.map +1 -1
- package/dist/react-native/classic/telemetry/index.js +0 -1
- package/dist/react-native/classic/telemetry/index.js.map +1 -1
- package/dist/react-native/index.d.ts +1 -1
- package/dist/react-native/index.d.ts.map +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native/models/models.d.ts +2 -2
- package/dist/react-native/models/models.d.ts.map +1 -1
- package/dist/react-native/models/models.js.map +1 -1
- package/package.json +6 -12
- package/dist/browser/api/inference/enableTelemetry.d.ts +0 -21
- package/dist/browser/api/inference/enableTelemetry.d.ts.map +0 -1
- package/dist/browser/api/inference/enableTelemetry.js +0 -185
- package/dist/browser/api/inference/enableTelemetry.js.map +0 -1
- package/dist/commonjs/api/inference/enableTelemetry.d.ts +0 -21
- package/dist/commonjs/api/inference/enableTelemetry.d.ts.map +0 -1
- package/dist/commonjs/api/inference/enableTelemetry.js +0 -189
- package/dist/commonjs/api/inference/enableTelemetry.js.map +0 -1
- package/dist/esm/api/inference/enableTelemetry.d.ts +0 -21
- package/dist/esm/api/inference/enableTelemetry.d.ts.map +0 -1
- package/dist/esm/api/inference/enableTelemetry.js +0 -185
- package/dist/esm/api/inference/enableTelemetry.js.map +0 -1
- package/dist/react-native/api/inference/enableTelemetry.d.ts +0 -21
- package/dist/react-native/api/inference/enableTelemetry.d.ts.map +0 -1
- package/dist/react-native/api/inference/enableTelemetry.js +0 -185
- 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"]}
|