@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.
- package/dist/cjs/agents/AgentContext.cjs +9 -5
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +46 -14
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/langfuse.cjs +234 -0
- package/dist/cjs/langfuse.cjs.map +1 -0
- package/dist/cjs/main.cjs +25 -0
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/run.cjs +44 -27
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/stream.cjs +10 -3
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +380 -0
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -0
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +997 -0
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -0
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +575 -0
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -0
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +165 -0
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -0
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs +17 -5
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +110 -6
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +9 -5
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +46 -14
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/langfuse.mjs +226 -0
- package/dist/esm/langfuse.mjs.map +1 -0
- package/dist/esm/main.mjs +5 -1
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/run.mjs +44 -27
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/stream.mjs +10 -3
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +378 -0
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -0
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +994 -0
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -0
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +566 -0
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -0
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +155 -0
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -0
- package/dist/esm/tools/local/LocalExecutionEngine.mjs +17 -6
- package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +111 -7
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +4 -1
- package/dist/types/graphs/Graph.d.ts +6 -5
- package/dist/types/index.d.ts +1 -0
- package/dist/types/langfuse.d.ts +48 -0
- package/dist/types/tools/cloudflare/CloudflareBridgeRuntime.d.ts +23 -0
- package/dist/types/tools/cloudflare/CloudflareProgrammaticToolCalling.d.ts +4 -0
- package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +21 -0
- package/dist/types/tools/cloudflare/CloudflareSandboxTools.d.ts +22 -0
- package/dist/types/tools/cloudflare/index.d.ts +4 -0
- package/dist/types/tools/local/LocalExecutionEngine.d.ts +1 -0
- package/dist/types/types/graph.d.ts +8 -0
- package/dist/types/types/tools.d.ts +118 -2
- package/package.json +4 -4
- package/src/__tests__/stream.eagerEventExecution.test.ts +66 -0
- package/src/agents/AgentContext.ts +13 -3
- package/src/graphs/Graph.ts +53 -16
- package/src/index.ts +1 -0
- package/src/langfuse.ts +358 -0
- package/src/run.ts +60 -38
- package/src/specs/langfuse-config.test.ts +57 -0
- package/src/specs/langfuse-metadata.test.ts +19 -1
- package/src/stream.ts +13 -3
- package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +537 -0
- package/src/tools/cloudflare/CloudflareBridgeRuntime.ts +480 -0
- package/src/tools/cloudflare/CloudflareProgrammaticToolCalling.ts +1162 -0
- package/src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts +744 -0
- package/src/tools/cloudflare/CloudflareSandboxTools.ts +225 -0
- package/src/tools/cloudflare/index.ts +4 -0
- package/src/tools/local/LocalExecutionEngine.ts +20 -4
- package/src/tools/local/resolveLocalExecutionTools.ts +169 -7
- package/src/types/graph.ts +9 -0
- package/src/types/tools.ts +141 -2
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { CallbackHandler } from '@langfuse/langchain';
|
|
2
|
+
import { LangfuseSpanProcessor } from '@langfuse/otel';
|
|
3
|
+
import { createObservationAttributes, createTraceAttributes } from '@langfuse/tracing';
|
|
4
|
+
import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
|
|
5
|
+
import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
|
|
6
|
+
import { SpanStatusCode } from '@opentelemetry/api';
|
|
7
|
+
import { isPresent } from './utils/misc.mjs';
|
|
8
|
+
|
|
9
|
+
function getModelName(serialized) {
|
|
10
|
+
const serializedRecord = serialized;
|
|
11
|
+
const kwargs = serializedRecord.kwargs;
|
|
12
|
+
const modelName = kwargs?.model ??
|
|
13
|
+
kwargs?.model_name ??
|
|
14
|
+
kwargs?.modelName ??
|
|
15
|
+
kwargs?.model_id ??
|
|
16
|
+
kwargs?.modelId ??
|
|
17
|
+
serializedRecord.name;
|
|
18
|
+
if (typeof modelName === 'string' && modelName.trim() !== '') {
|
|
19
|
+
return modelName;
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(serializedRecord.id) && serializedRecord.id.length > 0) {
|
|
22
|
+
return String(serializedRecord.id[serializedRecord.id.length - 1]);
|
|
23
|
+
}
|
|
24
|
+
return 'ChatModel';
|
|
25
|
+
}
|
|
26
|
+
function getModelParameters(extraParams) {
|
|
27
|
+
const invocationParams = extraParams?.invocation_params;
|
|
28
|
+
const params = invocationParams != null && typeof invocationParams === 'object'
|
|
29
|
+
? invocationParams
|
|
30
|
+
: (extraParams ?? {});
|
|
31
|
+
return Object.fromEntries(Object.entries(params).filter(([, value]) => {
|
|
32
|
+
return typeof value === 'string' || typeof value === 'number';
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
function getOutput(output) {
|
|
36
|
+
return output.generations.map((generation) => generation.map((item) => {
|
|
37
|
+
if ('message' in item && item.message != null) {
|
|
38
|
+
return item.message.content;
|
|
39
|
+
}
|
|
40
|
+
return item.text;
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
function getUsageDetails(output) {
|
|
44
|
+
const llmOutput = output.llmOutput;
|
|
45
|
+
const usage = llmOutput?.tokenUsage ?? llmOutput?.usage;
|
|
46
|
+
if (usage == null || typeof usage !== 'object') {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const usageEntries = Object.entries(usage).filter(([, value]) => typeof value === 'number');
|
|
50
|
+
return usageEntries.length > 0
|
|
51
|
+
? Object.fromEntries(usageEntries)
|
|
52
|
+
: undefined;
|
|
53
|
+
}
|
|
54
|
+
function getTraceName(traceMetadata) {
|
|
55
|
+
const agentName = traceMetadata?.agentName;
|
|
56
|
+
return typeof agentName === 'string' && agentName.trim() !== ''
|
|
57
|
+
? `LibreChat Agent: ${agentName}`
|
|
58
|
+
: 'LibreChat Agent';
|
|
59
|
+
}
|
|
60
|
+
class LangfuseAgentCallbackHandler extends BaseCallbackHandler {
|
|
61
|
+
name = 'librechat_langfuse_agent_handler';
|
|
62
|
+
provider;
|
|
63
|
+
processor;
|
|
64
|
+
userId;
|
|
65
|
+
sessionId;
|
|
66
|
+
traceMetadata;
|
|
67
|
+
spans = new Map();
|
|
68
|
+
constructor({ langfuse, userId, sessionId, traceMetadata, }) {
|
|
69
|
+
super();
|
|
70
|
+
this.userId = userId;
|
|
71
|
+
this.sessionId = sessionId;
|
|
72
|
+
this.traceMetadata = traceMetadata;
|
|
73
|
+
this.processor = new LangfuseSpanProcessor({
|
|
74
|
+
publicKey: langfuse.publicKey,
|
|
75
|
+
secretKey: langfuse.secretKey,
|
|
76
|
+
...(isPresent(langfuse.baseUrl) ? { baseUrl: langfuse.baseUrl } : {}),
|
|
77
|
+
environment: process.env.LANGFUSE_TRACING_ENVIRONMENT ??
|
|
78
|
+
process.env.NODE_ENV ??
|
|
79
|
+
'development',
|
|
80
|
+
exportMode: 'immediate',
|
|
81
|
+
});
|
|
82
|
+
this.provider = new BasicTracerProvider({
|
|
83
|
+
spanProcessors: [this.processor],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
startGenerationSpan({ llm, input, runId, extraParams, metadata, name, }) {
|
|
87
|
+
if (this.spans.has(runId)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const tracer = this.provider.getTracer('librechat-agents-langfuse');
|
|
91
|
+
const spanName = typeof name === 'string' && name.trim() !== '' ? name : getModelName(llm);
|
|
92
|
+
const span = tracer.startSpan(spanName, {
|
|
93
|
+
attributes: {
|
|
94
|
+
...createTraceAttributes({
|
|
95
|
+
name: getTraceName(this.traceMetadata),
|
|
96
|
+
userId: this.userId,
|
|
97
|
+
sessionId: this.sessionId,
|
|
98
|
+
metadata: this.traceMetadata,
|
|
99
|
+
}),
|
|
100
|
+
...createObservationAttributes('generation', {
|
|
101
|
+
input,
|
|
102
|
+
model: getModelName(llm),
|
|
103
|
+
modelParameters: getModelParameters(extraParams),
|
|
104
|
+
metadata: {
|
|
105
|
+
...metadata,
|
|
106
|
+
...this.traceMetadata,
|
|
107
|
+
},
|
|
108
|
+
}),
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
this.spans.set(runId, span);
|
|
112
|
+
}
|
|
113
|
+
async handleChatModelStart(llm, messages, runId, _parentRunId, extraParams, _tags, metadata, name) {
|
|
114
|
+
this.startGenerationSpan({
|
|
115
|
+
llm,
|
|
116
|
+
input: messages,
|
|
117
|
+
runId,
|
|
118
|
+
extraParams,
|
|
119
|
+
metadata,
|
|
120
|
+
name,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
async handleLLMStart(llm, prompts, runId, _parentRunId, extraParams, _tags, metadata, name) {
|
|
124
|
+
this.startGenerationSpan({
|
|
125
|
+
llm,
|
|
126
|
+
input: prompts,
|
|
127
|
+
runId,
|
|
128
|
+
extraParams,
|
|
129
|
+
metadata,
|
|
130
|
+
name,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async handleLLMEnd(output, runId) {
|
|
134
|
+
const span = this.spans.get(runId);
|
|
135
|
+
if (!span) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
span.setAttributes(createObservationAttributes('generation', {
|
|
139
|
+
output: getOutput(output),
|
|
140
|
+
usageDetails: getUsageDetails(output),
|
|
141
|
+
}));
|
|
142
|
+
span.end();
|
|
143
|
+
this.spans.delete(runId);
|
|
144
|
+
await this.flush();
|
|
145
|
+
}
|
|
146
|
+
async handleLLMError(err, runId) {
|
|
147
|
+
const span = this.spans.get(runId);
|
|
148
|
+
if (!span) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
152
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message });
|
|
153
|
+
span.setAttributes(createObservationAttributes('generation', {
|
|
154
|
+
level: 'ERROR',
|
|
155
|
+
statusMessage: message,
|
|
156
|
+
}));
|
|
157
|
+
span.end();
|
|
158
|
+
this.spans.delete(runId);
|
|
159
|
+
await this.flush();
|
|
160
|
+
}
|
|
161
|
+
async flush() {
|
|
162
|
+
try {
|
|
163
|
+
await this.provider.forceFlush();
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
process.emitWarning(`[LangfuseAgentCallbackHandler] Failed to flush Langfuse spans: ${error instanceof Error ? error.message : String(error)}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async dispose() {
|
|
170
|
+
for (const span of this.spans.values()) {
|
|
171
|
+
span.end();
|
|
172
|
+
}
|
|
173
|
+
this.spans.clear();
|
|
174
|
+
await this.flush();
|
|
175
|
+
try {
|
|
176
|
+
await this.provider.shutdown();
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
process.emitWarning(`[LangfuseAgentCallbackHandler] Failed to shut down Langfuse provider: ${error instanceof Error ? error.message : String(error)}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function hasRequiredLangfuseConfig(langfuse) {
|
|
184
|
+
return (langfuse?.enabled === true &&
|
|
185
|
+
isPresent(langfuse.publicKey) &&
|
|
186
|
+
isPresent(langfuse.secretKey));
|
|
187
|
+
}
|
|
188
|
+
function createLegacyLangfuseHandler(params) {
|
|
189
|
+
return new CallbackHandler(params);
|
|
190
|
+
}
|
|
191
|
+
function createLangfuseHandler({ langfuse, userId, sessionId, traceMetadata, }) {
|
|
192
|
+
if (!hasRequiredLangfuseConfig(langfuse)) {
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
return new LangfuseAgentCallbackHandler({
|
|
196
|
+
langfuse,
|
|
197
|
+
userId,
|
|
198
|
+
sessionId,
|
|
199
|
+
traceMetadata,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
function hasExplicitLangfuseConfig(contexts) {
|
|
203
|
+
for (const context of contexts) {
|
|
204
|
+
if (context.langfuse != null) {
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
function hasLangfuseEnvConfig() {
|
|
211
|
+
return (isPresent(process.env.LANGFUSE_SECRET_KEY) &&
|
|
212
|
+
isPresent(process.env.LANGFUSE_PUBLIC_KEY) &&
|
|
213
|
+
isPresent(process.env.LANGFUSE_BASE_URL));
|
|
214
|
+
}
|
|
215
|
+
function isLangfuseCallbackHandler(value) {
|
|
216
|
+
return (value instanceof CallbackHandler ||
|
|
217
|
+
value instanceof LangfuseAgentCallbackHandler);
|
|
218
|
+
}
|
|
219
|
+
async function disposeLangfuseHandler(value) {
|
|
220
|
+
if (value instanceof LangfuseAgentCallbackHandler) {
|
|
221
|
+
await value.dispose();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export { LangfuseAgentCallbackHandler, createLangfuseHandler, createLegacyLangfuseHandler, disposeLangfuseHandler, hasExplicitLangfuseConfig, hasLangfuseEnvConfig, isLangfuseCallbackHandler };
|
|
226
|
+
//# sourceMappingURL=langfuse.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langfuse.mjs","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":[],"mappings":"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"}
|
package/dist/esm/main.mjs
CHANGED
|
@@ -34,7 +34,7 @@ export { handleServerToolResult, handleToolCallChunks, handleToolCalls, toolResu
|
|
|
34
34
|
export { CompileCheckToolName, createCompileCheckTool, createCompileCheckToolDefinition } from './tools/local/CompileCheckTool.mjs';
|
|
35
35
|
export { LocalFileCheckpointerImpl, createLocalFileCheckpointer } from './tools/local/FileCheckpointer.mjs';
|
|
36
36
|
export { LocalEditFileToolName, LocalEditFileToolSchema, LocalGlobSearchToolName, LocalGlobSearchToolSchema, LocalGrepSearchToolName, LocalGrepSearchToolSchema, LocalListDirectoryToolName, LocalListDirectoryToolSchema, LocalReadFileToolSchema, LocalWriteFileToolName, LocalWriteFileToolSchema, _resetRipgrepCacheForTests, createLocalCodingToolBundle, createLocalCodingToolDefinitions, createLocalCodingToolRegistry, createLocalCodingTools, createLocalEditFileTool, createLocalGlobSearchTool, createLocalGrepSearchTool, createLocalListDirectoryTool, createLocalReadFileTool, createLocalWriteFileTool } from './tools/local/LocalCodingTools.mjs';
|
|
37
|
-
export { _resetLocalEngineWarningsForTests, buildSandboxRuntimeConfig, executeLocalBash, executeLocalBashWithArgs, executeLocalCode, getLocalCwd, getLocalSessionId, getReadRoots, getSpawn, getWorkspaceFS, getWorkspaceRoots, getWriteRoots, resolveLocalExecutionConfig, resolveWorkspacePath, resolveWorkspacePathSafe, shellQuote, spawnLocalProcess, truncateLocalOutput, validateBashCommand } from './tools/local/LocalExecutionEngine.mjs';
|
|
37
|
+
export { LOCAL_SPAWN_TIMEOUT_MS, _resetLocalEngineWarningsForTests, buildSandboxRuntimeConfig, executeLocalBash, executeLocalBashWithArgs, executeLocalCode, getLocalCwd, getLocalSessionId, getReadRoots, getSpawn, getWorkspaceFS, getWorkspaceRoots, getWriteRoots, resolveLocalExecutionConfig, resolveWorkspacePath, resolveWorkspacePathSafe, shellQuote, spawnLocalProcess, truncateLocalOutput, validateBashCommand } from './tools/local/LocalExecutionEngine.mjs';
|
|
38
38
|
export { LocalBashExecutionToolDescription, LocalCodeExecutionToolDescription, createLocalBashExecutionTool, createLocalCodeExecutionTool } from './tools/local/LocalExecutionTools.mjs';
|
|
39
39
|
export { _createBashProgramForTests, applyPreToolUseHooksForBridge, createLocalBashProgrammaticToolCallingTool, createLocalProgrammaticToolCallingTool } from './tools/local/LocalProgrammaticToolCalling.mjs';
|
|
40
40
|
export { resolveLocalExecutionTools, resolveLocalToolRegistry, resolveLocalToolsForBinding } from './tools/local/resolveLocalExecutionTools.mjs';
|
|
@@ -43,6 +43,10 @@ export { bashAstFindingsToErrors, runBashAstChecks } from './tools/local/bashAst
|
|
|
43
43
|
export { applyEdit, locateEdit } from './tools/local/editStrategies.mjs';
|
|
44
44
|
export { _resetSyntaxCheckProbeCacheForTests, runPostEditSyntaxCheck } from './tools/local/syntaxCheck.mjs';
|
|
45
45
|
export { decodeFile, encodeFile } from './tools/local/textEncoding.mjs';
|
|
46
|
+
export { createCloudflareBridgeRuntime } from './tools/cloudflare/CloudflareBridgeRuntime.mjs';
|
|
47
|
+
export { createCloudflareBashProgrammaticToolCallingTool, createCloudflareProgrammaticToolCallingTool } from './tools/cloudflare/CloudflareProgrammaticToolCalling.mjs';
|
|
48
|
+
export { createCloudflareLocalExecutionConfig, createCloudflareWorkspaceFS, executeCloudflareBash, executeCloudflareCode, formatCloudflareOutput, getCloudflareWorkspaceRoot, resolveCloudflareSandbox, validateCloudflareBashCommand } from './tools/cloudflare/CloudflareSandboxExecutionEngine.mjs';
|
|
49
|
+
export { CLOUDFLARE_BASH_CODING_TOOL_NAMES, CLOUDFLARE_CODING_TOOL_NAMES, CloudflareBashExecutionToolDescription, CloudflareCodeExecutionToolDescription, createCloudflareBashExecutionTool, createCloudflareCodeExecutionTool, createCloudflareCodingToolBundle, createCloudflareCodingTools, createCloudflareExecutionTool } from './tools/cloudflare/CloudflareSandboxTools.mjs';
|
|
46
50
|
export { createSearchTool } from './tools/search/tool.mjs';
|
|
47
51
|
export { DATE_RANGE, DEFAULT_COUNTRY_DESCRIPTION, DEFAULT_QUERY_DESCRIPTION, WebSearchToolDefinition, WebSearchToolDescription, WebSearchToolName, WebSearchToolSchema, countrySchema, dateSchema, imagesSchema, newsSchema, querySchema, videosSchema } from './tools/search/schema.mjs';
|
|
48
52
|
export { ANTHROPIC_TOOL_TOKEN_MULTIPLIER, DEFAULT_TOOL_TOKEN_MULTIPLIER } from './common/constants.mjs';
|
package/dist/esm/main.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/esm/run.mjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import './instrumentation.mjs';
|
|
2
|
-
import { CallbackHandler } from '@langfuse/langchain';
|
|
3
2
|
import { PromptTemplate } from '@langchain/core/prompts';
|
|
4
3
|
import { RunnableLambda } from '@langchain/core/runnables';
|
|
5
4
|
import { ChatOpenAI as ChatOpenAI$1, AzureChatOpenAI as AzureChatOpenAI$1 } from '@langchain/openai';
|
|
@@ -16,7 +15,7 @@ import { HandlerRegistry } from './events.mjs';
|
|
|
16
15
|
import { executeHooks } from './hooks/executeHooks.mjs';
|
|
17
16
|
import './hooks/createWorkspacePolicyHook.mjs';
|
|
18
17
|
import { isOpenAILike } from './utils/llm.mjs';
|
|
19
|
-
import {
|
|
18
|
+
import { hasLangfuseEnvConfig, hasExplicitLangfuseConfig, createLegacyLangfuseHandler, createLangfuseHandler, isLangfuseCallbackHandler, disposeLangfuseHandler } from './langfuse.mjs';
|
|
20
19
|
|
|
21
20
|
// src/run.ts
|
|
22
21
|
const defaultOmitOptions = new Set([
|
|
@@ -472,9 +471,8 @@ class Run {
|
|
|
472
471
|
config.callbacks = baseCallbacks
|
|
473
472
|
.concat(streamCallbacks)
|
|
474
473
|
.concat(customHandler);
|
|
475
|
-
if (
|
|
476
|
-
|
|
477
|
-
isPresent(process.env.LANGFUSE_BASE_URL)) {
|
|
474
|
+
if (hasLangfuseEnvConfig() &&
|
|
475
|
+
!hasExplicitLangfuseConfig(this.Graph.agentContexts.values())) {
|
|
478
476
|
const userId = config.configurable?.user_id;
|
|
479
477
|
const sessionId = config.configurable?.thread_id;
|
|
480
478
|
const primaryContext = this.Graph.agentContexts.get(this.Graph.defaultAgentId);
|
|
@@ -483,7 +481,7 @@ class Run {
|
|
|
483
481
|
parentMessageId: config.configurable?.requestBody?.parentMessageId,
|
|
484
482
|
agentName: primaryContext?.name,
|
|
485
483
|
};
|
|
486
|
-
const handler =
|
|
484
|
+
const handler = createLegacyLangfuseHandler({
|
|
487
485
|
userId,
|
|
488
486
|
sessionId,
|
|
489
487
|
traceMetadata,
|
|
@@ -887,10 +885,8 @@ class Run {
|
|
|
887
885
|
};
|
|
888
886
|
}
|
|
889
887
|
async generateTitle({ provider, inputText, contentParts, titlePrompt, clientOptions, chainOptions, skipLanguage, titleMethod = TitleMethod.COMPLETION, titlePromptTemplate, }) {
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
isPresent(process.env.LANGFUSE_PUBLIC_KEY) &&
|
|
893
|
-
isPresent(process.env.LANGFUSE_BASE_URL)) {
|
|
888
|
+
let titleLangfuseHandler;
|
|
889
|
+
if (chainOptions != null) {
|
|
894
890
|
const userId = chainOptions.configurable?.user_id;
|
|
895
891
|
const sessionId = chainOptions.configurable?.thread_id;
|
|
896
892
|
const titleContext = this.Graph?.agentContexts.get(this.Graph.defaultAgentId);
|
|
@@ -898,12 +894,28 @@ class Run {
|
|
|
898
894
|
messageId: 'title-' + this.id,
|
|
899
895
|
agentName: titleContext?.name,
|
|
900
896
|
};
|
|
901
|
-
const
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
897
|
+
const hasExplicitLangfuse = this.Graph != null &&
|
|
898
|
+
hasExplicitLangfuseConfig(this.Graph.agentContexts.values());
|
|
899
|
+
if (titleContext?.langfuse != null) {
|
|
900
|
+
titleLangfuseHandler = createLangfuseHandler({
|
|
901
|
+
langfuse: titleContext.langfuse,
|
|
902
|
+
userId,
|
|
903
|
+
sessionId,
|
|
904
|
+
traceMetadata,
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
else if (hasLangfuseEnvConfig() && !hasExplicitLangfuse) {
|
|
908
|
+
titleLangfuseHandler = createLegacyLangfuseHandler({
|
|
909
|
+
userId,
|
|
910
|
+
sessionId,
|
|
911
|
+
traceMetadata,
|
|
912
|
+
});
|
|
913
|
+
}
|
|
914
|
+
if (titleLangfuseHandler != null) {
|
|
915
|
+
chainOptions.callbacks = (chainOptions.callbacks ?? []).concat([
|
|
916
|
+
titleLangfuseHandler,
|
|
917
|
+
]);
|
|
918
|
+
}
|
|
907
919
|
}
|
|
908
920
|
const convoTemplate = PromptTemplate.fromTemplate(titlePromptTemplate ?? 'User: {input}\nAI: {output}');
|
|
909
921
|
const response = contentParts
|
|
@@ -949,17 +961,22 @@ class Run {
|
|
|
949
961
|
runId: this.id,
|
|
950
962
|
});
|
|
951
963
|
try {
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
964
|
+
try {
|
|
965
|
+
return await fullChain.invoke({ input: inputText, output: response }, invokeConfig);
|
|
966
|
+
}
|
|
967
|
+
catch (_e) {
|
|
968
|
+
// Fallback: strip callbacks to avoid EventStream tracer errors in certain environments
|
|
969
|
+
// but preserve Langfuse tracing if it exists.
|
|
970
|
+
const langfuseHandler = invokeConfig.callbacks?.find(isLangfuseCallbackHandler);
|
|
971
|
+
const { callbacks: _cb, ...rest } = invokeConfig;
|
|
972
|
+
const safeConfig = Object.assign({}, rest, {
|
|
973
|
+
callbacks: langfuseHandler ? [langfuseHandler] : [],
|
|
974
|
+
});
|
|
975
|
+
return await fullChain.invoke({ input: inputText, output: response }, safeConfig);
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
finally {
|
|
979
|
+
await disposeLangfuseHandler(titleLangfuseHandler);
|
|
963
980
|
}
|
|
964
981
|
}
|
|
965
982
|
}
|