@lmnr-ai/lmnr 0.4.18 → 0.4.20
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/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/cli.mjs.map +1 -1
- package/dist/index.d.mts +73 -5
- package/dist/index.d.ts +73 -5
- package/dist/index.js +130 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +133 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +56 -56
- package/src/decorators.ts +36 -32
- package/src/evaluations.ts +300 -300
- package/src/index.ts +7 -7
- package/src/laminar.ts +486 -355
- package/src/sdk/tracing/index.ts +2 -4
- package/src/types.ts +35 -35
- package/src/utils.ts +38 -38
package/dist/cli.js
CHANGED
|
@@ -36,7 +36,7 @@ var require_package = __commonJS({
|
|
|
36
36
|
"package.json"(exports2, module2) {
|
|
37
37
|
module2.exports = {
|
|
38
38
|
name: "@lmnr-ai/lmnr",
|
|
39
|
-
version: "0.4.
|
|
39
|
+
version: "0.4.20",
|
|
40
40
|
description: "TypeScript SDK for Laminar AI",
|
|
41
41
|
main: "dist/index.js",
|
|
42
42
|
types: "dist/index.d.ts",
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/cli.ts"],"sourcesContent":["{\n \"name\": \"@lmnr-ai/lmnr\",\n \"version\": \"0.4.
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/cli.ts"],"sourcesContent":["{\n \"name\": \"@lmnr-ai/lmnr\",\n \"version\": \"0.4.20\",\n \"description\": \"TypeScript SDK for Laminar AI\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"scripts\": {\n \"build\": \"tsup src/index.ts src/cli.ts --format esm,cjs --dts\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"bin\": {\n \"lmnr\": \"./dist/cli.js\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/lmnr-ai/lmnr-ts.git\"\n },\n \"keywords\": [\n \"laminar\",\n \"lmnr\",\n \"sdk\",\n \"lmnr.ai\"\n ],\n \"author\": \"founders@lmnr.ai\",\n \"license\": \"Apache-2.0\",\n \"bugs\": {\n \"url\": \"https://github.com/lmnr-ai/lmnr-ts/issues\"\n },\n \"homepage\": \"https://github.com/lmnr-ai/lmnr-ts#README\",\n \"devDependencies\": {\n \"@anthropic-ai/sdk\": \"^0.27.3\",\n \"@aws-sdk/client-bedrock-runtime\": \"^3.679.0\",\n \"@azure/openai\": \"1.0.0-beta.13\",\n \"@google-cloud/aiplatform\": \"^3.29.0\",\n \"@google-cloud/vertexai\": \"^1.7.0\",\n \"@langchain/core\": \"^0.3.2\",\n \"@pinecone-database/pinecone\": \"^3.0.3\",\n \"@qdrant/js-client-rest\": \"^1.11.0\",\n \"@types/argparse\": \"^2.0.16\",\n \"@types/cli-progress\": \"^3.11.6\",\n \"@types/node\": \"^22.5.5\",\n \"@types/semver\": \"^7.5.8\",\n \"@types/uuid\": \"^10.0.0\",\n \"bufferutil\": \"^4.0.8\",\n \"chromadb\": \"^1.9.2\",\n \"cohere-ai\": \"^7.14.0\",\n \"langchain\": \"^0.3.2\",\n \"llamaindex\": \"^0.7.10\",\n \"openai\": \"^4.62.1\",\n \"runnables\": \"link:@langchain/core/runnables\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.2\",\n \"vectorstores\": \"link:@langchain/core/vectorstores\"\n },\n \"dependencies\": {\n \"@grpc/grpc-js\": \"^1.11.3\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/core\": \"^1.26.0\",\n \"@opentelemetry/exporter-trace-otlp-grpc\": \"^0.53.0\",\n \"@opentelemetry/exporter-trace-otlp-proto\": \"^0.53.0\",\n \"@opentelemetry/instrumentation\": \"^0.53.0\",\n \"@opentelemetry/sdk-node\": \"^0.53.0\",\n \"@opentelemetry/sdk-trace-base\": \"^1.26.0\",\n \"@opentelemetry/sdk-trace-node\": \"^1.26.0\",\n \"@opentelemetry/semantic-conventions\": \"^1.27.0\",\n \"@traceloop/ai-semantic-conventions\": \"^0.11.0\",\n \"@traceloop/instrumentation-anthropic\": \"^0.11.1\",\n \"@traceloop/instrumentation-azure\": \"^0.11.1\",\n \"@traceloop/instrumentation-bedrock\": \"^0.11.1\",\n \"@traceloop/instrumentation-chromadb\": \"^0.11.3\",\n \"@traceloop/instrumentation-cohere\": \"^0.11.1\",\n \"@traceloop/instrumentation-langchain\": \"^0.11.1\",\n \"@traceloop/instrumentation-llamaindex\": \"^0.11.1\",\n \"@traceloop/instrumentation-openai\": \"^0.11.3\",\n \"@traceloop/instrumentation-pinecone\": \"^0.11.1\",\n \"@traceloop/instrumentation-qdrant\": \"^0.11.1\",\n \"@traceloop/instrumentation-vertexai\": \"^0.11.1\",\n \"argparse\": \">=2.0\",\n \"cli-progress\": \">=3.12\",\n \"esbuild\": \">=0.23\",\n \"uuid\": \">=10.0.0\"\n }\n}\n","#!/usr/bin/env node\n\nimport { ArgumentParser } from \"argparse\";\nimport * as esbuild from \"esbuild\";\n\nconst pjson = require('../package.json');\n\nexport function loadModule({\n filename,\n moduleText,\n}: {\n filename: string;\n moduleText: string;\n}) {\n // TODO: Figure out how to remove all ts-ignores\n // TODO: Cleanup by setting the original values of _evaluation and _set_global_evaluation back\n // @ts-ignore\n globalThis._evaluation = undefined; // @ts-ignore\n globalThis._set_global_evaluation = true; // @ts-ignore\n\n // it needs \"require\" to be passed in\n new Function(\"require\", moduleText)(require);\n\n // Return the modified _evals global variable\n // @ts-ignore\n return globalThis._evaluation;\n}\n\nasync function cli() {\n const [, , ...args] = process.argv;\n\n // Use argparse, which is the port of the python library\n const parser = new ArgumentParser({\n prog: \"lmnr\",\n description: \"CLI for Laminar\",\n });\n\n parser.add_argument(\"-v\", \"--version\", { action: \"version\", version: pjson.version });\n\n const subparsers = parser.add_subparsers({\n title: \"subcommands\",\n dest: \"subcommand\",\n });\n\n const parser_eval = subparsers.add_parser(\"eval\", {\n description: \"Run an evaluation\",\n });\n\n parser_eval.add_argument(\"file\", {\n help: \"A file containing the evaluation to run\",\n });\n\n parser_eval.set_defaults({\n func: async (args: any) => {\n // TODO: Add various optimizations, e.g. minify, pure, tree shaking, etc.\n const buildOptions = {\n entryPoints: [args.file],\n outfile: \"tmp_out.js\",\n write: false, // will be loaded in memory as a temp file\n platform: \"node\" as esbuild.Platform,\n bundle: true,\n external: [\"node_modules/*\"],\n };\n\n const result = await esbuild.build(buildOptions);\n\n if (!result.outputFiles) {\n console.error(\"Error when building: No output files found\");\n process.exit(1);\n }\n\n const outputFileText = result.outputFiles[0].text;\n\n const evaluation = loadModule({\n filename: args.file,\n moduleText: outputFileText,\n });\n\n // @ts-ignore\n await evaluation.run();\n }\n });\n\n const parsed = parser.parse_args(args);\n await parsed.func(parsed);\n}\n\ncli();\n"],"mappings":"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","names":["exports","module","args"]}
|
package/dist/cli.mjs
CHANGED
|
@@ -15,7 +15,7 @@ var require_package = __commonJS({
|
|
|
15
15
|
"package.json"(exports, module) {
|
|
16
16
|
module.exports = {
|
|
17
17
|
name: "@lmnr-ai/lmnr",
|
|
18
|
-
version: "0.4.
|
|
18
|
+
version: "0.4.20",
|
|
19
19
|
description: "TypeScript SDK for Laminar AI",
|
|
20
20
|
main: "dist/index.js",
|
|
21
21
|
types: "dist/index.d.ts",
|
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/cli.ts"],"sourcesContent":["{\n \"name\": \"@lmnr-ai/lmnr\",\n \"version\": \"0.4.
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/cli.ts"],"sourcesContent":["{\n \"name\": \"@lmnr-ai/lmnr\",\n \"version\": \"0.4.20\",\n \"description\": \"TypeScript SDK for Laminar AI\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"scripts\": {\n \"build\": \"tsup src/index.ts src/cli.ts --format esm,cjs --dts\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"bin\": {\n \"lmnr\": \"./dist/cli.js\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/lmnr-ai/lmnr-ts.git\"\n },\n \"keywords\": [\n \"laminar\",\n \"lmnr\",\n \"sdk\",\n \"lmnr.ai\"\n ],\n \"author\": \"founders@lmnr.ai\",\n \"license\": \"Apache-2.0\",\n \"bugs\": {\n \"url\": \"https://github.com/lmnr-ai/lmnr-ts/issues\"\n },\n \"homepage\": \"https://github.com/lmnr-ai/lmnr-ts#README\",\n \"devDependencies\": {\n \"@anthropic-ai/sdk\": \"^0.27.3\",\n \"@aws-sdk/client-bedrock-runtime\": \"^3.679.0\",\n \"@azure/openai\": \"1.0.0-beta.13\",\n \"@google-cloud/aiplatform\": \"^3.29.0\",\n \"@google-cloud/vertexai\": \"^1.7.0\",\n \"@langchain/core\": \"^0.3.2\",\n \"@pinecone-database/pinecone\": \"^3.0.3\",\n \"@qdrant/js-client-rest\": \"^1.11.0\",\n \"@types/argparse\": \"^2.0.16\",\n \"@types/cli-progress\": \"^3.11.6\",\n \"@types/node\": \"^22.5.5\",\n \"@types/semver\": \"^7.5.8\",\n \"@types/uuid\": \"^10.0.0\",\n \"bufferutil\": \"^4.0.8\",\n \"chromadb\": \"^1.9.2\",\n \"cohere-ai\": \"^7.14.0\",\n \"langchain\": \"^0.3.2\",\n \"llamaindex\": \"^0.7.10\",\n \"openai\": \"^4.62.1\",\n \"runnables\": \"link:@langchain/core/runnables\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.2\",\n \"vectorstores\": \"link:@langchain/core/vectorstores\"\n },\n \"dependencies\": {\n \"@grpc/grpc-js\": \"^1.11.3\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/core\": \"^1.26.0\",\n \"@opentelemetry/exporter-trace-otlp-grpc\": \"^0.53.0\",\n \"@opentelemetry/exporter-trace-otlp-proto\": \"^0.53.0\",\n \"@opentelemetry/instrumentation\": \"^0.53.0\",\n \"@opentelemetry/sdk-node\": \"^0.53.0\",\n \"@opentelemetry/sdk-trace-base\": \"^1.26.0\",\n \"@opentelemetry/sdk-trace-node\": \"^1.26.0\",\n \"@opentelemetry/semantic-conventions\": \"^1.27.0\",\n \"@traceloop/ai-semantic-conventions\": \"^0.11.0\",\n \"@traceloop/instrumentation-anthropic\": \"^0.11.1\",\n \"@traceloop/instrumentation-azure\": \"^0.11.1\",\n \"@traceloop/instrumentation-bedrock\": \"^0.11.1\",\n \"@traceloop/instrumentation-chromadb\": \"^0.11.3\",\n \"@traceloop/instrumentation-cohere\": \"^0.11.1\",\n \"@traceloop/instrumentation-langchain\": \"^0.11.1\",\n \"@traceloop/instrumentation-llamaindex\": \"^0.11.1\",\n \"@traceloop/instrumentation-openai\": \"^0.11.3\",\n \"@traceloop/instrumentation-pinecone\": \"^0.11.1\",\n \"@traceloop/instrumentation-qdrant\": \"^0.11.1\",\n \"@traceloop/instrumentation-vertexai\": \"^0.11.1\",\n \"argparse\": \">=2.0\",\n \"cli-progress\": \">=3.12\",\n \"esbuild\": \">=0.23\",\n \"uuid\": \">=10.0.0\"\n }\n}\n","#!/usr/bin/env node\n\nimport { ArgumentParser } from \"argparse\";\nimport * as esbuild from \"esbuild\";\n\nconst pjson = require('../package.json');\n\nexport function loadModule({\n filename,\n moduleText,\n}: {\n filename: string;\n moduleText: string;\n}) {\n // TODO: Figure out how to remove all ts-ignores\n // TODO: Cleanup by setting the original values of _evaluation and _set_global_evaluation back\n // @ts-ignore\n globalThis._evaluation = undefined; // @ts-ignore\n globalThis._set_global_evaluation = true; // @ts-ignore\n\n // it needs \"require\" to be passed in\n new Function(\"require\", moduleText)(require);\n\n // Return the modified _evals global variable\n // @ts-ignore\n return globalThis._evaluation;\n}\n\nasync function cli() {\n const [, , ...args] = process.argv;\n\n // Use argparse, which is the port of the python library\n const parser = new ArgumentParser({\n prog: \"lmnr\",\n description: \"CLI for Laminar\",\n });\n\n parser.add_argument(\"-v\", \"--version\", { action: \"version\", version: pjson.version });\n\n const subparsers = parser.add_subparsers({\n title: \"subcommands\",\n dest: \"subcommand\",\n });\n\n const parser_eval = subparsers.add_parser(\"eval\", {\n description: \"Run an evaluation\",\n });\n\n parser_eval.add_argument(\"file\", {\n help: \"A file containing the evaluation to run\",\n });\n\n parser_eval.set_defaults({\n func: async (args: any) => {\n // TODO: Add various optimizations, e.g. minify, pure, tree shaking, etc.\n const buildOptions = {\n entryPoints: [args.file],\n outfile: \"tmp_out.js\",\n write: false, // will be loaded in memory as a temp file\n platform: \"node\" as esbuild.Platform,\n bundle: true,\n external: [\"node_modules/*\"],\n };\n\n const result = await esbuild.build(buildOptions);\n\n if (!result.outputFiles) {\n console.error(\"Error when building: No output files found\");\n process.exit(1);\n }\n\n const outputFileText = result.outputFiles[0].text;\n\n const evaluation = loadModule({\n filename: args.file,\n moduleText: outputFileText,\n });\n\n // @ts-ignore\n await evaluation.run();\n }\n });\n\n const parsed = parser.parse_args(args);\n await parsed.func(parsed);\n}\n\ncli();\n"],"mappings":"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","names":["args"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import { TextMapPropagator, ContextManager, AttributeValue, TimeInput, Context, Span } from '@opentelemetry/api';
|
|
3
|
+
export { Span } from '@opentelemetry/api';
|
|
4
4
|
import * as openai from 'openai';
|
|
5
5
|
import * as anthropic from '@anthropic-ai/sdk';
|
|
6
6
|
import * as azure from '@azure/openai';
|
|
@@ -445,8 +445,8 @@ declare class Laminar {
|
|
|
445
445
|
* Sets the session information for the current span and returns the
|
|
446
446
|
* context to use for the following spans.
|
|
447
447
|
*
|
|
448
|
-
* @param sessionId - The session ID to associate with the
|
|
449
|
-
* @param userId - The user ID to associate with the
|
|
448
|
+
* @param sessionId - The session ID to associate with the context.
|
|
449
|
+
* @param userId - The user ID to associate with the context.
|
|
450
450
|
* @returns The updated context with the association properties.
|
|
451
451
|
*
|
|
452
452
|
* @example
|
|
@@ -460,7 +460,7 @@ declare class Laminar {
|
|
|
460
460
|
static contextWithSession({ sessionId, userId }: {
|
|
461
461
|
sessionId?: string;
|
|
462
462
|
userId?: string;
|
|
463
|
-
}):
|
|
463
|
+
}): Context;
|
|
464
464
|
/**
|
|
465
465
|
* Set attributes for the current span. Useful for manual
|
|
466
466
|
* instrumentation.
|
|
@@ -480,6 +480,74 @@ declare class Laminar {
|
|
|
480
480
|
* }, userMessage);
|
|
481
481
|
*/
|
|
482
482
|
static setSpanAttributes(attributes: Record<typeof LaminarAttributes[keyof typeof LaminarAttributes], AttributeValue>): void;
|
|
483
|
+
/**
|
|
484
|
+
* Set the output of the current span. Useful for manual instrumentation.
|
|
485
|
+
* @param output - Output of the span. Will be sent as an attribute, so must be serializable to JSON.
|
|
486
|
+
*/
|
|
487
|
+
static setSpanOutput(output: any): void;
|
|
488
|
+
/**
|
|
489
|
+
* Start a new span, but don't set it as active. Useful for
|
|
490
|
+
* manual instrumentation. If span type is 'LLM', you should report usage
|
|
491
|
+
* manually. See {@link setSpanAttributes} for more information.
|
|
492
|
+
*
|
|
493
|
+
* @param name - name of the span
|
|
494
|
+
* @param input - input to the span. Will be sent as an attribute, so must
|
|
495
|
+
* be JSON serializable
|
|
496
|
+
* @param span_type - type of the span. Defaults to 'DEFAULT'
|
|
497
|
+
* @param context - raw OpenTelemetry context to bind the span to.
|
|
498
|
+
* @param traceId - [EXPERIMENTAL] override the trace id for the span. If not
|
|
499
|
+
* provided, uses the current trace id.
|
|
500
|
+
* @returns The started span.
|
|
501
|
+
*
|
|
502
|
+
* @example
|
|
503
|
+
* import { Laminar, observe } from '@lmnr-ai/lmnr';
|
|
504
|
+
* const foo = async (span: Span) => {
|
|
505
|
+
* await Laminar.withSpan(span, async () => {
|
|
506
|
+
* await observe({ name: 'foo' }, async () => {
|
|
507
|
+
* // Your code here
|
|
508
|
+
* })
|
|
509
|
+
* })
|
|
510
|
+
* };
|
|
511
|
+
* const bar = async (span: Span) => {
|
|
512
|
+
* await Laminar.withSpan(span, async () => {
|
|
513
|
+
* await openai_client.chat.completions.create();
|
|
514
|
+
* })
|
|
515
|
+
* };
|
|
516
|
+
*
|
|
517
|
+
* const parentSpan = Laminar.startSpan({name: "outer"});
|
|
518
|
+
* foo(parentSpan);
|
|
519
|
+
* await bar(parentSpan);
|
|
520
|
+
* // IMPORTANT: Don't forget to end the span!
|
|
521
|
+
* parentSpan.end();
|
|
522
|
+
*
|
|
523
|
+
* // Results in:
|
|
524
|
+
* // | outer
|
|
525
|
+
* // | | foo
|
|
526
|
+
* // | | | ...
|
|
527
|
+
* // | | bar
|
|
528
|
+
* // | | | openai.chat
|
|
529
|
+
*/
|
|
530
|
+
static startSpan({ name, input, spanType, context, traceId, }: {
|
|
531
|
+
name: string;
|
|
532
|
+
input?: any;
|
|
533
|
+
spanType?: 'LLM' | 'DEFAULT';
|
|
534
|
+
context?: Context;
|
|
535
|
+
traceId?: string;
|
|
536
|
+
}): Span;
|
|
537
|
+
/**
|
|
538
|
+
* A utility wrapper around OpenTelemetry's `context.with()`. Useful for
|
|
539
|
+
* passing spans around in manual instrumentation:
|
|
540
|
+
*
|
|
541
|
+
* @param span - Parent span to bind the execution to.
|
|
542
|
+
* @param fn - Function to execute within the span context.
|
|
543
|
+
* @param endOnExit - Whether to end the span after the function has
|
|
544
|
+
* executed. Defaults to `false`. If `false`, you MUST manually call
|
|
545
|
+
* `span.end()` at the end of the execution, so that spans are not lost.
|
|
546
|
+
* @returns The result of the function execution.
|
|
547
|
+
*
|
|
548
|
+
* See {@link startSpan} docs for a usage example
|
|
549
|
+
*/
|
|
550
|
+
static withSpan<T>(span: Span, fn: () => T, endOnExit?: boolean): T;
|
|
483
551
|
static shutdown(): Promise<void>;
|
|
484
552
|
static createEvaluation<D, T, O>({ groupId, name, data }: {
|
|
485
553
|
groupId?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import { TextMapPropagator, ContextManager, AttributeValue, TimeInput, Context, Span } from '@opentelemetry/api';
|
|
3
|
+
export { Span } from '@opentelemetry/api';
|
|
4
4
|
import * as openai from 'openai';
|
|
5
5
|
import * as anthropic from '@anthropic-ai/sdk';
|
|
6
6
|
import * as azure from '@azure/openai';
|
|
@@ -445,8 +445,8 @@ declare class Laminar {
|
|
|
445
445
|
* Sets the session information for the current span and returns the
|
|
446
446
|
* context to use for the following spans.
|
|
447
447
|
*
|
|
448
|
-
* @param sessionId - The session ID to associate with the
|
|
449
|
-
* @param userId - The user ID to associate with the
|
|
448
|
+
* @param sessionId - The session ID to associate with the context.
|
|
449
|
+
* @param userId - The user ID to associate with the context.
|
|
450
450
|
* @returns The updated context with the association properties.
|
|
451
451
|
*
|
|
452
452
|
* @example
|
|
@@ -460,7 +460,7 @@ declare class Laminar {
|
|
|
460
460
|
static contextWithSession({ sessionId, userId }: {
|
|
461
461
|
sessionId?: string;
|
|
462
462
|
userId?: string;
|
|
463
|
-
}):
|
|
463
|
+
}): Context;
|
|
464
464
|
/**
|
|
465
465
|
* Set attributes for the current span. Useful for manual
|
|
466
466
|
* instrumentation.
|
|
@@ -480,6 +480,74 @@ declare class Laminar {
|
|
|
480
480
|
* }, userMessage);
|
|
481
481
|
*/
|
|
482
482
|
static setSpanAttributes(attributes: Record<typeof LaminarAttributes[keyof typeof LaminarAttributes], AttributeValue>): void;
|
|
483
|
+
/**
|
|
484
|
+
* Set the output of the current span. Useful for manual instrumentation.
|
|
485
|
+
* @param output - Output of the span. Will be sent as an attribute, so must be serializable to JSON.
|
|
486
|
+
*/
|
|
487
|
+
static setSpanOutput(output: any): void;
|
|
488
|
+
/**
|
|
489
|
+
* Start a new span, but don't set it as active. Useful for
|
|
490
|
+
* manual instrumentation. If span type is 'LLM', you should report usage
|
|
491
|
+
* manually. See {@link setSpanAttributes} for more information.
|
|
492
|
+
*
|
|
493
|
+
* @param name - name of the span
|
|
494
|
+
* @param input - input to the span. Will be sent as an attribute, so must
|
|
495
|
+
* be JSON serializable
|
|
496
|
+
* @param span_type - type of the span. Defaults to 'DEFAULT'
|
|
497
|
+
* @param context - raw OpenTelemetry context to bind the span to.
|
|
498
|
+
* @param traceId - [EXPERIMENTAL] override the trace id for the span. If not
|
|
499
|
+
* provided, uses the current trace id.
|
|
500
|
+
* @returns The started span.
|
|
501
|
+
*
|
|
502
|
+
* @example
|
|
503
|
+
* import { Laminar, observe } from '@lmnr-ai/lmnr';
|
|
504
|
+
* const foo = async (span: Span) => {
|
|
505
|
+
* await Laminar.withSpan(span, async () => {
|
|
506
|
+
* await observe({ name: 'foo' }, async () => {
|
|
507
|
+
* // Your code here
|
|
508
|
+
* })
|
|
509
|
+
* })
|
|
510
|
+
* };
|
|
511
|
+
* const bar = async (span: Span) => {
|
|
512
|
+
* await Laminar.withSpan(span, async () => {
|
|
513
|
+
* await openai_client.chat.completions.create();
|
|
514
|
+
* })
|
|
515
|
+
* };
|
|
516
|
+
*
|
|
517
|
+
* const parentSpan = Laminar.startSpan({name: "outer"});
|
|
518
|
+
* foo(parentSpan);
|
|
519
|
+
* await bar(parentSpan);
|
|
520
|
+
* // IMPORTANT: Don't forget to end the span!
|
|
521
|
+
* parentSpan.end();
|
|
522
|
+
*
|
|
523
|
+
* // Results in:
|
|
524
|
+
* // | outer
|
|
525
|
+
* // | | foo
|
|
526
|
+
* // | | | ...
|
|
527
|
+
* // | | bar
|
|
528
|
+
* // | | | openai.chat
|
|
529
|
+
*/
|
|
530
|
+
static startSpan({ name, input, spanType, context, traceId, }: {
|
|
531
|
+
name: string;
|
|
532
|
+
input?: any;
|
|
533
|
+
spanType?: 'LLM' | 'DEFAULT';
|
|
534
|
+
context?: Context;
|
|
535
|
+
traceId?: string;
|
|
536
|
+
}): Span;
|
|
537
|
+
/**
|
|
538
|
+
* A utility wrapper around OpenTelemetry's `context.with()`. Useful for
|
|
539
|
+
* passing spans around in manual instrumentation:
|
|
540
|
+
*
|
|
541
|
+
* @param span - Parent span to bind the execution to.
|
|
542
|
+
* @param fn - Function to execute within the span context.
|
|
543
|
+
* @param endOnExit - Whether to end the span after the function has
|
|
544
|
+
* executed. Defaults to `false`. If `false`, you MUST manually call
|
|
545
|
+
* `span.end()` at the end of the execution, so that spans are not lost.
|
|
546
|
+
* @returns The result of the function execution.
|
|
547
|
+
*
|
|
548
|
+
* See {@link startSpan} docs for a usage example
|
|
549
|
+
*/
|
|
550
|
+
static withSpan<T>(span: Span, fn: () => T, endOnExit?: boolean): T;
|
|
483
551
|
static shutdown(): Promise<void>;
|
|
484
552
|
static createEvaluation<D, T, O>({ groupId, name, data }: {
|
|
485
553
|
groupId?: string;
|
package/dist/index.js
CHANGED
|
@@ -35,6 +35,7 @@ __export(src_exports, {
|
|
|
35
35
|
Laminar: () => Laminar,
|
|
36
36
|
LaminarAttributes: () => LaminarAttributes,
|
|
37
37
|
LaminarDataset: () => LaminarDataset,
|
|
38
|
+
Span: () => import_api7.Span,
|
|
38
39
|
evaluate: () => evaluate,
|
|
39
40
|
observe: () => observe
|
|
40
41
|
});
|
|
@@ -149,7 +150,7 @@ var chromadbInstrumentation;
|
|
|
149
150
|
var qdrantInstrumentation;
|
|
150
151
|
var instrumentations = [];
|
|
151
152
|
var initInstrumentations = () => {
|
|
152
|
-
const enrichTokens =
|
|
153
|
+
const enrichTokens = false;
|
|
153
154
|
openAIInstrumentation = new import_instrumentation_openai.OpenAIInstrumentation({
|
|
154
155
|
enrichTokens
|
|
155
156
|
});
|
|
@@ -178,7 +179,7 @@ var initInstrumentations = () => {
|
|
|
178
179
|
instrumentations.push(qdrantInstrumentation);
|
|
179
180
|
};
|
|
180
181
|
var manuallyInitInstrumentations = (instrumentModules) => {
|
|
181
|
-
const enrichTokens =
|
|
182
|
+
const enrichTokens = false;
|
|
182
183
|
instrumentations.length = 0;
|
|
183
184
|
if (instrumentModules == null ? void 0 : instrumentModules.openAI) {
|
|
184
185
|
openAIInstrumentation = new import_instrumentation_openai.OpenAIInstrumentation({
|
|
@@ -546,6 +547,7 @@ function serialize(input) {
|
|
|
546
547
|
// src/laminar.ts
|
|
547
548
|
var import_exporter_trace_otlp_grpc = require("@opentelemetry/exporter-trace-otlp-grpc");
|
|
548
549
|
var import_grpc_js = require("@grpc/grpc-js");
|
|
550
|
+
var import_sdk_trace_base2 = require("@opentelemetry/sdk-trace-base");
|
|
549
551
|
var Laminar = class {
|
|
550
552
|
/**
|
|
551
553
|
* Initialize Laminar context across the application.
|
|
@@ -744,8 +746,8 @@ var Laminar = class {
|
|
|
744
746
|
* Sets the session information for the current span and returns the
|
|
745
747
|
* context to use for the following spans.
|
|
746
748
|
*
|
|
747
|
-
* @param sessionId - The session ID to associate with the
|
|
748
|
-
* @param userId - The user ID to associate with the
|
|
749
|
+
* @param sessionId - The session ID to associate with the context.
|
|
750
|
+
* @param userId - The user ID to associate with the context.
|
|
749
751
|
* @returns The updated context with the association properties.
|
|
750
752
|
*
|
|
751
753
|
* @example
|
|
@@ -812,6 +814,123 @@ var Laminar = class {
|
|
|
812
814
|
}
|
|
813
815
|
}
|
|
814
816
|
}
|
|
817
|
+
/**
|
|
818
|
+
* Set the output of the current span. Useful for manual instrumentation.
|
|
819
|
+
* @param output - Output of the span. Will be sent as an attribute, so must be serializable to JSON.
|
|
820
|
+
*/
|
|
821
|
+
static setSpanOutput(output) {
|
|
822
|
+
if (output == null) {
|
|
823
|
+
return;
|
|
824
|
+
}
|
|
825
|
+
const currentSpan = import_api5.trace.getActiveSpan();
|
|
826
|
+
if (currentSpan !== void 0 && (0, import_api5.isSpanContextValid)(currentSpan.spanContext())) {
|
|
827
|
+
currentSpan.setAttribute(SPAN_OUTPUT, JSON.stringify(output));
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
/**
|
|
831
|
+
* Start a new span, but don't set it as active. Useful for
|
|
832
|
+
* manual instrumentation. If span type is 'LLM', you should report usage
|
|
833
|
+
* manually. See {@link setSpanAttributes} for more information.
|
|
834
|
+
*
|
|
835
|
+
* @param name - name of the span
|
|
836
|
+
* @param input - input to the span. Will be sent as an attribute, so must
|
|
837
|
+
* be JSON serializable
|
|
838
|
+
* @param span_type - type of the span. Defaults to 'DEFAULT'
|
|
839
|
+
* @param context - raw OpenTelemetry context to bind the span to.
|
|
840
|
+
* @param traceId - [EXPERIMENTAL] override the trace id for the span. If not
|
|
841
|
+
* provided, uses the current trace id.
|
|
842
|
+
* @returns The started span.
|
|
843
|
+
*
|
|
844
|
+
* @example
|
|
845
|
+
* import { Laminar, observe } from '@lmnr-ai/lmnr';
|
|
846
|
+
* const foo = async (span: Span) => {
|
|
847
|
+
* await Laminar.withSpan(span, async () => {
|
|
848
|
+
* await observe({ name: 'foo' }, async () => {
|
|
849
|
+
* // Your code here
|
|
850
|
+
* })
|
|
851
|
+
* })
|
|
852
|
+
* };
|
|
853
|
+
* const bar = async (span: Span) => {
|
|
854
|
+
* await Laminar.withSpan(span, async () => {
|
|
855
|
+
* await openai_client.chat.completions.create();
|
|
856
|
+
* })
|
|
857
|
+
* };
|
|
858
|
+
*
|
|
859
|
+
* const parentSpan = Laminar.startSpan({name: "outer"});
|
|
860
|
+
* foo(parentSpan);
|
|
861
|
+
* await bar(parentSpan);
|
|
862
|
+
* // IMPORTANT: Don't forget to end the span!
|
|
863
|
+
* parentSpan.end();
|
|
864
|
+
*
|
|
865
|
+
* // Results in:
|
|
866
|
+
* // | outer
|
|
867
|
+
* // | | foo
|
|
868
|
+
* // | | | ...
|
|
869
|
+
* // | | bar
|
|
870
|
+
* // | | | openai.chat
|
|
871
|
+
*/
|
|
872
|
+
static startSpan({
|
|
873
|
+
name,
|
|
874
|
+
input,
|
|
875
|
+
spanType,
|
|
876
|
+
context: context3,
|
|
877
|
+
traceId
|
|
878
|
+
}) {
|
|
879
|
+
let entityContext = context3 != null ? context3 : import_api5.context.active();
|
|
880
|
+
const currentSpanPath = getSpanPath(entityContext);
|
|
881
|
+
const spanPath = currentSpanPath ? `${currentSpanPath}.${name}` : name;
|
|
882
|
+
entityContext = entityContext.setValue(SPAN_PATH_KEY, spanPath);
|
|
883
|
+
if (traceId) {
|
|
884
|
+
if (isStringUUID(traceId)) {
|
|
885
|
+
const spanContext = {
|
|
886
|
+
traceId: uuidToOtelTraceId(traceId),
|
|
887
|
+
spanId: new import_sdk_trace_base2.RandomIdGenerator().generateSpanId(),
|
|
888
|
+
traceFlags: import_api5.TraceFlags.SAMPLED,
|
|
889
|
+
isRemote: false
|
|
890
|
+
};
|
|
891
|
+
entityContext = import_api5.trace.setSpanContext(entityContext, spanContext);
|
|
892
|
+
} else {
|
|
893
|
+
console.warn(`Invalid trace ID ${traceId}. Expected a UUID.`);
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
const attributes = {
|
|
897
|
+
[SPAN_TYPE]: spanType != null ? spanType : "DEFAULT",
|
|
898
|
+
[SPAN_PATH_KEY]: spanPath
|
|
899
|
+
};
|
|
900
|
+
const span = getTracer().startSpan(name, { attributes }, entityContext);
|
|
901
|
+
if (traceId) {
|
|
902
|
+
span.setAttribute(OVERRIDE_PARENT_SPAN, true);
|
|
903
|
+
}
|
|
904
|
+
if (input) {
|
|
905
|
+
span.setAttribute(SPAN_INPUT, JSON.stringify(input));
|
|
906
|
+
}
|
|
907
|
+
return span;
|
|
908
|
+
}
|
|
909
|
+
/**
|
|
910
|
+
* A utility wrapper around OpenTelemetry's `context.with()`. Useful for
|
|
911
|
+
* passing spans around in manual instrumentation:
|
|
912
|
+
*
|
|
913
|
+
* @param span - Parent span to bind the execution to.
|
|
914
|
+
* @param fn - Function to execute within the span context.
|
|
915
|
+
* @param endOnExit - Whether to end the span after the function has
|
|
916
|
+
* executed. Defaults to `false`. If `false`, you MUST manually call
|
|
917
|
+
* `span.end()` at the end of the execution, so that spans are not lost.
|
|
918
|
+
* @returns The result of the function execution.
|
|
919
|
+
*
|
|
920
|
+
* See {@link startSpan} docs for a usage example
|
|
921
|
+
*/
|
|
922
|
+
static withSpan(span, fn, endOnExit) {
|
|
923
|
+
return import_api5.context.with(import_api5.trace.setSpan(import_api5.context.active(), span), () => {
|
|
924
|
+
try {
|
|
925
|
+
const result = fn();
|
|
926
|
+
return result;
|
|
927
|
+
} finally {
|
|
928
|
+
if (endOnExit !== void 0 && endOnExit) {
|
|
929
|
+
span.end();
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
});
|
|
933
|
+
}
|
|
815
934
|
static async shutdown() {
|
|
816
935
|
await forceFlush();
|
|
817
936
|
}
|
|
@@ -927,6 +1046,9 @@ async function observe({
|
|
|
927
1046
|
spanType,
|
|
928
1047
|
traceId
|
|
929
1048
|
}, fn, ...args) {
|
|
1049
|
+
if (fn === void 0 || typeof fn !== "function") {
|
|
1050
|
+
throw new Error("Invalid `observe` usage. Second argument `fn` must be a function.");
|
|
1051
|
+
}
|
|
930
1052
|
let associationProperties = {};
|
|
931
1053
|
if (sessionId) {
|
|
932
1054
|
associationProperties = { ...associationProperties, "session_id": sessionId };
|
|
@@ -1178,6 +1300,9 @@ async function evaluate({
|
|
|
1178
1300
|
await evaluation.run();
|
|
1179
1301
|
}
|
|
1180
1302
|
}
|
|
1303
|
+
|
|
1304
|
+
// src/index.ts
|
|
1305
|
+
var import_api7 = require("@opentelemetry/api");
|
|
1181
1306
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1182
1307
|
0 && (module.exports = {
|
|
1183
1308
|
Dataset,
|
|
@@ -1185,6 +1310,7 @@ async function evaluate({
|
|
|
1185
1310
|
Laminar,
|
|
1186
1311
|
LaminarAttributes,
|
|
1187
1312
|
LaminarDataset,
|
|
1313
|
+
Span,
|
|
1188
1314
|
evaluate,
|
|
1189
1315
|
observe
|
|
1190
1316
|
});
|