@librechat/agents 3.1.90 → 3.1.91

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 (80) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +9 -5
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/graphs/Graph.cjs +46 -14
  4. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  5. package/dist/cjs/langfuse.cjs +234 -0
  6. package/dist/cjs/langfuse.cjs.map +1 -0
  7. package/dist/cjs/main.cjs +25 -0
  8. package/dist/cjs/main.cjs.map +1 -1
  9. package/dist/cjs/run.cjs +44 -27
  10. package/dist/cjs/run.cjs.map +1 -1
  11. package/dist/cjs/stream.cjs +10 -3
  12. package/dist/cjs/stream.cjs.map +1 -1
  13. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +380 -0
  14. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -0
  15. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +997 -0
  16. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -0
  17. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +575 -0
  18. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -0
  19. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +165 -0
  20. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -0
  21. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +17 -5
  22. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  23. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +110 -6
  24. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  25. package/dist/esm/agents/AgentContext.mjs +9 -5
  26. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  27. package/dist/esm/graphs/Graph.mjs +46 -14
  28. package/dist/esm/graphs/Graph.mjs.map +1 -1
  29. package/dist/esm/langfuse.mjs +226 -0
  30. package/dist/esm/langfuse.mjs.map +1 -0
  31. package/dist/esm/main.mjs +5 -1
  32. package/dist/esm/main.mjs.map +1 -1
  33. package/dist/esm/run.mjs +44 -27
  34. package/dist/esm/run.mjs.map +1 -1
  35. package/dist/esm/stream.mjs +10 -3
  36. package/dist/esm/stream.mjs.map +1 -1
  37. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +378 -0
  38. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -0
  39. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +994 -0
  40. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -0
  41. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +566 -0
  42. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -0
  43. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +155 -0
  44. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -0
  45. package/dist/esm/tools/local/LocalExecutionEngine.mjs +17 -6
  46. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  47. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +111 -7
  48. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  49. package/dist/types/agents/AgentContext.d.ts +4 -1
  50. package/dist/types/graphs/Graph.d.ts +6 -5
  51. package/dist/types/index.d.ts +1 -0
  52. package/dist/types/langfuse.d.ts +48 -0
  53. package/dist/types/tools/cloudflare/CloudflareBridgeRuntime.d.ts +23 -0
  54. package/dist/types/tools/cloudflare/CloudflareProgrammaticToolCalling.d.ts +4 -0
  55. package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +21 -0
  56. package/dist/types/tools/cloudflare/CloudflareSandboxTools.d.ts +22 -0
  57. package/dist/types/tools/cloudflare/index.d.ts +4 -0
  58. package/dist/types/tools/local/LocalExecutionEngine.d.ts +1 -0
  59. package/dist/types/types/graph.d.ts +8 -0
  60. package/dist/types/types/tools.d.ts +118 -2
  61. package/package.json +4 -4
  62. package/src/__tests__/stream.eagerEventExecution.test.ts +66 -0
  63. package/src/agents/AgentContext.ts +13 -3
  64. package/src/graphs/Graph.ts +53 -16
  65. package/src/index.ts +1 -0
  66. package/src/langfuse.ts +358 -0
  67. package/src/run.ts +60 -38
  68. package/src/specs/langfuse-config.test.ts +57 -0
  69. package/src/specs/langfuse-metadata.test.ts +19 -1
  70. package/src/stream.ts +13 -3
  71. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +537 -0
  72. package/src/tools/cloudflare/CloudflareBridgeRuntime.ts +480 -0
  73. package/src/tools/cloudflare/CloudflareProgrammaticToolCalling.ts +1162 -0
  74. package/src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts +744 -0
  75. package/src/tools/cloudflare/CloudflareSandboxTools.ts +225 -0
  76. package/src/tools/cloudflare/index.ts +4 -0
  77. package/src/tools/local/LocalExecutionEngine.ts +20 -4
  78. package/src/tools/local/resolveLocalExecutionTools.ts +169 -7
  79. package/src/types/graph.ts +9 -0
  80. package/src/types/tools.ts +141 -2
