langwatch 0.3.2 → 0.4.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.
Files changed (202) hide show
  1. package/dist/{add-LBBS4I3H.js → add-35QACTIV.js} +34 -28
  2. package/dist/add-35QACTIV.js.map +1 -0
  3. package/dist/{add-RD3ZKFAT.mjs → add-TRJAXM4D.mjs} +22 -16
  4. package/dist/add-TRJAXM4D.mjs.map +1 -0
  5. package/dist/chunk-4ZSSHX6F.js +636 -0
  6. package/dist/chunk-4ZSSHX6F.js.map +1 -0
  7. package/dist/chunk-5EVBOHJY.js +155 -0
  8. package/dist/chunk-5EVBOHJY.js.map +1 -0
  9. package/dist/{chunk-YN4436PK.mjs → chunk-CU3443HD.mjs} +14 -9
  10. package/dist/{chunk-2JU376G7.js → chunk-D2CSG4SJ.js} +4 -4
  11. package/dist/chunk-D2CSG4SJ.js.map +1 -0
  12. package/dist/chunk-DISMHYXC.js +184 -0
  13. package/dist/chunk-DISMHYXC.js.map +1 -0
  14. package/dist/{chunk-E7UE2MPD.mjs → chunk-ECUXLXFT.mjs} +2 -2
  15. package/dist/chunk-EJWJXTPU.mjs +626 -0
  16. package/dist/chunk-EJWJXTPU.mjs.map +1 -0
  17. package/dist/chunk-GQMDZ4GY.mjs +155 -0
  18. package/dist/chunk-GQMDZ4GY.mjs.map +1 -0
  19. package/dist/{chunk-3GKPQB4R.mjs → chunk-HUI45ULC.mjs} +4 -4
  20. package/dist/chunk-HUI45ULC.mjs.map +1 -0
  21. package/dist/{chunk-HJU67C7H.js → chunk-K64Y6YUG.js} +10 -10
  22. package/dist/{chunk-HJU67C7H.js.map → chunk-K64Y6YUG.js.map} +1 -1
  23. package/dist/chunk-LP76VXI3.mjs +636 -0
  24. package/dist/chunk-LP76VXI3.mjs.map +1 -0
  25. package/dist/chunk-M4VUHTT2.js +626 -0
  26. package/dist/chunk-M4VUHTT2.js.map +1 -0
  27. package/dist/{chunk-PR3JDWC3.mjs → chunk-N2V6J3U2.mjs} +28 -3
  28. package/dist/chunk-N2V6J3U2.mjs.map +1 -0
  29. package/dist/chunk-OUCVXP4G.js +258 -0
  30. package/dist/chunk-OUCVXP4G.js.map +1 -0
  31. package/dist/{chunk-FJLK5CFL.js → chunk-OXBO24RB.js} +13 -8
  32. package/dist/chunk-OXBO24RB.js.map +1 -0
  33. package/dist/chunk-PGWR3OQY.mjs +258 -0
  34. package/dist/chunk-PGWR3OQY.mjs.map +1 -0
  35. package/dist/{chunk-SMXXAVMB.js → chunk-SGNJDRCT.js} +2 -2
  36. package/dist/chunk-SGNJDRCT.js.map +1 -0
  37. package/dist/{chunk-W5ZEP3CI.mjs → chunk-SYMZPWZE.mjs} +2 -2
  38. package/dist/chunk-SYMZPWZE.mjs.map +1 -0
  39. package/dist/{chunk-KGDAENGD.js → chunk-YH5TIVK2.js} +28 -3
  40. package/dist/chunk-YH5TIVK2.js.map +1 -0
  41. package/dist/chunk-YNQ44U6D.mjs +184 -0
  42. package/dist/chunk-YNQ44U6D.mjs.map +1 -0
  43. package/dist/cli/index.js +8 -8
  44. package/dist/cli/index.mjs +8 -8
  45. package/dist/{create-G5MTGOOH.js → create-7K2CC4KQ.js} +11 -11
  46. package/dist/{create-G5MTGOOH.js.map → create-7K2CC4KQ.js.map} +1 -1
  47. package/dist/{create-QUZYBMQB.mjs → create-MK7NEGCM.mjs} +8 -8
  48. package/dist/implementation-C4lvooSg.d.mts +576 -0
  49. package/dist/implementation-CzemP9jY.d.ts +576 -0
  50. package/dist/index-DTEZr0Jn.d.mts +34 -0
  51. package/dist/index-DTEZr0Jn.d.ts +34 -0
  52. package/dist/index.d.mts +121 -47
  53. package/dist/index.d.ts +121 -47
  54. package/dist/index.js +16 -12
  55. package/dist/index.js.map +1 -1
  56. package/dist/index.mjs +27 -23
  57. package/dist/index.mjs.map +1 -1
  58. package/dist/init-GDKJICSS.js +16 -0
  59. package/dist/{init-XU2JFY6N.js.map → init-GDKJICSS.js.map} +1 -1
  60. package/dist/{init-H67RW22E.mjs → init-RINSTP4L.mjs} +5 -5
  61. package/dist/{list-7NPSX2E4.mjs → list-7L23G5DY.mjs} +28 -16
  62. package/dist/list-7L23G5DY.mjs.map +1 -0
  63. package/dist/{list-ZXFLAF52.js → list-OLLQ7XKZ.js} +29 -17
  64. package/dist/list-OLLQ7XKZ.js.map +1 -0
  65. package/dist/{login-EK4WVOI2.mjs → login-RCNKL5AM.mjs} +6 -5
  66. package/dist/login-RCNKL5AM.mjs.map +1 -0
  67. package/dist/{login-76NQIHKR.js → login-XF3BQQPV.js} +7 -6
  68. package/dist/login-XF3BQQPV.js.map +1 -0
  69. package/dist/observability-sdk/index.d.mts +134 -0
  70. package/dist/observability-sdk/index.d.ts +134 -0
  71. package/dist/observability-sdk/index.js +41 -0
  72. package/dist/observability-sdk/index.js.map +1 -0
  73. package/dist/observability-sdk/index.mjs +41 -0
  74. package/dist/observability-sdk/instrumentation/langchain/index.d.mts +69 -0
  75. package/dist/observability-sdk/instrumentation/langchain/index.d.ts +69 -0
  76. package/dist/observability-sdk/instrumentation/langchain/index.js +518 -0
  77. package/dist/observability-sdk/instrumentation/langchain/index.js.map +1 -0
  78. package/dist/observability-sdk/instrumentation/langchain/index.mjs +518 -0
  79. package/dist/observability-sdk/instrumentation/langchain/index.mjs.map +1 -0
  80. package/dist/observability-sdk/setup/node/index.d.mts +368 -0
  81. package/dist/observability-sdk/setup/node/index.d.ts +368 -0
  82. package/dist/observability-sdk/setup/node/index.js +276 -0
  83. package/dist/observability-sdk/setup/node/index.js.map +1 -0
  84. package/dist/observability-sdk/setup/node/index.mjs +276 -0
  85. package/dist/observability-sdk/setup/node/index.mjs.map +1 -0
  86. package/dist/{remove-SDJYEPAY.mjs → remove-3VLQNVHN.mjs} +11 -8
  87. package/dist/remove-3VLQNVHN.mjs.map +1 -0
  88. package/dist/{remove-XBNGIVMR.js → remove-L6JVJBWY.js} +18 -15
  89. package/dist/remove-L6JVJBWY.js.map +1 -0
  90. package/dist/{sync-ST2IWXSB.mjs → sync-DPMTUTVL.mjs} +39 -33
  91. package/dist/sync-DPMTUTVL.mjs.map +1 -0
  92. package/dist/{sync-EISKGPTL.js → sync-PSU3F5Z4.js} +52 -46
  93. package/dist/sync-PSU3F5Z4.js.map +1 -0
  94. package/dist/{prompt-D-jpMrLS.d.mts → types-1q5wIYP5.d.mts} +628 -14
  95. package/dist/{prompt-D-jpMrLS.d.ts → types-C9k5gGhU.d.ts} +628 -14
  96. package/dist/types-DRiQaKFG.d.mts +254 -0
  97. package/dist/types-DRiQaKFG.d.ts +254 -0
  98. package/dist/types-Dmazk5Bk.d.mts +44 -0
  99. package/dist/types-Dmazk5Bk.d.ts +44 -0
  100. package/package.json +39 -39
  101. package/dist/add-LBBS4I3H.js.map +0 -1
  102. package/dist/add-RD3ZKFAT.mjs.map +0 -1
  103. package/dist/chunk-2JU376G7.js.map +0 -1
  104. package/dist/chunk-2ODBGSBI.js +0 -4
  105. package/dist/chunk-2ODBGSBI.js.map +0 -1
  106. package/dist/chunk-3GKPQB4R.mjs.map +0 -1
  107. package/dist/chunk-52GXX3MA.js +0 -426
  108. package/dist/chunk-52GXX3MA.js.map +0 -1
  109. package/dist/chunk-5NC5ILKA.js +0 -94
  110. package/dist/chunk-5NC5ILKA.js.map +0 -1
  111. package/dist/chunk-AAROJADR.mjs +0 -49
  112. package/dist/chunk-AAROJADR.mjs.map +0 -1
  113. package/dist/chunk-DTEKFQ4U.js +0 -159
  114. package/dist/chunk-DTEKFQ4U.js.map +0 -1
  115. package/dist/chunk-F63YKTXA.mjs +0 -47
  116. package/dist/chunk-F63YKTXA.mjs.map +0 -1
  117. package/dist/chunk-FJLK5CFL.js.map +0 -1
  118. package/dist/chunk-GJSEBQXF.mjs +0 -392
  119. package/dist/chunk-GJSEBQXF.mjs.map +0 -1
  120. package/dist/chunk-IGHXIIIK.js +0 -49
  121. package/dist/chunk-IGHXIIIK.js.map +0 -1
  122. package/dist/chunk-J7ICRUU4.mjs +0 -426
  123. package/dist/chunk-J7ICRUU4.mjs.map +0 -1
  124. package/dist/chunk-KGDAENGD.js.map +0 -1
  125. package/dist/chunk-LD74LVRU.js +0 -47
  126. package/dist/chunk-LD74LVRU.js.map +0 -1
  127. package/dist/chunk-PCQVQ7SB.js +0 -45
  128. package/dist/chunk-PCQVQ7SB.js.map +0 -1
  129. package/dist/chunk-PR3JDWC3.mjs.map +0 -1
  130. package/dist/chunk-PWZBLTHR.js +0 -118
  131. package/dist/chunk-PWZBLTHR.js.map +0 -1
  132. package/dist/chunk-QEWDG5QE.mjs +0 -45
  133. package/dist/chunk-QEWDG5QE.mjs.map +0 -1
  134. package/dist/chunk-SMXXAVMB.js.map +0 -1
  135. package/dist/chunk-STV4ZVNA.mjs +0 -118
  136. package/dist/chunk-STV4ZVNA.mjs.map +0 -1
  137. package/dist/chunk-T5AZMMVS.mjs +0 -94
  138. package/dist/chunk-T5AZMMVS.mjs.map +0 -1
  139. package/dist/chunk-UU33HCCZ.mjs +0 -159
  140. package/dist/chunk-UU33HCCZ.mjs.map +0 -1
  141. package/dist/chunk-VGHLQXKB.js +0 -392
  142. package/dist/chunk-VGHLQXKB.js.map +0 -1
  143. package/dist/chunk-W5ZEP3CI.mjs.map +0 -1
  144. package/dist/chunk-Y666BJA5.mjs +0 -4
  145. package/dist/chunk-YN4436PK.mjs.map +0 -1
  146. package/dist/client-B2HqIKg6.d.ts +0 -51
  147. package/dist/client-XyCqclCi.d.mts +0 -51
  148. package/dist/client-browser.d.mts +0 -8
  149. package/dist/client-browser.d.ts +0 -8
  150. package/dist/client-browser.js +0 -88
  151. package/dist/client-browser.js.map +0 -1
  152. package/dist/client-browser.mjs +0 -88
  153. package/dist/client-browser.mjs.map +0 -1
  154. package/dist/client-node.d.mts +0 -8
  155. package/dist/client-node.d.ts +0 -8
  156. package/dist/client-node.js +0 -95
  157. package/dist/client-node.js.map +0 -1
  158. package/dist/client-node.mjs +0 -95
  159. package/dist/client-node.mjs.map +0 -1
  160. package/dist/evaluation/index.d.mts +0 -897
  161. package/dist/evaluation/index.d.ts +0 -897
  162. package/dist/evaluation/index.js +0 -14
  163. package/dist/evaluation/index.js.map +0 -1
  164. package/dist/evaluation/index.mjs +0 -14
  165. package/dist/filterable-batch-span-processor-zO5kcjBY.d.mts +0 -64
  166. package/dist/filterable-batch-span-processor-zO5kcjBY.d.ts +0 -64
  167. package/dist/init-XU2JFY6N.js +0 -16
  168. package/dist/list-7NPSX2E4.mjs.map +0 -1
  169. package/dist/list-ZXFLAF52.js.map +0 -1
  170. package/dist/login-76NQIHKR.js.map +0 -1
  171. package/dist/login-EK4WVOI2.mjs.map +0 -1
  172. package/dist/observability/index.d.mts +0 -260
  173. package/dist/observability/index.d.ts +0 -260
  174. package/dist/observability/index.js +0 -21
  175. package/dist/observability/index.js.map +0 -1
  176. package/dist/observability/index.mjs +0 -21
  177. package/dist/observability/index.mjs.map +0 -1
  178. package/dist/observability/instrumentation/langchain/index.d.mts +0 -40
  179. package/dist/observability/instrumentation/langchain/index.d.ts +0 -40
  180. package/dist/observability/instrumentation/langchain/index.js +0 -668
  181. package/dist/observability/instrumentation/langchain/index.js.map +0 -1
  182. package/dist/observability/instrumentation/langchain/index.mjs +0 -668
  183. package/dist/observability/instrumentation/langchain/index.mjs.map +0 -1
  184. package/dist/prompt/index.d.mts +0 -10
  185. package/dist/prompt/index.d.ts +0 -10
  186. package/dist/prompt/index.js +0 -22
  187. package/dist/prompt/index.js.map +0 -1
  188. package/dist/prompt/index.mjs +0 -22
  189. package/dist/prompt/index.mjs.map +0 -1
  190. package/dist/record-evaluation-CmxMXa-3.d.mts +0 -25
  191. package/dist/record-evaluation-CmxMXa-3.d.ts +0 -25
  192. package/dist/remove-SDJYEPAY.mjs.map +0 -1
  193. package/dist/remove-XBNGIVMR.js.map +0 -1
  194. package/dist/sync-EISKGPTL.js.map +0 -1
  195. package/dist/sync-ST2IWXSB.mjs.map +0 -1
  196. package/dist/trace-CqaKo0kZ.d.ts +0 -622
  197. package/dist/trace-DtVc5GhF.d.mts +0 -622
  198. /package/dist/{chunk-Y666BJA5.mjs.map → chunk-CU3443HD.mjs.map} +0 -0
  199. /package/dist/{chunk-E7UE2MPD.mjs.map → chunk-ECUXLXFT.mjs.map} +0 -0
  200. /package/dist/{create-QUZYBMQB.mjs.map → create-MK7NEGCM.mjs.map} +0 -0
  201. /package/dist/{init-H67RW22E.mjs.map → init-RINSTP4L.mjs.map} +0 -0
  202. /package/dist/{evaluation → observability-sdk}/index.mjs.map +0 -0
