@mastra/langfuse 1.0.0-beta.1 → 1.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,146 @@
1
1
  # @mastra/langfuse
2
2
 
3
+ ## 1.0.0-beta.11
4
+
5
+ ### Minor Changes
6
+
7
+ - feat(observability): add zero-config environment variable support for all exporters ([#11686](https://github.com/mastra-ai/mastra/pull/11686))
8
+
9
+ All observability exporters now support zero-config setup via environment variables. Set the appropriate environment variables and instantiate exporters with no configuration:
10
+ - **Langfuse**: `LANGFUSE_PUBLIC_KEY`, `LANGFUSE_SECRET_KEY`, `LANGFUSE_BASE_URL`
11
+ - **Braintrust**: `BRAINTRUST_API_KEY`, `BRAINTRUST_ENDPOINT`
12
+ - **PostHog**: `POSTHOG_API_KEY`, `POSTHOG_HOST`
13
+ - **Arize/Phoenix**: `ARIZE_SPACE_ID`, `ARIZE_API_KEY`, `ARIZE_PROJECT_NAME`, `PHOENIX_ENDPOINT`, `PHOENIX_API_KEY`, `PHOENIX_PROJECT_NAME`
14
+ - **OTEL Providers**:
15
+ - Dash0: `DASH0_API_KEY`, `DASH0_ENDPOINT`, `DASH0_DATASET`
16
+ - SigNoz: `SIGNOZ_API_KEY`, `SIGNOZ_REGION`, `SIGNOZ_ENDPOINT`
17
+ - New Relic: `NEW_RELIC_LICENSE_KEY`, `NEW_RELIC_ENDPOINT`
18
+ - Traceloop: `TRACELOOP_API_KEY`, `TRACELOOP_DESTINATION_ID`, `TRACELOOP_ENDPOINT`
19
+ - Laminar: `LMNR_PROJECT_API_KEY`, `LAMINAR_ENDPOINT`, `LAMINAR_TEAM_ID`
20
+
21
+ Example usage:
22
+
23
+ ```typescript
24
+ // Zero-config - reads from environment variables
25
+ new LangfuseExporter();
26
+ new BraintrustExporter();
27
+ new PosthogExporter();
28
+ new ArizeExporter();
29
+ new OtelExporter({ provider: { signoz: {} } });
30
+ ```
31
+
32
+ Explicit configuration still works and takes precedence over environment variables.
33
+
34
+ ### Patch Changes
35
+
36
+ - Updated dependencies [[`08766f1`](https://github.com/mastra-ai/mastra/commit/08766f15e13ac0692fde2a8bd366c2e16e4321df), [`ae8baf7`](https://github.com/mastra-ai/mastra/commit/ae8baf7d8adcb0ff9dac11880400452bc49b33ff), [`cfabdd4`](https://github.com/mastra-ai/mastra/commit/cfabdd4aae7a726b706942d6836eeca110fb6267), [`a0e437f`](https://github.com/mastra-ai/mastra/commit/a0e437fac561b28ee719e0302d72b2f9b4c138f0), [`bec5efd`](https://github.com/mastra-ai/mastra/commit/bec5efde96653ccae6604e68c696d1bc6c1a0bf5), [`9eedf7d`](https://github.com/mastra-ai/mastra/commit/9eedf7de1d6e0022a2f4e5e9e6fe1ec468f9b43c)]:
37
+ - @mastra/core@1.0.0-beta.21
38
+
39
+ ## 1.0.0-beta.10
40
+
41
+ ### Patch Changes
42
+
43
+ - Add embedded documentation support for Mastra packages ([#11472](https://github.com/mastra-ai/mastra/pull/11472))
44
+
45
+ Mastra packages now include embedded documentation in the published npm package under `dist/docs/`. This enables coding agents and AI assistants to understand and use the framework by reading documentation directly from `node_modules`.
46
+
47
+ Each package includes:
48
+ - **SKILL.md** - Entry point explaining the package's purpose and capabilities
49
+ - **SOURCE_MAP.json** - Machine-readable index mapping exports to types and implementation files
50
+ - **Topic folders** - Conceptual documentation organized by feature area
51
+
52
+ Documentation is driven by the `packages` frontmatter field in MDX files, which maps docs to their corresponding packages. CI validation ensures all docs include this field.
53
+
54
+ - Updated dependencies [[`d2d3e22`](https://github.com/mastra-ai/mastra/commit/d2d3e22a419ee243f8812a84e3453dd44365ecb0), [`bc72b52`](https://github.com/mastra-ai/mastra/commit/bc72b529ee4478fe89ecd85a8be47ce0127b82a0), [`05b8bee`](https://github.com/mastra-ai/mastra/commit/05b8bee9e50e6c2a4a2bf210eca25ee212ca24fa), [`c042bd0`](https://github.com/mastra-ai/mastra/commit/c042bd0b743e0e86199d0cb83344ca7690e34a9c), [`940a2b2`](https://github.com/mastra-ai/mastra/commit/940a2b27480626ed7e74f55806dcd2181c1dd0c2), [`e0941c3`](https://github.com/mastra-ai/mastra/commit/e0941c3d7fc75695d5d258e7008fd5d6e650800c), [`0c0580a`](https://github.com/mastra-ai/mastra/commit/0c0580a42f697cd2a7d5973f25bfe7da9055038a), [`28f5f89`](https://github.com/mastra-ai/mastra/commit/28f5f89705f2409921e3c45178796c0e0d0bbb64), [`e601b27`](https://github.com/mastra-ai/mastra/commit/e601b272c70f3a5ecca610373aa6223012704892), [`3d3366f`](https://github.com/mastra-ai/mastra/commit/3d3366f31683e7137d126a3a57174a222c5801fb), [`5a4953f`](https://github.com/mastra-ai/mastra/commit/5a4953f7d25bb15ca31ed16038092a39cb3f98b3), [`eb9e522`](https://github.com/mastra-ai/mastra/commit/eb9e522ce3070a405e5b949b7bf5609ca51d7fe2), [`20e6f19`](https://github.com/mastra-ai/mastra/commit/20e6f1971d51d3ff6dd7accad8aaaae826d540ed), [`8a6734a`](https://github.com/mastra-ai/mastra/commit/8a6734a9b3eb192ada1f723d248b08b2258dd6b3), [`4f0b3c6`](https://github.com/mastra-ai/mastra/commit/4f0b3c66f196c06448487f680ccbb614d281e2f7), [`74c4f22`](https://github.com/mastra-ai/mastra/commit/74c4f22ed4c71e72598eacc346ba95cdbc00294f), [`81b6a8f`](https://github.com/mastra-ai/mastra/commit/81b6a8ff79f49a7549d15d66624ac1a0b8f5f971), [`e4d366a`](https://github.com/mastra-ai/mastra/commit/e4d366aeb500371dd4210d6aa8361a4c21d87034), [`a4f010b`](https://github.com/mastra-ai/mastra/commit/a4f010b22e4355a5fdee70a1fe0f6e4a692cc29e), [`73b0bb3`](https://github.com/mastra-ai/mastra/commit/73b0bb394dba7c9482eb467a97ab283dbc0ef4db), [`5627a8c`](https://github.com/mastra-ai/mastra/commit/5627a8c6dc11fe3711b3fa7a6ffd6eb34100a306), [`3ff45d1`](https://github.com/mastra-ai/mastra/commit/3ff45d10e0c80c5335a957ab563da72feb623520), [`251df45`](https://github.com/mastra-ai/mastra/commit/251df4531407dfa46d805feb40ff3fb49769f455), [`f894d14`](https://github.com/mastra-ai/mastra/commit/f894d148946629af7b1f452d65a9cf864cec3765), [`c2b9547`](https://github.com/mastra-ai/mastra/commit/c2b9547bf435f56339f23625a743b2147ab1c7a6), [`580b592`](https://github.com/mastra-ai/mastra/commit/580b5927afc82fe460dfdf9a38a902511b6b7e7f), [`58e3931`](https://github.com/mastra-ai/mastra/commit/58e3931af9baa5921688566210f00fb0c10479fa), [`08bb631`](https://github.com/mastra-ai/mastra/commit/08bb631ae2b14684b2678e3549d0b399a6f0561e), [`4fba91b`](https://github.com/mastra-ai/mastra/commit/4fba91bec7c95911dc28e369437596b152b04cd0), [`12b0cc4`](https://github.com/mastra-ai/mastra/commit/12b0cc4077d886b1a552637dedb70a7ade93528c)]:
55
+ - @mastra/core@1.0.0-beta.20
56
+ - @mastra/observability@1.0.0-beta.10
57
+
58
+ ## 1.0.0-beta.9
59
+
60
+ ### Patch Changes
61
+
62
+ - Updated dependencies [[`51fec93`](https://github.com/mastra-ai/mastra/commit/51fec93ffd2f167b1247c23e5c04ed24e369ff75), [`5947fcd`](https://github.com/mastra-ai/mastra/commit/5947fcdd425531f29f9422026d466c2ee3113c93)]:
63
+ - @mastra/observability@1.0.0-beta.9
64
+ - @mastra/core@1.0.0-beta.18
65
+
66
+ ## 1.0.0-beta.8
67
+
68
+ ### Patch Changes
69
+
70
+ - Updated dependencies [[`3d93a15`](https://github.com/mastra-ai/mastra/commit/3d93a15796b158c617461c8b98bede476ebb43e2), [`efe406a`](https://github.com/mastra-ai/mastra/commit/efe406a1353c24993280ebc2ed61dd9f65b84b26), [`119e5c6`](https://github.com/mastra-ai/mastra/commit/119e5c65008f3e5cfca954eefc2eb85e3bf40da4), [`74e504a`](https://github.com/mastra-ai/mastra/commit/74e504a3b584eafd2f198001c6a113bbec589fd3), [`e33fdbd`](https://github.com/mastra-ai/mastra/commit/e33fdbd07b33920d81e823122331b0c0bee0bb59), [`929f69c`](https://github.com/mastra-ai/mastra/commit/929f69c3436fa20dd0f0e2f7ebe8270bd82a1529), [`8a73529`](https://github.com/mastra-ai/mastra/commit/8a73529ca01187f604b1f3019d0a725ac63ae55f)]:
71
+ - @mastra/core@1.0.0-beta.16
72
+ - @mastra/observability@1.0.0-beta.8
73
+
74
+ ## 1.0.0-beta.7
75
+
76
+ ### Patch Changes
77
+
78
+ - Updated dependencies [[`33a4d2e`](https://github.com/mastra-ai/mastra/commit/33a4d2e4ed8af51f69256232f00c34d6b6b51d48), [`4aaa844`](https://github.com/mastra-ai/mastra/commit/4aaa844a4f19d054490f43638a990cc57bda8d2f), [`4a1a6cb`](https://github.com/mastra-ai/mastra/commit/4a1a6cb3facad54b2bb6780b00ce91d6de1edc08), [`31d13d5`](https://github.com/mastra-ai/mastra/commit/31d13d5fdc2e2380e2e3ee3ec9fb29d2a00f265d), [`4c62166`](https://github.com/mastra-ai/mastra/commit/4c621669f4a29b1f443eca3ba70b814afa286266), [`7bcbf10`](https://github.com/mastra-ai/mastra/commit/7bcbf10133516e03df964b941f9a34e9e4ab4177), [`4353600`](https://github.com/mastra-ai/mastra/commit/43536005a65988a8eede236f69122e7f5a284ba2), [`6986fb0`](https://github.com/mastra-ai/mastra/commit/6986fb064f5db6ecc24aa655e1d26529087b43b3), [`053e979`](https://github.com/mastra-ai/mastra/commit/053e9793b28e970086b0507f7f3b76ea32c1e838), [`e26dc9c`](https://github.com/mastra-ai/mastra/commit/e26dc9c3ccfec54ae3dc3e2b2589f741f9ae60a6), [`55edf73`](https://github.com/mastra-ai/mastra/commit/55edf7302149d6c964fbb7908b43babfc2b52145), [`27c0009`](https://github.com/mastra-ai/mastra/commit/27c0009777a6073d7631b0eb7b481d94e165b5ca), [`dee388d`](https://github.com/mastra-ai/mastra/commit/dee388dde02f2e63c53385ae69252a47ab6825cc), [`3f3fc30`](https://github.com/mastra-ai/mastra/commit/3f3fc3096f24c4a26cffeecfe73085928f72aa63), [`d90ea65`](https://github.com/mastra-ai/mastra/commit/d90ea6536f7aa51c6545a4e9215b55858e98e16d), [`d171e55`](https://github.com/mastra-ai/mastra/commit/d171e559ead9f52ec728d424844c8f7b164c4510), [`10c2735`](https://github.com/mastra-ai/mastra/commit/10c27355edfdad1ee2b826b897df74125eb81fb8), [`1924cf0`](https://github.com/mastra-ai/mastra/commit/1924cf06816e5e4d4d5333065ec0f4bb02a97799), [`b339816`](https://github.com/mastra-ai/mastra/commit/b339816df0984d0243d944ac2655d6ba5f809cde)]:
79
+ - @mastra/core@1.0.0-beta.15
80
+ - @mastra/observability@1.0.0-beta.7
81
+
82
+ ## 1.0.0-beta.6
83
+
84
+ ### Patch Changes
85
+
86
+ - Updated dependencies [[`4f94ed8`](https://github.com/mastra-ai/mastra/commit/4f94ed8177abfde3ec536e3574883e075423350c), [`ac3cc23`](https://github.com/mastra-ai/mastra/commit/ac3cc2397d1966bc0fc2736a223abc449d3c7719), [`a86f4df`](https://github.com/mastra-ai/mastra/commit/a86f4df0407311e0d2ea49b9a541f0938810d6a9), [`029540c`](https://github.com/mastra-ai/mastra/commit/029540ca1e582fc2dd8d288ecd4a9b0f31a954ef), [`f1bbc94`](https://github.com/mastra-ai/mastra/commit/f1bbc941934a4806f5512b3fb1507c77420336b1), [`66741d1`](https://github.com/mastra-ai/mastra/commit/66741d1a99c4f42cf23a16109939e8348ac6852e), [`01b20fe`](https://github.com/mastra-ai/mastra/commit/01b20fefb7c67c2b7d79417598ef4e60256d1225), [`0dbf199`](https://github.com/mastra-ai/mastra/commit/0dbf199110f22192ce5c95b1c8148d4872b4d119), [`a7ce182`](https://github.com/mastra-ai/mastra/commit/a7ce1822a8785ce45d62dd5c911af465e144f7d7)]:
87
+ - @mastra/core@1.0.0-beta.14
88
+ - @mastra/observability@1.0.0-beta.6
89
+
90
+ ## 1.0.0-beta.5
91
+
92
+ ### Patch Changes
93
+
94
+ - Updated dependencies [[`d5ed981`](https://github.com/mastra-ai/mastra/commit/d5ed981c8701c1b8a27a5f35a9a2f7d9244e695f), [`9650cce`](https://github.com/mastra-ai/mastra/commit/9650cce52a1d917ff9114653398e2a0f5c3ba808), [`932d63d`](https://github.com/mastra-ai/mastra/commit/932d63dd51be9c8bf1e00e3671fe65606c6fb9cd), [`b760b73`](https://github.com/mastra-ai/mastra/commit/b760b731aca7c8a3f041f61d57a7f125ae9cb215), [`695a621`](https://github.com/mastra-ai/mastra/commit/695a621528bdabeb87f83c2277cf2bb084c7f2b4), [`2b459f4`](https://github.com/mastra-ai/mastra/commit/2b459f466fd91688eeb2a44801dc23f7f8a887ab), [`486352b`](https://github.com/mastra-ai/mastra/commit/486352b66c746602b68a95839f830de14c7fb8c0), [`09e4bae`](https://github.com/mastra-ai/mastra/commit/09e4bae18dd5357d2ae078a4a95a2af32168ab08), [`24b76d8`](https://github.com/mastra-ai/mastra/commit/24b76d8e17656269c8ed09a0c038adb9cc2ae95a), [`243a823`](https://github.com/mastra-ai/mastra/commit/243a8239c5906f5c94e4f78b54676793f7510ae3), [`486352b`](https://github.com/mastra-ai/mastra/commit/486352b66c746602b68a95839f830de14c7fb8c0), [`c61fac3`](https://github.com/mastra-ai/mastra/commit/c61fac3add96f0dcce0208c07415279e2537eb62), [`6f14f70`](https://github.com/mastra-ai/mastra/commit/6f14f706ccaaf81b69544b6c1b75ab66a41e5317), [`09e4bae`](https://github.com/mastra-ai/mastra/commit/09e4bae18dd5357d2ae078a4a95a2af32168ab08), [`4524734`](https://github.com/mastra-ai/mastra/commit/45247343e384717a7c8404296275c56201d6470f), [`2a53598`](https://github.com/mastra-ai/mastra/commit/2a53598c6d8cfeb904a7fc74e57e526d751c8fa6), [`c7cd3c7`](https://github.com/mastra-ai/mastra/commit/c7cd3c7a187d7aaf79e2ca139de328bf609a14b4), [`5a632bd`](https://github.com/mastra-ai/mastra/commit/5a632bdf7b78953b664f5e038e98d4ba5f971e47), [`847c212`](https://github.com/mastra-ai/mastra/commit/847c212caba7df0d6f2fc756b494ac3c75c3720d), [`6f941c4`](https://github.com/mastra-ai/mastra/commit/6f941c438ca5f578619788acc7608fc2e23bd176)]:
95
+ - @mastra/core@1.0.0-beta.12
96
+ - @mastra/observability@1.0.0-beta.5
97
+
98
+ ## 1.0.0-beta.4
99
+
100
+ ### Patch Changes
101
+
102
+ - Fixed CachedToken tracking in all Observability Exporters. Also fixed TimeToFirstToken in Langfuse, Braintrust, PostHog exporters. Fixed trace formatting in Posthog Exporter. ([#11029](https://github.com/mastra-ai/mastra/pull/11029))
103
+
104
+ - Updated dependencies [[`edb07e4`](https://github.com/mastra-ai/mastra/commit/edb07e49283e0c28bd094a60e03439bf6ecf0221), [`b7e17d3`](https://github.com/mastra-ai/mastra/commit/b7e17d3f5390bb5a71efc112204413656fcdc18d), [`261473a`](https://github.com/mastra-ai/mastra/commit/261473ac637e633064a22076671e2e02b002214d), [`5d7000f`](https://github.com/mastra-ai/mastra/commit/5d7000f757cd65ea9dc5b05e662fd83dfd44e932), [`4f0331a`](https://github.com/mastra-ai/mastra/commit/4f0331a79bf6eb5ee598a5086e55de4b5a0ada03), [`8a000da`](https://github.com/mastra-ai/mastra/commit/8a000da0c09c679a2312f6b3aa05b2ca78ca7393)]:
105
+ - @mastra/core@1.0.0-beta.10
106
+ - @mastra/observability@1.0.0-beta.4
107
+
108
+ ## 1.0.0-beta.3
109
+
110
+ ### Patch Changes
111
+
112
+ - Add time-to-first-token (TTFT) support for Langfuse integration ([#10781](https://github.com/mastra-ai/mastra/pull/10781))
113
+
114
+ Adds `completionStartTime` to model generation spans, which Langfuse uses to calculate TTFT metrics. The timestamp is automatically captured when the first content chunk arrives during streaming.
115
+
116
+ ```typescript
117
+ // completionStartTime is now automatically captured and sent to Langfuse
118
+ // enabling TTFT metrics in your Langfuse dashboard
119
+ const result = await agent.stream('Hello');
120
+ ```
121
+
122
+ - Fix Langfuse exporter to reuse existing traces when multiple root spans share the same traceId. This resolves an issue where multiple agent.stream() calls with client-side tools would create separate traces in Langfuse instead of grouping them under a single trace. The exporter now checks if a trace already exists before creating a new one, allowing proper trace consolidation for conversations with multiple agent interactions. ([#10838](https://github.com/mastra-ai/mastra/pull/10838))
123
+
124
+ Fixes #8830
125
+
126
+ - link langfuse prompts and helper functions ([#10738](https://github.com/mastra-ai/mastra/pull/10738))
127
+
128
+ - Updated dependencies [[`6c59a40`](https://github.com/mastra-ai/mastra/commit/6c59a40e0ad160467bd13d63a8a287028d75b02d), [`3076c67`](https://github.com/mastra-ai/mastra/commit/3076c6778b18988ae7d5c4c5c466366974b2d63f), [`85d7ee1`](https://github.com/mastra-ai/mastra/commit/85d7ee18ff4e14d625a8a30ec6656bb49804989b), [`c6c1092`](https://github.com/mastra-ai/mastra/commit/c6c1092f8fbf76109303f69e000e96fd1960c4ce), [`81dc110`](https://github.com/mastra-ai/mastra/commit/81dc11008d147cf5bdc8996ead1aa61dbdebb6fc), [`7aedb74`](https://github.com/mastra-ai/mastra/commit/7aedb74883adf66af38e270e4068fd42e7a37036), [`8f02d80`](https://github.com/mastra-ai/mastra/commit/8f02d800777397e4b45d7f1ad041988a8b0c6630), [`d7aad50`](https://github.com/mastra-ai/mastra/commit/d7aad501ce61646b76b4b511e558ac4eea9884d0), [`ce0a73a`](https://github.com/mastra-ai/mastra/commit/ce0a73abeaa75b10ca38f9e40a255a645d50ebfb), [`a02e542`](https://github.com/mastra-ai/mastra/commit/a02e542d23179bad250b044b17ff023caa61739f), [`a372c64`](https://github.com/mastra-ai/mastra/commit/a372c640ad1fd12e8f0613cebdc682fc156b4d95), [`8846867`](https://github.com/mastra-ai/mastra/commit/8846867ffa9a3746767618e314bebac08eb77d87), [`0bada2f`](https://github.com/mastra-ai/mastra/commit/0bada2f2c1234932cf30c1c47a719ffb64b801c5), [`42a42cf`](https://github.com/mastra-ai/mastra/commit/42a42cf3132b9786feecbb8c13c583dce5b0e198), [`cc60ff6`](https://github.com/mastra-ai/mastra/commit/cc60ff616541a3b0fb531a7e469bf9ae7bb90528), [`ae08bf0`](https://github.com/mastra-ai/mastra/commit/ae08bf0ebc6a4e4da992b711c4a389c32ba84cf4), [`21735a7`](https://github.com/mastra-ai/mastra/commit/21735a7ef306963554a69a89b44f06c3bcd85141), [`1d877b8`](https://github.com/mastra-ai/mastra/commit/1d877b8d7b536a251c1a7a18db7ddcf4f68d6f8b)]:
129
+ - @mastra/observability@1.0.0-beta.3
130
+ - @mastra/core@1.0.0-beta.7
131
+
132
+ ## 1.0.0-beta.2
133
+
134
+ ### Minor Changes
135
+
136
+ - Adds trace tagging support to the BrainTrust and Langfuse tracing exporters. ([#10765](https://github.com/mastra-ai/mastra/pull/10765))
137
+
138
+ ### Patch Changes
139
+
140
+ - Updated dependencies [[`ac0d2f4`](https://github.com/mastra-ai/mastra/commit/ac0d2f4ff8831f72c1c66c2be809706d17f65789), [`1a0d3fc`](https://github.com/mastra-ai/mastra/commit/1a0d3fc811482c9c376cdf79ee615c23bae9b2d6), [`85a628b`](https://github.com/mastra-ai/mastra/commit/85a628b1224a8f64cd82ea7f033774bf22df7a7e), [`c237233`](https://github.com/mastra-ai/mastra/commit/c23723399ccedf7f5744b3f40997b79246bfbe64), [`15f9e21`](https://github.com/mastra-ai/mastra/commit/15f9e216177201ea6e3f6d0bfb063fcc0953444f), [`ff94dea`](https://github.com/mastra-ai/mastra/commit/ff94dea935f4e34545c63bcb6c29804732698809), [`5b2ff46`](https://github.com/mastra-ai/mastra/commit/5b2ff4651df70c146523a7fca773f8eb0a2272f8), [`db41688`](https://github.com/mastra-ai/mastra/commit/db4168806d007417e2e60b4f68656dca4e5f40c9), [`103586c`](https://github.com/mastra-ai/mastra/commit/103586cb23ebcd2466c7f68a71674d37cc10e263), [`5ca599d`](https://github.com/mastra-ai/mastra/commit/5ca599d0bb59a1595f19f58473fcd67cc71cef58), [`bff1145`](https://github.com/mastra-ai/mastra/commit/bff114556b3cbadad9b2768488708f8ad0e91475), [`5c8ca24`](https://github.com/mastra-ai/mastra/commit/5c8ca247094e0cc2cdbd7137822fb47241f86e77), [`e191844`](https://github.com/mastra-ai/mastra/commit/e1918444ca3f80e82feef1dad506cd4ec6e2875f), [`22553f1`](https://github.com/mastra-ai/mastra/commit/22553f11c63ee5e966a9c034a349822249584691), [`7237163`](https://github.com/mastra-ai/mastra/commit/72371635dbf96a87df4b073cc48fc655afbdce3d), [`2500740`](https://github.com/mastra-ai/mastra/commit/2500740ea23da067d6e50ec71c625ab3ce275e64), [`873ecbb`](https://github.com/mastra-ai/mastra/commit/873ecbb517586aa17d2f1e99283755b3ebb2863f), [`4f9bbe5`](https://github.com/mastra-ai/mastra/commit/4f9bbe5968f42c86f4930b8193de3c3c17e5bd36), [`02e51fe`](https://github.com/mastra-ai/mastra/commit/02e51feddb3d4155cfbcc42624fd0d0970d032c0), [`8f3fa3a`](https://github.com/mastra-ai/mastra/commit/8f3fa3a652bb77da092f913ec51ae46e3a7e27dc), [`cd29ad2`](https://github.com/mastra-ai/mastra/commit/cd29ad23a255534e8191f249593849ed29160886), [`bdf4d8c`](https://github.com/mastra-ai/mastra/commit/bdf4d8cdc656d8a2c21d81834bfa3bfa70f56c16), [`854e3da`](https://github.com/mastra-ai/mastra/commit/854e3dad5daac17a91a20986399d3a51f54bf68b), [`ce18d38`](https://github.com/mastra-ai/mastra/commit/ce18d38678c65870350d123955014a8432075fd9), [`cccf9c8`](https://github.com/mastra-ai/mastra/commit/cccf9c8b2d2dfc1a5e63919395b83d78c89682a0), [`61a5705`](https://github.com/mastra-ai/mastra/commit/61a570551278b6743e64243b3ce7d73de915ca8a), [`db70a48`](https://github.com/mastra-ai/mastra/commit/db70a48aeeeeb8e5f92007e8ede52c364ce15287), [`f0fdc14`](https://github.com/mastra-ai/mastra/commit/f0fdc14ee233d619266b3d2bbdeea7d25cfc6d13), [`db18bc9`](https://github.com/mastra-ai/mastra/commit/db18bc9c3825e2c1a0ad9a183cc9935f6691bfa1), [`9b37b56`](https://github.com/mastra-ai/mastra/commit/9b37b565e1f2a76c24f728945cc740c2b09be9da), [`41a23c3`](https://github.com/mastra-ai/mastra/commit/41a23c32f9877d71810f37e24930515df2ff7a0f), [`5d171ad`](https://github.com/mastra-ai/mastra/commit/5d171ad9ef340387276b77c2bb3e83e83332d729), [`f03ae60`](https://github.com/mastra-ai/mastra/commit/f03ae60500fe350c9d828621006cdafe1975fdd8), [`d1e74a0`](https://github.com/mastra-ai/mastra/commit/d1e74a0a293866dece31022047f5dbab65a304d0), [`39e7869`](https://github.com/mastra-ai/mastra/commit/39e7869bc7d0ee391077ce291474d8a84eedccff), [`5761926`](https://github.com/mastra-ai/mastra/commit/57619260c4a2cdd598763abbacd90de594c6bc76), [`c900fdd`](https://github.com/mastra-ai/mastra/commit/c900fdd504c41348efdffb205cfe80d48c38fa33), [`604a79f`](https://github.com/mastra-ai/mastra/commit/604a79fecf276e26a54a3fe01bb94e65315d2e0e), [`887f0b4`](https://github.com/mastra-ai/mastra/commit/887f0b4746cdbd7cb7d6b17ac9f82aeb58037ea5), [`2562143`](https://github.com/mastra-ai/mastra/commit/256214336b4faa78646c9c1776612393790d8784), [`ef11a61`](https://github.com/mastra-ai/mastra/commit/ef11a61920fa0ed08a5b7ceedd192875af119749)]:
141
+ - @mastra/core@1.0.0-beta.6
142
+ - @mastra/observability@1.0.0-beta.2
143
+
3
144
  ## 1.0.0-beta.1
4
145
 
5
146
  ### Patch Changes
package/README.md CHANGED
@@ -10,22 +10,54 @@ npm install @mastra/langfuse
10
10
 
11
11
  ## Usage
12
12
 
13
+ ### Zero-Config Setup
14
+
15
+ The exporter automatically reads credentials from environment variables:
16
+
17
+ ```bash
18
+ # Required
19
+ LANGFUSE_PUBLIC_KEY=pk-lf-...
20
+ LANGFUSE_SECRET_KEY=sk-lf-...
21
+
22
+ # Optional - defaults to Langfuse cloud
23
+ LANGFUSE_BASE_URL=https://cloud.langfuse.com
24
+ ```
25
+
26
+ ```typescript
27
+ import { LangfuseExporter } from '@mastra/langfuse';
28
+
29
+ const mastra = new Mastra({
30
+ ...,
31
+ observability: {
32
+ configs: {
33
+ langfuse: {
34
+ serviceName: 'my-service',
35
+ exporters: [new LangfuseExporter()],
36
+ },
37
+ },
38
+ },
39
+ });
40
+ ```
41
+
42
+ ### Explicit Configuration
43
+
44
+ You can also pass credentials directly:
45
+
13
46
  ```typescript
14
47
  import { LangfuseExporter } from '@mastra/langfuse';
15
48
 
16
- // Use with Mastra
17
49
  const mastra = new Mastra({
18
50
  ...,
19
51
  observability: {
20
52
  configs: {
21
53
  langfuse: {
22
- serviceName: 'service',
54
+ serviceName: 'my-service',
23
55
  exporters: [
24
56
  new LangfuseExporter({
25
- publicKey: process.env.LANGFUSE_PUBLIC_KEY,
26
- secretKey: process.env.LANGFUSE_SECRET_KEY,
27
- baseUrl: process.env.LANGFUSE_BASE_URL, // Optional - defaults to Langfuse cloud
28
- realtime: true,
57
+ publicKey: 'pk-lf-...',
58
+ secretKey: 'sk-lf-...',
59
+ baseUrl: 'https://cloud.langfuse.com', // Optional
60
+ realtime: true, // Optional - flush after each event
29
61
  }),
30
62
  ],
31
63
  },
@@ -34,6 +66,16 @@ const mastra = new Mastra({
34
66
  });
35
67
  ```
36
68
 
69
+ ### Configuration Options
70
+
71
+ | Option | Type | Description |
72
+ | ----------- | --------- | ---------------------------------------------------------------------------- |
73
+ | `publicKey` | `string` | Langfuse public key. Defaults to `LANGFUSE_PUBLIC_KEY` env var |
74
+ | `secretKey` | `string` | Langfuse secret key. Defaults to `LANGFUSE_SECRET_KEY` env var |
75
+ | `baseUrl` | `string` | Langfuse host URL. Defaults to `LANGFUSE_BASE_URL` env var or Langfuse cloud |
76
+ | `realtime` | `boolean` | Flush after each event for immediate visibility. Defaults to `false` |
77
+ | `options` | `object` | Additional options to pass to the Langfuse client |
78
+
37
79
  ## Features
38
80
 
39
81
  ### Tracing
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Langfuse Tracing Options Helpers
3
+ *
4
+ * These helpers integrate with the `buildTracingOptions` pattern from
5
+ * `@mastra/observability` to add Langfuse-specific tracing features.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { buildTracingOptions } from '@mastra/observability';
10
+ * import { withLangfusePrompt } from '@mastra/langfuse';
11
+ *
12
+ * const prompt = await langfuse.getPrompt('my-prompt');
13
+ *
14
+ * const agent = new Agent({
15
+ * defaultGenerateOptions: {
16
+ * tracingOptions: buildTracingOptions(withLangfusePrompt(prompt)),
17
+ * },
18
+ * });
19
+ * ```
20
+ */
21
+ import type { TracingOptionsUpdater } from '@mastra/observability';
22
+ /**
23
+ * Langfuse prompt input - accepts either a Langfuse SDK prompt object
24
+ * or manual fields.
25
+ */
26
+ export interface LangfusePromptInput {
27
+ /** Prompt name */
28
+ name?: string;
29
+ /** Prompt version */
30
+ version?: number;
31
+ /** Prompt UUID */
32
+ id?: string;
33
+ }
34
+ /**
35
+ * Adds Langfuse prompt metadata to the tracing options
36
+ * to enable Langfuse Prompt Tracing.
37
+ *
38
+ * The metadata is added under `metadata.langfuse.prompt` and includes:
39
+ * - `name` - Prompt name
40
+ * - `version` - Prompt version
41
+ * - `id` - Prompt UUID
42
+ *
43
+ * All fields are deeply merged with any existing metadata.
44
+ *
45
+ * @param prompt - A Langfuse prompt object (from `langfuse.getPrompt()`) or manual fields
46
+ * @returns A TracingOptionsUpdater function for use with `buildTracingOptions`
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * import { buildTracingOptions } from '@mastra/observability';
51
+ * import { withLangfusePrompt } from '@mastra/langfuse';
52
+ * import { Langfuse } from 'langfuse';
53
+ *
54
+ * const langfuse = new Langfuse();
55
+ * const prompt = await langfuse.getPrompt('customer-support');
56
+ *
57
+ * // Use with buildTracingOptions
58
+ * const tracingOptions = buildTracingOptions(
59
+ * withLangfusePrompt(prompt),
60
+ * );
61
+ *
62
+ * // Or directly in agent config
63
+ * const agent = new Agent({
64
+ * name: 'support-agent',
65
+ * instructions: prompt.prompt,
66
+ * model: openai('gpt-4o'),
67
+ * defaultGenerateOptions: {
68
+ * tracingOptions: buildTracingOptions(withLangfusePrompt(prompt)),
69
+ * },
70
+ * });
71
+ *
72
+ * // Manual fields also work
73
+ * const tracingOptions = buildTracingOptions(
74
+ * withLangfusePrompt({ name: 'my-prompt', version: 1 }),
75
+ * );
76
+ * ```
77
+ */
78
+ export declare function withLangfusePrompt(prompt: LangfusePromptInput): TracingOptionsUpdater;
79
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,qBAAqB,CAerF"}
package/dist/index.cjs CHANGED
@@ -6,25 +6,57 @@ var observability = require('@mastra/observability');
6
6
  var langfuse = require('langfuse');
7
7
 
8
8
  // src/tracing.ts
9
+ function formatUsageMetrics(usage) {
10
+ if (!usage) return {};
11
+ const metrics = {};
12
+ if (usage.inputTokens !== void 0) {
13
+ metrics.input = usage.inputTokens;
14
+ if (usage.inputDetails?.cacheWrite !== void 0) {
15
+ metrics.cache_write_input_tokens = usage.inputDetails.cacheWrite;
16
+ metrics.input -= metrics.cache_write_input_tokens;
17
+ }
18
+ }
19
+ if (usage.inputDetails?.cacheRead !== void 0) {
20
+ metrics.cache_read_input_tokens = usage.inputDetails.cacheRead;
21
+ }
22
+ if (usage.outputTokens !== void 0) {
23
+ metrics.output = usage.outputTokens;
24
+ }
25
+ if (usage.outputDetails?.reasoning !== void 0) {
26
+ metrics.reasoning = usage.outputDetails.reasoning;
27
+ }
28
+ if (metrics.input && metrics.output) {
29
+ metrics.total = metrics.input + metrics.output;
30
+ if (metrics.cache_write_input_tokens) {
31
+ metrics.total += metrics.cache_write_input_tokens;
32
+ }
33
+ }
34
+ return metrics;
35
+ }
9
36
  var LangfuseExporter = class extends observability.BaseExporter {
10
37
  name = "langfuse";
11
38
  client;
12
39
  realtime;
13
40
  traceMap = /* @__PURE__ */ new Map();
14
- constructor(config) {
41
+ constructor(config = {}) {
15
42
  super(config);
16
43
  this.realtime = config.realtime ?? false;
17
- if (!config.publicKey || !config.secretKey) {
44
+ const publicKey = config.publicKey ?? process.env.LANGFUSE_PUBLIC_KEY;
45
+ const secretKey = config.secretKey ?? process.env.LANGFUSE_SECRET_KEY;
46
+ const baseUrl = config.baseUrl ?? process.env.LANGFUSE_BASE_URL;
47
+ if (!publicKey || !secretKey) {
48
+ const publicKeySource = config.publicKey ? "from config" : process.env.LANGFUSE_PUBLIC_KEY ? "from env" : "missing";
49
+ const secretKeySource = config.secretKey ? "from config" : process.env.LANGFUSE_SECRET_KEY ? "from env" : "missing";
18
50
  this.setDisabled(
19
- `Missing required credentials (publicKey: ${!!config.publicKey}, secretKey: ${!!config.secretKey})`
51
+ `Missing required credentials (publicKey: ${publicKeySource}, secretKey: ${secretKeySource}). Set LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY environment variables or pass them in config.`
20
52
  );
21
53
  this.client = null;
22
54
  return;
23
55
  }
24
56
  this.client = new langfuse.Langfuse({
25
- publicKey: config.publicKey,
26
- secretKey: config.secretKey,
27
- baseUrl: config.baseUrl,
57
+ publicKey,
58
+ secretKey,
59
+ baseUrl,
28
60
  ...config.options
29
61
  });
30
62
  }
@@ -57,11 +89,18 @@ var LangfuseExporter = class extends observability.BaseExporter {
57
89
  if (!traceData) {
58
90
  return;
59
91
  }
92
+ if (!span.isRootSpan) {
93
+ const langfuseData = span.metadata?.langfuse;
94
+ traceData.spanMetadata.set(span.id, {
95
+ parentSpanId: span.parentSpanId,
96
+ langfusePrompt: langfuseData?.prompt
97
+ });
98
+ }
60
99
  const langfuseParent = this.getLangfuseParent({ traceData, span, method });
61
100
  if (!langfuseParent) {
62
101
  return;
63
102
  }
64
- const payload = this.buildSpanPayload(span, true);
103
+ const payload = this.buildSpanPayload(span, true, traceData);
65
104
  const langfuseSpan = span.type === observability$1.SpanType.MODEL_GENERATION ? langfuseParent.generation(payload) : langfuseParent.span(payload);
66
105
  traceData.spans.set(span.id, langfuseSpan);
67
106
  traceData.activeSpans.add(span.id);
@@ -92,7 +131,7 @@ var LangfuseExporter = class extends observability.BaseExporter {
92
131
  });
93
132
  return;
94
133
  }
95
- langfuseSpan.update(this.buildSpanPayload(span, false));
134
+ langfuseSpan.update(this.buildSpanPayload(span, false, traceData));
96
135
  if (isEnd) {
97
136
  traceData.activeSpans.delete(span.id);
98
137
  if (span.isRootSpan) {
@@ -122,7 +161,7 @@ var LangfuseExporter = class extends observability.BaseExporter {
122
161
  if (!langfuseParent) {
123
162
  return;
124
163
  }
125
- const payload = this.buildSpanPayload(span, true);
164
+ const payload = this.buildSpanPayload(span, true, traceData);
126
165
  const langfuseEvent = langfuseParent.event(payload);
127
166
  traceData.events.set(span.id, langfuseEvent);
128
167
  if (!span.endTime) {
@@ -130,10 +169,25 @@ var LangfuseExporter = class extends observability.BaseExporter {
130
169
  }
131
170
  }
132
171
  initTrace(span) {
172
+ if (this.traceMap.has(span.traceId)) {
173
+ this.logger.debug("Langfuse exporter: Reusing existing trace from local map", {
174
+ traceId: span.traceId,
175
+ spanId: span.id,
176
+ spanName: span.name
177
+ });
178
+ return;
179
+ }
133
180
  const trace = this.client.trace(this.buildTracePayload(span));
181
+ const langfuseData = span.metadata?.langfuse;
182
+ const spanMetadata = /* @__PURE__ */ new Map();
183
+ spanMetadata.set(span.id, {
184
+ parentSpanId: void 0,
185
+ langfusePrompt: langfuseData?.prompt
186
+ });
134
187
  this.traceMap.set(span.traceId, {
135
188
  trace,
136
189
  spans: /* @__PURE__ */ new Map(),
190
+ spanMetadata,
137
191
  events: /* @__PURE__ */ new Map(),
138
192
  activeSpans: /* @__PURE__ */ new Set(),
139
193
  rootSpanId: span.id
@@ -185,6 +239,7 @@ var LangfuseExporter = class extends observability.BaseExporter {
185
239
  if (userId) payload.userId = userId;
186
240
  if (sessionId) payload.sessionId = sessionId;
187
241
  if (span.input) payload.input = span.input;
242
+ if (span.tags?.length) payload.tags = span.tags;
188
243
  payload.metadata = {
189
244
  spanType: span.type,
190
245
  ...span.attributes,
@@ -193,48 +248,22 @@ var LangfuseExporter = class extends observability.BaseExporter {
193
248
  return payload;
194
249
  }
195
250
  /**
196
- * Normalize usage data to handle both AI SDK v4 and v5 formats.
197
- *
198
- * AI SDK v4 uses: promptTokens, completionTokens
199
- * AI SDK v5 uses: inputTokens, outputTokens
200
- *
201
- * This function normalizes to a unified format that Langfuse can consume,
202
- * prioritizing v5 format while maintaining backward compatibility.
203
- *
204
- * @param usage - Token usage data from AI SDK (v4 or v5 format)
205
- * @returns Normalized usage object, or undefined if no usage data available
251
+ * Look up the Langfuse prompt from the closest parent span that has one.
252
+ * This enables prompt inheritance for MODEL_GENERATION spans when the prompt
253
+ * is set on a parent span (e.g., AGENT_RUN) rather than directly on the generation.
206
254
  */
207
- normalizeUsage(usage) {
208
- if (!usage) return void 0;
209
- const normalized = {};
210
- const inputTokens = usage.inputTokens ?? usage.promptTokens;
211
- if (inputTokens !== void 0) {
212
- normalized.input = inputTokens;
213
- }
214
- const outputTokens = usage.outputTokens ?? usage.completionTokens;
215
- if (outputTokens !== void 0) {
216
- normalized.output = outputTokens;
217
- }
218
- if (usage.totalTokens !== void 0) {
219
- normalized.total = usage.totalTokens;
220
- } else if (normalized.input !== void 0 && normalized.output !== void 0) {
221
- normalized.total = normalized.input + normalized.output;
222
- }
223
- if (usage.reasoningTokens !== void 0) {
224
- normalized.reasoning = usage.reasoningTokens;
225
- }
226
- if (usage.cachedInputTokens !== void 0) {
227
- normalized.cachedInput = usage.cachedInputTokens;
228
- }
229
- if (usage.promptCacheHitTokens !== void 0) {
230
- normalized.promptCacheHit = usage.promptCacheHitTokens;
231
- }
232
- if (usage.promptCacheMissTokens !== void 0) {
233
- normalized.promptCacheMiss = usage.promptCacheMissTokens;
255
+ findParentLangfusePrompt(traceData, span) {
256
+ let currentSpanId = span.parentSpanId;
257
+ while (currentSpanId) {
258
+ const parentMetadata = traceData.spanMetadata.get(currentSpanId);
259
+ if (parentMetadata?.langfusePrompt) {
260
+ return parentMetadata.langfusePrompt;
261
+ }
262
+ currentSpanId = parentMetadata?.parentSpanId;
234
263
  }
235
- return Object.keys(normalized).length > 0 ? normalized : void 0;
264
+ return void 0;
236
265
  }
237
- buildSpanPayload(span, isCreate) {
266
+ buildSpanPayload(span, isCreate, traceData) {
238
267
  const payload = {};
239
268
  if (isCreate) {
240
269
  payload.id = span.id;
@@ -245,7 +274,17 @@ var LangfuseExporter = class extends observability.BaseExporter {
245
274
  if (span.output !== void 0) payload.output = span.output;
246
275
  if (span.endTime !== void 0) payload.endTime = span.endTime;
247
276
  const attributes = span.attributes ?? {};
277
+ const resolvedTraceData = traceData ?? this.traceMap.get(span.traceId);
278
+ let inheritedLangfusePrompt;
279
+ if (span.type === observability$1.SpanType.MODEL_GENERATION && !span.metadata?.langfuse && resolvedTraceData) {
280
+ inheritedLangfusePrompt = this.findParentLangfusePrompt(resolvedTraceData, span);
281
+ }
282
+ const metadata = {
283
+ ...span.metadata,
284
+ ...inheritedLangfusePrompt ? { langfuse: { prompt: inheritedLangfusePrompt } } : {}
285
+ };
248
286
  const attributesToOmit = [];
287
+ const metadataToOmit = [];
249
288
  if (span.type === observability$1.SpanType.MODEL_GENERATION) {
250
289
  const modelAttr = attributes;
251
290
  if (modelAttr.model !== void 0) {
@@ -253,21 +292,33 @@ var LangfuseExporter = class extends observability.BaseExporter {
253
292
  attributesToOmit.push("model");
254
293
  }
255
294
  if (modelAttr.usage !== void 0) {
256
- const normalizedUsage = this.normalizeUsage(modelAttr.usage);
257
- if (normalizedUsage) {
258
- payload.usage = normalizedUsage;
259
- }
295
+ payload.usageDetails = formatUsageMetrics(modelAttr.usage);
260
296
  attributesToOmit.push("usage");
261
297
  }
262
298
  if (modelAttr.parameters !== void 0) {
263
299
  payload.modelParameters = modelAttr.parameters;
264
300
  attributesToOmit.push("parameters");
265
301
  }
302
+ const langfuseData = metadata.langfuse;
303
+ const promptData = langfuseData?.prompt;
304
+ const hasNameAndVersion = promptData?.name !== void 0 && promptData?.version !== void 0;
305
+ const hasId = promptData?.id !== void 0;
306
+ if (hasNameAndVersion || hasId) {
307
+ payload.prompt = {};
308
+ if (promptData?.name !== void 0) payload.prompt.name = promptData.name;
309
+ if (promptData?.version !== void 0) payload.prompt.version = promptData.version;
310
+ if (promptData?.id !== void 0) payload.prompt.id = promptData.id;
311
+ metadataToOmit.push("langfuse");
312
+ }
313
+ if (modelAttr.completionStartTime !== void 0) {
314
+ payload.completionStartTime = modelAttr.completionStartTime;
315
+ attributesToOmit.push("completionStartTime");
316
+ }
266
317
  }
267
318
  payload.metadata = {
268
319
  spanType: span.type,
269
320
  ...utils.omitKeys(attributes, attributesToOmit),
270
- ...span.metadata
321
+ ...utils.omitKeys(metadata, metadataToOmit)
271
322
  };
272
323
  if (span.errorInfo) {
273
324
  payload.level = "ERROR";
@@ -313,6 +364,26 @@ var LangfuseExporter = class extends observability.BaseExporter {
313
364
  }
314
365
  };
315
366
 
367
+ // src/helpers.ts
368
+ function withLangfusePrompt(prompt) {
369
+ return (opts) => ({
370
+ ...opts,
371
+ metadata: {
372
+ ...opts.metadata,
373
+ langfuse: {
374
+ ...opts.metadata?.langfuse,
375
+ prompt: {
376
+ ...prompt.name !== void 0 && { name: prompt.name },
377
+ ...prompt.version !== void 0 && { version: prompt.version },
378
+ ...prompt.id !== void 0 && { id: prompt.id }
379
+ }
380
+ }
381
+ }
382
+ });
383
+ }
384
+
316
385
  exports.LangfuseExporter = LangfuseExporter;
386
+ exports.formatUsageMetrics = formatUsageMetrics;
387
+ exports.withLangfusePrompt = withLangfusePrompt;
317
388
  //# sourceMappingURL=index.cjs.map
318
389
  //# sourceMappingURL=index.cjs.map