@@ -0,0 +1,234 @@
1
+ 'use strict';
2
+
3
+ var langchain = require('@langfuse/langchain');
4
+ var otel = require('@langfuse/otel');
5
+ var tracing = require('@langfuse/tracing');
6
+ var base = require('@langchain/core/callbacks/base');
7
+ var sdkTraceBase = require('@opentelemetry/sdk-trace-base');
8
+ var api = require('@opentelemetry/api');
9
+ var misc = require('./utils/misc.cjs');
10
+
11
+ function getModelName(serialized) {
12
+ const serializedRecord = serialized;
13
+ const kwargs = serializedRecord.kwargs;
14
+ const modelName = kwargs?.model ??
15
+ kwargs?.model_name ??
16
+ kwargs?.modelName ??
17
+ kwargs?.model_id ??
18
+ kwargs?.modelId ??
19
+ serializedRecord.name;
20
+ if (typeof modelName === 'string' && modelName.trim() !== '') {
21
+ return modelName;
22
+ }
23
+ if (Array.isArray(serializedRecord.id) && serializedRecord.id.length > 0) {
24
+ return String(serializedRecord.id[serializedRecord.id.length - 1]);
25
+ }
26
+ return 'ChatModel';
27
+ }
28
+ function getModelParameters(extraParams) {
29
+ const invocationParams = extraParams?.invocation_params;
30
+ const params = invocationParams != null && typeof invocationParams === 'object'
31
+ ? invocationParams
32
+ : (extraParams ?? {});
33
+ return Object.fromEntries(Object.entries(params).filter(([, value]) => {
34
+ return typeof value === 'string' || typeof value === 'number';
35
+ }));
36
+ }
37
+ function getOutput(output) {
38
+ return output.generations.map((generation) => generation.map((item) => {
39
+ if ('message' in item && item.message != null) {
40
+ return item.message.content;
41
+ }
42
+ return item.text;
43
+ }));
44
+ }
45
+ function getUsageDetails(output) {
46
+ const llmOutput = output.llmOutput;
47
+ const usage = llmOutput?.tokenUsage ?? llmOutput?.usage;
48
+ if (usage == null || typeof usage !== 'object') {
49
+ return undefined;
50
+ }
51
+ const usageEntries = Object.entries(usage).filter(([, value]) => typeof value === 'number');
52
+ return usageEntries.length > 0
53
+ ? Object.fromEntries(usageEntries)
54
+ : undefined;
55
+ }
56
+ function getTraceName(traceMetadata) {
57
+ const agentName = traceMetadata?.agentName;
58
+ return typeof agentName === 'string' && agentName.trim() !== ''
59
+ ? `LibreChat Agent: ${agentName}`
60
+ : 'LibreChat Agent';
61
+ }
62
+ class LangfuseAgentCallbackHandler extends base.BaseCallbackHandler {
63
+ name = 'librechat_langfuse_agent_handler';
64
+ provider;
65
+ processor;
66
+ userId;
67
+ sessionId;
68
+ traceMetadata;
69
+ spans = new Map();
70
+ constructor({ langfuse, userId, sessionId, traceMetadata, }) {
71
+ super();
72
+ this.userId = userId;
73
+ this.sessionId = sessionId;
74
+ this.traceMetadata = traceMetadata;
75
+ this.processor = new otel.LangfuseSpanProcessor({
76
+ publicKey: langfuse.publicKey,
77
+ secretKey: langfuse.secretKey,
78
+ ...(misc.isPresent(langfuse.baseUrl) ? { baseUrl: langfuse.baseUrl } : {}),
79
+ environment: process.env.LANGFUSE_TRACING_ENVIRONMENT ??
80
+ process.env.NODE_ENV ??
81
+ 'development',
82
+ exportMode: 'immediate',
83
+ });
84
+ this.provider = new sdkTraceBase.BasicTracerProvider({
85
+ spanProcessors: [this.processor],
86
+ });
87
+ }
88
+ startGenerationSpan({ llm, input, runId, extraParams, metadata, name, }) {
89
+ if (this.spans.has(runId)) {
90
+ return;
91
+ }
92
+ const tracer = this.provider.getTracer('librechat-agents-langfuse');
93
+ const spanName = typeof name === 'string' && name.trim() !== '' ? name : getModelName(llm);
94
+ const span = tracer.startSpan(spanName, {
95
+ attributes: {
96
+ ...tracing.createTraceAttributes({
97
+ name: getTraceName(this.traceMetadata),
98
+ userId: this.userId,
99
+ sessionId: this.sessionId,
100
+ metadata: this.traceMetadata,
101
+ }),
102
+ ...tracing.createObservationAttributes('generation', {
103
+ input,
104
+ model: getModelName(llm),
105
+ modelParameters: getModelParameters(extraParams),
106
+ metadata: {
107
+ ...metadata,
108
+ ...this.traceMetadata,
109
+ },
110
+ }),
111
+ },
112
+ });
113
+ this.spans.set(runId, span);
114
+ }
115
+ async handleChatModelStart(llm, messages, runId, _parentRunId, extraParams, _tags, metadata, name) {
116
+ this.startGenerationSpan({
117
+ llm,
118
+ input: messages,
119
+ runId,
120
+ extraParams,
121
+ metadata,
122
+ name,
123
+ });
124
+ }
125
+ async handleLLMStart(llm, prompts, runId, _parentRunId, extraParams, _tags, metadata, name) {
126
+ this.startGenerationSpan({
127
+ llm,
128
+ input: prompts,
129
+ runId,
130
+ extraParams,
131
+ metadata,
132
+ name,
133
+ });
134
+ }
135
+ async handleLLMEnd(output, runId) {
136
+ const span = this.spans.get(runId);
137
+ if (!span) {
138
+ return;
139
+ }
140
+ span.setAttributes(tracing.createObservationAttributes('generation', {
141
+ output: getOutput(output),
142
+ usageDetails: getUsageDetails(output),
143
+ }));
144
+ span.end();
145
+ this.spans.delete(runId);
146
+ await this.flush();
147
+ }
148
+ async handleLLMError(err, runId) {
149
+ const span = this.spans.get(runId);
150
+ if (!span) {
151
+ return;
152
+ }
153
+ const message = err instanceof Error ? err.message : String(err);
154
+ span.setStatus({ code: api.SpanStatusCode.ERROR, message });
155
+ span.setAttributes(tracing.createObservationAttributes('generation', {
156
+ level: 'ERROR',
157
+ statusMessage: message,
158
+ }));
159
+ span.end();
160
+ this.spans.delete(runId);
161
+ await this.flush();
162
+ }
163
+ async flush() {
164
+ try {
165
+ await this.provider.forceFlush();
166
+ }
167
+ catch (error) {
168
+ process.emitWarning(`[LangfuseAgentCallbackHandler] Failed to flush Langfuse spans: ${error instanceof Error ? error.message : String(error)}`);
169
+ }
170
+ }
171
+ async dispose() {
172
+ for (const span of this.spans.values()) {
173
+ span.end();
174
+ }
175
+ this.spans.clear();
176
+ await this.flush();
177
+ try {
178
+ await this.provider.shutdown();
179
+ }
180
+ catch (error) {
181
+ process.emitWarning(`[LangfuseAgentCallbackHandler] Failed to shut down Langfuse provider: ${error instanceof Error ? error.message : String(error)}`);
182
+ }
183
+ }
184
+ }
185
+ function hasRequiredLangfuseConfig(langfuse) {
186
+ return (langfuse?.enabled === true &&
187
+ misc.isPresent(langfuse.publicKey) &&
188
+ misc.isPresent(langfuse.secretKey));
189
+ }
190
+ function createLegacyLangfuseHandler(params) {
191
+ return new langchain.CallbackHandler(params);
192
+ }
193
+ function createLangfuseHandler({ langfuse, userId, sessionId, traceMetadata, }) {
194
+ if (!hasRequiredLangfuseConfig(langfuse)) {
195
+ return undefined;
196
+ }
197
+ return new LangfuseAgentCallbackHandler({
198
+ langfuse,
199
+ userId,
200
+ sessionId,
201
+ traceMetadata,
202
+ });
203
+ }
204
+ function hasExplicitLangfuseConfig(contexts) {
205
+ for (const context of contexts) {
206
+ if (context.langfuse != null) {
207
+ return true;
208
+ }
209
+ }
210
+ return false;
211
+ }
212
+ function hasLangfuseEnvConfig() {
213
+ return (misc.isPresent(process.env.LANGFUSE_SECRET_KEY) &&
214
+ misc.isPresent(process.env.LANGFUSE_PUBLIC_KEY) &&
215
+ misc.isPresent(process.env.LANGFUSE_BASE_URL));
216
+ }
217
+ function isLangfuseCallbackHandler(value) {
218
+ return (value instanceof langchain.CallbackHandler ||
219
+ value instanceof LangfuseAgentCallbackHandler);
220
+ }
221
+ async function disposeLangfuseHandler(value) {
222
+ if (value instanceof LangfuseAgentCallbackHandler) {
223
+ await value.dispose();
224
+ }
225
+ }
226
+
227
+ exports.LangfuseAgentCallbackHandler = LangfuseAgentCallbackHandler;
228
+ exports.createLangfuseHandler = createLangfuseHandler;
229
+ exports.createLegacyLangfuseHandler = createLegacyLangfuseHandler;
230
+ exports.disposeLangfuseHandler = disposeLangfuseHandler;
231
+ exports.hasExplicitLangfuseConfig = hasExplicitLangfuseConfig;
232
+ exports.hasLangfuseEnvConfig = hasLangfuseEnvConfig;
233
+ exports.isLangfuseCallbackHandler = isLangfuseCallbackHandler;
234
+ //# sourceMappingURL=langfuse.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langfuse.cjs","sources":["../../src/langfuse.ts"],"sourcesContent":["import { CallbackHandler } from '@langfuse/langchain';\nimport { LangfuseSpanProcessor } from '@langfuse/otel';\nimport {\n createObservationAttributes,\n createTraceAttributes,\n} from '@langfuse/tracing';\nimport { BaseCallbackHandler } from '@langchain/core/callbacks/base';\nimport { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';\nimport { SpanStatusCode } from '@opentelemetry/api';\nimport type { Serialized } from '@langchain/core/load/serializable';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type { LLMResult } from '@langchain/core/outputs';\nimport type { Span } from '@opentelemetry/api';\nimport type * as t from '@/types';\nimport { isPresent } from '@/utils/misc';\n\ntype TraceMetadata = Record<string, unknown>;\n\ntype LangfuseHandlerParams = {\n userId?: string;\n sessionId?: string;\n traceMetadata?: TraceMetadata;\n};\n\ntype AgentLangfuseHandlerParams = LangfuseHandlerParams & {\n langfuse?: t.LangfuseConfig;\n};\n\ntype ResolvedLangfuseConfig = t.LangfuseConfig & {\n enabled: true;\n publicKey: string;\n secretKey: string;\n};\n\nfunction getModelName(serialized: Serialized): string {\n const serializedRecord = serialized as unknown as Record<string, unknown>;\n const kwargs = serializedRecord.kwargs as Record<string, unknown> | undefined;\n const modelName =\n kwargs?.model ??\n kwargs?.model_name ??\n kwargs?.modelName ??\n kwargs?.model_id ??\n kwargs?.modelId ??\n serializedRecord.name;\n\n if (typeof modelName === 'string' && modelName.trim() !== '') {\n return modelName;\n }\n\n if (Array.isArray(serializedRecord.id) && serializedRecord.id.length > 0) {\n return String(serializedRecord.id[serializedRecord.id.length - 1]);\n }\n\n return 'ChatModel';\n}\n\nfunction getModelParameters(\n extraParams?: Record<string, unknown>\n): Record<string, string | number> {\n const invocationParams = extraParams?.invocation_params;\n const params =\n invocationParams != null && typeof invocationParams === 'object'\n ? (invocationParams as Record<string, unknown>)\n : (extraParams ?? {});\n\n return Object.fromEntries(\n Object.entries(params).filter(([, value]) => {\n return typeof value === 'string' || typeof value === 'number';\n })\n ) as Record<string, string | number>;\n}\n\nfunction getOutput(output: LLMResult): unknown {\n return output.generations.map((generation) =>\n generation.map((item) => {\n if ('message' in item && item.message != null) {\n return (item.message as { content?: unknown }).content;\n }\n return item.text;\n })\n );\n}\n\nfunction getUsageDetails(\n output: LLMResult\n): Record<string, number> | undefined {\n const llmOutput = output.llmOutput as Record<string, unknown> | undefined;\n const usage = llmOutput?.tokenUsage ?? llmOutput?.usage;\n if (usage == null || typeof usage !== 'object') {\n return undefined;\n }\n\n const usageEntries = Object.entries(usage as Record<string, unknown>).filter(\n ([, value]) => typeof value === 'number'\n );\n\n return usageEntries.length > 0\n ? (Object.fromEntries(usageEntries) as Record<string, number>)\n : undefined;\n}\n\nfunction getTraceName(traceMetadata?: TraceMetadata): string {\n const agentName = traceMetadata?.agentName;\n return typeof agentName === 'string' && agentName.trim() !== ''\n ? `LibreChat Agent: ${agentName}`\n : 'LibreChat Agent';\n}\n\nexport class LangfuseAgentCallbackHandler extends BaseCallbackHandler {\n name = 'librechat_langfuse_agent_handler';\n\n private readonly provider: BasicTracerProvider;\n private readonly processor: LangfuseSpanProcessor;\n private readonly userId?: string;\n private readonly sessionId?: string;\n private readonly traceMetadata?: TraceMetadata;\n private readonly spans = new Map<string, Span>();\n\n constructor({\n langfuse,\n userId,\n sessionId,\n traceMetadata,\n }: LangfuseHandlerParams & { langfuse: ResolvedLangfuseConfig }) {\n super();\n this.userId = userId;\n this.sessionId = sessionId;\n this.traceMetadata = traceMetadata;\n this.processor = new LangfuseSpanProcessor({\n publicKey: langfuse.publicKey,\n secretKey: langfuse.secretKey,\n ...(isPresent(langfuse.baseUrl) ? { baseUrl: langfuse.baseUrl } : {}),\n environment:\n process.env.LANGFUSE_TRACING_ENVIRONMENT ??\n process.env.NODE_ENV ??\n 'development',\n exportMode: 'immediate',\n });\n this.provider = new BasicTracerProvider({\n spanProcessors: [this.processor],\n });\n }\n\n private startGenerationSpan({\n llm,\n input,\n runId,\n extraParams,\n metadata,\n name,\n }: {\n llm: Serialized;\n input: unknown;\n runId: string;\n extraParams?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n name?: string;\n }): void {\n if (this.spans.has(runId)) {\n return;\n }\n\n const tracer = this.provider.getTracer('librechat-agents-langfuse');\n const spanName =\n typeof name === 'string' && name.trim() !== '' ? name : getModelName(llm);\n const span = tracer.startSpan(spanName, {\n attributes: {\n ...createTraceAttributes({\n name: getTraceName(this.traceMetadata),\n userId: this.userId,\n sessionId: this.sessionId,\n metadata: this.traceMetadata,\n }),\n ...createObservationAttributes('generation', {\n input,\n model: getModelName(llm),\n modelParameters: getModelParameters(extraParams),\n metadata: {\n ...metadata,\n ...this.traceMetadata,\n },\n }),\n },\n });\n this.spans.set(runId, span);\n }\n\n async handleChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n _parentRunId?: string,\n extraParams?: Record<string, unknown>,\n _tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ): Promise<void> {\n this.startGenerationSpan({\n llm,\n input: messages,\n runId,\n extraParams,\n metadata,\n name,\n });\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n _parentRunId?: string,\n extraParams?: Record<string, unknown>,\n _tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ): Promise<void> {\n this.startGenerationSpan({\n llm,\n input: prompts,\n runId,\n extraParams,\n metadata,\n name,\n });\n }\n\n async handleLLMEnd(output: LLMResult, runId: string): Promise<void> {\n const span = this.spans.get(runId);\n if (!span) {\n return;\n }\n\n span.setAttributes(\n createObservationAttributes('generation', {\n output: getOutput(output),\n usageDetails: getUsageDetails(output),\n })\n );\n span.end();\n this.spans.delete(runId);\n await this.flush();\n }\n\n async handleLLMError(err: unknown, runId: string): Promise<void> {\n const span = this.spans.get(runId);\n if (!span) {\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.setAttributes(\n createObservationAttributes('generation', {\n level: 'ERROR',\n statusMessage: message,\n })\n );\n span.end();\n this.spans.delete(runId);\n await this.flush();\n }\n\n private async flush(): Promise<void> {\n try {\n await this.provider.forceFlush();\n } catch (error) {\n process.emitWarning(\n `[LangfuseAgentCallbackHandler] Failed to flush Langfuse spans: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n async dispose(): Promise<void> {\n for (const span of this.spans.values()) {\n span.end();\n }\n this.spans.clear();\n await this.flush();\n try {\n await this.provider.shutdown();\n } catch (error) {\n process.emitWarning(\n `[LangfuseAgentCallbackHandler] Failed to shut down Langfuse provider: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n}\n\nfunction hasRequiredLangfuseConfig(\n langfuse?: t.LangfuseConfig\n): langfuse is ResolvedLangfuseConfig {\n return (\n langfuse?.enabled === true &&\n isPresent(langfuse.publicKey) &&\n isPresent(langfuse.secretKey)\n );\n}\n\nexport function createLegacyLangfuseHandler(\n params: LangfuseHandlerParams\n): CallbackHandler {\n return new CallbackHandler(params);\n}\n\nexport function createLangfuseHandler({\n langfuse,\n userId,\n sessionId,\n traceMetadata,\n}: AgentLangfuseHandlerParams): LangfuseAgentCallbackHandler | undefined {\n if (!hasRequiredLangfuseConfig(langfuse)) {\n return undefined;\n }\n\n return new LangfuseAgentCallbackHandler({\n langfuse,\n userId,\n sessionId,\n traceMetadata,\n });\n}\n\nexport function hasExplicitLangfuseConfig(\n contexts: Iterable<{ langfuse?: t.LangfuseConfig }>\n): boolean {\n for (const context of contexts) {\n if (context.langfuse != null) {\n return true;\n }\n }\n return false;\n}\n\nexport function hasLangfuseEnvConfig(): boolean {\n return (\n isPresent(process.env.LANGFUSE_SECRET_KEY) &&\n isPresent(process.env.LANGFUSE_PUBLIC_KEY) &&\n isPresent(process.env.LANGFUSE_BASE_URL)\n );\n}\n\nexport function isLangfuseCallbackHandler(value: unknown): boolean {\n return (\n value instanceof CallbackHandler ||\n value instanceof LangfuseAgentCallbackHandler\n );\n}\n\nexport async function disposeLangfuseHandler(value: unknown): Promise<void> {\n if (value instanceof LangfuseAgentCallbackHandler) {\n await value.dispose();\n }\n}\n"],"names":["BaseCallbackHandler","LangfuseSpanProcessor","isPresent","BasicTracerProvider","createTraceAttributes","createObservationAttributes","SpanStatusCode","CallbackHandler"],"mappings":"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"}
package/dist/cjs/main.cjs CHANGED
@@ -45,6 +45,10 @@ var bashAst = require('./tools/local/bashAst.cjs');
45
45
  var editStrategies = require('./tools/local/editStrategies.cjs');