@@ -0,0 +1,258 @@
1
+ import {
2
+ shouldCaptureOutput
3
+ } from "./chunk-YNQ44U6D.mjs";
4
+ import {
5
+ __spreadProps,
6
+ __spreadValues
7
+ } from "./chunk-CU3443HD.mjs";
8
+
9
+ // src/observability-sdk/exporters/langwatch-trace-exporter.ts
10
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
11
+
12
+ // package.json
13
+ var version = "0.4.0";
14
+
15
+ // src/internal/runtime.ts
16
+ var _runtime;
17
+ var getRuntime = () => {
18
+ _runtime != null ? _runtime : _runtime = detectRuntime();
19
+ return _runtime;
20
+ };
21
+ function detectRuntime(globals) {
22
+ var _a;
23
+ let g = globalThis;
24
+ if (globals) {
25
+ if (process.env.NODE_ENV === "test") {
26
+ g = globals;
27
+ } else {
28
+ console.warn("[LangWatch Observability] overriding detectRuntime is only supported when running in NODE_ENV=test");
29
+ }
30
+ }
31
+ try {
32
+ if ("Deno" in g && typeof g.Deno === "object" && g.Deno && "version" in g.Deno && typeof g.Deno.version === "object") {
33
+ return "deno";
34
+ }
35
+ if ("Bun" in g && typeof g.Bun === "object" && g.Bun && "version" in g.Bun && typeof g.Bun.version === "string") {
36
+ return "bun";
37
+ }
38
+ if ("process" in g && typeof g.process === "object" && g.process && typeof g.process.versions === "object" && typeof g.process.versions.node === "string") {
39
+ return "node";
40
+ }
41
+ if (typeof ((_a = g.window) == null ? void 0 : _a.document) !== "undefined" && g === g.window) {
42
+ return "web";
43
+ }
44
+ return "unknown";
45
+ } catch (error) {
46
+ console.warn("[LangWatch Observability] Failed to detect runtime", error);
47
+ return "unknown";
48
+ }
49
+ }
50
+
51
+ // src/internal/constants.ts
52
+ var LANGWATCH_SDK_RUNTIME = getRuntime;
53
+ var LANGWATCH_SDK_NAME_OBSERVABILITY = "langwatch-observability-sdk";
54
+ var LANGWATCH_SDK_NAME_CLIENT = "langwatch-client-sdk";
55
+ var LANGWATCH_SDK_LANGUAGE = "typescript";
56
+ var LANGWATCH_SDK_VERSION = version;
57
+ var DEFAULT_ENDPOINT = "https://app.langwatch.ai/";
58
+ var DEFAULT_SERVICE_NAME = "unknown-service.langwatch";
59
+ var TRACES_PATH = "/api/otel/v1/traces";
60
+ var LOGS_PATH = "/api/otel/v1/logs";
61
+
62
+ // src/observability-sdk/exporters/langwatch-trace-exporter.ts
63
+ var LangWatchTraceExporter = class extends OTLPTraceExporter {
64
+ /**
65
+ * Creates a new LangWatchExporter instance.
66
+ *
67
+ * @param opts - Optional configuration options for the exporter
68
+ * @param opts.apiKey - Optional API key for LangWatch authentication. If not provided,
69
+ * will use environment variables or fallback configuration.
70
+ * @param opts.endpoint - Optional custom endpoint URL for LangWatch ingestion.
71
+ * If not provided, will use environment variables or fallback configuration.
72
+ * @param opts.includeAllSpans - Deprecated: This option is deprecated and will be removed in a future version
73
+ * @param opts.debug - Deprecated: This option is deprecated and will be removed in a future version
74
+ */
75
+ constructor(opts) {
76
+ var _a, _b, _c, _d;
77
+ const apiKey = (_b = (_a = opts == null ? void 0 : opts.apiKey) != null ? _a : process.env.LANGWATCH_API_KEY) != null ? _b : "";
78
+ const endpoint = (_d = (_c = opts == null ? void 0 : opts.endpoint) != null ? _c : process.env.LANGWATCH_ENDPOINT) != null ? _d : "https://app.langwatch.ai";
79
+ if (opts && opts.includeAllSpans !== void 0) {
80
+ console.warn(
81
+ "[LangWatchExporter] The behavior of `includeAllSpans` is deprecated and will be removed in a future version"
82
+ );
83
+ }
84
+ if (opts && opts.debug !== void 0) {
85
+ console.warn(
86
+ "[LangWatchExporter] The behavior of `debug` is deprecated and will be removed in a future version"
87
+ );
88
+ }
89
+ const url = new URL(TRACES_PATH, endpoint);
90
+ const otelEndpoint = url.toString();
91
+ super({
92
+ headers: __spreadValues({
93
+ "x-langwatch-sdk-name": LANGWATCH_SDK_NAME_OBSERVABILITY,
94
+ "x-langwatch-sdk-language": LANGWATCH_SDK_LANGUAGE,
95
+ "x-langwatch-sdk-version": LANGWATCH_SDK_VERSION,
96
+ "x-langwatch-sdk-runtime": LANGWATCH_SDK_RUNTIME()
97
+ }, apiKey ? { authorization: `Bearer ${apiKey}` } : {}),
98
+ url: otelEndpoint.toString()
99
+ });
100
+ }
101
+ };
102
+
103
+ // src/observability-sdk/exporters/langwatch-logs-exporter.ts
104
+ import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
105
+ var LangWatchLogsExporter = class extends OTLPLogExporter {
106
+ /**
107
+ * Creates a new LangWatchLogsExporter instance.
108
+ *
109
+ * @param opts - Optional configuration options for the exporter.
110
+ * @param opts.apiKey - Optional API key for LangWatch authentication. If not provided,
111
+ * will use environment variables or fallback configuration.
112
+ * @param opts.endpoint - Optional custom endpoint URL for LangWatch ingestion.
113
+ * If not provided, will use environment variables or fallback configuration.
114
+ */
115
+ constructor(opts) {
116
+ var _a, _b, _c, _d;
117
+ const apiKey = (_b = (_a = opts == null ? void 0 : opts.apiKey) != null ? _a : process.env.LANGWATCH_API_KEY) != null ? _b : "";
118
+ const endpoint = (_d = (_c = opts == null ? void 0 : opts.endpoint) != null ? _c : process.env.LANGWATCH_ENDPOINT) != null ? _d : "https://app.langwatch.ai";
119
+ const url = new URL(LOGS_PATH, endpoint);
120
+ const otelEndpoint = url.toString();
121
+ super({
122
+ headers: __spreadValues({
123
+ "x-langwatch-sdk-name": LANGWATCH_SDK_NAME_OBSERVABILITY,
124
+ "x-langwatch-sdk-language": LANGWATCH_SDK_LANGUAGE,
125
+ "x-langwatch-sdk-version": LANGWATCH_SDK_VERSION,
126
+ "x-langwatch-sdk-runtime": LANGWATCH_SDK_RUNTIME()
127
+ }, apiKey ? { authorization: `Bearer ${apiKey}` } : {}),
128
+ url: otelEndpoint.toString()
129
+ });
130
+ }
131
+ };
132
+
133
+ // src/observability-sdk/semconv/events.ts
134
+ var LOG_EVNT_GEN_AI_SYSTEM_MESSAGE = "gen.ai.system_message";
135
+ var LOG_EVNT_GEN_AI_USER_MESSAGE = "gen.ai.user_message";
136
+ var LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE = "gen.ai.assistant_message";
137
+ var LOG_EVNT_GEN_AI_TOOL_MESSAGE = "gen.ai.tool_message";
138
+ var LOG_EVNT_GEN_AI_CHOICE = "gen.ai.choice";
139
+
140
+ // src/observability-sdk/logger/index.ts
141
+ import {
142
+ NoopLoggerProvider
143
+ } from "@opentelemetry/api-logs";
144
+
145
+ // src/observability-sdk/logger/implementation.ts
146
+ import { context } from "@opentelemetry/api";
147
+ var LangWatchLoggerInternal = class {
148
+ constructor(logger) {
149
+ this.logger = logger;
150
+ }
151
+ emit(logRecord, options) {
152
+ if (!shouldCaptureOutput()) {
153
+ logRecord.body = void 0;
154
+ }
155
+ if (!logRecord.context && !(options == null ? void 0 : options.excludeContext)) {
156
+ logRecord.context = context.active();
157
+ }
158
+ this.logger.emit(logRecord);
159
+ }
160
+ emitGenAISystemMessageEvent(body, system, attributes) {
161
+ var _a;
162
+ this.emitGenAIEvent(
163
+ LOG_EVNT_GEN_AI_SYSTEM_MESSAGE,
164
+ __spreadProps(__spreadValues({}, body), { role: (_a = body.role) != null ? _a : "system" }),
165
+ __spreadProps(__spreadValues({}, attributes), {
166
+ "gen_ai.system": system
167
+ })
168
+ );
169
+ }
170
+ emitGenAIUserMessageEvent(body, system, attributes) {
171
+ var _a;
172
+ this.emitGenAIEvent(
173
+ LOG_EVNT_GEN_AI_USER_MESSAGE,
174
+ __spreadProps(__spreadValues({}, body), { role: (_a = body.role) != null ? _a : "user" }),
175
+ __spreadProps(__spreadValues({}, attributes), {
176
+ "gen_ai.system": system
177
+ })
178
+ );
179
+ }
180
+ emitGenAIAssistantMessageEvent(body, system, attributes) {
181
+ var _a;
182
+ this.emitGenAIEvent(
183
+ LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE,
184
+ __spreadProps(__spreadValues({}, body), { role: (_a = body.role) != null ? _a : "assistant" }),
185
+ __spreadProps(__spreadValues({}, attributes), {
186
+ "gen_ai.system": system
187
+ })
188
+ );
189
+ }
190
+ emitGenAIToolMessageEvent(body, system, attributes) {
191
+ if (body.role === void 0) {
192
+ body.role = "tool";
193
+ }
194
+ this.emitGenAIEvent(
195
+ LOG_EVNT_GEN_AI_TOOL_MESSAGE,
196
+ __spreadValues({}, body),
197
+ __spreadProps(__spreadValues({}, attributes), {
198
+ "gen_ai.system": system
199
+ })
200
+ );
201
+ }
202
+ emitGenAIChoiceEvent(body, system, attributes) {
203
+ var _a, _b;
204
+ if (body.message && body.message.role === void 0) {
205
+ body.message.role = "assistant";
206
+ }
207
+ this.emitGenAIEvent(
208
+ LOG_EVNT_GEN_AI_CHOICE,
209
+ __spreadProps(__spreadValues({}, body), {
210
+ message: __spreadProps(__spreadValues({}, body.message), { role: (_b = (_a = body.message) == null ? void 0 : _a.role) != null ? _b : "assistant" })
211
+ }),
212
+ __spreadProps(__spreadValues({}, attributes), {
213
+ "gen_ai.system": system
214
+ })
215
+ );
216
+ }
217
+ emitGenAIEvent(eventName, body, attributes) {
218
+ this.emit({
219
+ eventName,
220
+ context: context.active(),
221
+ attributes: __spreadValues({}, attributes),
222
+ body: shouldCaptureOutput() ? body : void 0,
223
+ observedTimestamp: (/* @__PURE__ */ new Date()).getTime()
224
+ });
225
+ }
226
+ };
227
+
228
+ // src/observability-sdk/logger/index.ts
229
+ var currentLoggerProvider = new NoopLoggerProvider();
230
+ function setLangWatchLoggerProvider(loggerProvider) {
231
+ currentLoggerProvider = loggerProvider;
232
+ }
233
+ function getLangWatchLogger(name, version2) {
234
+ return getLangWatchLoggerFromProvider(currentLoggerProvider, name, version2);
235
+ }
236
+ function getLangWatchLoggerFromProvider(loggerProvider, name, version2) {
237
+ return createLangWatchLogger(loggerProvider.getLogger(name, version2));
238
+ }
239
+ function createLangWatchLogger(logger) {
240
+ return new LangWatchLoggerInternal(logger);
241
+ }
242
+
243
+ export {
244
+ version,
245
+ LANGWATCH_SDK_RUNTIME,
246
+ LANGWATCH_SDK_NAME_OBSERVABILITY,
247
+ LANGWATCH_SDK_NAME_CLIENT,
248
+ LANGWATCH_SDK_LANGUAGE,
249
+ LANGWATCH_SDK_VERSION,
250
+ DEFAULT_ENDPOINT,
251
+ DEFAULT_SERVICE_NAME,
252
+ LangWatchTraceExporter,
253
+ LangWatchLogsExporter,
254
+ setLangWatchLoggerProvider,
255
+ getLangWatchLogger,
256
+ getLangWatchLoggerFromProvider
257
+ };
258
+ //# sourceMappingURL=chunk-PGWR3OQY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/observability-sdk/exporters/langwatch-trace-exporter.ts","../package.json","../src/internal/runtime.ts","../src/internal/constants.ts","../src/observability-sdk/exporters/langwatch-logs-exporter.ts","../src/observability-sdk/semconv/events.ts","../src/observability-sdk/logger/index.ts","../src/observability-sdk/logger/implementation.ts"],"sourcesContent":["import { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport {\n LANGWATCH_SDK_LANGUAGE,\n LANGWATCH_SDK_NAME_OBSERVABILITY,\n LANGWATCH_SDK_RUNTIME,\n LANGWATCH_SDK_VERSION,\n TRACES_PATH,\n} from \"../../internal/constants\";\n\nexport interface LangWatchTraceExporterOptions {\n endpoint?: string;\n apiKey?: string;\n includeAllSpans?: boolean;\n debug?: boolean;\n}\n\n/**\n * LangWatchTraceExporter extends the OpenTelemetry OTLP HTTP trace exporter\n * to send trace data to LangWatch with proper authentication and metadata headers.\n *\n * This exporter automatically configures:\n * - Authorization headers using the provided API key or environment variables/fallback\n * - SDK version and language identification headers\n * - Proper endpoint configuration for LangWatch ingestion using provided URL or environment variables/fallback\n *\n * @example\n * ```typescript\n * import { LangWatchTraceExporter } from '@langwatch/observability';\n *\n * // Using environment variables/fallback configuration\n * const exporter = new LangWatchTraceExporter();\n *\n * // Using custom options\n * const exporter = new LangWatchTraceExporter({\n * apiKey: 'your-api-key',\n * endpoint: 'https://custom.langwatch.com'\n * });\n * ```\n */\nexport class LangWatchTraceExporter extends OTLPTraceExporter {\n /**\n * Creates a new LangWatchExporter instance.\n *\n * @param opts - Optional configuration options for the exporter\n * @param opts.apiKey - Optional API key for LangWatch authentication. If not provided,\n * will use environment variables or fallback configuration.\n * @param opts.endpoint - Optional custom endpoint URL for LangWatch ingestion.\n * If not provided, will use environment variables or fallback configuration.\n * @param opts.includeAllSpans - Deprecated: This option is deprecated and will be removed in a future version\n * @param opts.debug - Deprecated: This option is deprecated and will be removed in a future version\n */\n constructor(opts?: LangWatchTraceExporterOptions) {\n const apiKey = opts?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint =\n opts?.endpoint ??\n process.env.LANGWATCH_ENDPOINT ??\n \"https://app.langwatch.ai\";\n\n if (opts && opts.includeAllSpans !== void 0) {\n console.warn(\n \"[LangWatchExporter] The behavior of `includeAllSpans` is deprecated and will be removed in a future version\",\n );\n }\n if (opts && opts.debug !== void 0) {\n console.warn(\n \"[LangWatchExporter] The behavior of `debug` is deprecated and will be removed in a future version\",\n );\n }\n\n const url = new URL(TRACES_PATH, endpoint);\n const otelEndpoint = url.toString();\n\n super({\n headers: {\n \"x-langwatch-sdk-name\": LANGWATCH_SDK_NAME_OBSERVABILITY,\n \"x-langwatch-sdk-language\": LANGWATCH_SDK_LANGUAGE,\n \"x-langwatch-sdk-version\": LANGWATCH_SDK_VERSION,\n \"x-langwatch-sdk-runtime\": LANGWATCH_SDK_RUNTIME(),\n ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n },\n url: otelEndpoint.toString(),\n });\n }\n}\n","{\n \"name\": \"langwatch\",\n \"version\": \"0.4.0\",\n \"description\": \"\",\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"bin\": {\n \"langwatch\": \"./dist/cli/index.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./observability\": {\n \"types\": \"./dist/observability-sdk/index.d.ts\",\n \"require\": \"./dist/observability-sdk/index.js\",\n \"import\": \"./dist/observability-sdk/index.mjs\"\n },\n \"./observability/node\": {\n \"types\": \"./dist/observability-sdk/setup/node/index.d.ts\",\n \"require\": \"./dist/observability-sdk/setup/node/index.js\",\n \"import\": \"./dist/observability-sdk/setup/node/index.mjs\"\n },\n \"./observability/instrumentation/langchain\": {\n \"types\": \"./dist/observability-sdk/instrumentation/langchain/index.d.ts\",\n \"require\": \"./dist/observability-sdk/instrumentation/langchain/index.js\",\n \"import\": \"./dist/observability-sdk/instrumentation/langchain/index.mjs\"\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/langwatch/langwatch.git\",\n \"directory\": \"typescript-sdk\"\n },\n \"scripts\": {\n \"prepare\": \"pnpm run generate:server-types && pnpm run generate:openapi-types\",\n \"lint\": \"eslint .\",\n \"test\": \"vitest\",\n \"test:e2e\": \"vitest run -c ./vitest.e2e.config.mts\",\n \"prebuild\": \"pnpm run prepare\",\n \"build\": \"tsgo --noEmit && tsup\",\n \"typecheck\": \"tsgo --noEmit\",\n \"prepublish\": \"pnpm run build\",\n \"generate:openapi-types\": \"npx openapi-typescript ../langwatch/src/app/api/openapiLangWatch.json -o ./src/internal/generated/openapi/api-client.ts\",\n \"generate:server-types\": \"./copy-types.sh\"\n },\n \"author\": \"LangWatch\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=20\",\n \"pnpm\": \">=8\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.32.0\",\n \"@opentelemetry/sdk-node\": \">=0.203.0\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-web\": \">=2.0.1\",\n \"@types/debug\": \"^4.1.12\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.1.0\",\n \"@typescript/native-preview\": \"7.0.0-dev.20250804.1\",\n \"@vercel/otel\": \"^1.13.0\",\n \"@vitest/coverage-v8\": \"3.2.4\",\n \"esbuild\": \"^0.25.8\",\n \"eslint\": \"^9.32.0\",\n \"fets\": \"^0.8.5\",\n \"fishery\": \"^2.3.1\",\n \"msw\": \"^2.10.4\",\n \"nock\": \"^14.0.8\",\n \"openapi-msw\": \"^1.2.0\",\n \"ts-to-zod\": \"3.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.9.2\",\n \"typescript-eslint\": \"^8.38.0\",\n \"vitest\": \"^3.2.4\"\n },\n \"dependencies\": {\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/api-logs\": \"0.203.0\",\n \"@opentelemetry/core\": \"^2.0.1\",\n \"@opentelemetry/exporter-logs-otlp-http\": \"0.203.0\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"0.203.0\",\n \"@opentelemetry/instrumentation\": \"0.203.0\",\n \"@opentelemetry/resources\": \"^2.0.1\",\n \"@opentelemetry/sdk-logs\": \"0.203.0\",\n \"@opentelemetry/sdk-metrics\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-base\": \"^2.0.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.36.0\",\n \"@types/prompts\": \"^2.4.9\",\n \"chalk\": \"^4.1.2\",\n \"commander\": \"^12.0.0\",\n \"dotenv\": \"^16.6.1\",\n \"js-yaml\": \"^4.1.0\",\n \"liquidjs\": \"^10.21.1\",\n \"open\": \"^10.2.0\",\n \"openapi-fetch\": \"^0.14.0\",\n \"ora\": \"^5.4.1\",\n \"prompts\": \"^2.4.2\",\n \"xksuid\": \"^0.0.4\",\n \"zod\": \"^4.0.14\"\n },\n \"peerDependencies\": {\n \"@ai-sdk/openai\": \">=2.0.0 <3.0.0\",\n \"@langchain/core\": \">=0.3.0 <1.0.0\",\n \"@langchain/langgraph\": \">=0.4.0 <1.0.0\",\n \"@langchain/openai\": \">=0.6.0 <1.0.0\",\n \"langchain\": \">=0.3.0 <1.0.0\",\n \"@opentelemetry/context-async-hooks\": \">=1.19.0 <2.0.0\",\n \"@opentelemetry/context-zone\": \">=1.19.0 <2.0.0\",\n \"@opentelemetry/sdk-node\": \">=0.200.0 <1.0.0\",\n \"@opentelemetry/sdk-trace-web\": \">=1.19.0 <3.0.0\"\n }\n}\n","export type JsRuntime = \"node\" | \"deno\" | \"bun\" | \"web\" | \"unknown\";\n\nlet _runtime: JsRuntime | undefined;\n\n/**\n * Gets the cached JavaScript runtime environment.\n * @returns The detected runtime environment\n */\nexport const getRuntime = (): JsRuntime => {\n _runtime ??= detectRuntime();\n return _runtime;\n};\n\n/**\n * Resets the cached runtime. Only used for testing.\n * @internal\n */\nexport const resetRuntimeCache = (): void => {\n _runtime = undefined;\n};\n\n/**\n * Detects the JavaScript runtime environment.\n * @param globals - (Test only) Optionally override the global object for environment simulation. Only used if NODE_ENV === 'test'.\n */\nexport function detectRuntime(globals?: any): JsRuntime {\n let g = globalThis;\n if (globals) {\n if (process.env.NODE_ENV === \"test\") {\n g = globals;\n } else {\n console.warn(\"[LangWatch Observability] overriding detectRuntime is only supported when running in NODE_ENV=test\");\n }\n }\n\n try {\n if (\n \"Deno\" in g &&\n typeof g.Deno === \"object\" &&\n g.Deno &&\n 'version' in g.Deno &&\n typeof g.Deno.version === \"object\"\n ) {\n return \"deno\";\n }\n if (\n \"Bun\" in g &&\n typeof g.Bun === \"object\" &&\n g.Bun &&\n 'version' in g.Bun &&\n typeof g.Bun.version === \"string\"\n ) {\n return \"bun\";\n }\n if (\n \"process\" in g &&\n typeof g.process === \"object\" &&\n g.process &&\n typeof g.process.versions === \"object\" &&\n typeof g.process.versions.node === \"string\"\n ) {\n return \"node\";\n }\n if (\n typeof g.window?.document !== \"undefined\" &&\n g === g.window\n ) {\n return \"web\";\n }\n return \"unknown\";\n } catch (error) {\n console.warn(\"[LangWatch Observability] Failed to detect runtime\", error);\n return \"unknown\";\n }\n}\n","import { version } from \"../../package.json\";\nimport { getRuntime } from \"./runtime\";\n\nexport const LANGWATCH_SDK_RUNTIME = getRuntime;\n\nexport const LANGWATCH_SDK_NAME_OBSERVABILITY = \"langwatch-observability-sdk\";\nexport const LANGWATCH_SDK_NAME_CLIENT = \"langwatch-client-sdk\";\nexport const LANGWATCH_SDK_LANGUAGE = \"typescript\";\nexport const LANGWATCH_SDK_VERSION = version;\n\nexport const DEFAULT_ENDPOINT = \"https://app.langwatch.ai/\";\nexport const DEFAULT_SERVICE_NAME = \"unknown-service.langwatch\";\n\nexport const TRACES_PATH = \"/api/otel/v1/traces\";\nexport const LOGS_PATH = \"/api/otel/v1/logs\";\nexport const METRICS_PATH = \"/api/otel/v1/metrics\";\n","import { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-http\";\nimport {\n LANGWATCH_SDK_LANGUAGE,\n LANGWATCH_SDK_NAME_OBSERVABILITY,\n LANGWATCH_SDK_RUNTIME,\n LANGWATCH_SDK_VERSION,\n LOGS_PATH,\n} from \"../../internal/constants\";\n\nexport interface LangWatchLogsExporterOptions {\n endpoint?: string;\n apiKey?: string;\n}\n\n/**\n * LangWatchLogsExporter extends the OpenTelemetry OTLP HTTP logs exporter\n * to send logs to LangWatch with proper authentication and metadata headers.\n *\n * This exporter automatically configures:\n * - Authorization headers using the provided API key or environment variables/fallback\n * - SDK version and language identification headers\n * - Proper endpoint configuration for LangWatch ingestion using provided URL or environment variables/fallback\n *\n * @example\n * ```typescript\n * import { LangWatchLogsExporter } from '@langwatch/observability';\n *\n * // Using environment variables/fallback configuration\n * const exporter = new LangWatchLogsExporter();\n *\n * // Using custom options\n * const exporter = new LangWatchLogsExporter({\n * apiKey: 'your-api-key',\n * endpoint: 'https://custom.langwatch.com'\n * });\n * ```\n */\nexport class LangWatchLogsExporter extends OTLPLogExporter {\n /**\n * Creates a new LangWatchLogsExporter instance.\n *\n * @param opts - Optional configuration options for the exporter.\n * @param opts.apiKey - Optional API key for LangWatch authentication. If not provided,\n * will use environment variables or fallback configuration.\n * @param opts.endpoint - Optional custom endpoint URL for LangWatch ingestion.\n * If not provided, will use environment variables or fallback configuration.\n */\n constructor(opts?: LangWatchLogsExporterOptions) {\n const apiKey = opts?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint =\n opts?.endpoint ??\n process.env.LANGWATCH_ENDPOINT ??\n \"https://app.langwatch.ai\";\n\n const url = new URL(LOGS_PATH, endpoint);\n const otelEndpoint = url.toString();\n\n super({\n headers: {\n \"x-langwatch-sdk-name\": LANGWATCH_SDK_NAME_OBSERVABILITY,\n \"x-langwatch-sdk-language\": LANGWATCH_SDK_LANGUAGE,\n \"x-langwatch-sdk-version\": LANGWATCH_SDK_VERSION,\n \"x-langwatch-sdk-runtime\": LANGWATCH_SDK_RUNTIME(),\n ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n },\n url: otelEndpoint.toString(),\n });\n }\n}\n","/*\n This file contains the values for the OpenTelemetry semantic conventions for GenAI log\n record event names.\n\n 👉 https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/\n*/\n\n/**\n * GenAI system message event name\n * Used for log records representing system messages in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_SYSTEM_MESSAGE = \"gen.ai.system_message\";\n\n/**\n * GenAI user message event name\n * Used for log records representing user messages in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_USER_MESSAGE = \"gen.ai.user_message\";\n\n/**\n * GenAI assistant message event name\n * Used for log records representing assistant responses in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE = \"gen.ai.assistant_message\";\n\n/**\n * GenAI tool message event name\n * Used for log records representing tool calls or responses in AI conversations\n */\nexport const LOG_EVNT_GEN_AI_TOOL_MESSAGE = \"gen.ai.tool_message\";\n\n/**\n * GenAI choice event name\n * Used for log records representing choices made by AI models\n */\nexport const LOG_EVNT_GEN_AI_CHOICE = \"gen.ai.choice\";\n\n/**\n * LangWatch LangChain callback event name\n * Used for log records representing LangChain callback events\n */\nexport const EVNT_LANGWATCH_LANGCHAIN_CALLBACK = \"langwatch.langchain.callback\";\n","import {\n type Logger,\n type LoggerProvider,\n NoopLoggerProvider,\n} from \"@opentelemetry/api-logs\";\nimport {\n type LangWatchLogger,\n} from \"./types\";\nimport { LangWatchLoggerInternal } from \"./implementation\";\n\n/**\n * The LangWatch-specific global logger provider. It may not be the same as the current\n * OpenTelemetry global logger provider, but it's the last one the `setupObservability`\n * knows about.\n * @internal\n */\nlet currentLoggerProvider: LoggerProvider = new NoopLoggerProvider();\n\n/**\n * @module observability/logger\n * @description\n * Provides LangWatch logger integration with OpenTelemetry, including logger provider\n * management and logger creation utilities.\n *\n * @remarks\n * This module allows you to set a global logger provider, retrieve LangWatch loggers,\n * and wrap OpenTelemetry loggers with LangWatch-specific functionality.\n *\n * @see {@link setLangWatchLoggerProvider}\n * @see {@link getLangWatchLogger}\n * @see {@link getLangWatchLoggerFromProvider}\n * @see {@link createLangWatchLogger}\n */\nexport function setLangWatchLoggerProvider(\n loggerProvider: LoggerProvider,\n): void {\n currentLoggerProvider = loggerProvider;\n}\n\n/**\n * Retrieves a LangWatch logger with the specified name and optional version.\n *\n * @param name - The name of the logger (typically your service or module name).\n * @param version - (Optional) The version of the logger.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @remarks\n * Uses the logger provider set during observability setup. If no provider is set, returns\n * a NoOp logger.\n *\n * @example\n * ```ts\n * const logger = getLangWatchLogger(\"my-service\");\n * logger.info(\"Service started\");\n * ```\n *\n * @see {@link setLangWatchLoggerProvider}\n */\nexport function getLangWatchLogger(\n name: string,\n version?: string,\n): LangWatchLogger {\n return getLangWatchLoggerFromProvider(currentLoggerProvider, name, version);\n}\n\n/**\n * Retrieves a LangWatch logger from a specific OpenTelemetry logger provider.\n *\n * @param loggerProvider - The OpenTelemetry logger provider to use.\n * @param name - The name of the logger.\n * @param version - (Optional) The version of the logger.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @remarks\n * Use this function if you want to use a custom logger provider instead of the global one.\n *\n * @example\n * ```ts\n * const customProvider = new LoggerProvider();\n * const logger = getLangWatchLoggerFromProvider(customProvider, \"custom-service\");\n * ```\n */\nexport function getLangWatchLoggerFromProvider(\n loggerProvider: LoggerProvider,\n name: string,\n version?: string,\n): LangWatchLogger {\n return createLangWatchLogger(loggerProvider.getLogger(name, version));\n}\n\n/**\n * Wraps an OpenTelemetry logger as a LangWatch logger.\n *\n * @param logger - The OpenTelemetry logger to wrap.\n * @returns A {@link LangWatchLogger} instance.\n *\n * @example\n * ```ts\n * import { Logger } from \"@opentelemetry/api-logs\";\n * const otelLogger = new Logger();\n * const lwLogger = createLangWatchLogger(otelLogger);\n * lwLogger.info(\"Wrapped logger\");\n * ```\n */\nexport function createLangWatchLogger(logger: Logger): LangWatchLogger {\n return new LangWatchLoggerInternal(logger);\n}\n\n// Export types and implementation\nexport * from \"./types\";\nexport * from \"./implementation\";\n","import {\n type AnyValue,\n type Logger,\n} from \"@opentelemetry/api-logs\";\nimport {\n type EmitOptions,\n type LangWatchLogger,\n type LangWatchLogRecord,\n type LangWatchSpanGenAIAssistantMessageEventBody,\n type LangWatchSpanGenAIChoiceEventBody,\n type LangWatchSpanGenAISystemMessageEventBody,\n type LangWatchSpanGenAIToolMessageEventBody,\n type LangWatchSpanGenAIUserMessageEventBody,\n} from \"./types\";\nimport { shouldCaptureOutput } from \"../config\";\nimport * as intSemconv from \"../semconv\";\nimport { type SemConvLogRecordAttributes } from \"../semconv\";\nimport { context } from \"@opentelemetry/api\";\n\n/**\n * Internal implementation of {@link LangWatchLogger}.\n *\n * @remarks\n * This class wraps an OpenTelemetry logger and adds LangWatch-specific functionality for\n * structured logging and event emission.\n * Not intended for direct use; use {@link getLangWatchLogger} or\n * {@link createLangWatchLogger} instead.\n */\nexport class LangWatchLoggerInternal implements LangWatchLogger {\n constructor(private logger: Logger) {}\n\n emit(logRecord: LangWatchLogRecord, options?: EmitOptions): void {\n // Handle output capture configuration\n if (!shouldCaptureOutput()) {\n logRecord.body = void 0;\n }\n\n // Set context if not provided and not explicitly excluded\n if (!logRecord.context && !options?.excludeContext) {\n logRecord.context = context.active();\n }\n\n // Emit the log record through the underlying OpenTelemetry logger\n this.logger.emit(logRecord);\n }\n\n emitGenAISystemMessageEvent(\n body: LangWatchSpanGenAISystemMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ): void {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_SYSTEM_MESSAGE,\n { ...body, role: body.role ?? \"system\" } satisfies LangWatchSpanGenAISystemMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIUserMessageEvent(\n body: LangWatchSpanGenAIUserMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_USER_MESSAGE,\n { ...body, role: body.role ?? \"user\" } satisfies LangWatchSpanGenAIUserMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIAssistantMessageEvent(\n body: LangWatchSpanGenAIAssistantMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE,\n { ...body, role: body.role ?? \"assistant\" } satisfies LangWatchSpanGenAIAssistantMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIToolMessageEvent(\n body: LangWatchSpanGenAIToolMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n if (body.role === void 0) {\n body.role = \"tool\";\n }\n\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_TOOL_MESSAGE,\n { ...body },\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIChoiceEvent(\n body: LangWatchSpanGenAIChoiceEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n if (body.message && body.message.role === void 0) {\n body.message.role = \"assistant\";\n }\n\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_CHOICE,\n {\n ...body,\n message: { ...body.message, role: body.message?.role ?? \"assistant\" },\n } satisfies LangWatchSpanGenAIChoiceEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n private emitGenAIEvent(\n eventName: string,\n body: AnyValue,\n attributes?: SemConvLogRecordAttributes,\n ): void {\n this.emit({\n eventName,\n context: context.active(),\n attributes: { ...attributes },\n body: shouldCaptureOutput() ? body : void 0,\n observedTimestamp: new Date().getTime(),\n });\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,yBAAyB;;;ACEhC,cAAW;;;ACAb,IAAI;AAMG,IAAM,aAAa,MAAiB;AACzC,2CAAa,cAAc;AAC3B,SAAO;AACT;AAcO,SAAS,cAAc,SAA0B;AAzBxD;AA0BE,MAAI,IAAI;AACR,MAAI,SAAS;AACX,QAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,UAAI;AAAA,IACN,OAAO;AACL,cAAQ,KAAK,oGAAoG;AAAA,IACnH;AAAA,EACF;AAEA,MAAI;AACF,QACE,UAAU,KACV,OAAO,EAAE,SAAS,YAClB,EAAE,QACF,aAAa,EAAE,QACf,OAAO,EAAE,KAAK,YAAY,UAC1B;AACA,aAAO;AAAA,IACT;AACA,QACE,SAAS,KACT,OAAO,EAAE,QAAQ,YACjB,EAAE,OACF,aAAa,EAAE,OACf,OAAO,EAAE,IAAI,YAAY,UACzB;AACA,aAAO;AAAA,IACT;AACA,QACE,aAAa,KACb,OAAO,EAAE,YAAY,YACrB,EAAE,WACF,OAAO,EAAE,QAAQ,aAAa,YAC9B,OAAO,EAAE,QAAQ,SAAS,SAAS,UACnC;AACA,aAAO;AAAA,IACT;AACA,QACE,SAAO,OAAE,WAAF,mBAAU,cAAa,eAC9B,MAAM,EAAE,QACR;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,KAAK,sDAAsD,KAAK;AACxE,WAAO;AAAA,EACT;AACF;;;ACvEO,IAAM,wBAAwB;AAE9B,IAAM,mCAAmC;AACzC,IAAM,4BAA4B;AAClC,IAAM,yBAAyB;AAC/B,IAAM,wBAAwB;AAE9B,IAAM,mBAAmB;AACzB,IAAM,uBAAuB;AAE7B,IAAM,cAAc;AACpB,IAAM,YAAY;;;AHyBlB,IAAM,yBAAN,cAAqC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY5D,YAAY,MAAsC;AAnDpD;AAoDI,UAAM,UAAS,wCAAM,WAAN,YAAgB,QAAQ,IAAI,sBAA5B,YAAiD;AAChE,UAAM,YACJ,wCAAM,aAAN,YACA,QAAQ,IAAI,uBADZ,YAEA;AAEF,QAAI,QAAQ,KAAK,oBAAoB,QAAQ;AAC3C,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,KAAK,UAAU,QAAQ;AACjC,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,IAAI,IAAI,aAAa,QAAQ;AACzC,UAAM,eAAe,IAAI,SAAS;AAElC,UAAM;AAAA,MACJ,SAAS;AAAA,QACP,wBAAwB;AAAA,QACxB,4BAA4B;AAAA,QAC5B,2BAA2B;AAAA,QAC3B,2BAA2B,sBAAsB;AAAA,SAC7C,SAAS,EAAE,eAAe,UAAU,MAAM,GAAG,IAAI,CAAC;AAAA,MAExD,KAAK,aAAa,SAAS;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;;;AInFA,SAAS,uBAAuB;AAqCzB,IAAM,wBAAN,cAAoC,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUzD,YAAY,MAAqC;AA/CnD;AAgDI,UAAM,UAAS,wCAAM,WAAN,YAAgB,QAAQ,IAAI,sBAA5B,YAAiD;AAChE,UAAM,YACJ,wCAAM,aAAN,YACA,QAAQ,IAAI,uBADZ,YAEA;AAEF,UAAM,MAAM,IAAI,IAAI,WAAW,QAAQ;AACvC,UAAM,eAAe,IAAI,SAAS;AAElC,UAAM;AAAA,MACJ,SAAS;AAAA,QACP,wBAAwB;AAAA,QACxB,4BAA4B;AAAA,QAC5B,2BAA2B;AAAA,QAC3B,2BAA2B,sBAAsB;AAAA,SAC7C,SAAS,EAAE,eAAe,UAAU,MAAM,GAAG,IAAI,CAAC;AAAA,MAExD,KAAK,aAAa,SAAS;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;;;ACzDO,IAAM,iCAAiC;AAMvC,IAAM,+BAA+B;AAMrC,IAAM,oCAAoC;AAM1C,IAAM,+BAA+B;AAMrC,IAAM,yBAAyB;;;ACnCtC;AAAA,EAGE;AAAA,OACK;;;ACaP,SAAS,eAAe;AAWjB,IAAM,0BAAN,MAAyD;AAAA,EAC9D,YAAoB,QAAgB;AAAhB;AAAA,EAAiB;AAAA,EAErC,KAAK,WAA+B,SAA6B;AAE/D,QAAI,CAAC,oBAAoB,GAAG;AAC1B,gBAAU,OAAO;AAAA,IACnB;AAGA,QAAI,CAAC,UAAU,WAAW,EAAC,mCAAS,iBAAgB;AAClD,gBAAU,UAAU,QAAQ,OAAO;AAAA,IACrC;AAGA,SAAK,OAAO,KAAK,SAAS;AAAA,EAC5B;AAAA,EAEA,4BACE,MACA,QACA,YACM;AAlDV;AAmDI,SAAK;AAAA,MACQ;AAAA,MACX,iCAAK,OAAL,EAAW,OAAM,UAAK,SAAL,YAAa,SAAS;AAAA,MACvC,iCACK,aADL;AAAA,QAEE,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,0BACE,MACA,QACA,YACA;AAjEJ;AAkEI,SAAK;AAAA,MACQ;AAAA,MACX,iCAAK,OAAL,EAAW,OAAM,UAAK,SAAL,YAAa,OAAO;AAAA,MACrC,iCACK,aADL;AAAA,QAEE,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,+BACE,MACA,QACA,YACA;AAhFJ;AAiFI,SAAK;AAAA,MACQ;AAAA,MACX,iCAAK,OAAL,EAAW,OAAM,UAAK,SAAL,YAAa,YAAY;AAAA,MAC1C,iCACK,aADL;AAAA,QAEE,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,0BACE,MACA,QACA,YACA;AACA,QAAI,KAAK,SAAS,QAAQ;AACxB,WAAK,OAAO;AAAA,IACd;AAEA,SAAK;AAAA,MACQ;AAAA,MACX,mBAAK;AAAA,MACL,iCACK,aADL;AAAA,QAEE,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBACE,MACA,QACA,YACA;AAlHJ;AAmHI,QAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,QAAQ;AAChD,WAAK,QAAQ,OAAO;AAAA,IACtB;AAEA,SAAK;AAAA,MACQ;AAAA,MACX,iCACK,OADL;AAAA,QAEE,SAAS,iCAAK,KAAK,UAAV,EAAmB,OAAM,gBAAK,YAAL,mBAAc,SAAd,YAAsB,YAAY;AAAA,MACtE;AAAA,MACA,iCACK,aADL;AAAA,QAEE,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eACN,WACA,MACA,YACM;AACN,SAAK,KAAK;AAAA,MACR;AAAA,MACA,SAAS,QAAQ,OAAO;AAAA,MACxB,YAAY,mBAAK;AAAA,MACjB,MAAM,oBAAoB,IAAI,OAAO;AAAA,MACrC,oBAAmB,oBAAI,KAAK,GAAE,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AACF;;;ADjIA,IAAI,wBAAwC,IAAI,mBAAmB;AAiB5D,SAAS,2BACd,gBACM;AACN,0BAAwB;AAC1B;AAqBO,SAAS,mBACd,MACAA,UACiB;AACjB,SAAO,+BAA+B,uBAAuB,MAAMA,QAAO;AAC5E;AAmBO,SAAS,+BACd,gBACA,MACAA,UACiB;AACjB,SAAO,sBAAsB,eAAe,UAAU,MAAMA,QAAO,CAAC;AACtE;AAgBO,SAAS,sBAAsB,QAAiC;AACrE,SAAO,IAAI,wBAAwB,MAAM;AAC3C;","names":["version"]}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/prompt/converter.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/cli/utils/promptConverter.ts
2
2
  var PromptConverter = class {
3
3
  /**
4
4
  * Converts a Prompt instance from the API service to the MaterializedPrompt format
@@ -97,4 +97,4 @@ var PromptConverter = class {
97
97
 
98
98
 
99
99
  exports.PromptConverter = PromptConverter;
100
- //# sourceMappingURL=chunk-SMXXAVMB.js.map
100
+ //# sourceMappingURL=chunk-SGNJDRCT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-SGNJDRCT.js","../src/cli/utils/promptConverter.ts"],"names":["_a"],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-SGNJDRCT.js","sourcesContent":[null,"import type { Prompt } from \"@/client-sdk/services/prompts/prompt\";\nimport type { LocalPromptConfig, MaterializedPrompt } from \"../types\";\n\n/**\n * Converter utility for transforming between YAML prompt format and API service format.\n *\n * The YAML format follows the GitHub .prompt.yaml file format standard,\n * while the API format is our internal prompt service schema tied to the database.\n *\n * This separation allows us to maintain and evolve both formats independently\n * while keeping the conversion logic centralized and well-tested.\n */\nexport class PromptConverter {\n /**\n * Converts a Prompt instance from the API service to the MaterializedPrompt format\n * used for saving to the .materialized directory.\n */\n static fromApiToMaterialized(prompt: Prompt): MaterializedPrompt {\n return {\n id: prompt.id,\n name: prompt.name,\n version: prompt.version,\n versionId: prompt.versionId,\n model: prompt.model,\n messages: prompt.messages,\n prompt: prompt.prompt,\n updatedAt: prompt.updatedAt,\n versionCreatedAt: prompt.versionCreatedAt,\n };\n }\n\n /**\n * Converts a MaterializedPrompt to the YAML content structure\n * for saving to .prompt.yaml files.\n */\n static fromMaterializedToYaml(prompt: MaterializedPrompt): {\n model: string;\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>;\n } {\n return {\n model: prompt.model,\n messages: prompt.messages,\n };\n }\n\n /**\n * Converts a LocalPromptConfig (loaded from YAML) to the format\n * expected by the API service for upserting.\n */\n static fromLocalToApiFormat(config: LocalPromptConfig): {\n model: string;\n modelParameters?: {\n temperature?: number;\n max_tokens?: number;\n };\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>;\n } {\n return {\n model: config.model,\n modelParameters: config.modelParameters,\n messages: config.messages,\n };\n }\n\n /**\n * Extracts the system prompt from messages array.\n * Used when converting to API format that separates system prompt from messages.\n */\n static extractSystemPrompt(messages: Array<{ role: string; content: string }>): string {\n return messages.find(m => m.role === \"system\")?.content || \"\";\n }\n\n /**\n * Filters out system messages from the messages array.\n * Used when converting to API format that handles system prompt separately.\n */\n static filterNonSystemMessages(messages: Array<{ role: string; content: string }>) {\n return messages.filter(m => m.role !== \"system\");\n }\n\n /**\n * Converts version specification strings to actual version constraints.\n * Handles npm-style version specs like \"latest\", \"5\", \"^5\", etc.\n */\n static parseVersionSpec(versionSpec: string): {\n type: \"latest\" | \"exact\" | \"tag\";\n value: string;\n } {\n if (versionSpec === \"latest\") {\n return { type: \"latest\", value: \"latest\" };\n }\n\n // For now, treat everything else as tags until we implement proper semver\n if (/^\\d+$/.test(versionSpec)) {\n return { type: \"exact\", value: versionSpec };\n }\n\n // Handle prefixes like ^, ~, etc. as tags for now\n return { type: \"tag\", value: versionSpec };\n }\n\n /**\n * Validates that a YAML config can be safely converted to API format.\n * Returns validation errors if any, or null if valid.\n */\n static validateForApiConversion(config: LocalPromptConfig): string[] {\n const errors: string[] = [];\n\n if (!config.model?.trim()) {\n errors.push(\"Model is required and cannot be empty\");\n }\n\n if (!config.messages || config.messages.length === 0) {\n errors.push(\"At least one message is required\");\n }\n\n if (config.messages) {\n config.messages.forEach((message, index) => {\n if (![\"system\", \"user\", \"assistant\"].includes(message.role)) {\n errors.push(`Message ${index}: role must be 'system', 'user', or 'assistant'`);\n }\n if (!message.content?.trim()) {\n errors.push(`Message ${index}: content cannot be empty`);\n }\n });\n }\n\n return errors;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- // src/prompt/converter.ts
1
+ // src/cli/utils/promptConverter.ts
2
2
  var PromptConverter = class {
3
3
  /**
4
4
  * Converts a Prompt instance from the API service to the MaterializedPrompt format
@@ -97,4 +97,4 @@ var PromptConverter = class {
97
97
  export {
98
98
  PromptConverter
99
99
  };
100
- //# sourceMappingURL=chunk-W5ZEP3CI.mjs.map
100
+ //# sourceMappingURL=chunk-SYMZPWZE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/utils/promptConverter.ts"],"sourcesContent":["import type { Prompt } from \"@/client-sdk/services/prompts/prompt\";\nimport type { LocalPromptConfig, MaterializedPrompt } from \"../types\";\n\n/**\n * Converter utility for transforming between YAML prompt format and API service format.\n *\n * The YAML format follows the GitHub .prompt.yaml file format standard,\n * while the API format is our internal prompt service schema tied to the database.\n *\n * This separation allows us to maintain and evolve both formats independently\n * while keeping the conversion logic centralized and well-tested.\n */\nexport class PromptConverter {\n /**\n * Converts a Prompt instance from the API service to the MaterializedPrompt format\n * used for saving to the .materialized directory.\n */\n static fromApiToMaterialized(prompt: Prompt): MaterializedPrompt {\n return {\n id: prompt.id,\n name: prompt.name,\n version: prompt.version,\n versionId: prompt.versionId,\n model: prompt.model,\n messages: prompt.messages,\n prompt: prompt.prompt,\n updatedAt: prompt.updatedAt,\n versionCreatedAt: prompt.versionCreatedAt,\n };\n }\n\n /**\n * Converts a MaterializedPrompt to the YAML content structure\n * for saving to .prompt.yaml files.\n */\n static fromMaterializedToYaml(prompt: MaterializedPrompt): {\n model: string;\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>;\n } {\n return {\n model: prompt.model,\n messages: prompt.messages,\n };\n }\n\n /**\n * Converts a LocalPromptConfig (loaded from YAML) to the format\n * expected by the API service for upserting.\n */\n static fromLocalToApiFormat(config: LocalPromptConfig): {\n model: string;\n modelParameters?: {\n temperature?: number;\n max_tokens?: number;\n };\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>;\n } {\n return {\n model: config.model,\n modelParameters: config.modelParameters,\n messages: config.messages,\n };\n }\n\n /**\n * Extracts the system prompt from messages array.\n * Used when converting to API format that separates system prompt from messages.\n */\n static extractSystemPrompt(messages: Array<{ role: string; content: string }>): string {\n return messages.find(m => m.role === \"system\")?.content || \"\";\n }\n\n /**\n * Filters out system messages from the messages array.\n * Used when converting to API format that handles system prompt separately.\n */\n static filterNonSystemMessages(messages: Array<{ role: string; content: string }>) {\n return messages.filter(m => m.role !== \"system\");\n }\n\n /**\n * Converts version specification strings to actual version constraints.\n * Handles npm-style version specs like \"latest\", \"5\", \"^5\", etc.\n */\n static parseVersionSpec(versionSpec: string): {\n type: \"latest\" | \"exact\" | \"tag\";\n value: string;\n } {\n if (versionSpec === \"latest\") {\n return { type: \"latest\", value: \"latest\" };\n }\n\n // For now, treat everything else as tags until we implement proper semver\n if (/^\\d+$/.test(versionSpec)) {\n return { type: \"exact\", value: versionSpec };\n }\n\n // Handle prefixes like ^, ~, etc. as tags for now\n return { type: \"tag\", value: versionSpec };\n }\n\n /**\n * Validates that a YAML config can be safely converted to API format.\n * Returns validation errors if any, or null if valid.\n */\n static validateForApiConversion(config: LocalPromptConfig): string[] {\n const errors: string[] = [];\n\n if (!config.model?.trim()) {\n errors.push(\"Model is required and cannot be empty\");\n }\n\n if (!config.messages || config.messages.length === 0) {\n errors.push(\"At least one message is required\");\n }\n\n if (config.messages) {\n config.messages.forEach((message, index) => {\n if (![\"system\", \"user\", \"assistant\"].includes(message.role)) {\n errors.push(`Message ${index}: role must be 'system', 'user', or 'assistant'`);\n }\n if (!message.content?.trim()) {\n errors.push(`Message ${index}: content cannot be empty`);\n }\n });\n }\n\n return errors;\n }\n}\n"],"mappings":";AAYO,IAAM,kBAAN,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3B,OAAO,sBAAsB,QAAoC;AAC/D,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,kBAAkB,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,uBAAuB,QAM5B;AACA,WAAO;AAAA,MACL,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,qBAAqB,QAU1B;AACA,WAAO;AAAA,MACL,OAAO,OAAO;AAAA,MACd,iBAAiB,OAAO;AAAA,MACxB,UAAU,OAAO;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,oBAAoB,UAA4D;AA1EzF;AA2EI,aAAO,cAAS,KAAK,OAAK,EAAE,SAAS,QAAQ,MAAtC,mBAAyC,YAAW;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,wBAAwB,UAAoD;AACjF,WAAO,SAAS,OAAO,OAAK,EAAE,SAAS,QAAQ;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,iBAAiB,aAGtB;AACA,QAAI,gBAAgB,UAAU;AAC5B,aAAO,EAAE,MAAM,UAAU,OAAO,SAAS;AAAA,IAC3C;AAGA,QAAI,QAAQ,KAAK,WAAW,GAAG;AAC7B,aAAO,EAAE,MAAM,SAAS,OAAO,YAAY;AAAA,IAC7C;AAGA,WAAO,EAAE,MAAM,OAAO,OAAO,YAAY;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,yBAAyB,QAAqC;AA/GvE;AAgHI,UAAM,SAAmB,CAAC;AAE1B,QAAI,GAAC,YAAO,UAAP,mBAAc,SAAQ;AACzB,aAAO,KAAK,uCAAuC;AAAA,IACrD;AAEA,QAAI,CAAC,OAAO,YAAY,OAAO,SAAS,WAAW,GAAG;AACpD,aAAO,KAAK,kCAAkC;AAAA,IAChD;AAEA,QAAI,OAAO,UAAU;AACnB,aAAO,SAAS,QAAQ,CAAC,SAAS,UAAU;AA3HlD,YAAAA;AA4HQ,YAAI,CAAC,CAAC,UAAU,QAAQ,WAAW,EAAE,SAAS,QAAQ,IAAI,GAAG;AAC3D,iBAAO,KAAK,WAAW,KAAK,iDAAiD;AAAA,QAC/E;AACA,YAAI,GAACA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB,SAAQ;AAC5B,iBAAO,KAAK,WAAW,KAAK,2BAA2B;AAAA,QACzD;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;","names":["_a"]}
@@ -1,4 +1,8 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/observability/processors/filterable-batch-span-processor.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkDISMHYXCjs = require('./chunk-DISMHYXC.js');
4
+
5
+ // src/observability-sdk/processors/filterable-batch-span-processor.ts
2
6
 
3
7
 
4
8
  var _sdktracebase = require('@opentelemetry/sdk-trace-base');
@@ -44,7 +48,28 @@ var FilterableBatchSpanProcessor = class extends _sdktracebase.BatchSpanProcesso
44
48
  }
45
49
  };
46
50
 
51
+ // src/observability-sdk/features/data-capture/presets.ts
52
+ var DataCapturePresets = {
53
+ /**
54
+ * Capture both input and output - useful for development and debugging.
55
+ */
56
+ CAPTURE_ALL: "all",
57
+ /**
58
+ * Capture nothing - useful for high-security environments.
59
+ */
60
+ CAPTURE_NONE: "none",
61
+ /**
62
+ * Capture only inputs - useful when you want to see what's being sent.
63
+ */
64
+ INPUT_ONLY: "input",
65
+ /**
66
+ * Capture only outputs - useful when you want to see responses.
67
+ */
68
+ OUTPUT_ONLY: "output"
69
+ };
70
+
71
+
47
72
 
48
73
 
49
- exports.FilterableBatchSpanProcessor = FilterableBatchSpanProcessor;
50
- //# sourceMappingURL=chunk-KGDAENGD.js.map
74
+ exports.FilterableBatchSpanProcessor = FilterableBatchSpanProcessor; exports.DataCapturePresets = DataCapturePresets;
75
+ //# sourceMappingURL=chunk-YH5TIVK2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-YH5TIVK2.js","../src/observability-sdk/processors/filterable-batch-span-processor.ts","../src/observability-sdk/features/data-capture/presets.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;ACKA;AACE;AAAA,6DAGK;AAsCA,IAAM,6BAAA,EAAN,MAAA,QAA2C,iCAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnE,WAAA,CAAY,QAAA,EAAwB,OAAA,EAAsC;AACxE,IAAA,KAAA,CAAM,QAAQ,CAAA;AACd,IAAA,IAAA,CAAK,SAAA,EAAW,OAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOS,KAAA,CAAM,IAAA,EAA0B;AACvC,IAAA,IAAA,CAAA,MAAW,OAAA,GAAU,IAAA,CAAK,QAAA,EAAU;AAClC,MAAA,IAAI,WAAA;AAEJ,MAAA,GAAA,CAAI,MAAA,CAAO,UAAA,IAAc,WAAA,EAAa;AACpC,QAAA,YAAA,EAAc,IAAA,CAAK,IAAA;AAAA,MACrB,EAAA,KAAA,GAAA,CAAW,MAAA,CAAO,UAAA,IAAc,4BAAA,EAA8B;AAC5D,QAAA,YAAA,EAAc,IAAA,CAAK,oBAAA,CAAqB,IAAA;AAAA,MAC1C,EAAA,KAAO;AACL,QAAA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,EAAa,MAAA,CAAO,UAAA;AAC1B,MAAA,MAAM,eAAA,EAAiB,MAAA,CAAO,cAAA;AAE9B,MAAA,OAAA,CAAQ,IAAA,EAAM;AAAA,QACZ,KAAA,CAAK,eAAA,IAAmB,cAAA,GAAiB,YAAA,IAAgB,UAAA,CAAA;AAAA,QACzD,KAAA,CAAK,eAAA,IAAmB,WAAA,GAAc,WAAA,CAAY,QAAA,CAAS,UAAU,CAAA,CAAA;AAAA,QACrE,KAAA,CAAK,eAAA,IAAmB,cAAA,GAAiB,WAAA,CAAY,UAAA,CAAW,UAAU,CAAA,CAAA;AAAA,QAC1E,KAAA,CAAK,eAAA,IAAmB,YAAA,GAAe,WAAA,CAAY,QAAA,CAAS,UAAU,CAAA,CAAA;AACpE,UAAA,MAAA;AAAA,QAEF,OAAA;AAAS,UAAA,KAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,EAClB;AACF,CAAA;ADjDA;AACA;AE7CO,IAAM,mBAAA,EAAqB;AAAA;AAAA;AAAA;AAAA,EAIhC,WAAA,EAAa,KAAA;AAAA;AAAA;AAAA;AAAA,EAKb,YAAA,EAAc,MAAA;AAAA;AAAA;AAAA;AAAA,EAKd,UAAA,EAAY,OAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,WAAA,EAAa;AACf,CAAA;AF4CA;AACA;AACE;AACA;AACF,qHAAC","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-YH5TIVK2.js","sourcesContent":[null,"/**\n * Filterable Batch Span Exporter for OpenTelemetry\n *\n * This module provides a BatchSpanProcessor subclass that allows filtering of spans before export\n * based on configurable rules. Spans matching any exclude rule are dropped and not exported.\n *\n * @module filterable-batch-span-exporter\n */\n\nimport {\n BatchSpanProcessor,\n type ReadableSpan,\n type SpanExporter,\n} from '@opentelemetry/sdk-trace-base';\n\n/**\n * A rule for excluding spans from export based on their name or instrumentation scope name.\n *\n * @property fieldName - The span field to match against ('span_name' or 'instrumentation_scope_name').\n * @property matchValue - The value to match against the field.\n * @property matchOperation - The operation to use for matching ('includes', 'exact_match', 'starts_with', 'ends_with').\n *\n * @example\n * const rule: SpanProcessingExcludeRule = {\n * fieldName: 'span_name',\n * matchValue: 'heartbeat',\n * matchOperation: 'exact_match',\n * };\n */\nexport interface SpanProcessingExcludeRule {\n fieldName: \"span_name\" | \"instrumentation_scope_name\";\n matchValue: string;\n matchOperation: \"includes\" | \"exact_match\" | \"starts_with\" | \"ends_with\";\n}\n\n/**\n * A BatchSpanProcessor that filters out spans matching any of the provided exclude rules before export.\n *\n * This is useful for dropping noisy or irrelevant spans (e.g., health checks, heartbeats) from being exported to your tracing backend.\n *\n * @example\n * import { FilterableBatchSpanProcessor } from './filterable-batch-span-exporter';\n * import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\n *\n * const exporter = new OTLPTraceExporter({ url: '...' });\n * const filters = [\n * { fieldName: 'span_name', matchValue: 'heartbeat', matchOperation: 'exact_match' },\n * { fieldName: 'instrumentation_scope_name', matchValue: 'internal', matchOperation: 'starts_with' },\n * ];\n * provider.addSpanProcessor(new FilterableBatchSpanProcessor(exporter, filters));\n */\nexport class FilterableBatchSpanProcessor extends BatchSpanProcessor {\n private readonly _filters: SpanProcessingExcludeRule[];\n\n /**\n * Create a new FilterableBatchSpanProcessor.\n *\n * @param exporter - The underlying SpanExporter to use for exporting spans.\n * @param filters - An array of rules for excluding spans from export.\n */\n constructor(exporter: SpanExporter, filters: SpanProcessingExcludeRule[]) {\n super(exporter);\n this._filters = filters;\n }\n\n /**\n * Called when a span ends. If the span matches any exclude rule, it is dropped and not exported.\n *\n * @param span - The ReadableSpan that has ended.\n */\n override onEnd(span: ReadableSpan): void {\n for (const filter of this._filters) {\n let sourceValue: string;\n\n if (filter.fieldName === \"span_name\") {\n sourceValue = span.name;\n } else if (filter.fieldName === \"instrumentation_scope_name\") {\n sourceValue = span.instrumentationScope.name;\n } else {\n continue;\n }\n\n const matchValue = filter.matchValue;\n const matchOperation = filter.matchOperation;\n\n switch (true) {\n case matchOperation === \"exact_match\" && sourceValue === matchValue:\n case matchOperation === \"includes\" && sourceValue.includes(matchValue):\n case matchOperation === \"starts_with\" && sourceValue.startsWith(matchValue):\n case matchOperation === \"ends_with\" && sourceValue.endsWith(matchValue):\n return;\n\n default: break;\n }\n }\n\n super.onEnd(span);\n }\n}\n","import { type DataCaptureMode } from \"./types\";\n\n/**\n * Predefined data capture configurations for common use cases.\n */\nexport const DataCapturePresets = {\n /**\n * Capture both input and output - useful for development and debugging.\n */\n CAPTURE_ALL: \"all\" as DataCaptureMode,\n\n /**\n * Capture nothing - useful for high-security environments.\n */\n CAPTURE_NONE: \"none\" as DataCaptureMode,\n\n /**\n * Capture only inputs - useful when you want to see what's being sent.\n */\n INPUT_ONLY: \"input\" as DataCaptureMode,\n\n /**\n * Capture only outputs - useful when you want to see responses.\n */\n OUTPUT_ONLY: \"output\" as DataCaptureMode,\n} as const;\n"]}
@@ -0,0 +1,184 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-CU3443HD.mjs";
4
+
5
+ // src/logger/index.ts
6
+ var logLevelOrder = {
7
+ debug: 0,
8
+ info: 1,
9
+ warn: 2,
10
+ error: 3
11
+ };
12
+ var NoOpLogger = class {
13
+ debug() {
14
+ }
15
+ info() {
16
+ }
17
+ warn() {
18
+ }
19
+ error() {
20
+ }
21
+ };
22
+ var ConsoleLogger = class {
23
+ constructor(options = { level: "warn" }) {
24
+ this.level = options.level;
25
+ this.prefix = options.prefix;
26
+ }
27
+ shouldLog(level) {
28
+ return logLevelOrder[level] >= logLevelOrder[this.level];
29
+ }
30
+ format(message) {
31
+ return this.prefix ? `[${this.prefix}] ${message}` : message;
32
+ }
33
+ debug(message, ...args) {
34
+ if (this.shouldLog("debug")) console.debug(this.format(message), ...args);
35
+ }
36
+ info(message, ...args) {
37
+ if (this.shouldLog("info")) console.info(this.format(message), ...args);
38
+ }
39
+ warn(message, ...args) {
40
+ if (this.shouldLog("warn")) console.warn(this.format(message), ...args);
41
+ }
42
+ error(message, ...args) {
43
+ if (this.shouldLog("error")) console.error(this.format(message), ...args);
44
+ }
45
+ };
46
+
47
+ // src/observability-sdk/semconv/attributes.ts
48
+ var attributes_exports = {};
49
+ __export(attributes_exports, {
50
+ ATTR_LANGWATCH_CUSTOMER_ID: () => ATTR_LANGWATCH_CUSTOMER_ID,
51
+ ATTR_LANGWATCH_EVALUATION_CUSTOM: () => ATTR_LANGWATCH_EVALUATION_CUSTOM,
52
+ ATTR_LANGWATCH_INPUT: () => ATTR_LANGWATCH_INPUT,
53
+ ATTR_LANGWATCH_LANGCHAIN_EVENT_NAME: () => ATTR_LANGWATCH_LANGCHAIN_EVENT_NAME,
54
+ ATTR_LANGWATCH_LANGCHAIN_RUN_EXTRA_PARAMS: () => ATTR_LANGWATCH_LANGCHAIN_RUN_EXTRA_PARAMS,
55
+ ATTR_LANGWATCH_LANGCHAIN_RUN_ID: () => ATTR_LANGWATCH_LANGCHAIN_RUN_ID,
56
+ ATTR_LANGWATCH_LANGCHAIN_RUN_METADATA: () => ATTR_LANGWATCH_LANGCHAIN_RUN_METADATA,
57
+ ATTR_LANGWATCH_LANGCHAIN_RUN_PARENT_ID: () => ATTR_LANGWATCH_LANGCHAIN_RUN_PARENT_ID,
58
+ ATTR_LANGWATCH_LANGCHAIN_RUN_TAGS: () => ATTR_LANGWATCH_LANGCHAIN_RUN_TAGS,
59
+ ATTR_LANGWATCH_LANGCHAIN_RUN_TYPE: () => ATTR_LANGWATCH_LANGCHAIN_RUN_TYPE,
60
+ ATTR_LANGWATCH_LANGCHAIN_TAGS: () => ATTR_LANGWATCH_LANGCHAIN_TAGS,
61
+ ATTR_LANGWATCH_METRICS: () => ATTR_LANGWATCH_METRICS,
62
+ ATTR_LANGWATCH_OUTPUT: () => ATTR_LANGWATCH_OUTPUT,
63
+ ATTR_LANGWATCH_PARAMS: () => ATTR_LANGWATCH_PARAMS,
64
+ ATTR_LANGWATCH_PROMPT_HANDLE: () => ATTR_LANGWATCH_PROMPT_HANDLE,
65
+ ATTR_LANGWATCH_PROMPT_ID: () => ATTR_LANGWATCH_PROMPT_ID,
66
+ ATTR_LANGWATCH_PROMPT_SELECTED_ID: () => ATTR_LANGWATCH_PROMPT_SELECTED_ID,
67
+ ATTR_LANGWATCH_PROMPT_VARIABLES: () => ATTR_LANGWATCH_PROMPT_VARIABLES,
68
+ ATTR_LANGWATCH_PROMPT_VERSION_ID: () => ATTR_LANGWATCH_PROMPT_VERSION_ID,
69
+ ATTR_LANGWATCH_PROMPT_VERSION_NUMBER: () => ATTR_LANGWATCH_PROMPT_VERSION_NUMBER,
70
+ ATTR_LANGWATCH_RAG_CONTEXTS: () => ATTR_LANGWATCH_RAG_CONTEXTS,
71
+ ATTR_LANGWATCH_SDK_LANGUAGE: () => ATTR_LANGWATCH_SDK_LANGUAGE,
72
+ ATTR_LANGWATCH_SDK_NAME: () => ATTR_LANGWATCH_SDK_NAME,
73
+ ATTR_LANGWATCH_SDK_VERSION: () => ATTR_LANGWATCH_SDK_VERSION,
74
+ ATTR_LANGWATCH_SPAN_TYPE: () => ATTR_LANGWATCH_SPAN_TYPE,
75
+ ATTR_LANGWATCH_STREAMING: () => ATTR_LANGWATCH_STREAMING,
76
+ ATTR_LANGWATCH_TAGS: () => ATTR_LANGWATCH_TAGS,
77
+ ATTR_LANGWATCH_THREAD_ID: () => ATTR_LANGWATCH_THREAD_ID,
78
+ ATTR_LANGWATCH_TIMESTAMPS: () => ATTR_LANGWATCH_TIMESTAMPS,
79
+ ATTR_LANGWATCH_USER_ID: () => ATTR_LANGWATCH_USER_ID
80
+ });
81
+ var ATTR_LANGWATCH_INPUT = "langwatch.input";
82
+ var ATTR_LANGWATCH_OUTPUT = "langwatch.output";
83
+ var ATTR_LANGWATCH_SPAN_TYPE = "langwatch.span.type";
84
+ var ATTR_LANGWATCH_RAG_CONTEXTS = "langwatch.contexts";
85
+ var ATTR_LANGWATCH_METRICS = "langwatch.metrics";
86
+ var ATTR_LANGWATCH_SDK_VERSION = "langwatch.sdk.version";
87
+ var ATTR_LANGWATCH_SDK_NAME = "langwatch.sdk.name";
88
+ var ATTR_LANGWATCH_SDK_LANGUAGE = "langwatch.sdk.language";
89
+ var ATTR_LANGWATCH_TIMESTAMPS = "langwatch.timestamps";
90
+ var ATTR_LANGWATCH_EVALUATION_CUSTOM = "langwatch.evaluation.custom";
91
+ var ATTR_LANGWATCH_PARAMS = "langwatch.params";
92
+ var ATTR_LANGWATCH_CUSTOMER_ID = "langwatch.customer.id";
93
+ var ATTR_LANGWATCH_THREAD_ID = "langwatch.thread.id";
94
+ var ATTR_LANGWATCH_USER_ID = "langwatch.user.id";
95
+ var ATTR_LANGWATCH_TAGS = "langwatch.tags";
96
+ var ATTR_LANGWATCH_STREAMING = "langwatch.gen_ai.streaming";
97
+ var ATTR_LANGWATCH_PROMPT_ID = "langwatch.prompt.id";
98
+ var ATTR_LANGWATCH_PROMPT_HANDLE = "langwatch.prompt.handle";
99
+ var ATTR_LANGWATCH_PROMPT_VERSION_ID = "langwatch.prompt.version.id";
100
+ var ATTR_LANGWATCH_PROMPT_VARIABLES = "langwatch.prompt.variables";
101
+ var ATTR_LANGWATCH_PROMPT_SELECTED_ID = "langwatch.prompt.selected.id";
102
+ var ATTR_LANGWATCH_PROMPT_VERSION_NUMBER = "langwatch.prompt.version.number";
103
+ var ATTR_LANGWATCH_LANGCHAIN_TAGS = "langwatch.langchain.tags";
104
+ var ATTR_LANGWATCH_LANGCHAIN_EVENT_NAME = "langwatch.langchain.event_name";
105
+ var ATTR_LANGWATCH_LANGCHAIN_RUN_ID = "langwatch.langchain.run.id";
106
+ var ATTR_LANGWATCH_LANGCHAIN_RUN_TAGS = "langwatch.langchain.run.tags";
107
+ var ATTR_LANGWATCH_LANGCHAIN_RUN_TYPE = "langwatch.langchain.run.type";
108
+ var ATTR_LANGWATCH_LANGCHAIN_RUN_METADATA = "langwatch.langchain.run.metadata";
109
+ var ATTR_LANGWATCH_LANGCHAIN_RUN_EXTRA_PARAMS = "langwatch.langchain.run.extra_params";
110
+ var ATTR_LANGWATCH_LANGCHAIN_RUN_PARENT_ID = "langwatch.langchain.run.parent.id";
111
+
112
+ // src/observability-sdk/features/data-capture/utils.ts
113
+ function validateDataCaptureMode(mode) {
114
+ return ["none", "input", "output", "all"].includes(mode);
115
+ }
116
+
117
+ // src/observability-sdk/config.ts
118
+ var observabilitySdkConfig = null;
119
+ function initializeObservabilitySdkConfig(config) {
120
+ observabilitySdkConfig = config;
121
+ }
122
+ function getObservabilitySdkConfig(options) {
123
+ if (!observabilitySdkConfig) {
124
+ const message = "[LangWatch Observability SDK] Please call setupObservability() before using the Observability SDK";
125
+ if ((options == null ? void 0 : options.throwOnUninitialized) || process.env.NODE_ENV === "development") {
126
+ throw new Error(message);
127
+ }
128
+ return {
129
+ logger: new NoOpLogger()
130
+ };
131
+ }
132
+ return observabilitySdkConfig;
133
+ }
134
+ function getObservabilitySdkLogger() {
135
+ return getObservabilitySdkConfig().logger;
136
+ }
137
+ function getDataCaptureMode() {
138
+ const config = getObservabilitySdkConfig();
139
+ if (!config.dataCapture) {
140
+ return "all";
141
+ }
142
+ if (typeof config.dataCapture === "string") {
143
+ const validModes = ["none", "input", "output", "all"];
144
+ if (validModes.includes(config.dataCapture)) {
145
+ return config.dataCapture;
146
+ }
147
+ getObservabilitySdkLogger().warn(
148
+ `Invalid data capture mode: ${config.dataCapture}. Using default: "all"`
149
+ );
150
+ return "all";
151
+ }
152
+ if (typeof config.dataCapture === "object" && config.dataCapture.mode && validateDataCaptureMode(config.dataCapture.mode)) {
153
+ return config.dataCapture.mode;
154
+ }
155
+ return "all";
156
+ }
157
+ function shouldCaptureInput() {
158
+ const mode = getDataCaptureMode();
159
+ return mode === "input" || mode === "all";
160
+ }
161
+ function shouldCaptureOutput() {
162
+ const mode = getDataCaptureMode();
163
+ return mode === "output" || mode === "all";
164
+ }
165
+
166
+ export {
167
+ NoOpLogger,
168
+ ConsoleLogger,
169
+ ATTR_LANGWATCH_INPUT,
170
+ ATTR_LANGWATCH_OUTPUT,
171
+ ATTR_LANGWATCH_SPAN_TYPE,
172
+ ATTR_LANGWATCH_RAG_CONTEXTS,
173
+ ATTR_LANGWATCH_METRICS,
174
+ ATTR_LANGWATCH_PROMPT_ID,
175
+ ATTR_LANGWATCH_PROMPT_VERSION_ID,
176
+ ATTR_LANGWATCH_PROMPT_SELECTED_ID,
177
+ ATTR_LANGWATCH_PROMPT_VERSION_NUMBER,
178
+ attributes_exports,
179
+ initializeObservabilitySdkConfig,
180
+ getDataCaptureMode,
181
+ shouldCaptureInput,
182
+ shouldCaptureOutput
183
+ };
184
+ //# sourceMappingURL=chunk-YNQ44U6D.mjs.map