langwatch 0.3.0-prerelease.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/add-LBBS4I3H.js +114 -0
  2. package/dist/add-LBBS4I3H.js.map +1 -0
  3. package/dist/add-RD3ZKFAT.mjs +114 -0
  4. package/dist/add-RD3ZKFAT.mjs.map +1 -0
  5. package/dist/chunk-2JU376G7.js +242 -0
  6. package/dist/chunk-2JU376G7.js.map +1 -0
  7. package/dist/chunk-2ODBGSBI.js +4 -0
  8. package/dist/{chunk-G3AUABT7.js.map → chunk-2ODBGSBI.js.map} +1 -1
  9. package/dist/chunk-3GKPQB4R.mjs +242 -0
  10. package/dist/chunk-3GKPQB4R.mjs.map +1 -0
  11. package/dist/chunk-4NRLVT2U.mjs +35 -0
  12. package/dist/chunk-4NRLVT2U.mjs.map +1 -0
  13. package/dist/{chunk-SVJ7SCGB.js → chunk-52GXX3MA.js} +33 -31
  14. package/dist/chunk-52GXX3MA.js.map +1 -0
  15. package/dist/chunk-5NC5ILKA.js +94 -0
  16. package/dist/chunk-5NC5ILKA.js.map +1 -0
  17. package/dist/{chunk-WM2GRSRW.js → chunk-6I4EA43Y.js} +2 -2
  18. package/dist/chunk-6I4EA43Y.js.map +1 -0
  19. package/dist/chunk-DHJKJVY7.mjs +20 -0
  20. package/dist/chunk-DHJKJVY7.mjs.map +1 -0
  21. package/dist/{chunk-VJSOCNPA.js → chunk-DTEKFQ4U.js} +6 -28
  22. package/dist/chunk-DTEKFQ4U.js.map +1 -0
  23. package/dist/chunk-E7UE2MPD.mjs +93 -0
  24. package/dist/chunk-E7UE2MPD.mjs.map +1 -0
  25. package/dist/chunk-F6E4XQQU.js +20 -0
  26. package/dist/chunk-F6E4XQQU.js.map +1 -0
  27. package/dist/chunk-FJLK5CFL.js +37 -0
  28. package/dist/chunk-FJLK5CFL.js.map +1 -0
  29. package/dist/{chunk-Z5J5UI5E.mjs → chunk-GJSEBQXF.mjs} +139 -107
  30. package/dist/chunk-GJSEBQXF.mjs.map +1 -0
  31. package/dist/chunk-HA3LI5IK.js +35 -0
  32. package/dist/chunk-HA3LI5IK.js.map +1 -0
  33. package/dist/chunk-HJU67C7H.js +93 -0
  34. package/dist/chunk-HJU67C7H.js.map +1 -0
  35. package/dist/{chunk-PMBEK6YE.mjs → chunk-J7ICRUU4.mjs} +5 -3
  36. package/dist/{chunk-PMBEK6YE.mjs.map → chunk-J7ICRUU4.mjs.map} +1 -1
  37. package/dist/{chunk-HPC6Z7J4.js → chunk-PWZBLTHR.js} +3 -3
  38. package/dist/{chunk-HPC6Z7J4.js.map → chunk-PWZBLTHR.js.map} +1 -1
  39. package/dist/chunk-SMXXAVMB.js +100 -0
  40. package/dist/chunk-SMXXAVMB.js.map +1 -0
  41. package/dist/{chunk-CSC3CMIT.mjs → chunk-STV4ZVNA.mjs} +2 -2
  42. package/dist/chunk-T5AZMMVS.mjs +94 -0
  43. package/dist/chunk-T5AZMMVS.mjs.map +1 -0
  44. package/dist/{chunk-4BZATFKJ.mjs → chunk-UU33HCCZ.mjs} +4 -26
  45. package/dist/{chunk-4BZATFKJ.mjs.map → chunk-UU33HCCZ.mjs.map} +1 -1
  46. package/dist/{chunk-PTJ6AAI7.js → chunk-VGHLQXKB.js} +138 -106
  47. package/dist/chunk-VGHLQXKB.js.map +1 -0
  48. package/dist/chunk-W5ZEP3CI.mjs +100 -0
  49. package/dist/chunk-W5ZEP3CI.mjs.map +1 -0
  50. package/dist/chunk-Y666BJA5.mjs +4 -0
  51. package/dist/{chunk-REUCVT7A.mjs → chunk-YFUZF7JM.mjs} +2 -2
  52. package/dist/chunk-YFUZF7JM.mjs.map +1 -0
  53. package/dist/chunk-YN4436PK.mjs +37 -0
  54. package/dist/chunk-YN4436PK.mjs.map +1 -0
  55. package/dist/cli/index.d.mts +1 -0
  56. package/dist/cli/index.d.ts +1 -0
  57. package/dist/cli/index.js +106 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/index.mjs +106 -0
  60. package/dist/cli/index.mjs.map +1 -0
  61. package/dist/client-browser.js +12 -10
  62. package/dist/client-browser.js.map +1 -1
  63. package/dist/client-browser.mjs +5 -3
  64. package/dist/client-browser.mjs.map +1 -1
  65. package/dist/client-node.js +11 -9
  66. package/dist/client-node.js.map +1 -1
  67. package/dist/client-node.mjs +7 -5
  68. package/dist/client-node.mjs.map +1 -1
  69. package/dist/create-G5MTGOOH.js +70 -0
  70. package/dist/create-G5MTGOOH.js.map +1 -0
  71. package/dist/create-QUZYBMQB.mjs +70 -0
  72. package/dist/create-QUZYBMQB.mjs.map +1 -0
  73. package/dist/evaluation/index.js +5 -4
  74. package/dist/evaluation/index.js.map +1 -1
  75. package/dist/evaluation/index.mjs +4 -3
  76. package/dist/index.d.mts +2 -2
  77. package/dist/index.d.ts +2 -2
  78. package/dist/index.js +10 -7
  79. package/dist/index.js.map +1 -1
  80. package/dist/index.mjs +9 -6
  81. package/dist/init-H67RW22E.mjs +16 -0
  82. package/dist/init-H67RW22E.mjs.map +1 -0
  83. package/dist/init-XU2JFY6N.js +16 -0
  84. package/dist/init-XU2JFY6N.js.map +1 -0
  85. package/dist/list-7NPSX2E4.mjs +136 -0
  86. package/dist/list-7NPSX2E4.mjs.map +1 -0
  87. package/dist/list-ZXFLAF52.js +136 -0
  88. package/dist/list-ZXFLAF52.js.map +1 -0
  89. package/dist/login-76NQIHKR.js +110 -0
  90. package/dist/login-76NQIHKR.js.map +1 -0
  91. package/dist/login-EK4WVOI2.mjs +110 -0
  92. package/dist/login-EK4WVOI2.mjs.map +1 -0
  93. package/dist/observability/index.d.mts +3 -3
  94. package/dist/observability/index.d.ts +3 -3
  95. package/dist/observability/index.js +5 -4
  96. package/dist/observability/index.js.map +1 -1
  97. package/dist/observability/index.mjs +4 -3
  98. package/dist/observability/instrumentation/langchain/index.d.mts +2 -2
  99. package/dist/observability/instrumentation/langchain/index.d.ts +2 -2
  100. package/dist/observability/instrumentation/langchain/index.js +29 -27
  101. package/dist/observability/instrumentation/langchain/index.js.map +1 -1
  102. package/dist/observability/instrumentation/langchain/index.mjs +5 -3
  103. package/dist/observability/instrumentation/langchain/index.mjs.map +1 -1
  104. package/dist/prompt/index.d.mts +2 -2
  105. package/dist/prompt/index.d.ts +2 -2
  106. package/dist/prompt/index.js +8 -4
  107. package/dist/prompt/index.js.map +1 -1
  108. package/dist/prompt/index.mjs +10 -6
  109. package/dist/{prompt-BXJWdbQp.d.mts → prompt-D-jpMrLS.d.mts} +245 -0
  110. package/dist/{prompt-BXJWdbQp.d.ts → prompt-D-jpMrLS.d.ts} +245 -0
  111. package/dist/remove-SDJYEPAY.mjs +106 -0
  112. package/dist/remove-SDJYEPAY.mjs.map +1 -0
  113. package/dist/remove-XBNGIVMR.js +106 -0
  114. package/dist/remove-XBNGIVMR.js.map +1 -0
  115. package/dist/sync-EISKGPTL.js +403 -0
  116. package/dist/sync-EISKGPTL.js.map +1 -0
  117. package/dist/sync-ST2IWXSB.mjs +403 -0
  118. package/dist/sync-ST2IWXSB.mjs.map +1 -0
  119. package/dist/{trace-G2312klE.d.ts → trace-CqaKo0kZ.d.ts} +1 -1
  120. package/dist/{trace-D-bZOuqb.d.mts → trace-DtVc5GhF.d.mts} +1 -1
  121. package/package.json +13 -2
  122. package/dist/chunk-G3AUABT7.js +0 -4
  123. package/dist/chunk-OM7VY3XT.mjs +0 -4
  124. package/dist/chunk-PTJ6AAI7.js.map +0 -1
  125. package/dist/chunk-REUCVT7A.mjs.map +0 -1
  126. package/dist/chunk-SVJ7SCGB.js.map +0 -1
  127. package/dist/chunk-VJSOCNPA.js.map +0 -1
  128. package/dist/chunk-WM2GRSRW.js.map +0 -1
  129. package/dist/chunk-Z5J5UI5E.mjs.map +0 -1
  130. /package/dist/{chunk-CSC3CMIT.mjs.map → chunk-STV4ZVNA.mjs.map} +0 -0
  131. /package/dist/{chunk-OM7VY3XT.mjs.map → chunk-Y666BJA5.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../package.json","../src/observability/exporters/langwatch-exporter.ts"],"sourcesContent":["{\n \"name\": \"langwatch\",\n \"version\": \"0.3.0-prerelease.2\",\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 \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./evaluation\": {\n \"types\": \"./dist/evaluation/index.d.ts\",\n \"require\": \"./dist/evaluation/index.js\",\n \"import\": \"./dist/evaluation/index.mjs\"\n },\n \"./observability\": {\n \"types\": \"./dist/observability/index.d.ts\",\n \"require\": \"./dist/observability/index.js\",\n \"import\": \"./dist/observability/index.mjs\"\n },\n \"./observability/instrumentation/langchain\": {\n \"types\": \"./dist/observability/instrumentation/langchain/index.d.ts\",\n \"require\": \"./dist/observability/instrumentation/langchain/index.js\",\n \"import\": \"./dist/observability/instrumentation/langchain/index.mjs\"\n },\n \"./prompt\": {\n \"types\": \"./dist/prompt/index.d.ts\",\n \"require\": \"./dist/prompt/index.js\",\n \"import\": \"./dist/prompt/index.mjs\"\n },\n \"./node\": {\n \"types\": \"./dist/client-node.d.ts\",\n \"import\": \"./dist/client-node.mjs\",\n \"require\": \"./dist/client-node.js\"\n },\n \"./browser\": {\n \"types\": \"./dist/client-browser.d.ts\",\n \"import\": \"./dist/client-browser.mjs\",\n \"require\": \"./dist/client-browser.js\"\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/langwatch/langwatch.git\",\n \"directory\": \"typescript-sdk\"\n },\n \"scripts\": {\n \"prepare\": \"./copy-types.sh && pnpm run generate:openapi-types\",\n \"test\": \"vitest\",\n \"prebuild\": \"pnpm run prepare\",\n \"build\": \"tsgo --noEmit && tsup\",\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 },\n \"author\": \"LangWatch\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=20\",\n \"pnpm\": \">=8\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.32.0\",\n \"@types/debug\": \"^4.1.12\",\n \"@types/node\": \"^24.1.0\",\n \"@typescript/native-preview\": \"7.0.0-dev.20250804.1\",\n \"@vitest/coverage-v8\": \"3.2.4\",\n \"dotenv\": \"^17.2.1\",\n \"esbuild\": \"^0.25.8\",\n \"eslint\": \"^9.32.0\",\n \"fets\": \"^0.8.5\",\n \"nock\": \"^14.0.8\",\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/core\": \"^2.0.1\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"^0.203.0\",\n \"@opentelemetry/resources\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-base\": \"^2.0.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.36.0\",\n \"liquidjs\": \"^10.21.1\",\n \"openapi-fetch\": \"^0.14.0\",\n \"xksuid\": \"^0.0.4\",\n \"zod\": \"^4.0.14\"\n },\n \"peerDependencies\": {\n \"@ai-sdk/openai\": \"^2.0.0\",\n \"@langchain/core\": \"^0.3.66\",\n \"@langchain/openai\": \"^0.6.3\",\n \"@langchain/langgraph\": \"^0.4.2\",\n \"@opentelemetry/context-async-hooks\": \"^2.0.1\",\n \"@opentelemetry/context-zone\": \"^2.0.1\",\n \"@opentelemetry/sdk-node\": \"^0.203.0\",\n \"@opentelemetry/sdk-trace-web\": \"^2.0.1\",\n \"@vercel/otel\": \"^1.13.0\",\n \"langchain\": \"^0.3.30\"\n }\n}\n","import { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { version } from \"../../../package.json\";\nimport { getApiKey, getEndpoint } from \"../../client\";\n\n/**\n * LangWatchExporter 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 { LangWatchExporter } from '@langwatch/observability';\n *\n * // Using environment variables/fallback configuration\n * const exporter = new LangWatchExporter();\n *\n * // Using custom API key and endpoint\n *\n * // With environment variables/fallback configuration\n * const exporter = new LangWatchExporter();\n *\n * // With custom API key and endpoint\n * const exporter = new LangWatchExporter('api-key', 'https://custom.langwatch.com');\n * ```\n */\nexport class LangWatchExporter extends OTLPTraceExporter {\n /**\n * Creates a new LangWatchExporter instance.\n *\n * @param apiKey - Optional API key for LangWatch authentication. If not provided,\n * will use environment variables or fallback configuration.\n * @param endpointURL - Optional custom endpoint URL for LangWatch ingestion.\n * If not provided, will use environment variables or fallback configuration.\n */\n constructor(apiKey?: string, endpointURL?: string) {\n const setApiKey = apiKey ?? getApiKey();\n const setEndpoint = endpointURL ?? getEndpoint();\n\n super({\n headers: {\n \"Authorization\": `Bearer ${setApiKey}`,\n \"X-LangWatch-SDK-Version\": version,\n \"X-LangWatch-SDK-Language\": `typescript-${typeof process !== \"undefined\" ? \"node\" : \"browser\"}`,\n \"X-LangWatch-SDK-Name\": \"langwatch-observability-sdk\",\n },\n url: setEndpoint,\n });\n }\n}\n"],"mappings":";;;;;;AAEE,cAAW;;;ACFb,SAAS,yBAAyB;AA6B3B,IAAM,oBAAN,cAAgC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASvD,YAAY,QAAiB,aAAsB;AACjD,UAAM,YAAY,0BAAU,UAAU;AACtC,UAAM,cAAc,oCAAe,YAAY;AAE/C,UAAM;AAAA,MACJ,SAAS;AAAA,QACP,iBAAiB,UAAU,SAAS;AAAA,QACpC,2BAA2B;AAAA,QAC3B,4BAA4B,cAAc,OAAO,YAAY,cAAc,SAAS,SAAS;AAAA,QAC7F,wBAAwB;AAAA,MAC1B;AAAA,MACA,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-SVJ7SCGB.js","../src/observability/trace.ts","../src/observability/span.ts","../src/evaluation/record-evaluation.ts","../src/evaluation/tracer.ts"],"names":["_a"],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-SVJ7SCGB.js","sourcesContent":[null,"import {\n trace as otelTrace,\n Tracer,\n Span,\n SpanOptions,\n Context,\n SpanStatusCode,\n} from \"@opentelemetry/api\";\nimport { LangWatchSpan, createLangWatchSpan } from \"./span\";\n\n/**\n * LangWatch OpenTelemetry Tracing Extensions\n *\n * This module provides wrappers and helpers for OpenTelemetry Tracer and Span objects,\n * adding ergonomic methods for LLM/GenAI observability and structured tracing.\n *\n * @module trace\n */\nexport interface LangWatchTracer extends Tracer {\n /**\n * Starts a new {@link LangWatchSpan}. Start the span without setting it on context.\n *\n * This method does NOT modify the current Context.\n *\n * @param name The name of the span\n * @param [options] SpanOptions used for span creation\n * @param [context] Context to use to extract parent\n * @returns LangWatchSpan The newly created span\n *\n * @example\n * const span = tracer.startSpan('op');\n * span.setAttribute('key', 'value');\n * span.end();\n */\n startSpan(\n name: string,\n options?: SpanOptions,\n context?: Context,\n ): LangWatchSpan;\n\n /**\n * Starts a new {@link LangWatchSpan} and calls the given function passing it the\n * created span as first argument.\n * Additionally the new span gets set in context and this context is activated\n * for the duration of the function call.\n *\n * @param name The name of the span\n * @param [options] SpanOptions used for span creation\n * @param [context] Context to use to extract parent\n * @param fn function called in the context of the span and receives the newly created span as an argument\n * @returns return value of fn\n *\n * @example\n * const result = tracer.startActiveSpan('op', span => {\n * try {\n * // do some work\n * span.setStatus({code: SpanStatusCode.OK});\n * return something;\n * } catch (err) {\n * span.setStatus({\n * code: SpanStatusCode.ERROR,\n * message: err.message,\n * });\n * throw err;\n * } finally {\n * span.end();\n * }\n * });\n *\n * @example\n * const span = tracer.startActiveSpan('op', span => {\n * try {\n * do some work\n * return span;\n * } catch (err) {\n * span.setStatus({\n * code: SpanStatusCode.ERROR,\n * message: err.message,\n * });\n * throw err;\n * }\n * });\n * do some more work\n * span.end();\n */\n startActiveSpan<F extends (span: LangWatchSpan) => unknown>(\n name: string,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: LangWatchSpan) => unknown>(\n name: string,\n options: SpanOptions,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: LangWatchSpan) => unknown>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n\n /**\n * Starts a new {@link LangWatchSpan}, runs the provided async function, and automatically handles\n * error recording, status setting, and span ending. This is a safer and more ergonomic alternative\n * to manually using try/catch/finally blocks with startActiveSpan.\n *\n * Overloads:\n * - withActiveSpan(name, fn)\n * - withActiveSpan(name, options, fn)\n * - withActiveSpan(name, options, context, fn)\n *\n * @param name The name of the span\n * @param options Optional SpanOptions for span creation\n * @param context Optional Context to use to extract parent\n * @param fn The async function to execute within the span context. Receives the span as its first argument.\n * @returns The return value of the provided function\n *\n * @example\n * await tracer.withActiveSpan('my-operation', async (span) => {\n * // ... your code ...\n * });\n *\n * await tracer.withActiveSpan('my-operation', { attributes: { foo: 'bar' } }, async (span) => {\n * // ... your code ...\n * });\n *\n * await tracer.withActiveSpan('my-operation', { attributes: { foo: 'bar' } }, myContext, async (span) => {\n * // ... your code ...\n * });\n */\n withActiveSpan<T>(\n name: string,\n fn: (span: LangWatchSpan) => Promise<T> | T\n ): Promise<T>;\n withActiveSpan<T>(\n name: string,\n options: SpanOptions,\n fn: (span: LangWatchSpan) => Promise<T> | T\n ): Promise<T>;\n withActiveSpan<T>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: (span: LangWatchSpan) => Promise<T> | T\n ): Promise<T>;\n}\n\n/**\n * Extension of OpenTelemetry's Tracer with LangWatch-specific helpers.\n *\n * This interface provides methods for starting spans and active spans that return LangWatchSpan objects,\n * which include ergonomic helpers for LLM/GenAI tracing.\n *\n * @example\n * import { getLangWatchTracer } from 'langwatch';\n * const tracer = getLangWatchTracer('my-service');\n * const span = tracer.startSpan('llm-call');\n * span.setType('llm').setInput('Prompt').setOutput('Completion');\n * span.end();\n *\n * tracer.startActiveSpan('llm-call', (span) => {\n * span.setType('llm');\n * // ...\n * span.end();\n * });\n */\nexport function getLangWatchTracer(name: string, version?: string): LangWatchTracer {\n const tracer = otelTrace.getTracer(name, version);\n\n // Create a proxy for the tracer that intercepts the calls to startActiveSpan and\n // startSpan, and wraps the span object with our custom LangWatchSpan.\n const handler: ProxyHandler<LangWatchTracer> = {\n get(target, prop, _receiver) {\n switch (prop) {\n case \"startActiveSpan\": {\n const startActiveSpan: StartActiveSpanOverloads = (\n ...args: [\n string,\n SpanOptions?,\n Context?,\n ((span: Span) => unknown)?,\n ]\n ) => {\n // Find the span callback function (usually the last argument!)\n const fnIndex = args.findIndex((arg) => typeof arg === \"function\");\n if (fnIndex === -1) {\n throw new Error(\n \"startActiveSpan requires a function as the last argument\",\n );\n }\n\n // A type assertion is safe here due to the check above, but still sad 😥\n const userFn = args[fnIndex] as (\n span: Span,\n ...rest: unknown[]\n ) => unknown;\n\n // Replace the function with one that wraps the span first\n const spanWrapFunc = (...fnArgs: unknown[]) => {\n const [span, ...rest] = fnArgs;\n return userFn(createLangWatchSpan(span as Span), ...rest);\n };\n\n const newArgs = [...args];\n newArgs[fnIndex] = spanWrapFunc;\n\n // TypeScript can't infer the overload, but this is safe\n return (\n target.startActiveSpan as unknown as (\n ...args: unknown[]\n ) => unknown\n )(...newArgs);\n };\n return startActiveSpan;\n }\n\n case \"startSpan\": {\n return function (\n ...args: Parameters<Tracer[\"startSpan\"]>\n ): ReturnType<Tracer[\"startSpan\"]> {\n const span = target.startSpan(...args);\n return createLangWatchSpan(span);\n };\n }\n\n case \"withActiveSpan\": {\n /**\n * Implementation of withActiveSpan: supports all overloads like startActiveSpan.\n * Uses startActiveSpan to ensure context propagation for nested spans.\n */\n return async function withActiveSpan(...args: any[]): Promise<any> {\n // Find the function argument (should be the last argument)\n const fnIndex = args.findIndex((arg) => typeof arg === \"function\");\n if (fnIndex === -1) {\n throw new Error(\"withActiveSpan requires a function as the last argument\");\n }\n const userFn = args[fnIndex] as (span: LangWatchSpan) => Promise<any> | any;\n // The preceding arguments are: name, options?, context?\n const name = args[0];\n const options = args.length > 2 ? args[1] : undefined;\n const context = args.length > 3 ? args[2] : undefined;\n\n return await new Promise((resolve, reject) => {\n // Use startActiveSpan to ensure context propagation\n const cb = async (span: Span) => {\n const wrappedSpan = createLangWatchSpan(span);\n try {\n resolve(await userFn(wrappedSpan));\n } catch (err: any) {\n wrappedSpan.setStatus({\n code: SpanStatusCode.ERROR,\n message: err && err.message ? err.message : String(err),\n });\n wrappedSpan.recordException(err);\n reject(err);\n } finally {\n wrappedSpan.end();\n }\n };\n // Call the correct overload of startActiveSpan\n if (context !== undefined) {\n target.startActiveSpan(name, options, context, cb);\n } else if (options !== undefined) {\n target.startActiveSpan(name, options, cb);\n } else {\n target.startActiveSpan(name, cb);\n }\n });\n };\n }\n\n default: {\n const value = target[prop as keyof Tracer];\n return typeof value === \"function\" ? value.bind(target) : value;\n }\n }\n },\n };\n\n return new Proxy(tracer, handler) as LangWatchTracer;\n}\n\n/**\n * Helper type for the function overloads of startActiveSpan.\n *\n * This matches OpenTelemetry's Tracer interface and is used internally for type safety.\n */\ntype StartActiveSpanOverloads = {\n <F extends (span: Span) => unknown>(name: string, fn: F): ReturnType<F>;\n <F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n fn: F,\n ): ReturnType<F>;\n <F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n};\n","import {\n Attributes,\n AttributeValue,\n Span,\n SpanContext,\n SpanStatus,\n Link,\n Exception\n} from \"@opentelemetry/api\";\nimport semconv from \"@opentelemetry/semantic-conventions/incubating\";\nimport * as intSemconv from \"./semconv\";\nimport {\n RecordedEvaluationDetails,\n recordEvaluation,\n} from \"../evaluation/record-evaluation\";\nimport { EvaluationResultModel } from \"../evaluation/types\";\nimport { Prompt } from \"../prompt/prompt\";\n\n/**\n * Supported types of spans for LangWatch observability. These types categorize the nature of the span for downstream analysis and visualization.\n *\n * @example\n * import { spanTypes, SpanType } from './span';\n * const myType: SpanType = 'llm';\n */\nexport const spanTypes = [\n \"span\",\n \"llm\",\n \"chain\",\n \"tool\",\n \"agent\",\n \"guardrail\",\n \"evaluation\",\n \"rag\",\n \"prompt\",\n \"workflow\",\n \"component\",\n \"module\",\n \"server\",\n \"client\",\n \"producer\",\n \"consumer\",\n \"task\",\n \"unknown\",\n] as const;\n\nexport type SpanType = (typeof spanTypes)[number];\n\n/**\n * Context for a RAG (Retrieval-Augmented Generation) span.\n *\n * This structure is used to record which document and chunk were retrieved and used as context for a generation.\n *\n * @property document_id - Unique identifier for the source document.\n * @property chunk_id - Unique identifier for the chunk within the document.\n * @property content - The actual content of the chunk provided to the model.\n *\n * @example\n * const ragContext: LangWatchSpanRAGContext = {\n * document_id: 'doc-123',\n * chunk_id: 'chunk-456',\n * content: 'Relevant passage from the document.'\n * };\n */\nexport interface LangWatchSpanRAGContext {\n document_id: string;\n chunk_id: string;\n content: string;\n}\n\n/**\n * Metrics for a LangWatch span.\n *\n * @property promptTokens - The number of prompt tokens used.\n * @property completionTokens - The number of completion tokens used.\n * @property cost - The cost of the span.\n */\nexport interface LangWatchSpanMetrics {\n /** The number of prompt tokens used */\n promptTokens?: number;\n /** The number of completion tokens used */\n completionTokens?: number;\n /** The cost of the span */\n cost?: number;\n}\n\n/**\n * Body for a system message event in a GenAI span.\n *\n * Used to log system/instruction messages sent to the model.\n *\n * @property content - The message content.\n * @property role - The role of the message, typically 'system' or 'instruction'.\n *\n * @example\n * span.addGenAISystemMessageEvent({ content: 'You are a helpful assistant.' });\n */\nexport interface LangWatchSpanGenAISystemMessageEventBody {\n /** Content of the system message */\n content?: string;\n /** Role of the message (system or instruction) */\n role?: \"system\" | \"instruction\";\n}\n\n/**\n * Body for a user message event in a GenAI span.\n *\n * Used to log user/customer messages sent to the model.\n *\n * @property content - The message content.\n * @property role - The role of the message, typically 'user' or 'customer'.\n *\n * @example\n * span.addGenAIUserMessageEvent({ content: 'What is the weather today?' });\n */\nexport interface LangWatchSpanGenAIUserMessageEventBody {\n /** Content of the user message */\n content?: string;\n /** Role of the message (user or customer) */\n role?: \"user\" | \"customer\";\n}\n\n/**\n * Body for an assistant message event in a GenAI span.\n *\n * Used to log assistant/bot responses, including tool calls.\n *\n * @property content - The message content.\n * @property role - The role of the message, typically 'assistant' or 'bot'.\n * @property tool_calls - Array of tool call objects, if the assistant invoked tools/functions.\n *\n * @example\n * span.addGenAIAssistantMessageEvent({ content: 'The weather is sunny.', role: 'assistant' });\n */\nexport interface LangWatchSpanGenAIAssistantMessageEventBody {\n /** Content of the assistant message */\n content?: string;\n /** Role of the message (assistant or bot) */\n role?: \"assistant\" | \"bot\";\n /** Tool calls made by the assistant */\n tool_calls?: {\n function: {\n /** Name of the function called */\n name: string;\n /** Arguments passed to the function */\n arguments?: string;\n };\n /** Tool call identifier */\n id: string;\n /** Type of tool call */\n type: \"function\";\n }[];\n}\n\n/**\n * Body for a tool message event in a GenAI span.\n *\n * Used to log messages from tools/functions invoked by the assistant.\n *\n * @property content - The message content.\n * @property id - Unique identifier for the tool call.\n * @property role - The role, typically 'tool' or 'function'.\n *\n * @example\n * span.addGenAIToolMessageEvent({ content: 'Result from tool', id: 'tool-1', role: 'tool' });\n */\nexport interface LangWatchSpanGenAIToolMessageEventBody {\n /** Content of the tool message */\n content?: string;\n /** Tool call identifier */\n id: string;\n /** Role of the message (tool or function) */\n role?: \"tool\" | \"function\";\n}\n\n/**\n * Body for a choice event in a GenAI span.\n *\n * Used to log the model's output choices, including finish reason and message content.\n *\n * @property finish_reason - Why the generation finished (e.g., 'stop', 'length').\n * @property index - Index of the choice (for multi-choice outputs).\n * @property message - The message content and tool calls for this choice.\n *\n * @example\n * span.addGenAIChoiceEvent({ finish_reason: 'stop', index: 0, message: { content: 'Hello!' } });\n */\nexport interface LangWatchSpanGenAIChoiceEventBody {\n /** Reason the generation finished */\n finish_reason: intSemconv.VAL_GEN_AI_FINISH_REASONS | (string & {});\n /** Index of the choice */\n index: number;\n /** Message content for the choice */\n message?: {\n /** Content of the message */\n content?: string;\n /** Role of the message (assistant or bot) */\n role?: \"assistant\" | \"bot\";\n /** Tool calls made by the assistant */\n tool_calls?: {\n function: {\n /** Name of the function called */\n name: string;\n /** Arguments passed to the function */\n arguments?: string;\n };\n /** Tool call identifier */\n id: string;\n /** Type of tool call */\n type: \"function\";\n }[];\n };\n}\n\n/**\n * Extension of OpenTelemetry's Span with LangWatch-specific helpers for LLM, RAG, and GenAI tracing.\n *\n * This interface provides ergonomic methods for recording structured LLM/GenAI data, such as inputs, outputs, RAG contexts, and message events.\n *\n * All methods return `this` for chaining.\n *\n * @example\n * const span = createLangWatchSpan(otelSpan);\n * span\n * .setType('llm')\n * .setInput({ prompt: 'Hello' })\n * .setOutput('Hi!')\n * .addGenAIUserMessageEvent({ content: 'Hello' })\n * .addGenAIAssistantMessageEvent({ content: 'Hi!' });\n */\nexport interface LangWatchSpan extends Span {\n /**\n * Record the evaluation result for the span.\n *\n * @param details - The evaluation details\n * @param attributes - Additional attributes to add to the evaluation span.\n * @returns this\n */\n recordEvaluation(\n details: RecordedEvaluationDetails,\n attributes?: Attributes,\n ): this;\n\n /**\n * Add a GenAI system message event to the span.\n *\n * This logs a system/instruction message sent to the model.\n *\n * @param body - The event body (content and role)\n * @param system - The GenAI system (optional, e.g., 'openai', 'anthropic')\n * @param attributes - Additional OpenTelemetry attributes (optional)\n * @returns this\n */\n addGenAISystemMessageEvent(\n body: LangWatchSpanGenAISystemMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this;\n /**\n * Add a GenAI user message event to the span.\n *\n * This logs a user/customer message sent to the model.\n *\n * @param body - The event body (content and role)\n * @param system - The GenAI system (optional)\n * @param attributes - Additional OpenTelemetry attributes (optional)\n * @returns this\n */\n addGenAIUserMessageEvent(\n body: LangWatchSpanGenAIUserMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this;\n /**\n * Add a GenAI assistant message event to the span.\n *\n * This logs an assistant/bot response, including tool calls if present.\n *\n * @param body - The event body (content, role, tool_calls)\n * @param system - The GenAI system (optional)\n * @param attributes - Additional OpenTelemetry attributes (optional)\n * @returns this\n */\n addGenAIAssistantMessageEvent(\n body: LangWatchSpanGenAIAssistantMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this;\n /**\n * Add a GenAI tool message event to the span.\n *\n * This logs a message from a tool/function invoked by the assistant.\n *\n * @param body - The event body (content, id, role)\n * @param system - The GenAI system (optional)\n * @param attributes - Additional OpenTelemetry attributes (optional)\n * @returns this\n */\n addGenAIToolMessageEvent(\n body: LangWatchSpanGenAIToolMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this;\n /**\n * Add a GenAI choice event to the span.\n *\n * This logs a model output choice, including finish reason and message content.\n *\n * @param body - The event body (finish_reason, index, message)\n * @param system - The GenAI system (optional)\n * @param attributes - Additional OpenTelemetry attributes (optional)\n * @returns this\n */\n addGenAIChoiceEvent(\n body: LangWatchSpanGenAIChoiceEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this;\n\n /**\n * Set the type of the span (e.g., 'llm', 'rag', 'tool', etc).\n *\n * This is used for downstream filtering and analytics.\n *\n * @param type - The span type (see SpanType)\n * @returns this\n */\n setType(type: SpanType): this;\n\n /**\n * Set the request model name for the span.\n *\n * This is typically the model name sent in the API request (e.g., 'gpt-4', 'claude-3').\n *\n * @param model - The request model name\n * @returns this\n */\n setRequestModel(model: string): this;\n /**\n * Set the response model name for the span.\n *\n * This is the model name returned in the API response, if different from the request.\n *\n * @param model - The response model name\n * @returns this\n */\n setResponseModel(model: string): this;\n\n /**\n * Set multiple RAG contexts for the span.\n *\n * Use this to record all retrieved documents/chunks used as context for a generation.\n *\n * @param ragContexts - Array of RAG context objects\n * @returns this\n */\n setRAGContexts(ragContexts: LangWatchSpanRAGContext[]): this;\n /**\n * Set a single RAG context for the span.\n *\n * Use this if only one context was retrieved.\n *\n * @param ragContext - The RAG context object\n * @returns this\n */\n setRAGContext(ragContext: LangWatchSpanRAGContext): this;\n\n /**\n * Set the metrics for the span.\n *\n * @param metrics - The metrics object\n * @returns this\n */\n setMetrics(metrics: LangWatchSpanMetrics): this;\n\n /**\n * Set the selected prompt for the span. This will attach this prompt to the trace. If\n * this is set on multiple spans, the last one will be used.\n *\n * @param prompt - The prompt object\n * @returns this\n */\n setSelectedPrompt(prompt: Prompt): this;\n\n /**\n * Record the input to the span as a JSON-serializable value.\n *\n * The input is stringified and stored as a span attribute for later analysis.\n *\n * @param input - The input value (any type, will be JSON.stringified)\n * @returns this\n */\n setInput(input: unknown): this;\n /**\n * Record the input to the span as a plain string.\n *\n * Use this for raw text prompts or queries.\n *\n * @param input - The input string\n * @returns this\n */\n setInputString(input: string): this;\n /**\n * Record the output from the span as a JSON-serializable value.\n *\n * The output is stringified and stored as a span attribute for later analysis.\n *\n * @param output - The output value (any type, will be JSON.stringified)\n * @returns this\n */\n setOutput(output: unknown): this;\n /**\n * Record the output from the span as a plain string.\n *\n * Use this for raw text completions or responses.\n *\n * @param output - The output string\n * @returns this\n */\n setOutputString(output: string): this;\n\n /**\n * Set the evaluation output for the span.\n *\n * @param guardrail - Whether the evaluation is a guardrail\n * @param output - The evaluation result\n * @returns this\n */\n setOutputEvaluation(guardrail: boolean, output: EvaluationResultModel): this;\n}\n\n/**\n * LangWatchSpan class that wraps an OpenTelemetry Span with LangWatch-specific helpers.\n *\n * This class provides a clean, type-safe wrapper around OpenTelemetry spans with\n * additional methods for LLM, RAG, and GenAI tracing. All methods support fluent API chaining.\n *\n * @example\n * import { createLangWatchSpan } from './span';\n * const otelSpan = tracer.startSpan('llm-call');\n * const span = createLangWatchSpan(otelSpan);\n * span.setType('llm').setInput('Prompt').setOutput('Completion');\n */\nclass LangWatchSpanImpl implements LangWatchSpan {\n constructor(private span: Span) {}\n\n // OpenTelemetry Span methods with fluent API support\n setAttribute(key: string, value: AttributeValue): this {\n this.span.setAttribute(key, value);\n return this;\n }\n\n setAttributes(attributes: Attributes): this {\n this.span.setAttributes(attributes);\n return this;\n }\n\n addEvent(name: string, attributes?: Attributes): this {\n this.span.addEvent(name, attributes);\n return this;\n }\n\n recordException(exception: Exception): this {\n this.span.recordException(exception);\n return this;\n }\n\n setStatus(status: SpanStatus): this {\n this.span.setStatus(status);\n return this;\n }\n\n updateName(name: string): this {\n this.span.updateName(name);\n return this;\n }\n\n // Pass through other Span methods without chaining\n end(endTime?: number): void {\n this.span.end(endTime);\n }\n\n isRecording(): boolean {\n return this.span.isRecording();\n }\n\n spanContext(): SpanContext {\n return this.span.spanContext();\n }\n\n addLink(link: Link): this {\n this.span.addLink(link);\n return this;\n }\n\n addLinks(links: Link[]): this {\n this.span.addLinks(links);\n return this;\n }\n\n // LangWatch-specific methods\n recordEvaluation(\n details: RecordedEvaluationDetails,\n attributes?: Attributes,\n ): this {\n recordEvaluation(details, attributes);\n return this;\n }\n\n addGenAISystemMessageEvent(\n body: LangWatchSpanGenAISystemMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this {\n if (body.role === void 0) {\n body.role = \"system\";\n }\n\n this.span.addEvent(intSemconv.LOG_EVNT_GEN_AI_SYSTEM_MESSAGE, {\n ...attributes,\n [semconv.ATTR_GEN_AI_SYSTEM]: system,\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_BODY]: JSON.stringify(body),\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_IMPOSTER]: true,\n });\n return this;\n }\n\n addGenAIUserMessageEvent(\n body: LangWatchSpanGenAIUserMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this {\n if (body.role === void 0) {\n body.role = \"user\";\n }\n\n this.span.addEvent(intSemconv.LOG_EVNT_GEN_AI_USER_MESSAGE, {\n ...attributes,\n [semconv.ATTR_GEN_AI_SYSTEM]: system,\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_BODY]: JSON.stringify(body),\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_IMPOSTER]: true,\n });\n return this;\n }\n\n addGenAIAssistantMessageEvent(\n body: LangWatchSpanGenAIAssistantMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this {\n if (body.role === void 0) {\n body.role = \"assistant\";\n }\n\n this.span.addEvent(intSemconv.LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE, {\n ...attributes,\n [semconv.ATTR_GEN_AI_SYSTEM]: system,\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_BODY]: JSON.stringify(body),\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_IMPOSTER]: true,\n });\n return this;\n }\n\n addGenAIToolMessageEvent(\n body: LangWatchSpanGenAIToolMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this {\n if (body.role === void 0) {\n body.role = \"tool\";\n }\n\n this.span.addEvent(intSemconv.LOG_EVNT_GEN_AI_TOOL_MESSAGE, {\n ...attributes,\n [semconv.ATTR_GEN_AI_SYSTEM]: system,\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_BODY]: JSON.stringify(body),\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_IMPOSTER]: true,\n });\n return this;\n }\n\n addGenAIChoiceEvent(\n body: LangWatchSpanGenAIChoiceEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: Record<string, AttributeValue>,\n ): this {\n if (body.message && body.message.role === void 0) {\n body.message.role = \"assistant\";\n }\n\n this.span.addEvent(intSemconv.LOG_EVNT_GEN_AI_CHOICE, {\n ...attributes,\n [semconv.ATTR_GEN_AI_SYSTEM]: system,\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_BODY]: JSON.stringify(body),\n [intSemconv.ATTR_LANGWATCH_GEN_AI_LOG_EVENT_IMPOSTER]: true,\n });\n return this;\n }\n\n setType(type: SpanType): this {\n this.span.setAttribute(intSemconv.ATTR_LANGWATCH_SPAN_TYPE, type);\n return this;\n }\n\n setRequestModel(model: string): this {\n this.span.setAttribute(semconv.ATTR_GEN_AI_REQUEST_MODEL, model);\n return this;\n }\n\n setResponseModel(model: string): this {\n this.span.setAttribute(semconv.ATTR_GEN_AI_RESPONSE_MODEL, model);\n return this;\n }\n\n setRAGContexts(ragContexts: LangWatchSpanRAGContext[]): this {\n this.span.setAttribute(\n intSemconv.ATTR_LANGWATCH_RAG_CONTEXTS,\n JSON.stringify({\n type: \"json\",\n value: ragContexts,\n }),\n );\n return this;\n }\n\n setRAGContext(ragContext: LangWatchSpanRAGContext): this {\n this.span.setAttribute(\n intSemconv.ATTR_LANGWATCH_RAG_CONTEXTS,\n JSON.stringify({\n type: \"json\",\n value: [ragContext],\n }),\n );\n return this;\n }\n\n setMetrics(metrics: LangWatchSpanMetrics): this {\n this.span.setAttribute(\n intSemconv.ATTR_LANGWATCH_METRICS,\n JSON.stringify({\n type: \"json\",\n value: metrics,\n }),\n );\n return this;\n }\n\n setSelectedPrompt(prompt: Prompt): this {\n this.span.setAttributes({\n [intSemconv.ATTR_LANGWATCH_PROMPT_SELECTED_ID]: prompt.id,\n [intSemconv.ATTR_LANGWATCH_PROMPT_ID]: prompt.id,\n [intSemconv.ATTR_LANGWATCH_PROMPT_VERSION_ID]: prompt.versionId,\n [intSemconv.ATTR_LANGWATCH_PROMPT_VERSION_NUMBER]: prompt.version,\n });\n return this;\n }\n\n setInput(input: unknown): this {\n this.span.setAttribute(\n intSemconv.ATTR_LANGWATCH_INPUT,\n JSON.stringify({\n type: \"json\",\n value: input,\n }),\n );\n return this;\n }\n\n setInputString(input: string): this {\n this.span.setAttribute(\n intSemconv.ATTR_LANGWATCH_INPUT,\n JSON.stringify({\n type: \"text\",\n value: input,\n }),\n );\n return this;\n }\n\n setOutput(output: unknown): this {\n this.span.setAttribute(\n intSemconv.ATTR_LANGWATCH_OUTPUT,\n JSON.stringify({\n type: \"json\",\n value: output,\n }),\n );\n return this;\n }\n\n setOutputString(output: string): this {\n this.span.setAttribute(\n intSemconv.ATTR_LANGWATCH_OUTPUT,\n JSON.stringify({\n type: \"text\",\n value: output,\n }),\n );\n return this;\n }\n\n setOutputEvaluation(guardrail: boolean, output: EvaluationResultModel): this {\n this.span.setAttribute(\n intSemconv.ATTR_LANGWATCH_OUTPUT,\n JSON.stringify({\n type: guardrail ? \"guardrail_result\" : \"evaluation_result\",\n value: output,\n }),\n );\n return this;\n }\n}\n\n/**\n * Creates a LangWatchSpan wrapper around an OpenTelemetry Span.\n *\n * @param span - The OpenTelemetry Span to wrap\n * @returns A LangWatchSpan with additional methods for LLM/GenAI observability\n *\n * @example\n * import { createLangWatchSpan } from './span';\n * const otelSpan = tracer.startSpan('llm-call');\n * const span = createLangWatchSpan(otelSpan);\n * span.setType('llm').setInput('Prompt').setOutput('Completion');\n */\nexport function createLangWatchSpan(span: Span): LangWatchSpan {\n return new LangWatchSpanImpl(span);\n}\n","import { EvaluationRESTResult } from \"../internal/generated/types/evaluations\";\nimport * as intSemconv from \"../observability/semconv\";\nimport { Attributes, SpanStatusCode } from \"@opentelemetry/api\";\nimport { generate } from \"xksuid\";\nimport { tracer } from \"./tracer\";\n\nexport interface RecordedEvaluationDetails {\n evaluationId?: string;\n name: string;\n type?: string;\n isGuardrail?: boolean;\n status?: \"processed\" | \"skipped\" | \"error\";\n passed?: boolean;\n score?: number;\n label?: string;\n details?: string;\n cost?: number | { currency: string; amount: number };\n error?: Error;\n timestamps?: {\n startedAtUnixMs: number;\n finishedAtUnixMs: number;\n };\n}\n\nexport function recordEvaluation(\n details: RecordedEvaluationDetails,\n attributes?: Attributes,\n) {\n let result: EvaluationRESTResult;\n const status = details.status || \"processed\";\n\n if (status === \"skipped\") {\n result = {\n status: \"skipped\",\n details: details.details,\n };\n } else if (status === \"error\") {\n result = {\n status: \"error\",\n error_type: details.error?.name || \"Unknown\",\n details: details.details || details.error?.message || \"Unknown error\",\n };\n } else {\n result = {\n status: \"processed\",\n passed: details.passed,\n score: details.score,\n label: details.label,\n details: details.details,\n };\n if (details.cost) {\n (result as any).cost =\n typeof details.cost === \"number\"\n ? { currency: \"USD\", amount: details.cost }\n : details.cost;\n }\n }\n\n tracer.startActiveSpan(\"record evaluation\", (span) => {\n try {\n span.setType(details.isGuardrail ? \"guardrail\" : \"evaluation\");\n span.addEvent(intSemconv.ATTR_LANGWATCH_EVALUATION_CUSTOM, {\n json_encoded_event: JSON.stringify({\n evaluation_id: details.evaluationId ?? `eval_${generate()}`,\n name: details.name,\n type: details.type,\n is_guardrail: details.isGuardrail,\n status: result.status,\n passed: details.passed,\n score: details.score,\n label: details.label,\n details: details.details,\n cost: details.cost,\n error: details.error,\n timestamps: details.timestamps,\n }),\n });\n\n span.setOutput(result);\n\n if (attributes) {\n span.setAttributes(attributes);\n }\n if (details.cost) {\n span.setMetrics({\n cost:\n typeof details.cost === \"number\"\n ? details.cost\n : details.cost.amount,\n });\n }\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({ code: SpanStatusCode.ERROR, message: (error as Error)?.message });\n } finally {\n span.end();\n }\n\n return;\n });\n}\n","import { getLangWatchTracer } from \"../observability/trace\";\n\nexport const tracer = getLangWatchTracer(\"langwatch.evaluation\");\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-VJSOCNPA.js","../src/observability/semconv/attributes.ts","../src/observability/semconv/events.ts","../src/observability/semconv/index.ts","../src/observability/semconv/values.ts"],"names":[],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-VJSOCNPA.js","sourcesContent":[null,"/*\n This file contains the semantic conventions for attributes either owned by LangWatch, or\n which are no yet part of the OpenTelemetry semantic conventions for Gen AI.\n\n Any that are not yet part of the OpenTelemetry semantic conventions for Gen AI are\n marked with an UNSTABLE_ prefix.\n*/\n\n/**\n * LangWatch input data attribute key\n * Used to store the input data for a span or event\n */\nexport const ATTR_LANGWATCH_INPUT = \"langwatch.input\";\n\n/**\n * LangWatch output data attribute key\n * Used to store the output data for a span or event\n */\nexport const ATTR_LANGWATCH_OUTPUT = \"langwatch.output\";\n\n/**\n * LangWatch span type attribute key\n * Used to identify the type of span being traced\n */\nexport const ATTR_LANGWATCH_SPAN_TYPE = \"langwatch.span.type\";\n\n/**\n * LangWatch RAG contexts attribute key\n * Used to store retrieval-augmented generation contexts\n */\nexport const ATTR_LANGWATCH_RAG_CONTEXTS = \"langwatch.contexts\";\n\n/**\n * LangWatch metrics attribute key\n * Used to store custom metrics data\n */\nexport const ATTR_LANGWATCH_METRICS = \"langwatch.metrics\";\n\n/**\n * LangWatch SDK version attribute key\n * Used to track the version of the LangWatch SDK being used\n */\nexport const ATTR_LANGWATCH_SDK_VERSION = \"langwatch.sdk.version\";\n\n/**\n * LangWatch SDK name attribute key\n * Used to identify the LangWatch SDK implementation\n */\nexport const ATTR_LANGWATCH_SDK_NAME = \"langwatch.sdk.name\";\n\n/**\n * LangWatch SDK language attribute key\n * Used to identify the programming language of the SDK\n */\nexport const ATTR_LANGWATCH_SDK_LANGUAGE = \"langwatch.sdk.language\";\n\n/**\n * LangWatch timestamps attribute key\n * Used to store timing information for events\n */\nexport const ATTR_LANGWATCH_TIMESTAMPS = \"langwatch.timestamps\";\n\n/**\n * LangWatch custom evaluation attribute key\n * Used to store custom evaluation data\n */\nexport const ATTR_LANGWATCH_EVALUATION_CUSTOM = \"langwatch.evaluation.custom\";\n\n/**\n * LangWatch parameters attribute key\n * Used to store parameter data for operations\n */\nexport const ATTR_LANGWATCH_PARAMS = \"langwatch.params\";\n\n/**\n * LangWatch customer ID attribute key\n * Used to identify the customer associated with the trace\n */\nexport const ATTR_LANGWATCH_CUSTOMER_ID = \"langwatch.customer.id\";\n\n/**\n * LangWatch thread ID attribute key\n * Used to group related operations within a conversation thread\n */\nexport const ATTR_LANGWATCH_THREAD_ID = \"langwatch.thread.id\";\n\n/**\n * LangWatch streaming attribute key\n * Used to indicate if the operation involves streaming\n */\nexport const ATTR_LANGWATCH_STREAMING = \"langwatch.gen_ai.streaming\";\n\n/**\n * LangWatch prompt ID attribute key\n * Used to identify the specific prompt being used\n */\nexport const ATTR_LANGWATCH_PROMPT_ID = \"langwatch.prompt.id\";\n\n/**\n * LangWatch prompt version ID attribute key\n * Used to identify the specific version of a prompt\n */\nexport const ATTR_LANGWATCH_PROMPT_VERSION_ID = \"langwatch.prompt.version.id\";\n\n/**\n * LangWatch prompt variables attribute key\n * Used to store variables used in prompt templates\n */\nexport const ATTR_LANGWATCH_PROMPT_VARIABLES = \"langwatch.prompt.variables\";\n\n/**\n * LangWatch prompt selected ID attribute key\n * Used to identify which prompt was selected from a set\n */\nexport const ATTR_LANGWATCH_PROMPT_SELECTED_ID = \"langwatch.prompt.selected.id\";\n\n/**\n * LangWatch prompt version number attribute key\n * Used to track the version number of a prompt\n */\nexport const ATTR_LANGWATCH_PROMPT_VERSION_NUMBER =\n \"langwatch.prompt.version.number\";\n\n/**\n * LangWatch gen AI log event imposter attribute key\n * Used to identify imposter events in log records\n */\nexport const ATTR_LANGWATCH_GEN_AI_LOG_EVENT_IMPOSTER =\n \"langwatch.gen_ai.log_event.imposter\";\n\n/**\n * LangWatch gen AI log event body attribute key\n * Used to store the body content of log events\n */\nexport const ATTR_LANGWATCH_GEN_AI_LOG_EVENT_BODY =\n \"langwatch.gen_ai.log_event.body\";\n\n/**\n * LangWatch LangChain tags attribute key\n * Used to store tags associated with LangChain operations\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_TAGS = \"langwatch.langchain.tags\";\n\n/**\n * LangWatch LangChain event name attribute key\n * Used to identify the specific LangChain event type\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_EVENT_NAME = \"langwatch.langchain.event_name\";\n\n/**\n * LangWatch LangChain run ID attribute key\n * Used to identify a specific LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_ID = \"langwatch.langchain.run.id\";\n\n/**\n * LangWatch LangChain run tags attribute key\n * Used to store tags associated with a LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_TAGS = \"langwatch.langchain.run.tags\";\n\n/**\n * LangWatch LangChain run type attribute key\n * Used to identify the type of LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_TYPE = \"langwatch.langchain.run.type\";\n\n/**\n * LangWatch LangChain run metadata attribute key\n * Used to store metadata associated with a LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_METADATA = \"langwatch.langchain.run.metadata\";\n\n/**\n * LangWatch LangChain run extra parameters attribute key\n * Used to store additional parameters for a LangChain run\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_EXTRA_PARAMS = \"langwatch.langchain.run.extra_params\";\n\n/**\n * LangWatch LangChain run parent ID attribute key\n * Used to identify the parent run in a hierarchical structure\n */\nexport const ATTR_LANGWATCH_LANGCHAIN_RUN_PARENT_ID =\n \"langwatch.langchain.run.parent.id\";\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","/**\n * Semantic conventions module for LangWatch observability\n *\n * This module exports all semantic convention constants used for:\n * - Attributes: Key-value pairs for span and event metadata\n * - Values: Predefined values for semantic convention attributes\n * - Events: Event names for log records and traces\n *\n * @see {@link ./attributes} for attribute constants\n * @see {@link ./values} for value constants\n * @see {@link ./events} for event constants\n */\n\nexport * from \"./attributes\";\nexport * from \"./values\";\nexport * from \"./events\";\n","/*\n This file contains the values for the OpenTelemetry semantic conventions for Gen AI,\n some of which are still in development and therefor currently considered to be\n experimental.\n\n 👉 https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/\n*/\n\n/**\n * Anthropic AI system identifier\n * Used to identify Anthropic's Claude models\n */\nexport const VAL_GEN_AI_SYSTEM_ANTHROPIC = \"anthropic\";\n\n/**\n * AWS Bedrock system identifier\n * Used to identify AWS Bedrock AI services\n */\nexport const VAL_GEN_AI_SYSTEM_AWS_BEDROCK = \"aws.bedrock\";\n\n/**\n * Azure AI Inference system identifier\n * Used to identify Azure AI Inference services\n */\nexport const VAL_GEN_AI_SYSTEM_AZURE_AI_INFERENCE = \"azure.ai.inference\";\n\n/**\n * Azure AI OpenAI system identifier\n * Used to identify Azure OpenAI services\n */\nexport const VAL_GEN_AI_SYSTEM_AZURE_AI_OPENAI = \"azure.ai.openai\";\n\n/**\n * Cohere system identifier\n * Used to identify Cohere AI models\n */\nexport const VAL_GEN_AI_SYSTEM_COHERE = \"cohere\";\n\n/**\n * DeepSeek system identifier\n * Used to identify DeepSeek AI models\n */\nexport const VAL_GEN_AI_SYSTEM_DEEPSEEK = \"deepseek\";\n\n/**\n * GCP Gemini system identifier\n * Used to identify Google Cloud Gemini models\n */\nexport const VAL_GEN_AI_SYSTEM_GCP_GEMINI = \"gcp.gemini\";\n\n/**\n * GCP Gen AI system identifier\n * Used to identify Google Cloud Generative AI services\n */\nexport const VAL_GEN_AI_SYSTEM_GCP_GEN_AI = \"gcp.gen_ai\";\n\n/**\n * GCP Vertex AI system identifier\n * Used to identify Google Cloud Vertex AI services\n */\nexport const VAL_GEN_AI_SYSTEM_GCP_VERTEX_AI = \"gcp.vertex_ai\";\n\n/**\n * Groq system identifier\n * Used to identify Groq AI models\n */\nexport const VAL_GEN_AI_SYSTEM_GROQ = \"groq\";\n\n/**\n * IBM WatsonX AI system identifier\n * Used to identify IBM WatsonX AI services\n */\nexport const VAL_GEN_AI_SYSTEM_IBM_WATSONX_AI = \"ibm.watsonx.ai\";\n\n/**\n * Mistral AI system identifier\n * Used to identify Mistral AI models\n */\nexport const VAL_GEN_AI_SYSTEM_MISTRAL_AI = \"mistral_ai\";\n\n/**\n * OpenAI system identifier\n * Used to identify OpenAI models and services\n */\nexport const VAL_GEN_AI_SYSTEM_OPENAI = \"openai\";\n\n/**\n * Perplexity system identifier\n * Used to identify Perplexity AI models\n */\nexport const VAL_GEN_AI_SYSTEM_PERPLEXITY = \"perplexity\";\n\n/**\n * XAI system identifier\n * Used to identify XAI models and services\n */\nexport const VAL_GEN_AI_SYSTEM_XAI = \"xai\";\n\n/**\n * Content filter finish reason\n * Used when generation stops due to content filtering\n */\nexport const VAL_GEN_AI_FINISH_REASON_CONTENT_FILTER = \"content_filter\";\n\n/**\n * Error finish reason\n * Used when generation stops due to an error\n */\nexport const VAL_GEN_AI_FINISH_REASON_ERROR = \"error\";\n\n/**\n * Length finish reason\n * Used when generation stops due to length limits\n */\nexport const VAL_GEN_AI_FINISH_REASON_LENGTH = \"length\";\n\n/**\n * Stop finish reason\n * Used when generation stops due to stop tokens\n */\nexport const VAL_GEN_AI_FINISH_REASON_STOP = \"stop\";\n\n/**\n * Tool calls finish reason\n * Used when generation stops due to tool calls\n */\nexport const VAL_GEN_AI_FINISH_REASON_TOOL_CALLS = \"tool_calls\";\n\n/**\n * Union type of all supported GenAI system identifiers\n * Used for type safety when working with system identification\n */\nexport type VAL_GEN_AI_SYSTEMS =\n | typeof VAL_GEN_AI_SYSTEM_ANTHROPIC\n | typeof VAL_GEN_AI_SYSTEM_AWS_BEDROCK\n | typeof VAL_GEN_AI_SYSTEM_AZURE_AI_INFERENCE\n | typeof VAL_GEN_AI_SYSTEM_AZURE_AI_OPENAI\n | typeof VAL_GEN_AI_SYSTEM_COHERE\n | typeof VAL_GEN_AI_SYSTEM_DEEPSEEK\n | typeof VAL_GEN_AI_SYSTEM_GCP_GEMINI\n | typeof VAL_GEN_AI_SYSTEM_GCP_GEN_AI\n | typeof VAL_GEN_AI_SYSTEM_GCP_VERTEX_AI\n | typeof VAL_GEN_AI_SYSTEM_GROQ\n | typeof VAL_GEN_AI_SYSTEM_IBM_WATSONX_AI\n | typeof VAL_GEN_AI_SYSTEM_MISTRAL_AI\n | typeof VAL_GEN_AI_SYSTEM_OPENAI\n | typeof VAL_GEN_AI_SYSTEM_PERPLEXITY\n | typeof VAL_GEN_AI_SYSTEM_XAI;\n\n/**\n * Union type of all supported GenAI finish reasons\n * Used for type safety when working with generation completion reasons\n */\nexport type VAL_GEN_AI_FINISH_REASONS =\n | typeof VAL_GEN_AI_FINISH_REASON_CONTENT_FILTER\n | typeof VAL_GEN_AI_FINISH_REASON_ERROR\n | typeof VAL_GEN_AI_FINISH_REASON_LENGTH\n | typeof VAL_GEN_AI_FINISH_REASON_STOP\n | typeof VAL_GEN_AI_FINISH_REASON_TOOL_CALLS;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-WM2GRSRW.js","../package.json","../src/observability/exporters/langwatch-exporter.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,sDAA4B;AAC5B;AACA;ACHE,IAAA,QAAA,EAAW,oBAAA;ADKb;AACA;AERA,gFAAkC;AA6B3B,IAAM,kBAAA,EAAN,MAAA,QAAgC,yCAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASvD,WAAA,CAAY,MAAA,EAAiB,WAAA,EAAsB;AACjD,IAAA,MAAM,UAAA,EAAY,OAAA,GAAA,KAAA,EAAA,OAAA,EAAU,wCAAA,CAAU;AACtC,IAAA,MAAM,YAAA,EAAc,YAAA,GAAA,KAAA,EAAA,YAAA,EAAe,0CAAA,CAAY;AAE/C,IAAA,KAAA,CAAM;AAAA,MACJ,OAAA,EAAS;AAAA,QACP,eAAA,EAAiB,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA;AACT,QAAA;AACC,QAAA;AACJ,QAAA;AAC1B,MAAA;AACK,MAAA;AACN,IAAA;AACH,EAAA;AACF;AFnB6C;AACA;AACA;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-WM2GRSRW.js","sourcesContent":[null,"{\n \"name\": \"langwatch\",\n \"version\": \"0.3.0-prerelease.2\",\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 \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./evaluation\": {\n \"types\": \"./dist/evaluation/index.d.ts\",\n \"require\": \"./dist/evaluation/index.js\",\n \"import\": \"./dist/evaluation/index.mjs\"\n },\n \"./observability\": {\n \"types\": \"./dist/observability/index.d.ts\",\n \"require\": \"./dist/observability/index.js\",\n \"import\": \"./dist/observability/index.mjs\"\n },\n \"./observability/instrumentation/langchain\": {\n \"types\": \"./dist/observability/instrumentation/langchain/index.d.ts\",\n \"require\": \"./dist/observability/instrumentation/langchain/index.js\",\n \"import\": \"./dist/observability/instrumentation/langchain/index.mjs\"\n },\n \"./prompt\": {\n \"types\": \"./dist/prompt/index.d.ts\",\n \"require\": \"./dist/prompt/index.js\",\n \"import\": \"./dist/prompt/index.mjs\"\n },\n \"./node\": {\n \"types\": \"./dist/client-node.d.ts\",\n \"import\": \"./dist/client-node.mjs\",\n \"require\": \"./dist/client-node.js\"\n },\n \"./browser\": {\n \"types\": \"./dist/client-browser.d.ts\",\n \"import\": \"./dist/client-browser.mjs\",\n \"require\": \"./dist/client-browser.js\"\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/langwatch/langwatch.git\",\n \"directory\": \"typescript-sdk\"\n },\n \"scripts\": {\n \"prepare\": \"./copy-types.sh && pnpm run generate:openapi-types\",\n \"test\": \"vitest\",\n \"prebuild\": \"pnpm run prepare\",\n \"build\": \"tsgo --noEmit && tsup\",\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 },\n \"author\": \"LangWatch\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=20\",\n \"pnpm\": \">=8\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.32.0\",\n \"@types/debug\": \"^4.1.12\",\n \"@types/node\": \"^24.1.0\",\n \"@typescript/native-preview\": \"7.0.0-dev.20250804.1\",\n \"@vitest/coverage-v8\": \"3.2.4\",\n \"dotenv\": \"^17.2.1\",\n \"esbuild\": \"^0.25.8\",\n \"eslint\": \"^9.32.0\",\n \"fets\": \"^0.8.5\",\n \"nock\": \"^14.0.8\",\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/core\": \"^2.0.1\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"^0.203.0\",\n \"@opentelemetry/resources\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-base\": \"^2.0.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.36.0\",\n \"liquidjs\": \"^10.21.1\",\n \"openapi-fetch\": \"^0.14.0\",\n \"xksuid\": \"^0.0.4\",\n \"zod\": \"^4.0.14\"\n },\n \"peerDependencies\": {\n \"@ai-sdk/openai\": \"^2.0.0\",\n \"@langchain/core\": \"^0.3.66\",\n \"@langchain/openai\": \"^0.6.3\",\n \"@langchain/langgraph\": \"^0.4.2\",\n \"@opentelemetry/context-async-hooks\": \"^2.0.1\",\n \"@opentelemetry/context-zone\": \"^2.0.1\",\n \"@opentelemetry/sdk-node\": \"^0.203.0\",\n \"@opentelemetry/sdk-trace-web\": \"^2.0.1\",\n \"@vercel/otel\": \"^1.13.0\",\n \"langchain\": \"^0.3.30\"\n }\n}\n","import { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { version } from \"../../../package.json\";\nimport { getApiKey, getEndpoint } from \"../../client\";\n\n/**\n * LangWatchExporter 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 { LangWatchExporter } from '@langwatch/observability';\n *\n * // Using environment variables/fallback configuration\n * const exporter = new LangWatchExporter();\n *\n * // Using custom API key and endpoint\n *\n * // With environment variables/fallback configuration\n * const exporter = new LangWatchExporter();\n *\n * // With custom API key and endpoint\n * const exporter = new LangWatchExporter('api-key', 'https://custom.langwatch.com');\n * ```\n */\nexport class LangWatchExporter extends OTLPTraceExporter {\n /**\n * Creates a new LangWatchExporter instance.\n *\n * @param apiKey - Optional API key for LangWatch authentication. If not provided,\n * will use environment variables or fallback configuration.\n * @param endpointURL - Optional custom endpoint URL for LangWatch ingestion.\n * If not provided, will use environment variables or fallback configuration.\n */\n constructor(apiKey?: string, endpointURL?: string) {\n const setApiKey = apiKey ?? getApiKey();\n const setEndpoint = endpointURL ?? getEndpoint();\n\n super({\n headers: {\n \"Authorization\": `Bearer ${setApiKey}`,\n \"X-LangWatch-SDK-Version\": version,\n \"X-LangWatch-SDK-Language\": `typescript-${typeof process !== \"undefined\" ? \"node\" : \"browser\"}`,\n \"X-LangWatch-SDK-Name\": \"langwatch-observability-sdk\",\n },\n url: setEndpoint,\n });\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/api/client.ts","../src/prompt/prompt.ts","../src/prompt/service.ts","../src/prompt/tracer.ts","../src/prompt/get-prompt.ts","../src/prompt/get-prompt-version.ts"],"sourcesContent":["import openApiCreateClient from \"openapi-fetch\";\nimport type { paths } from \"../generated/openapi/api-client\";\nimport { z } from \"zod\";\nimport { getApiKey, getEndpoint } from \"../../client\";\n\n// Define the client type explicitly to avoid naming issues\nexport type LangwatchApiClient = ReturnType<typeof openApiCreateClient<paths>>;\n\nconst configSchema = z.object({\n apiKey: z.string().min(1, \"API key is required\"),\n endpoint: z.string().url(\"Endpoint must be a valid URL\"),\n});\n\nexport function createLangWatchApiClient(apiKey?: string | undefined, endpoint?: string | undefined ): LangwatchApiClient {\n // This will error if the config is invalid\n const config = configSchema.parse({\n apiKey: apiKey ?? getApiKey(),\n endpoint: endpoint ?? getEndpoint(),\n });\n\n return openApiCreateClient<paths>({\n baseUrl: config.endpoint,\n headers: {\n \"X-Auth-Token\": config.apiKey,\n \"Content-Type\": \"application/json\",\n },\n });\n}\n\n\n","import { Liquid } from \"liquidjs\";\nimport type { paths } from \"../internal/generated/openapi/api-client\";\n\n// Extract the prompt response type from OpenAPI schema\nexport type PromptResponse = NonNullable<\n paths[\"/api/prompts/{id}\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n>;\n\n// Type for template variables - supporting common data types\nexport type TemplateVariables = Record<\n string,\n string | number | boolean | object | null\n>;\n\n/**\n * Error class for template compilation issues\n */\nexport class PromptCompilationError extends Error {\n constructor(\n message: string,\n public readonly template: string,\n public readonly originalError?: any\n ) {\n super(message);\n this.name = \"PromptCompilationError\";\n }\n}\n\n// Global Liquid instance - shared across all prompts for efficiency\nconst liquid = new Liquid({\n strictFilters: true,\n});\n\nexport class Prompt implements PromptResponse {\n public readonly id!: string;\n public readonly name!: string;\n public readonly updatedAt!: string;\n public readonly version!: number;\n public readonly versionId!: string;\n public readonly versionCreatedAt!: string;\n public readonly model!: string;\n public readonly prompt!: string;\n public readonly messages!: PromptResponse[\"messages\"];\n public readonly response_format!: PromptResponse[\"response_format\"];\n\n constructor(promptData: PromptResponse) {\n this.id = promptData.id;\n this.name = promptData.name;\n this.updatedAt = promptData.updatedAt;\n this.version = promptData.version;\n this.versionId = promptData.versionId;\n this.versionCreatedAt = promptData.versionCreatedAt;\n this.model = promptData.model;\n this.prompt = promptData.prompt;\n this.messages = promptData.messages;\n this.response_format = promptData.response_format;\n }\n\n /**\n * Get the raw prompt data from the API\n */\n get raw(): PromptResponse {\n return this;\n }\n\n /**\n * Compile the prompt template with provided variables (lenient - missing variables become empty)\n * @param variables - Object containing variable values for template compilation\n * @returns CompiledPrompt instance with compiled content\n */\n private _compile(variables: TemplateVariables, strict: boolean): CompiledPrompt {\n try {\n // Compile main prompt\n const compiledPrompt = this.prompt\n ? liquid.parseAndRenderSync(this.prompt, variables, {\n strictVariables: strict,\n })\n : \"\";\n\n // Compile messages\n const compiledMessages = (this.messages || []).map((message) => ({\n ...message,\n content: message.content\n ? liquid.parseAndRenderSync(message.content, variables, {\n strictVariables: strict,\n })\n : message.content,\n }));\n\n // Create new prompt data with compiled content\n const compiledData: PromptResponse = {\n ...this,\n prompt: compiledPrompt,\n messages: compiledMessages,\n };\n\n return new CompiledPrompt(compiledData, this);\n } catch (error) {\n const templateStr = this.prompt || JSON.stringify(this.messages);\n throw new PromptCompilationError(\n `Failed to compile prompt template: ${error instanceof Error ? error.message : \"Unknown error\"\n }`,\n templateStr,\n error\n );\n }\n }\n\n compile(variables: TemplateVariables = {}): CompiledPrompt {\n return this._compile(variables, false);\n }\n\n /**\n * Compile with validation - throws error if required variables are missing\n * @param variables - Template variables\n * @returns CompiledPrompt instance with compiled content\n */\n compileStrict(variables: TemplateVariables): CompiledPrompt {\n return this._compile(variables, true);\n }\n}\n\n/**\n * Represents a compiled prompt that extends Prompt with reference to the original template\n */\nexport class CompiledPrompt extends Prompt {\n constructor(\n compiledData: PromptResponse,\n public readonly original: Prompt\n ) {\n super(compiledData);\n }\n}\n","import {\n createLangWatchApiClient,\n type LangwatchApiClient,\n} from \"../internal/api/client\";\nimport type { paths } from \"../internal/generated/openapi/api-client\";\nimport { Prompt } from \"./prompt\";\n\n// Extract types directly from OpenAPI schema for strong type safety.\ntype CreatePromptBody = NonNullable<\n paths[\"/api/prompts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\ntype UpdatePromptBody = NonNullable<\n paths[\"/api/prompts/{id}\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\ntype CreateVersionBody = NonNullable<\n paths[\"/api/prompts/{id}/versions\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n\n/**\n * Custom error class for Prompts API operations.\n * Provides context about the failed operation and the original error.\n */\nexport class PromptsError extends Error {\n constructor(\n message: string,\n public readonly operation: string,\n public readonly originalError?: any,\n ) {\n super(message);\n this.name = \"PromptsError\";\n }\n}\n\ninterface PromptServiceOptions {\n client?: LangwatchApiClient;\n}\n\n/**\n * Service for managing prompt resources via the Langwatch API.\n *\n * Responsibilities:\n * - CRUD operations for prompts\n * - Creating prompt versions\n * - Error handling with contextual information\n *\n * All methods return Prompt instances, which encapsulate prompt data and template logic.\n */\nexport class PromptService {\n private client: LangwatchApiClient;\n private static instance: PromptService | null = null;\n\n constructor(opts?: PromptServiceOptions) {\n this.client = opts?.client ?? createLangWatchApiClient();\n }\n\n /**\n * Gets the singleton instance of PromptService.\n * Creates the instance lazily on first access.\n */\n public static getInstance(): PromptService {\n if (!PromptService.instance) {\n PromptService.instance = new PromptService();\n }\n return PromptService.instance;\n }\n\n /**\n * Resets the singleton instance. Primarily used for testing.\n */\n public static resetInstance(): void {\n PromptService.instance = null;\n }\n\n /**\n * Handles API errors by throwing a PromptsError with operation context.\n * @param operation Description of the operation being performed.\n * @param error The error object returned from the API client.\n * @throws {PromptsError}\n */\n private handleApiError(operation: string, error: any): never {\n const errorMessage =\n typeof error === \"string\"\n ? error\n : error?.error ?? error?.message ?? \"Unknown error occurred\";\n throw new PromptsError(\n `Failed to ${operation}: ${errorMessage}`,\n operation,\n error,\n );\n }\n\n /**\n * Fetches all prompts from the API.\n * @returns Array of Prompt instances.\n * @throws {PromptsError} If the API call fails.\n */\n async getAll(): Promise<Prompt[]> {\n const { data, error } = await this.client.GET(\"/api/prompts\");\n if (error) this.handleApiError(\"fetch all prompts\", error);\n return data.map((promptData) => new Prompt(promptData));\n }\n\n /**\n * Fetches a single prompt by its ID.\n * @param id The prompt's unique identifier.\n * @returns The Prompt instance.\n * @throws {PromptsError} If the API call fails.\n */\n async get(id: string): Promise<Prompt> {\n const { data, error } = await this.client.GET(\"/api/prompts/{id}\", {\n params: { path: { id } },\n });\n if (error) this.handleApiError(`fetch prompt with ID \"${id}\"`, error);\n return new Prompt(data);\n }\n\n /**\n * Creates a new prompt.\n * @param params The prompt creation payload, matching the OpenAPI schema.\n * @returns The created Prompt instance.\n * @throws {PromptsError} If the API call fails.\n */\n async create(params: CreatePromptBody): Promise<Prompt> {\n const { data, error } = await this.client.POST(\"/api/prompts\", {\n body: params,\n });\n if (error) this.handleApiError(\"create prompt\", error);\n return new Prompt(data);\n }\n\n /**\n * Updates an existing prompt.\n * @param id The prompt's unique identifier.\n * @param params The update payload, matching the OpenAPI schema.\n * @returns The updated Prompt instance.\n * @throws {PromptsError} If the API call fails.\n * @remarks\n * The API does not return the updated prompt directly, so this method fetches it after updating.\n */\n async update(id: string, params: UpdatePromptBody): Promise<Prompt> {\n const { error } = await this.client.PUT(\"/api/prompts/{id}\", {\n params: { path: { id } },\n body: params,\n });\n if (error) this.handleApiError(`update prompt with ID \"${id}\"`, error);\n // TODO: This is a workaround to get the updated prompt. It would be better to return the updated prompt directly.\n return await this.get(id);\n }\n\n /**\n * Deletes a prompt by its ID.\n * @param id The prompt's unique identifier.\n * @throws {PromptsError} If the API call fails.\n */\n async delete(id: string): Promise<void> {\n const { error } = await this.client.DELETE(\"/api/prompts/{id}\", {\n params: { path: { id } },\n });\n if (error) this.handleApiError(`delete prompt with ID \"${id}\"`, error);\n }\n\n /**\n * Fetches all versions for a given prompt.\n * @param id The prompt's unique identifier.\n * @throws {PromptsError} If the API call fails.\n */\n async getVersions(\n id: string,\n ): Promise<Record<string, Prompt>> {\n const { data, error } = await this.client.GET(\n \"/api/prompts/{id}/versions\",\n {\n params: { path: { id } },\n },\n );\n if (error)\n this.handleApiError(`fetch versions for prompt with ID \"${id}\"`, error);\n\n const prompts: Record<string, Prompt> = {};\n const dataTypeCorrected = data as unknown as NonNullable<\n paths[\"/api/prompts/{id}/versions\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n >[];\n\n for (const version of dataTypeCorrected) {\n prompts[version.id] = new Prompt({\n id: version.configId,\n messages: version.configData.messages,\n model: version.configData.model,\n prompt: version.configData.prompt,\n response_format: null,\n name: `Prompt ${version.configId}@${version.id}`,\n updatedAt: version.createdAt,\n version: version.configData.version ?? 0,\n versionCreatedAt: version.createdAt,\n versionId: version.id,\n });\n }\n\n return prompts;\n }\n\n /**\n * Creates a new version for a given prompt.\n * @param id The prompt's unique identifier.\n * @param params The version creation payload, matching the OpenAPI schema.\n * @returns The updated Prompt instance.\n * @throws {PromptsError} If the API call fails.\n * @remarks\n * The API does not return the updated prompt directly, so this method fetches it after creation.\n */\n async createVersion(id: string, params: CreateVersionBody): Promise<Prompt> {\n const { error } = await this.client.POST(\"/api/prompts/{id}/versions\", {\n params: { path: { id } },\n body: params,\n });\n if (error)\n this.handleApiError(`create version for prompt with ID \"${id}\"`, error);\n // TODO: This is a workaround to get the updated prompt. It would be better to return the updated prompt directly.\n return await this.get(id);\n }\n}\n","import { getLangWatchTracer } from \"../observability/trace\";\n\nexport const tracer = getLangWatchTracer(\"langwatch.prompt\");\n","import { PromptService } from \"./service\";\nimport { CompiledPrompt, Prompt, TemplateVariables } from \"./prompt\";\nimport * as intSemconv from \"../observability/semconv\";\nimport { tracer } from \"./tracer\";\nimport { canAutomaticallyCaptureInput, canAutomaticallyCaptureOutput } from \"../client\";\n\nexport async function getPrompt(id: string, variables: TemplateVariables): Promise<CompiledPrompt>;\nexport async function getPrompt(id: string): Promise<Prompt>;\n\nexport async function getPrompt(id: string, variables?: TemplateVariables): Promise<Prompt | CompiledPrompt> {\n return tracer.withActiveSpan(\"retrieve prompt\", async (span) => {\n span.setType(\"prompt\");\n span.setAttribute(intSemconv.ATTR_LANGWATCH_PROMPT_ID, id);\n\n const service = PromptService.getInstance();\n const prompt = await service.get(id);\n\n if (canAutomaticallyCaptureOutput()) {\n span.setOutput(prompt);\n }\n\n span.setAttributes({\n [intSemconv.ATTR_LANGWATCH_PROMPT_ID]: id,\n [intSemconv.ATTR_LANGWATCH_PROMPT_VERSION_ID]: prompt.versionId,\n [intSemconv.ATTR_LANGWATCH_PROMPT_VERSION_NUMBER]: prompt.version,\n });\n\n if (variables) {\n if (canAutomaticallyCaptureInput()) {\n span.setAttribute(\n intSemconv.ATTR_LANGWATCH_PROMPT_VARIABLES,\n JSON.stringify({\n type: \"json\",\n value: variables,\n }),\n );\n }\n\n return prompt.compile(variables);\n }\n\n return prompt;\n });\n}\n","import { PromptService } from \"./service\";\nimport { CompiledPrompt, Prompt, TemplateVariables } from \"./prompt\";\nimport * as intSemconv from \"../observability/semconv\";\nimport { tracer } from \"./tracer\";\nimport { canAutomaticallyCaptureInput, canAutomaticallyCaptureOutput } from \"../client\";\n\nexport async function getPromptVersion(id: string, versionId: string, variables: TemplateVariables): Promise<CompiledPrompt>;\nexport async function getPromptVersion(id: string, versionId: string): Promise<Prompt>;\n\nexport async function getPromptVersion(id: string, versionId: string, variables?: TemplateVariables): Promise<Prompt | CompiledPrompt> {\n return tracer.withActiveSpan(\"retrieve prompt version\", async (span) => {\n span.setType(\"prompt\");\n span.setAttribute(intSemconv.ATTR_LANGWATCH_PROMPT_ID, id);\n\n const service = PromptService.getInstance();\n const prompt = await service.getVersions(id);\n const promptVersion = prompt[versionId];\n\n if (!promptVersion) {\n throw new Error(`Prompt version ${versionId} not found for prompt ${id}`);\n }\n\n if (canAutomaticallyCaptureOutput()) {\n span.setOutput(prompt);\n }\n\n span.setAttributes({\n [intSemconv.ATTR_LANGWATCH_PROMPT_ID]: id,\n [intSemconv.ATTR_LANGWATCH_PROMPT_VERSION_ID]: promptVersion.id,\n [intSemconv.ATTR_LANGWATCH_PROMPT_VERSION_NUMBER]: promptVersion.version,\n });\n\n if (variables) {\n if (canAutomaticallyCaptureInput()) {\n span.setAttribute(\n intSemconv.ATTR_LANGWATCH_PROMPT_VARIABLES,\n JSON.stringify({\n type: \"json\",\n value: variables,\n }),\n );\n }\n\n return promptVersion.compile(variables);\n }\n\n return promptVersion;\n });\n}\n"],"mappings":"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","names":[]}