46
46
  var syntaxCheck = require('./tools/local/syntaxCheck.cjs');
47
47
  var textEncoding = require('./tools/local/textEncoding.cjs');
48
+ var CloudflareBridgeRuntime = require('./tools/cloudflare/CloudflareBridgeRuntime.cjs');
49
+ var CloudflareProgrammaticToolCalling = require('./tools/cloudflare/CloudflareProgrammaticToolCalling.cjs');
50
+ var CloudflareSandboxExecutionEngine = require('./tools/cloudflare/CloudflareSandboxExecutionEngine.cjs');
51
+ var CloudflareSandboxTools = require('./tools/cloudflare/CloudflareSandboxTools.cjs');
48
52
  var tool = require('./tools/search/tool.cjs');
49
53
  var schema = require('./tools/search/schema.cjs');
50
54
  var constants = require('./common/constants.cjs');
@@ -273,6 +277,7 @@ exports.createLocalGrepSearchTool = LocalCodingTools.createLocalGrepSearchTool;
273
277
  exports.createLocalListDirectoryTool = LocalCodingTools.createLocalListDirectoryTool;
274
278
  exports.createLocalReadFileTool = LocalCodingTools.createLocalReadFileTool;
275
279
  exports.createLocalWriteFileTool = LocalCodingTools.createLocalWriteFileTool;
