@kortyx/otel 0.1.0 → 0.3.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.0](https://github.com/kortyx-io/kortyx/compare/otel-v0.2.0...otel-v0.3.0) (2026-05-25)
4
+
5
+
6
+ ### Features
7
+
8
+ * add MCP tool support to useReason ([8352721](https://github.com/kortyx-io/kortyx/commit/83527215fd2fa6362348d842f8f3b9e9d9d03704))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @kortyx/hooks bumped to 0.16.0
16
+
17
+ ## [0.2.0](https://github.com/kortyx-io/kortyx/compare/otel-v0.1.0...otel-v0.2.0) (2026-05-24)
18
+
19
+
20
+ ### Features
21
+
22
+ * add OpenTelemetry tracing adapter ([dc1218f](https://github.com/kortyx-io/kortyx/commit/dc1218fb3759b8cb467f6c58f953a80127b25783))
23
+
24
+
25
+ ### Dependencies
26
+
27
+ * The following workspace dependencies were updated
28
+ * dependencies
29
+ * @kortyx/hooks bumped to 0.15.0
30
+
3
31
  ## 0.1.0
4
32
 
5
33
  - Initial OpenTelemetry trace adapter package.
package/dist/index.js CHANGED
@@ -114,6 +114,22 @@ var normalizeKnownAttributes = (attributes) => {
114
114
  normalized["gen_ai.prompt.type"] = attributes.promptType;
115
115
  normalized["kortyx.prompt.type"] = attributes.promptType;
116
116
  }
117
+ if (typeof attributes.toolCallCount === "number") {
118
+ normalized["kortyx.tool.call.count"] = attributes.toolCallCount;
119
+ }
120
+ if (typeof attributes.toolResultCount === "number") {
121
+ normalized["kortyx.tool.result.count"] = attributes.toolResultCount;
122
+ }
123
+ if (typeof attributes.toolStepCount === "number") {
124
+ normalized["kortyx.tool.step.count"] = attributes.toolStepCount;
125
+ }
126
+ if (typeof attributes.tool === "string") {
127
+ normalized["gen_ai.tool.name"] = attributes.tool;
128
+ normalized["kortyx.tool.name"] = attributes.tool;
129
+ }
130
+ if (typeof attributes.toolCallId === "string") {
131
+ normalized["kortyx.tool.call.id"] = attributes.toolCallId;
132
+ }
117
133
  return normalized;
118
134
  };
119
135
  var telemetryAttributes = (telemetry, options, side) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/content.ts","../src/attributes.ts","../src/span-wrapper.ts"],"sourcesContent":["export { createOpenTelemetryTraceAdapter } from \"./adapter\";\nexport type {\n OpenTelemetryMapAttributesArgs,\n OpenTelemetrySpanEndInfo,\n OpenTelemetrySpanStartInfo,\n OpenTelemetryTraceAdapterOptions,\n OpenTelemetryTracePhase,\n} from \"./types\";\n","import type {\n ReasonTraceAdapter,\n ReasonTraceAttributes,\n ReasonTraceSpan,\n ReasonTraceSpanStartArgs,\n} from \"@kortyx/hooks\";\nimport { context, SpanKind, trace } from \"@opentelemetry/api\";\nimport {\n applyAttributeMapping,\n startAttributes,\n toAttributes,\n} from \"./attributes\";\nimport { createSpanWrapper } from \"./span-wrapper\";\nimport type { OpenTelemetryTraceAdapterOptions } from \"./types\";\n\nexport function createOpenTelemetryTraceAdapter(\n options: OpenTelemetryTraceAdapterOptions = {},\n): ReasonTraceAdapter {\n const tracer =\n options.tracer ??\n trace.getTracer(\n options.instrumentationName ?? \"kortyx\",\n options.instrumentationVersion,\n );\n\n const start = (args: ReasonTraceSpanStartArgs): ReasonTraceSpan => {\n const attributes = startAttributes(args, options);\n const span = tracer.startSpan(\n args.name,\n {\n kind: SpanKind.INTERNAL,\n attributes: spanStartOtelAttributes(args, attributes, options),\n },\n context.active(),\n );\n const spanContext = span.spanContext();\n options.onSpanStart?.({\n name: args.name,\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n attributes,\n });\n return createSpanWrapper(span, args.name, options);\n };\n\n return {\n startSpan: start,\n withSpan: async (args, fn) => {\n const attributes = startAttributes(args, options);\n return tracer.startActiveSpan(\n args.name,\n {\n kind: SpanKind.INTERNAL,\n attributes: spanStartOtelAttributes(args, attributes, options),\n },\n async (span) => {\n const wrapped = createSpanWrapper(span, args.name, options);\n const spanContext = span.spanContext();\n options.onSpanStart?.({\n name: args.name,\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n attributes,\n });\n try {\n const result = await fn(wrapped);\n if (!wrapped.ended) wrapped.end?.();\n return result;\n } catch (error) {\n wrapped.fail?.(error);\n throw error;\n }\n },\n );\n },\n };\n}\n\nconst spanStartOtelAttributes = (\n args: ReasonTraceSpanStartArgs,\n attributes: ReasonTraceAttributes,\n options: OpenTelemetryTraceAdapterOptions,\n) =>\n toAttributes(\n applyAttributeMapping(args.name, attributes, options, {\n phase: \"start\",\n telemetry: args.telemetry,\n }),\n );\n","import type { OpenTelemetryTraceAdapterOptions } from \"./types\";\n\nexport type ContentCaptureSide = \"input\" | \"output\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nexport const shouldCapture = (\n value: OpenTelemetryTraceAdapterOptions[\"captureContent\"],\n side: ContentCaptureSide,\n): boolean => {\n if (value === true) return true;\n if (!isRecord(value)) return false;\n return Boolean(value[side]);\n};\n","import type {\n KortyxTraceMetadata,\n ReasonTraceAttributes,\n ReasonTraceSpanEndArgs,\n ReasonTraceSpanStartArgs,\n} from \"@kortyx/hooks\";\nimport type { Attributes } from \"@opentelemetry/api\";\nimport { type ContentCaptureSide, shouldCapture } from \"./content\";\nimport type { OpenTelemetryTraceAdapterOptions } from \"./types\";\n\ntype OpenTelemetryAttributeValue =\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[];\n\nexport const toAttributeValue = (\n value: unknown,\n): OpenTelemetryAttributeValue | undefined => {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n if (value.every((item) => typeof item === \"string\")) {\n return value as string[];\n }\n if (value.every((item) => typeof item === \"number\")) {\n return value as number[];\n }\n if (value.every((item) => typeof item === \"boolean\")) {\n return value as boolean[];\n }\n }\n if (value === null || value === undefined) return undefined;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n};\n\nexport const toAttributes = (attributes: ReasonTraceAttributes): Attributes => {\n const result: Attributes = {};\n for (const [key, value] of Object.entries(attributes)) {\n const attributeValue = toAttributeValue(value);\n if (attributeValue !== undefined) result[key] = attributeValue;\n }\n return result;\n};\n\nexport const normalizeKnownAttributes = (\n attributes: ReasonTraceAttributes,\n): ReasonTraceAttributes => {\n const normalized: ReasonTraceAttributes = { ...attributes };\n\n if (typeof attributes.providerId === \"string\") {\n normalized[\"gen_ai.provider.name\"] = attributes.providerId;\n normalized[\"kortyx.provider.id\"] = attributes.providerId;\n }\n if (typeof attributes.modelId === \"string\") {\n normalized[\"gen_ai.request.model\"] = attributes.modelId;\n normalized[\"kortyx.model.id\"] = attributes.modelId;\n }\n if (typeof attributes.stream === \"boolean\") {\n normalized[\"gen_ai.request.stream\"] = attributes.stream;\n }\n if (typeof attributes.operation === \"string\") {\n normalized[\"gen_ai.operation.name\"] = attributes.operation;\n normalized[\"kortyx.operation.name\"] = attributes.operation;\n }\n if (typeof attributes.nodeId === \"string\") {\n normalized[\"kortyx.node.id\"] = attributes.nodeId;\n }\n if (typeof attributes.workflowId === \"string\") {\n normalized[\"kortyx.workflow.id\"] = attributes.workflowId;\n }\n if (typeof attributes.runId === \"string\") {\n normalized[\"kortyx.run.id\"] = attributes.runId;\n }\n if (typeof attributes.sessionId === \"string\") {\n normalized[\"session.id\"] = attributes.sessionId;\n normalized[\"gen_ai.conversation.id\"] = attributes.sessionId;\n normalized[\"kortyx.session.id\"] = attributes.sessionId;\n }\n if (typeof attributes.userId === \"string\") {\n normalized[\"user.id\"] = attributes.userId;\n }\n if (typeof attributes.tenantId === \"string\") {\n normalized[\"kortyx.tenant.id\"] = attributes.tenantId;\n }\n if (typeof attributes.promptName === \"string\") {\n normalized[\"gen_ai.prompt.name\"] = attributes.promptName;\n normalized[\"kortyx.prompt.name\"] = attributes.promptName;\n }\n if (attributes.promptVersion !== undefined) {\n normalized[\"gen_ai.prompt.version\"] = attributes.promptVersion;\n normalized[\"kortyx.prompt.version\"] = attributes.promptVersion;\n }\n if (typeof attributes.promptType === \"string\") {\n normalized[\"gen_ai.prompt.type\"] = attributes.promptType;\n normalized[\"kortyx.prompt.type\"] = attributes.promptType;\n }\n\n return normalized;\n};\n\nexport const telemetryAttributes = (\n telemetry: KortyxTraceMetadata | undefined,\n options: OpenTelemetryTraceAdapterOptions,\n side?: ContentCaptureSide,\n): ReasonTraceAttributes => {\n const attributes: ReasonTraceAttributes = {};\n if (!telemetry) return attributes;\n\n if (telemetry.operation) {\n attributes.operation = telemetry.operation;\n attributes[\"gen_ai.operation.name\"] = telemetry.operation;\n }\n\n if (telemetry.prompt) {\n const prompt = telemetry.prompt;\n if (prompt.name) attributes[\"gen_ai.prompt.name\"] = prompt.name;\n if (prompt.name) attributes[\"kortyx.prompt.name\"] = prompt.name;\n if (prompt.version !== undefined) {\n attributes[\"gen_ai.prompt.version\"] = prompt.version;\n attributes[\"kortyx.prompt.version\"] = prompt.version;\n }\n if (prompt.type) attributes[\"gen_ai.prompt.type\"] = prompt.type;\n if (prompt.type) attributes[\"kortyx.prompt.type\"] = prompt.type;\n if (prompt.source) attributes[\"kortyx.prompt.source\"] = prompt.source;\n Object.assign(attributes, options.mapPromptMetadata?.(prompt) ?? {});\n }\n\n if (telemetry.tags?.length) {\n attributes[\"kortyx.trace.tags\"] = telemetry.tags;\n }\n\n if (telemetry.metadata) {\n for (const [key, value] of Object.entries(telemetry.metadata)) {\n attributes[`kortyx.trace.metadata.${key}`] = value;\n }\n }\n\n if (\n side === \"input\" &&\n shouldCapture(telemetry.captureContent ?? options.captureContent, \"input\")\n ) {\n attributes[\"gen_ai.prompt\"] = telemetry.input;\n attributes[\"kortyx.trace.input\"] = telemetry.input;\n }\n if (\n side === \"output\" &&\n shouldCapture(telemetry.captureContent ?? options.captureContent, \"output\")\n ) {\n attributes[\"gen_ai.completion\"] = telemetry.output;\n attributes[\"kortyx.trace.output\"] = telemetry.output;\n }\n\n return attributes;\n};\n\nexport const usageAttributes = (\n args: ReasonTraceSpanEndArgs | undefined,\n): ReasonTraceAttributes => {\n const usage = args?.usage;\n if (!usage) return {};\n return {\n ...(usage.input !== undefined\n ? { \"gen_ai.usage.input_tokens\": usage.input }\n : {}),\n ...(usage.output !== undefined\n ? { \"gen_ai.usage.output_tokens\": usage.output }\n : {}),\n ...(usage.total !== undefined\n ? { \"gen_ai.usage.total_tokens\": usage.total }\n : {}),\n ...(usage.reasoning !== undefined\n ? { \"gen_ai.usage.reasoning.output_tokens\": usage.reasoning }\n : {}),\n ...(usage.cacheRead !== undefined\n ? { \"gen_ai.usage.cache_read.input_tokens\": usage.cacheRead }\n : {}),\n ...(usage.cacheWrite !== undefined\n ? { \"gen_ai.usage.cache_creation.input_tokens\": usage.cacheWrite }\n : {}),\n ...(args.finishReason?.unified\n ? { \"gen_ai.response.finish_reasons\": [args.finishReason.unified] }\n : {}),\n ...(args.finishReason?.raw\n ? { \"kortyx.finish_reason.raw\": args.finishReason.raw }\n : {}),\n ...(args.warnings?.length\n ? { \"kortyx.warning.count\": args.warnings.length }\n : {}),\n };\n};\n\nexport const startAttributes = (\n args: ReasonTraceSpanStartArgs,\n options: OpenTelemetryTraceAdapterOptions,\n): ReasonTraceAttributes => ({\n ...(options.defaultAttributes ?? {}),\n ...(args.attributes ?? {}),\n ...telemetryAttributes(args.telemetry, options, \"input\"),\n});\n\nexport const applyAttributeMapping = (\n name: string,\n attributes: ReasonTraceAttributes,\n options: OpenTelemetryTraceAdapterOptions,\n args: Omit<\n Parameters<\n NonNullable<OpenTelemetryTraceAdapterOptions[\"mapAttributes\"]>\n >[0],\n \"name\" | \"attributes\"\n >,\n): ReasonTraceAttributes => {\n const mapped =\n options.mapAttributes?.({\n ...args,\n name,\n attributes,\n }) ?? {};\n return normalizeKnownAttributes({ ...attributes, ...mapped });\n};\n","import type { ReasonTraceSpan, ReasonTraceSpanEndArgs } from \"@kortyx/hooks\";\nimport { type Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport {\n applyAttributeMapping,\n normalizeKnownAttributes,\n telemetryAttributes,\n toAttributes,\n usageAttributes,\n} from \"./attributes\";\nimport type { OpenTelemetryTraceAdapterOptions } from \"./types\";\n\nexport type OpenTelemetryReasonSpan = ReasonTraceSpan & { ended: boolean };\n\nexport const createSpanWrapper = (\n span: Span,\n name: string,\n options: OpenTelemetryTraceAdapterOptions,\n): OpenTelemetryReasonSpan => {\n const wrapper: OpenTelemetryReasonSpan = {\n ended: false,\n setAttributes: (attributes) => {\n span.setAttributes(toAttributes(normalizeKnownAttributes(attributes)));\n },\n addEvent: (eventName, attributes) => {\n span.addEvent(\n eventName,\n toAttributes(\n applyAttributeMapping(name, attributes ?? {}, options, {\n phase: \"event\",\n }),\n ),\n );\n },\n end: (args) => {\n if (wrapper.ended) return;\n const attributes = spanEndAttributes(args, options);\n span.setAttributes(\n toAttributes(\n applyAttributeMapping(name, attributes, options, {\n phase: \"end\",\n telemetry: args?.telemetry,\n end: args,\n }),\n ),\n );\n wrapper.ended = true;\n span.end();\n const spanContext = span.spanContext();\n options.onSpanEnd?.({\n name,\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n });\n },\n fail: (error, args) => {\n const message = error instanceof Error ? error.message : String(error);\n span.recordException(error instanceof Error ? error : new Error(message));\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n const attributes = spanErrorAttributes(error, args);\n span.setAttributes(\n toAttributes(\n applyAttributeMapping(name, attributes, options, {\n phase: \"error\",\n telemetry: args?.telemetry,\n end: args,\n error,\n }),\n ),\n );\n wrapper.end?.(args);\n },\n };\n return wrapper;\n};\n\nconst spanEndAttributes = (\n args: ReasonTraceSpanEndArgs | undefined,\n options: OpenTelemetryTraceAdapterOptions,\n) => ({\n ...(args?.attributes ?? {}),\n ...usageAttributes(args),\n ...telemetryAttributes(args?.telemetry, options, \"output\"),\n});\n\nconst spanErrorAttributes = (\n error: unknown,\n args: ReasonTraceSpanEndArgs | undefined,\n) => {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ...(args?.attributes ?? {}),\n \"error.type\": error instanceof Error ? error.name : typeof error,\n \"error.message\": message,\n ...usageAttributes(args),\n };\n};\n"],"mappings":"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","names":["import_api"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/content.ts","../src/attributes.ts","../src/span-wrapper.ts"],"sourcesContent":["export { createOpenTelemetryTraceAdapter } from \"./adapter\";\nexport type {\n OpenTelemetryMapAttributesArgs,\n OpenTelemetrySpanEndInfo,\n OpenTelemetrySpanStartInfo,\n OpenTelemetryTraceAdapterOptions,\n OpenTelemetryTracePhase,\n} from \"./types\";\n","import type {\n ReasonTraceAdapter,\n ReasonTraceAttributes,\n ReasonTraceSpan,\n ReasonTraceSpanStartArgs,\n} from \"@kortyx/hooks\";\nimport { context, SpanKind, trace } from \"@opentelemetry/api\";\nimport {\n applyAttributeMapping,\n startAttributes,\n toAttributes,\n} from \"./attributes\";\nimport { createSpanWrapper } from \"./span-wrapper\";\nimport type { OpenTelemetryTraceAdapterOptions } from \"./types\";\n\nexport function createOpenTelemetryTraceAdapter(\n options: OpenTelemetryTraceAdapterOptions = {},\n): ReasonTraceAdapter {\n const tracer =\n options.tracer ??\n trace.getTracer(\n options.instrumentationName ?? \"kortyx\",\n options.instrumentationVersion,\n );\n\n const start = (args: ReasonTraceSpanStartArgs): ReasonTraceSpan => {\n const attributes = startAttributes(args, options);\n const span = tracer.startSpan(\n args.name,\n {\n kind: SpanKind.INTERNAL,\n attributes: spanStartOtelAttributes(args, attributes, options),\n },\n context.active(),\n );\n const spanContext = span.spanContext();\n options.onSpanStart?.({\n name: args.name,\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n attributes,\n });\n return createSpanWrapper(span, args.name, options);\n };\n\n return {\n startSpan: start,\n withSpan: async (args, fn) => {\n const attributes = startAttributes(args, options);\n return tracer.startActiveSpan(\n args.name,\n {\n kind: SpanKind.INTERNAL,\n attributes: spanStartOtelAttributes(args, attributes, options),\n },\n async (span) => {\n const wrapped = createSpanWrapper(span, args.name, options);\n const spanContext = span.spanContext();\n options.onSpanStart?.({\n name: args.name,\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n attributes,\n });\n try {\n const result = await fn(wrapped);\n if (!wrapped.ended) wrapped.end?.();\n return result;\n } catch (error) {\n wrapped.fail?.(error);\n throw error;\n }\n },\n );\n },\n };\n}\n\nconst spanStartOtelAttributes = (\n args: ReasonTraceSpanStartArgs,\n attributes: ReasonTraceAttributes,\n options: OpenTelemetryTraceAdapterOptions,\n) =>\n toAttributes(\n applyAttributeMapping(args.name, attributes, options, {\n phase: \"start\",\n telemetry: args.telemetry,\n }),\n );\n","import type { OpenTelemetryTraceAdapterOptions } from \"./types\";\n\nexport type ContentCaptureSide = \"input\" | \"output\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nexport const shouldCapture = (\n value: OpenTelemetryTraceAdapterOptions[\"captureContent\"],\n side: ContentCaptureSide,\n): boolean => {\n if (value === true) return true;\n if (!isRecord(value)) return false;\n return Boolean(value[side]);\n};\n","import type {\n KortyxTraceMetadata,\n ReasonTraceAttributes,\n ReasonTraceSpanEndArgs,\n ReasonTraceSpanStartArgs,\n} from \"@kortyx/hooks\";\nimport type { Attributes } from \"@opentelemetry/api\";\nimport { type ContentCaptureSide, shouldCapture } from \"./content\";\nimport type { OpenTelemetryTraceAdapterOptions } from \"./types\";\n\ntype OpenTelemetryAttributeValue =\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[];\n\nexport const toAttributeValue = (\n value: unknown,\n): OpenTelemetryAttributeValue | undefined => {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n if (value.every((item) => typeof item === \"string\")) {\n return value as string[];\n }\n if (value.every((item) => typeof item === \"number\")) {\n return value as number[];\n }\n if (value.every((item) => typeof item === \"boolean\")) {\n return value as boolean[];\n }\n }\n if (value === null || value === undefined) return undefined;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n};\n\nexport const toAttributes = (attributes: ReasonTraceAttributes): Attributes => {\n const result: Attributes = {};\n for (const [key, value] of Object.entries(attributes)) {\n const attributeValue = toAttributeValue(value);\n if (attributeValue !== undefined) result[key] = attributeValue;\n }\n return result;\n};\n\nexport const normalizeKnownAttributes = (\n attributes: ReasonTraceAttributes,\n): ReasonTraceAttributes => {\n const normalized: ReasonTraceAttributes = { ...attributes };\n\n if (typeof attributes.providerId === \"string\") {\n normalized[\"gen_ai.provider.name\"] = attributes.providerId;\n normalized[\"kortyx.provider.id\"] = attributes.providerId;\n }\n if (typeof attributes.modelId === \"string\") {\n normalized[\"gen_ai.request.model\"] = attributes.modelId;\n normalized[\"kortyx.model.id\"] = attributes.modelId;\n }\n if (typeof attributes.stream === \"boolean\") {\n normalized[\"gen_ai.request.stream\"] = attributes.stream;\n }\n if (typeof attributes.operation === \"string\") {\n normalized[\"gen_ai.operation.name\"] = attributes.operation;\n normalized[\"kortyx.operation.name\"] = attributes.operation;\n }\n if (typeof attributes.nodeId === \"string\") {\n normalized[\"kortyx.node.id\"] = attributes.nodeId;\n }\n if (typeof attributes.workflowId === \"string\") {\n normalized[\"kortyx.workflow.id\"] = attributes.workflowId;\n }\n if (typeof attributes.runId === \"string\") {\n normalized[\"kortyx.run.id\"] = attributes.runId;\n }\n if (typeof attributes.sessionId === \"string\") {\n normalized[\"session.id\"] = attributes.sessionId;\n normalized[\"gen_ai.conversation.id\"] = attributes.sessionId;\n normalized[\"kortyx.session.id\"] = attributes.sessionId;\n }\n if (typeof attributes.userId === \"string\") {\n normalized[\"user.id\"] = attributes.userId;\n }\n if (typeof attributes.tenantId === \"string\") {\n normalized[\"kortyx.tenant.id\"] = attributes.tenantId;\n }\n if (typeof attributes.promptName === \"string\") {\n normalized[\"gen_ai.prompt.name\"] = attributes.promptName;\n normalized[\"kortyx.prompt.name\"] = attributes.promptName;\n }\n if (attributes.promptVersion !== undefined) {\n normalized[\"gen_ai.prompt.version\"] = attributes.promptVersion;\n normalized[\"kortyx.prompt.version\"] = attributes.promptVersion;\n }\n if (typeof attributes.promptType === \"string\") {\n normalized[\"gen_ai.prompt.type\"] = attributes.promptType;\n normalized[\"kortyx.prompt.type\"] = attributes.promptType;\n }\n if (typeof attributes.toolCallCount === \"number\") {\n normalized[\"kortyx.tool.call.count\"] = attributes.toolCallCount;\n }\n if (typeof attributes.toolResultCount === \"number\") {\n normalized[\"kortyx.tool.result.count\"] = attributes.toolResultCount;\n }\n if (typeof attributes.toolStepCount === \"number\") {\n normalized[\"kortyx.tool.step.count\"] = attributes.toolStepCount;\n }\n if (typeof attributes.tool === \"string\") {\n normalized[\"gen_ai.tool.name\"] = attributes.tool;\n normalized[\"kortyx.tool.name\"] = attributes.tool;\n }\n if (typeof attributes.toolCallId === \"string\") {\n normalized[\"kortyx.tool.call.id\"] = attributes.toolCallId;\n }\n\n return normalized;\n};\n\nexport const telemetryAttributes = (\n telemetry: KortyxTraceMetadata | undefined,\n options: OpenTelemetryTraceAdapterOptions,\n side?: ContentCaptureSide,\n): ReasonTraceAttributes => {\n const attributes: ReasonTraceAttributes = {};\n if (!telemetry) return attributes;\n\n if (telemetry.operation) {\n attributes.operation = telemetry.operation;\n attributes[\"gen_ai.operation.name\"] = telemetry.operation;\n }\n\n if (telemetry.prompt) {\n const prompt = telemetry.prompt;\n if (prompt.name) attributes[\"gen_ai.prompt.name\"] = prompt.name;\n if (prompt.name) attributes[\"kortyx.prompt.name\"] = prompt.name;\n if (prompt.version !== undefined) {\n attributes[\"gen_ai.prompt.version\"] = prompt.version;\n attributes[\"kortyx.prompt.version\"] = prompt.version;\n }\n if (prompt.type) attributes[\"gen_ai.prompt.type\"] = prompt.type;\n if (prompt.type) attributes[\"kortyx.prompt.type\"] = prompt.type;\n if (prompt.source) attributes[\"kortyx.prompt.source\"] = prompt.source;\n Object.assign(attributes, options.mapPromptMetadata?.(prompt) ?? {});\n }\n\n if (telemetry.tags?.length) {\n attributes[\"kortyx.trace.tags\"] = telemetry.tags;\n }\n\n if (telemetry.metadata) {\n for (const [key, value] of Object.entries(telemetry.metadata)) {\n attributes[`kortyx.trace.metadata.${key}`] = value;\n }\n }\n\n if (\n side === \"input\" &&\n shouldCapture(telemetry.captureContent ?? options.captureContent, \"input\")\n ) {\n attributes[\"gen_ai.prompt\"] = telemetry.input;\n attributes[\"kortyx.trace.input\"] = telemetry.input;\n }\n if (\n side === \"output\" &&\n shouldCapture(telemetry.captureContent ?? options.captureContent, \"output\")\n ) {\n attributes[\"gen_ai.completion\"] = telemetry.output;\n attributes[\"kortyx.trace.output\"] = telemetry.output;\n }\n\n return attributes;\n};\n\nexport const usageAttributes = (\n args: ReasonTraceSpanEndArgs | undefined,\n): ReasonTraceAttributes => {\n const usage = args?.usage;\n if (!usage) return {};\n return {\n ...(usage.input !== undefined\n ? { \"gen_ai.usage.input_tokens\": usage.input }\n : {}),\n ...(usage.output !== undefined\n ? { \"gen_ai.usage.output_tokens\": usage.output }\n : {}),\n ...(usage.total !== undefined\n ? { \"gen_ai.usage.total_tokens\": usage.total }\n : {}),\n ...(usage.reasoning !== undefined\n ? { \"gen_ai.usage.reasoning.output_tokens\": usage.reasoning }\n : {}),\n ...(usage.cacheRead !== undefined\n ? { \"gen_ai.usage.cache_read.input_tokens\": usage.cacheRead }\n : {}),\n ...(usage.cacheWrite !== undefined\n ? { \"gen_ai.usage.cache_creation.input_tokens\": usage.cacheWrite }\n : {}),\n ...(args.finishReason?.unified\n ? { \"gen_ai.response.finish_reasons\": [args.finishReason.unified] }\n : {}),\n ...(args.finishReason?.raw\n ? { \"kortyx.finish_reason.raw\": args.finishReason.raw }\n : {}),\n ...(args.warnings?.length\n ? { \"kortyx.warning.count\": args.warnings.length }\n : {}),\n };\n};\n\nexport const startAttributes = (\n args: ReasonTraceSpanStartArgs,\n options: OpenTelemetryTraceAdapterOptions,\n): ReasonTraceAttributes => ({\n ...(options.defaultAttributes ?? {}),\n ...(args.attributes ?? {}),\n ...telemetryAttributes(args.telemetry, options, \"input\"),\n});\n\nexport const applyAttributeMapping = (\n name: string,\n attributes: ReasonTraceAttributes,\n options: OpenTelemetryTraceAdapterOptions,\n args: Omit<\n Parameters<\n NonNullable<OpenTelemetryTraceAdapterOptions[\"mapAttributes\"]>\n >[0],\n \"name\" | \"attributes\"\n >,\n): ReasonTraceAttributes => {\n const mapped =\n options.mapAttributes?.({\n ...args,\n name,\n attributes,\n }) ?? {};\n return normalizeKnownAttributes({ ...attributes, ...mapped });\n};\n","import type { ReasonTraceSpan, ReasonTraceSpanEndArgs } from \"@kortyx/hooks\";\nimport { type Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport {\n applyAttributeMapping,\n normalizeKnownAttributes,\n telemetryAttributes,\n toAttributes,\n usageAttributes,\n} from \"./attributes\";\nimport type { OpenTelemetryTraceAdapterOptions } from \"./types\";\n\nexport type OpenTelemetryReasonSpan = ReasonTraceSpan & { ended: boolean };\n\nexport const createSpanWrapper = (\n span: Span,\n name: string,\n options: OpenTelemetryTraceAdapterOptions,\n): OpenTelemetryReasonSpan => {\n const wrapper: OpenTelemetryReasonSpan = {\n ended: false,\n setAttributes: (attributes) => {\n span.setAttributes(toAttributes(normalizeKnownAttributes(attributes)));\n },\n addEvent: (eventName, attributes) => {\n span.addEvent(\n eventName,\n toAttributes(\n applyAttributeMapping(name, attributes ?? {}, options, {\n phase: \"event\",\n }),\n ),\n );\n },\n end: (args) => {\n if (wrapper.ended) return;\n const attributes = spanEndAttributes(args, options);\n span.setAttributes(\n toAttributes(\n applyAttributeMapping(name, attributes, options, {\n phase: \"end\",\n telemetry: args?.telemetry,\n end: args,\n }),\n ),\n );\n wrapper.ended = true;\n span.end();\n const spanContext = span.spanContext();\n options.onSpanEnd?.({\n name,\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n });\n },\n fail: (error, args) => {\n const message = error instanceof Error ? error.message : String(error);\n span.recordException(error instanceof Error ? error : new Error(message));\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n const attributes = spanErrorAttributes(error, args);\n span.setAttributes(\n toAttributes(\n applyAttributeMapping(name, attributes, options, {\n phase: \"error\",\n telemetry: args?.telemetry,\n end: args,\n error,\n }),\n ),\n );\n wrapper.end?.(args);\n },\n };\n return wrapper;\n};\n\nconst spanEndAttributes = (\n args: ReasonTraceSpanEndArgs | undefined,\n options: OpenTelemetryTraceAdapterOptions,\n) => ({\n ...(args?.attributes ?? {}),\n ...usageAttributes(args),\n ...telemetryAttributes(args?.telemetry, options, \"output\"),\n});\n\nconst spanErrorAttributes = (\n error: unknown,\n args: ReasonTraceSpanEndArgs | undefined,\n) => {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ...(args?.attributes ?? {}),\n \"error.type\": error instanceof Error ? error.name : typeof error,\n \"error.message\": message,\n ...usageAttributes(args),\n };\n};\n"],"mappings":"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","names":["import_api"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kortyx/otel",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "description": "OpenTelemetry adapter for Kortyx tracing.",
6
6
  "keywords": [
@@ -32,7 +32,7 @@
32
32
  "CHANGELOG.md"
33
33
  ],
34
34
  "dependencies": {
35
- "@kortyx/hooks": "0.14.0"
35
+ "@kortyx/hooks": "0.16.0"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "@opentelemetry/api": "^1.9.0"