langsmith 0.3.35-rc.6 → 0.3.35
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/client.cjs +3 -1
- package/dist/client.js +3 -1
- package/dist/experimental/otel/setup.cjs +6 -4
- package/dist/experimental/otel/setup.d.ts +3 -2
- package/dist/experimental/otel/setup.js +6 -4
- package/dist/experimental/otel/translator.cjs +4 -0
- package/dist/experimental/otel/translator.js +4 -0
- package/dist/experimental/otel/types.cjs +1 -0
- package/dist/experimental/otel/types.js +1 -0
- package/dist/experimental/otel/utils.cjs +0 -47
- package/dist/experimental/otel/utils.d.ts +0 -7
- package/dist/experimental/otel/utils.js +0 -13
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/traceable.cjs +5 -2
- package/dist/traceable.js +5 -2
- package/package.json +1 -1
package/dist/client.cjs
CHANGED
|
@@ -3499,7 +3499,9 @@ class Client {
|
|
|
3499
3499
|
...this.autoBatchQueue.items.map(({ itemPromise }) => itemPromise),
|
|
3500
3500
|
this.batchIngestCaller.queue.onIdle(),
|
|
3501
3501
|
]);
|
|
3502
|
-
|
|
3502
|
+
if (this.langSmithToOTELTranslator !== undefined) {
|
|
3503
|
+
await (0, otel_js_1.getDefaultOTLPTracerComponents)()?.DEFAULT_LANGSMITH_SPAN_PROCESSOR?.forceFlush();
|
|
3504
|
+
}
|
|
3503
3505
|
}
|
|
3504
3506
|
}
|
|
3505
3507
|
exports.Client = Client;
|
package/dist/client.js
CHANGED
|
@@ -3461,7 +3461,9 @@ export class Client {
|
|
|
3461
3461
|
...this.autoBatchQueue.items.map(({ itemPromise }) => itemPromise),
|
|
3462
3462
|
this.batchIngestCaller.queue.onIdle(),
|
|
3463
3463
|
]);
|
|
3464
|
-
|
|
3464
|
+
if (this.langSmithToOTELTranslator !== undefined) {
|
|
3465
|
+
await getDefaultOTLPTracerComponents()?.DEFAULT_LANGSMITH_SPAN_PROCESSOR?.forceFlush();
|
|
3466
|
+
}
|
|
3465
3467
|
}
|
|
3466
3468
|
}
|
|
3467
3469
|
function isExampleCreate(input) {
|
|
@@ -40,15 +40,17 @@ const otel_js_1 = require("../../singletons/otel.cjs");
|
|
|
40
40
|
* initializeOTEL({ globalTracerProvider: customProvider });
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
-
const initializeOTEL = ({ globalTracerProvider, } = {}) => {
|
|
43
|
+
const initializeOTEL = ({ globalTracerProvider, globalContextManager, } = {}) => {
|
|
44
44
|
const otel = {
|
|
45
45
|
trace: api_1.trace,
|
|
46
46
|
context: api_1.context,
|
|
47
47
|
};
|
|
48
48
|
(0, otel_js_1.setOTELInstances)(otel);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
if (!globalContextManager) {
|
|
50
|
+
const contextManager = new context_async_hooks_1.AsyncHooksContextManager();
|
|
51
|
+
contextManager.enable();
|
|
52
|
+
api_1.context.setGlobalContextManager(contextManager);
|
|
53
|
+
}
|
|
52
54
|
const DEFAULT_LANGSMITH_SPAN_EXPORTER = new exporter_js_1.LangSmithOTLPTraceExporter({});
|
|
53
55
|
const DEFAULT_LANGSMITH_SPAN_PROCESSOR = new sdk_trace_base_1.BatchSpanProcessor(DEFAULT_LANGSMITH_SPAN_EXPORTER);
|
|
54
56
|
if (!globalTracerProvider) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TracerProvider } from "@opentelemetry/api";
|
|
1
|
+
import { type TracerProvider, type ContextManager } from "@opentelemetry/api";
|
|
2
2
|
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
3
3
|
import { LangSmithOTLPTraceExporter } from "./exporter.js";
|
|
4
4
|
/**
|
|
@@ -32,8 +32,9 @@ import { LangSmithOTLPTraceExporter } from "./exporter.js";
|
|
|
32
32
|
* initializeOTEL({ globalTracerProvider: customProvider });
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
export declare const initializeOTEL: ({ globalTracerProvider, }?: {
|
|
35
|
+
export declare const initializeOTEL: ({ globalTracerProvider, globalContextManager, }?: {
|
|
36
36
|
globalTracerProvider?: TracerProvider;
|
|
37
|
+
globalContextManager?: ContextManager;
|
|
37
38
|
}) => {
|
|
38
39
|
DEFAULT_LANGSMITH_TRACER_PROVIDER: TracerProvider;
|
|
39
40
|
DEFAULT_LANGSMITH_SPAN_PROCESSOR: BatchSpanProcessor;
|
|
@@ -37,15 +37,17 @@ import { setDefaultOTLPTracerComponents, setOTELInstances, } from "../../singlet
|
|
|
37
37
|
* initializeOTEL({ globalTracerProvider: customProvider });
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
|
-
export const initializeOTEL = ({ globalTracerProvider, } = {}) => {
|
|
40
|
+
export const initializeOTEL = ({ globalTracerProvider, globalContextManager, } = {}) => {
|
|
41
41
|
const otel = {
|
|
42
42
|
trace: otel_trace,
|
|
43
43
|
context: otel_context,
|
|
44
44
|
};
|
|
45
45
|
setOTELInstances(otel);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
if (!globalContextManager) {
|
|
47
|
+
const contextManager = new AsyncHooksContextManager();
|
|
48
|
+
contextManager.enable();
|
|
49
|
+
otel_context.setGlobalContextManager(contextManager);
|
|
50
|
+
}
|
|
49
51
|
const DEFAULT_LANGSMITH_SPAN_EXPORTER = new LangSmithOTLPTraceExporter({});
|
|
50
52
|
const DEFAULT_LANGSMITH_SPAN_PROCESSOR = new BatchSpanProcessor(DEFAULT_LANGSMITH_SPAN_EXPORTER);
|
|
51
53
|
if (!globalTracerProvider) {
|
|
@@ -347,7 +347,9 @@ class LangSmithToOTELTranslator {
|
|
|
347
347
|
}
|
|
348
348
|
if (outputs.choices && Array.isArray(outputs.choices)) {
|
|
349
349
|
const finishReasons = outputs.choices
|
|
350
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
350
351
|
.map((choice) => choice.finish_reason)
|
|
352
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
351
353
|
.filter((reason) => reason)
|
|
352
354
|
.map(String);
|
|
353
355
|
if (finishReasons.length > 0) {
|
|
@@ -378,6 +380,7 @@ class LangSmithToOTELTranslator {
|
|
|
378
380
|
}
|
|
379
381
|
}
|
|
380
382
|
}
|
|
383
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
381
384
|
getUnifiedRunTokens(outputs) {
|
|
382
385
|
if (!outputs) {
|
|
383
386
|
return null;
|
|
@@ -429,6 +432,7 @@ class LangSmithToOTELTranslator {
|
|
|
429
432
|
}
|
|
430
433
|
return null;
|
|
431
434
|
}
|
|
435
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
432
436
|
extractUnifiedRunTokens(outputs) {
|
|
433
437
|
if (!outputs || typeof outputs !== "object") {
|
|
434
438
|
return null;
|
|
@@ -311,7 +311,9 @@ export class LangSmithToOTELTranslator {
|
|
|
311
311
|
}
|
|
312
312
|
if (outputs.choices && Array.isArray(outputs.choices)) {
|
|
313
313
|
const finishReasons = outputs.choices
|
|
314
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
314
315
|
.map((choice) => choice.finish_reason)
|
|
316
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
315
317
|
.filter((reason) => reason)
|
|
316
318
|
.map(String);
|
|
317
319
|
if (finishReasons.length > 0) {
|
|
@@ -342,6 +344,7 @@ export class LangSmithToOTELTranslator {
|
|
|
342
344
|
}
|
|
343
345
|
}
|
|
344
346
|
}
|
|
347
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
345
348
|
getUnifiedRunTokens(outputs) {
|
|
346
349
|
if (!outputs) {
|
|
347
350
|
return null;
|
|
@@ -393,6 +396,7 @@ export class LangSmithToOTELTranslator {
|
|
|
393
396
|
}
|
|
394
397
|
return null;
|
|
395
398
|
}
|
|
399
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
396
400
|
extractUnifiedRunTokens(outputs) {
|
|
397
401
|
if (!outputs || typeof outputs !== "object") {
|
|
398
402
|
return null;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
3
|
// Local type definitions to avoid importing @opentelemetry/api
|
|
3
4
|
// These match the OpenTelemetry API interfaces but don't require the package to be installed
|
|
4
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,43 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.getOtelTraceIdFromUuid = getOtelTraceIdFromUuid;
|
|
37
4
|
exports.getOtelSpanIdFromUuid = getOtelSpanIdFromUuid;
|
|
38
|
-
exports.validateAndNormalizeUuid = validateAndNormalizeUuid;
|
|
39
5
|
exports.createOtelSpanContextFromRun = createOtelSpanContextFromRun;
|
|
40
|
-
const uuid = __importStar(require("uuid"));
|
|
41
6
|
/**
|
|
42
7
|
* Get OpenTelemetry trace ID as hex string from UUID.
|
|
43
8
|
* @param uuidStr - The UUID string to convert
|
|
@@ -58,18 +23,6 @@ function getOtelSpanIdFromUuid(uuidStr) {
|
|
|
58
23
|
const cleanUuid = uuidStr.replace(/-/g, "");
|
|
59
24
|
return cleanUuid.substring(0, 16); // First 8 bytes (16 hex chars)
|
|
60
25
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Validate and normalize a UUID string.
|
|
63
|
-
* @param uuidStr - The UUID string to validate
|
|
64
|
-
* @returns The normalized UUID string
|
|
65
|
-
* @throws Error if the UUID is invalid
|
|
66
|
-
*/
|
|
67
|
-
function validateAndNormalizeUuid(uuidStr) {
|
|
68
|
-
if (!uuid.validate(uuidStr)) {
|
|
69
|
-
throw new Error(`Invalid UUID: ${uuidStr}`);
|
|
70
|
-
}
|
|
71
|
-
return uuidStr;
|
|
72
|
-
}
|
|
73
26
|
function createOtelSpanContextFromRun(run) {
|
|
74
27
|
const traceId = getOtelTraceIdFromUuid(run.trace_id ?? run.id);
|
|
75
28
|
const spanId = getOtelSpanIdFromUuid(run.id);
|
|
@@ -11,13 +11,6 @@ export declare function getOtelTraceIdFromUuid(uuidStr: string): string;
|
|
|
11
11
|
* @returns Hex string representation of the span ID
|
|
12
12
|
*/
|
|
13
13
|
export declare function getOtelSpanIdFromUuid(uuidStr: string): string;
|
|
14
|
-
/**
|
|
15
|
-
* Validate and normalize a UUID string.
|
|
16
|
-
* @param uuidStr - The UUID string to validate
|
|
17
|
-
* @returns The normalized UUID string
|
|
18
|
-
* @throws Error if the UUID is invalid
|
|
19
|
-
*/
|
|
20
|
-
export declare function validateAndNormalizeUuid(uuidStr: string): string;
|
|
21
14
|
export declare function createOtelSpanContextFromRun(run: {
|
|
22
15
|
trace_id?: string;
|
|
23
16
|
id: string;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as uuid from "uuid";
|
|
2
1
|
/**
|
|
3
2
|
* Get OpenTelemetry trace ID as hex string from UUID.
|
|
4
3
|
* @param uuidStr - The UUID string to convert
|
|
@@ -19,18 +18,6 @@ export function getOtelSpanIdFromUuid(uuidStr) {
|
|
|
19
18
|
const cleanUuid = uuidStr.replace(/-/g, "");
|
|
20
19
|
return cleanUuid.substring(0, 16); // First 8 bytes (16 hex chars)
|
|
21
20
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Validate and normalize a UUID string.
|
|
24
|
-
* @param uuidStr - The UUID string to validate
|
|
25
|
-
* @returns The normalized UUID string
|
|
26
|
-
* @throws Error if the UUID is invalid
|
|
27
|
-
*/
|
|
28
|
-
export function validateAndNormalizeUuid(uuidStr) {
|
|
29
|
-
if (!uuid.validate(uuidStr)) {
|
|
30
|
-
throw new Error(`Invalid UUID: ${uuidStr}`);
|
|
31
|
-
}
|
|
32
|
-
return uuidStr;
|
|
33
|
-
}
|
|
34
21
|
export function createOtelSpanContextFromRun(run) {
|
|
35
22
|
const traceId = getOtelTraceIdFromUuid(run.trace_id ?? run.id);
|
|
36
23
|
const spanId = getOtelSpanIdFromUuid(run.id);
|
package/dist/index.cjs
CHANGED
|
@@ -10,4 +10,4 @@ Object.defineProperty(exports, "overrideFetchImplementation", { enumerable: true
|
|
|
10
10
|
var project_js_1 = require("./utils/project.cjs");
|
|
11
11
|
Object.defineProperty(exports, "getDefaultProjectName", { enumerable: true, get: function () { return project_js_1.getDefaultProjectName; } });
|
|
12
12
|
// Update using yarn bump-version
|
|
13
|
-
exports.__version__ = "0.3.35
|
|
13
|
+
exports.__version__ = "0.3.35";
|
package/dist/index.d.ts
CHANGED
|
@@ -3,4 +3,4 @@ export type { Dataset, Example, TracerSession, Run, Feedback, RetrieverOutput, }
|
|
|
3
3
|
export { RunTree, type RunTreeConfig } from "./run_trees.js";
|
|
4
4
|
export { overrideFetchImplementation } from "./singletons/fetch.js";
|
|
5
5
|
export { getDefaultProjectName } from "./utils/project.js";
|
|
6
|
-
export declare const __version__ = "0.3.35
|
|
6
|
+
export declare const __version__ = "0.3.35";
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,4 @@ export { RunTree } from "./run_trees.js";
|
|
|
3
3
|
export { overrideFetchImplementation } from "./singletons/fetch.js";
|
|
4
4
|
export { getDefaultProjectName } from "./utils/project.js";
|
|
5
5
|
// Update using yarn bump-version
|
|
6
|
-
export const __version__ = "0.3.35
|
|
6
|
+
export const __version__ = "0.3.35";
|
package/dist/traceable.cjs
CHANGED
|
@@ -16,7 +16,9 @@ traceable_js_1.AsyncLocalStorageProviderSingleton.initializeGlobalInstance(new n
|
|
|
16
16
|
/**
|
|
17
17
|
* Create OpenTelemetry context manager from RunTree if OTEL is enabled.
|
|
18
18
|
*/
|
|
19
|
-
function maybeCreateOtelContext(runTree, tracer
|
|
19
|
+
function maybeCreateOtelContext(runTree, tracer
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
) {
|
|
20
22
|
if (!runTree || (0, env_js_2.getEnvironmentVariable)("OTEL_ENABLED") !== "true") {
|
|
21
23
|
return;
|
|
22
24
|
}
|
|
@@ -24,6 +26,7 @@ function maybeCreateOtelContext(runTree, tracer) {
|
|
|
24
26
|
const otel_context = (0, otel_js_1.getOTELContext)();
|
|
25
27
|
try {
|
|
26
28
|
const spanContext = (0, utils_js_1.createOtelSpanContextFromRun)(runTree);
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
30
|
return (fn) => {
|
|
28
31
|
const resolvedTracer = tracer ?? otel_trace.getTracer("langsmith", index_js_1.__version__);
|
|
29
32
|
return resolvedTracer.startActiveSpan(runTree.name, {
|
|
@@ -36,7 +39,7 @@ function maybeCreateOtelContext(runTree, tracer) {
|
|
|
36
39
|
});
|
|
37
40
|
};
|
|
38
41
|
}
|
|
39
|
-
catch
|
|
42
|
+
catch {
|
|
40
43
|
// Silent failure if OTEL setup is incomplete
|
|
41
44
|
return;
|
|
42
45
|
}
|
package/dist/traceable.js
CHANGED
|
@@ -12,7 +12,9 @@ AsyncLocalStorageProviderSingleton.initializeGlobalInstance(new AsyncLocalStorag
|
|
|
12
12
|
/**
|
|
13
13
|
* Create OpenTelemetry context manager from RunTree if OTEL is enabled.
|
|
14
14
|
*/
|
|
15
|
-
function maybeCreateOtelContext(runTree, tracer
|
|
15
|
+
function maybeCreateOtelContext(runTree, tracer
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
+
) {
|
|
16
18
|
if (!runTree || getEnvironmentVariable("OTEL_ENABLED") !== "true") {
|
|
17
19
|
return;
|
|
18
20
|
}
|
|
@@ -20,6 +22,7 @@ function maybeCreateOtelContext(runTree, tracer) {
|
|
|
20
22
|
const otel_context = getOTELContext();
|
|
21
23
|
try {
|
|
22
24
|
const spanContext = createOtelSpanContextFromRun(runTree);
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
26
|
return (fn) => {
|
|
24
27
|
const resolvedTracer = tracer ?? otel_trace.getTracer("langsmith", __version__);
|
|
25
28
|
return resolvedTracer.startActiveSpan(runTree.name, {
|
|
@@ -32,7 +35,7 @@ function maybeCreateOtelContext(runTree, tracer) {
|
|
|
32
35
|
});
|
|
33
36
|
};
|
|
34
37
|
}
|
|
35
|
-
catch
|
|
38
|
+
catch {
|
|
36
39
|
// Silent failure if OTEL setup is incomplete
|
|
37
40
|
return;
|
|
38
41
|
}
|