280
+ exports.LOCAL_SPAWN_TIMEOUT_MS = LocalExecutionEngine.LOCAL_SPAWN_TIMEOUT_MS;
276
281
  exports._resetLocalEngineWarningsForTests = LocalExecutionEngine._resetLocalEngineWarningsForTests;
277
282
  exports.buildSandboxRuntimeConfig = LocalExecutionEngine.buildSandboxRuntimeConfig;
278
283
  exports.executeLocalBash = LocalExecutionEngine.executeLocalBash;
@@ -313,6 +318,26 @@ exports._resetSyntaxCheckProbeCacheForTests = syntaxCheck._resetSyntaxCheckProbe
313
318
  exports.runPostEditSyntaxCheck = syntaxCheck.runPostEditSyntaxCheck;
314
319
  exports.decodeFile = textEncoding.decodeFile;
315
320
  exports.encodeFile = textEncoding.encodeFile;
321
+ exports.createCloudflareBridgeRuntime = CloudflareBridgeRuntime.createCloudflareBridgeRuntime;
322
+ exports.createCloudflareBashProgrammaticToolCallingTool = CloudflareProgrammaticToolCalling.createCloudflareBashProgrammaticToolCallingTool;
323
+ exports.createCloudflareProgrammaticToolCallingTool = CloudflareProgrammaticToolCalling.createCloudflareProgrammaticToolCallingTool;
324
+ exports.createCloudflareLocalExecutionConfig = CloudflareSandboxExecutionEngine.createCloudflareLocalExecutionConfig;
325
+ exports.createCloudflareWorkspaceFS = CloudflareSandboxExecutionEngine.createCloudflareWorkspaceFS;
326
+ exports.executeCloudflareBash = CloudflareSandboxExecutionEngine.executeCloudflareBash;
327
+ exports.executeCloudflareCode = CloudflareSandboxExecutionEngine.executeCloudflareCode;
328
+ exports.formatCloudflareOutput = CloudflareSandboxExecutionEngine.formatCloudflareOutput;
329
+ exports.getCloudflareWorkspaceRoot = CloudflareSandboxExecutionEngine.getCloudflareWorkspaceRoot;
330
+ exports.resolveCloudflareSandbox = CloudflareSandboxExecutionEngine.resolveCloudflareSandbox;
331
+ exports.validateCloudflareBashCommand = CloudflareSandboxExecutionEngine.validateCloudflareBashCommand;
332
+ exports.CLOUDFLARE_BASH_CODING_TOOL_NAMES = CloudflareSandboxTools.CLOUDFLARE_BASH_CODING_TOOL_NAMES;
333
+ exports.CLOUDFLARE_CODING_TOOL_NAMES = CloudflareSandboxTools.CLOUDFLARE_CODING_TOOL_NAMES;
334
+ exports.CloudflareBashExecutionToolDescription = CloudflareSandboxTools.CloudflareBashExecutionToolDescription;
335
+ exports.CloudflareCodeExecutionToolDescription = CloudflareSandboxTools.CloudflareCodeExecutionToolDescription;
336
+ exports.createCloudflareBashExecutionTool = CloudflareSandboxTools.createCloudflareBashExecutionTool;
337
+ exports.createCloudflareCodeExecutionTool = CloudflareSandboxTools.createCloudflareCodeExecutionTool;
338
+ exports.createCloudflareCodingToolBundle = CloudflareSandboxTools.createCloudflareCodingToolBundle;
339
+ exports.createCloudflareCodingTools = CloudflareSandboxTools.createCloudflareCodingTools;
340
+ exports.createCloudflareExecutionTool = CloudflareSandboxTools.createCloudflareExecutionTool;
316
341
  exports.createSearchTool = tool.createSearchTool;
317
342
  Object.defineProperty(exports, "DATE_RANGE", {
318
343
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"main.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"main.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/cjs/run.cjs CHANGED
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  require('./instrumentation.cjs');
4
- var langchain = require('@langfuse/langchain');
5
4
  var prompts = require('@langchain/core/prompts');
6
5
  var runnables = require('@langchain/core/runnables');
7
6
  var openai = require('@langchain/openai');
@@ -18,7 +17,7 @@ var events = require('./events.cjs');
18
17
  var executeHooks = require('./hooks/executeHooks.cjs');
19
18
  require('./hooks/createWorkspacePolicyHook.cjs');
20
19
  var llm = require('./utils/llm.cjs');
21
- var misc = require('./utils/misc.cjs');
20
+ var langfuse = require('./langfuse.cjs');
22
21
 
23
22
  // src/run.ts
24
23
  const defaultOmitOptions = new Set([
@@ -474,9 +473,8 @@ class Run {
474
473
  config.callbacks = baseCallbacks
475
474
  .concat(streamCallbacks)
476
475
  .concat(customHandler);
477
- if (misc.isPresent(process.env.LANGFUSE_SECRET_KEY) &&
478
- misc.isPresent(process.env.LANGFUSE_PUBLIC_KEY) &&
479
- misc.isPresent(process.env.LANGFUSE_BASE_URL)) {
476
+ if (langfuse.hasLangfuseEnvConfig() &&
477
+ !langfuse.hasExplicitLangfuseConfig(this.Graph.agentContexts.values())) {
480
478
  const userId = config.configurable?.user_id;
481
479
  const sessionId = config.configurable?.thread_id;
482
480
  const primaryContext = this.Graph.agentContexts.get(this.Graph.defaultAgentId);
@@ -485,7 +483,7 @@ class Run {
485
483
  parentMessageId: config.configurable?.requestBody?.parentMessageId,
486
484
  agentName: primaryContext?.name,
487
485
  };
488
- const handler = new langchain.CallbackHandler({
486
+ const handler = langfuse.createLegacyLangfuseHandler({
489
487
  userId,
490
488
  sessionId,
491
489
  traceMetadata,
@@ -889,10 +887,8 @@ class Run {
889
887
  };
890
888
  }
891
889
  async generateTitle({ provider, inputText, contentParts, titlePrompt, clientOptions, chainOptions, skipLanguage, titleMethod = _enum.TitleMethod.COMPLETION, titlePromptTemplate, }) {
892
- if (chainOptions != null &&
893
- misc.isPresent(process.env.LANGFUSE_SECRET_KEY) &&
894
- misc.isPresent(process.env.LANGFUSE_PUBLIC_KEY) &&
895
- misc.isPresent(process.env.LANGFUSE_BASE_URL)) {
890
+ let titleLangfuseHandler;
891
+ if (chainOptions != null) {
896
892
  const userId = chainOptions.configurable?.user_id;
897
893
  const sessionId = chainOptions.configurable?.thread_id;
898
894
  const titleContext = this.Graph?.agentContexts.get(this.Graph.defaultAgentId);
@@ -900,12 +896,28 @@ class Run {
900
896
  messageId: 'title-' + this.id,
901
897
  agentName: titleContext?.name,
902
898
  };
903
- const handler = new langchain.CallbackHandler({
904
- userId,
905
- sessionId,
906
- traceMetadata,
907
- });
908
- chainOptions.callbacks = (chainOptions.callbacks ?? []).concat([handler]);
899
+ const hasExplicitLangfuse = this.Graph != null &&
900
+ langfuse.hasExplicitLangfuseConfig(this.Graph.agentContexts.values());
901
+ if (titleContext?.langfuse != null) {
902
+ titleLangfuseHandler = langfuse.createLangfuseHandler({
903
+ langfuse: titleContext.langfuse,
904
+ userId,
905
+ sessionId,
906
+ traceMetadata,
907
+ });
908
+ }
909
+ else if (langfuse.hasLangfuseEnvConfig() && !hasExplicitLangfuse) {
910
+ titleLangfuseHandler = langfuse.createLegacyLangfuseHandler({
911
+ userId,
912
+ sessionId,
913
+ traceMetadata,
914
+ });
915
+ }
916
+ if (titleLangfuseHandler != null) {
917
+ chainOptions.callbacks = (chainOptions.callbacks ?? []).concat([
918
+ titleLangfuseHandler,
919
+ ]);
920
+ }
909
921
  }
910
922
  const convoTemplate = prompts.PromptTemplate.fromTemplate(titlePromptTemplate ?? 'User: {input}\nAI: {output}');
911
923
  const response = contentParts
@@ -951,17 +963,22 @@ class Run {
951
963
  runId: this.id,
952
964
  });
953
965
  try {
954
- return await fullChain.invoke({ input: inputText, output: response }, invokeConfig);
955
- }
956
- catch (_e) {
957
- // Fallback: strip callbacks to avoid EventStream tracer errors in certain environments
958
- // But preserve langfuse handler if it exists
959
- const langfuseHandler = invokeConfig.callbacks?.find((cb) => cb instanceof langchain.CallbackHandler);
960
- const { callbacks: _cb, ...rest } = invokeConfig;
961
- const safeConfig = Object.assign({}, rest, {
962
- callbacks: langfuseHandler ? [langfuseHandler] : [],
963
- });
964
- return await fullChain.invoke({ input: inputText, output: response }, safeConfig);
966
+ try {
967
+ return await fullChain.invoke({ input: inputText, output: response }, invokeConfig);
968
+ }
969
+ catch (_e) {
970
+ // Fallback: strip callbacks to avoid EventStream tracer errors in certain environments
971
+ // but preserve Langfuse tracing if it exists.
972
+ const langfuseHandler = invokeConfig.callbacks?.find(langfuse.isLangfuseCallbackHandler);
973
+ const { callbacks: _cb, ...rest } = invokeConfig;
974
+ const safeConfig = Object.assign({}, rest, {
975
+ callbacks: langfuseHandler ? [langfuseHandler] : [],
976
+ });
977
+ return await fullChain.invoke({ input: inputText, output: response }, safeConfig);
978
+ }
979
+ }
980
+ finally {
981
+ await langfuse.disposeLangfuseHandler(titleLangfuseHandler);
965
982
  }
966
983
  }
967
984
  }