@prefactor/langchain 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/dist/index.cjs +43 -43
- package/dist/index.cjs.map +5 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -48
- package/dist/index.js.map +5 -5
- package/dist/init.d.ts +3 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +37 -27
- package/dist/init.js.map +1 -1
- package/dist/middleware.d.ts +4 -2
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +10 -14
- package/dist/middleware.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ npm install @prefactor/langchain
|
|
|
10
10
|
bun add @prefactor/langchain
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Note: This package requires `@prefactor/core` as a peer dependency, which will be installed automatically.
|
|
14
14
|
|
|
15
15
|
## Peer Dependencies
|
|
16
16
|
|
|
@@ -78,6 +78,7 @@ For convenience, common types are re-exported:
|
|
|
78
78
|
```typescript
|
|
79
79
|
import {
|
|
80
80
|
type Config,
|
|
81
|
+
type CoreRuntime,
|
|
81
82
|
type HttpTransportConfig,
|
|
82
83
|
type Span,
|
|
83
84
|
SpanStatus,
|
|
@@ -93,6 +94,11 @@ import {
|
|
|
93
94
|
- `PREFACTOR_API_URL`: API endpoint for HTTP transport
|
|
94
95
|
- `PREFACTOR_API_TOKEN`: Authentication token
|
|
95
96
|
- `PREFACTOR_SAMPLE_RATE`: Sampling rate 0.0-1.0 (default: `1.0`)
|
|
97
|
+
- `PREFACTOR_CAPTURE_INPUTS`: Capture span inputs (default: `true`)
|
|
98
|
+
- `PREFACTOR_CAPTURE_OUTPUTS`: Capture span outputs (default: `true`)
|
|
99
|
+
- `PREFACTOR_MAX_INPUT_LENGTH`: Max input string length (default: `10000`)
|
|
100
|
+
- `PREFACTOR_MAX_OUTPUT_LENGTH`: Max output string length (default: `10000`)
|
|
101
|
+
- `PREFACTOR_LOG_LEVEL`: `"debug"` | `"info"` | `"warn"` | `"error"` (default: `"info")`
|
|
96
102
|
|
|
97
103
|
### Programmatic Configuration
|
|
98
104
|
|
|
@@ -109,7 +115,9 @@ const middleware = init({
|
|
|
109
115
|
apiUrl: 'https://api.prefactor.ai',
|
|
110
116
|
apiToken: process.env.PREFACTOR_API_TOKEN!,
|
|
111
117
|
agentId: 'my-agent',
|
|
112
|
-
|
|
118
|
+
agentIdentifier: '1.0.0',
|
|
119
|
+
agentName: 'My Agent',
|
|
120
|
+
agentDescription: 'An agent description',
|
|
113
121
|
},
|
|
114
122
|
});
|
|
115
123
|
```
|
package/dist/index.cjs
CHANGED
|
@@ -42,7 +42,6 @@ var import_core3 = require("@prefactor/core");
|
|
|
42
42
|
|
|
43
43
|
// packages/langchain/src/init.ts
|
|
44
44
|
var import_core2 = require("@prefactor/core");
|
|
45
|
-
var import_pfid = require("@prefactor/pfid");
|
|
46
45
|
var import_langchain = require("langchain");
|
|
47
46
|
|
|
48
47
|
// packages/langchain/src/middleware.ts
|
|
@@ -84,22 +83,24 @@ function extractTokenUsage(response) {
|
|
|
84
83
|
// packages/langchain/src/middleware.ts
|
|
85
84
|
class PrefactorMiddleware {
|
|
86
85
|
tracer;
|
|
86
|
+
agentManager;
|
|
87
|
+
agentInfo;
|
|
87
88
|
rootSpan = null;
|
|
88
|
-
constructor(tracer) {
|
|
89
|
+
constructor(tracer, agentManager, agentInfo) {
|
|
89
90
|
this.tracer = tracer;
|
|
91
|
+
this.agentManager = agentManager;
|
|
92
|
+
this.agentInfo = agentInfo;
|
|
90
93
|
}
|
|
91
94
|
async beforeAgent(state) {
|
|
92
|
-
const parentSpan = import_core.SpanContext.getCurrent();
|
|
93
95
|
const messages = state?.messages ?? [];
|
|
94
|
-
this.
|
|
96
|
+
this.agentManager.startInstance(this.agentInfo);
|
|
95
97
|
const span = this.tracer.startSpan({
|
|
96
|
-
name: "agent",
|
|
98
|
+
name: "langchain:agent",
|
|
97
99
|
spanType: import_core.SpanType.AGENT,
|
|
98
|
-
inputs: { messages: messages.slice(-3).map((m) => String(m)) }
|
|
99
|
-
parentSpanId: parentSpan?.spanId,
|
|
100
|
-
traceId: parentSpan?.traceId
|
|
100
|
+
inputs: { messages: messages.slice(-3).map((m) => String(m)) }
|
|
101
101
|
});
|
|
102
102
|
this.rootSpan = span;
|
|
103
|
+
import_core.SpanContext.enter(span);
|
|
103
104
|
}
|
|
104
105
|
async afterAgent(state) {
|
|
105
106
|
if (!this.rootSpan) {
|
|
@@ -109,18 +110,15 @@ class PrefactorMiddleware {
|
|
|
109
110
|
this.tracer.endSpan(this.rootSpan, {
|
|
110
111
|
outputs: { messages: messages.slice(-3).map((m) => String(m)) }
|
|
111
112
|
});
|
|
112
|
-
this.
|
|
113
|
-
import_core.SpanContext.
|
|
113
|
+
this.agentManager.finishInstance();
|
|
114
|
+
import_core.SpanContext.exit();
|
|
114
115
|
this.rootSpan = null;
|
|
115
116
|
}
|
|
116
117
|
async wrapModelCall(request, handler) {
|
|
117
|
-
const parentSpan = import_core.SpanContext.getCurrent();
|
|
118
118
|
const span = this.tracer.startSpan({
|
|
119
119
|
name: this.extractModelName(request),
|
|
120
120
|
spanType: import_core.SpanType.LLM,
|
|
121
|
-
inputs: this.extractModelInputs(request)
|
|
122
|
-
parentSpanId: parentSpan?.spanId,
|
|
123
|
-
traceId: parentSpan?.traceId
|
|
121
|
+
inputs: this.extractModelInputs(request)
|
|
124
122
|
});
|
|
125
123
|
try {
|
|
126
124
|
const response = await import_core.SpanContext.runAsync(span, async () => {
|
|
@@ -136,13 +134,10 @@ class PrefactorMiddleware {
|
|
|
136
134
|
}
|
|
137
135
|
}
|
|
138
136
|
async wrapToolCall(request, handler) {
|
|
139
|
-
const parentSpan = import_core.SpanContext.getCurrent();
|
|
140
137
|
const span = this.tracer.startSpan({
|
|
141
138
|
name: this.extractToolName(request),
|
|
142
139
|
spanType: import_core.SpanType.TOOL,
|
|
143
|
-
inputs: this.extractToolInputs(request)
|
|
144
|
-
parentSpanId: parentSpan?.spanId,
|
|
145
|
-
traceId: parentSpan?.traceId
|
|
140
|
+
inputs: this.extractToolInputs(request)
|
|
146
141
|
});
|
|
147
142
|
try {
|
|
148
143
|
const response = await import_core.SpanContext.runAsync(span, async () => {
|
|
@@ -181,36 +176,40 @@ class PrefactorMiddleware {
|
|
|
181
176
|
|
|
182
177
|
// packages/langchain/src/init.ts
|
|
183
178
|
var logger = import_core2.getLogger("init");
|
|
179
|
+
var globalCore = null;
|
|
184
180
|
var globalTracer = null;
|
|
185
181
|
var globalMiddleware = null;
|
|
186
182
|
function init(config) {
|
|
187
183
|
import_core2.configureLogging();
|
|
188
|
-
const
|
|
189
|
-
|
|
184
|
+
const configWithDefaults = {
|
|
185
|
+
...config,
|
|
186
|
+
httpConfig: config?.httpConfig ? {
|
|
187
|
+
schemaName: "langchain:agent",
|
|
188
|
+
...config.httpConfig
|
|
189
|
+
} : undefined
|
|
190
|
+
};
|
|
191
|
+
const finalConfig = import_core2.createConfig(configWithDefaults);
|
|
190
192
|
if (globalMiddleware !== null) {
|
|
191
193
|
return globalMiddleware;
|
|
192
194
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
195
|
+
const core = import_core2.createCore(finalConfig);
|
|
196
|
+
globalCore = core;
|
|
197
|
+
globalTracer = core.tracer;
|
|
198
|
+
const httpConfig = finalConfig.httpConfig;
|
|
199
|
+
if (httpConfig?.agentSchema) {
|
|
200
|
+
core.agentManager.registerSchema(httpConfig.agentSchema);
|
|
201
|
+
} else if (finalConfig.transportType === "http" && (httpConfig?.agentSchemaIdentifier || httpConfig?.skipSchema)) {
|
|
202
|
+
logger.debug("Skipping default schema registration based on httpConfig");
|
|
196
203
|
} else {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
partition = import_pfid.extractPartition(finalConfig.httpConfig.agentId);
|
|
207
|
-
logger.debug("Extracted partition from agent_id", { partition });
|
|
208
|
-
} catch (error) {
|
|
209
|
-
logger.warn("Failed to extract partition from agent_id, using random partition", { error });
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
globalTracer = new import_core2.Tracer(transport, partition);
|
|
213
|
-
const prefactorMiddleware = new PrefactorMiddleware(globalTracer);
|
|
204
|
+
core.agentManager.registerSchema(import_core2.DEFAULT_AGENT_SCHEMA);
|
|
205
|
+
}
|
|
206
|
+
const agentInfo = finalConfig.httpConfig ? {
|
|
207
|
+
agentId: finalConfig.httpConfig.agentId,
|
|
208
|
+
agentIdentifier: finalConfig.httpConfig.agentIdentifier,
|
|
209
|
+
agentName: finalConfig.httpConfig.agentName,
|
|
210
|
+
agentDescription: finalConfig.httpConfig.agentDescription
|
|
211
|
+
} : undefined;
|
|
212
|
+
const prefactorMiddleware = new PrefactorMiddleware(core.tracer, core.agentManager, agentInfo);
|
|
214
213
|
const middleware = import_langchain.createMiddleware({
|
|
215
214
|
name: "prefactor",
|
|
216
215
|
wrapModelCall: async (request, handler) => {
|
|
@@ -236,10 +235,11 @@ function getTracer() {
|
|
|
236
235
|
return globalTracer;
|
|
237
236
|
}
|
|
238
237
|
async function shutdown() {
|
|
239
|
-
if (
|
|
238
|
+
if (globalCore) {
|
|
240
239
|
logger.info("Shutting down Prefactor SDK");
|
|
241
|
-
await
|
|
240
|
+
await globalCore.shutdown();
|
|
242
241
|
}
|
|
242
|
+
globalCore = null;
|
|
243
243
|
globalTracer = null;
|
|
244
244
|
globalMiddleware = null;
|
|
245
245
|
}
|
|
@@ -249,4 +249,4 @@ process.on("beforeExit", () => {
|
|
|
249
249
|
});
|
|
250
250
|
});
|
|
251
251
|
|
|
252
|
-
//# debugId=
|
|
252
|
+
//# debugId=476C65B0424F525B64756E2164756E21
|
package/dist/index.cjs.map
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/init.ts", "../src/middleware.ts", "../src/metadata-extractor.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"// Main entry points\n\n// Convenience re-exports from core\nexport {\n type Config,\n type HttpTransportConfig,\n type Span,\n SpanStatus,\n SpanType,\n} from '@prefactor/core';\nexport { getTracer, init, shutdown } from './init.js';\nexport { extractTokenUsage } from './metadata-extractor.js';\n// Middleware\nexport { PrefactorMiddleware } from './middleware.js';\n",
|
|
6
|
-
"import {\n type Config,\n
|
|
7
|
-
"import { type
|
|
5
|
+
"// Main entry points\n\n// Convenience re-exports from core\nexport {\n type Config,\n type CoreRuntime,\n type HttpTransportConfig,\n type Span,\n SpanStatus,\n SpanType,\n} from '@prefactor/core';\nexport { getTracer, init, shutdown } from './init.js';\nexport { extractTokenUsage } from './metadata-extractor.js';\n// Middleware\nexport { PrefactorMiddleware } from './middleware.js';\n",
|
|
6
|
+
"import {\n type Config,\n type CoreRuntime,\n configureLogging,\n createConfig,\n createCore,\n DEFAULT_AGENT_SCHEMA,\n getLogger,\n type Tracer,\n} from '@prefactor/core';\nimport { type AgentMiddleware, createMiddleware } from 'langchain';\nimport { PrefactorMiddleware } from './middleware.js';\n\nconst logger = getLogger('init');\n\nlet globalCore: CoreRuntime | null = null;\nlet globalTracer: Tracer | null = null;\nlet globalMiddleware: AgentMiddleware | null = null;\n\n/**\n * Initialize the Prefactor SDK and return middleware for LangChain.js\n *\n * This is the main entry point for the SDK. Call this function to create a middleware\n * instance that you can pass to your LangChain.js agents.\n *\n * @param config - Optional configuration object\n * @returns PrefactorMiddleware instance to use with LangChain.js agents\n *\n * @example\n * ```typescript\n * import { init } from '@prefactor/langchain';\n * import { createAgent } from 'langchain';\n *\n * // Initialize with defaults (stdio transport)\n * const middleware = init();\n *\n * // Or configure HTTP transport\n * const middleware = init({\n * transportType: 'http',\n * httpConfig: {\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * agentIdentifier: 'my-langchain-agent', // Required\n * agentId: 'legacy-agent-id', // Optional legacy identifier\n * }\n * });\n *\n * const agent = createAgent({\n * model: 'claude-sonnet-4-5-20250929',\n * tools: [myTool],\n * middleware: [middleware],\n * });\n * ```\n */\nexport function init(config?: Partial<Config>): AgentMiddleware {\n configureLogging();\n\n // Set default schema namespace for LangChain adaptor\n const configWithDefaults: Partial<Config> = {\n ...config,\n httpConfig: config?.httpConfig\n ? {\n schemaName: 'langchain:agent',\n ...config.httpConfig,\n }\n : undefined,\n };\n\n const finalConfig = createConfig(configWithDefaults);\n\n if (globalMiddleware !== null) {\n return globalMiddleware;\n }\n\n const core = createCore(finalConfig);\n globalCore = core;\n globalTracer = core.tracer;\n\n const httpConfig = finalConfig.httpConfig;\n if (httpConfig?.agentSchema) {\n core.agentManager.registerSchema(httpConfig.agentSchema);\n } else if (\n finalConfig.transportType === 'http' &&\n (httpConfig?.agentSchemaIdentifier || httpConfig?.skipSchema)\n ) {\n logger.debug('Skipping default schema registration based on httpConfig');\n } else {\n core.agentManager.registerSchema(DEFAULT_AGENT_SCHEMA);\n }\n\n const agentInfo = finalConfig.httpConfig\n ? {\n agentId: finalConfig.httpConfig.agentId,\n agentIdentifier: finalConfig.httpConfig.agentIdentifier,\n agentName: finalConfig.httpConfig.agentName,\n agentDescription: finalConfig.httpConfig.agentDescription,\n }\n : undefined;\n\n const prefactorMiddleware = new PrefactorMiddleware(core.tracer, core.agentManager, agentInfo);\n\n const middleware = createMiddleware({\n name: 'prefactor',\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n wrapModelCall: async (request: any, handler: any) => {\n return prefactorMiddleware.wrapModelCall(request, handler);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n wrapToolCall: async (request: any, handler: any) => {\n return prefactorMiddleware.wrapToolCall(request, handler);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n beforeAgent: async (state: any) => {\n await prefactorMiddleware.beforeAgent(state);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n afterAgent: async (state: any) => {\n await prefactorMiddleware.afterAgent(state);\n },\n });\n\n globalMiddleware = middleware;\n return middleware;\n}\n\n/**\n * Get the current tracer instance.\n *\n * If no tracer has been created yet, this will call init() with default configuration.\n *\n * @returns Tracer instance\n *\n * @example\n * ```typescript\n * import { getTracer } from '@prefactor/langchain';\n *\n * const tracer = getTracer();\n * const span = tracer.startSpan({\n * name: 'custom-operation',\n * spanType: SpanType.TOOL,\n * inputs: { data: 'example' }\n * });\n * ```\n */\nexport function getTracer(): Tracer {\n if (!globalTracer) {\n init();\n }\n // Safe because init() always sets globalTracer\n return globalTracer as Tracer;\n}\n\n/**\n * Shutdown the SDK and flush any pending spans.\n *\n * Call this before your application exits to ensure all spans are sent to the transport.\n * This is especially important for HTTP transport which has a queue of pending requests.\n *\n * @returns Promise that resolves when shutdown is complete\n *\n * @example\n * ```typescript\n * import { shutdown } from '@prefactor/langchain';\n *\n * process.on('SIGTERM', async () => {\n * await shutdown();\n * process.exit(0);\n * });\n * ```\n */\nexport async function shutdown(): Promise<void> {\n if (globalCore) {\n logger.info('Shutting down Prefactor SDK');\n await globalCore.shutdown();\n }\n globalCore = null;\n globalTracer = null;\n globalMiddleware = null;\n}\n\n// Automatic shutdown on process exit\nprocess.on('beforeExit', () => {\n shutdown().catch((error) => {\n console.error('Error during Prefactor SDK shutdown:', error);\n });\n});\n",
|
|
7
|
+
"import { type AgentInstanceManager, SpanContext, SpanType, type Tracer } from '@prefactor/core';\nimport { extractTokenUsage } from './metadata-extractor.js';\n\n/**\n * Prefactor middleware for LangChain.js agents.\n *\n * This middleware automatically traces LLM calls, tool executions, and agent workflows.\n * It integrates with LangChain.js middleware API to provide transparent instrumentation.\n *\n * Features:\n * - Automatic parent-child span relationships via context propagation\n * - Token usage extraction for LLM calls\n * - Error tracking and debugging\n * - Zero-overhead instrumentation (graceful failure)\n *\n * @example\n * ```typescript\n * import { init } from '@prefactor/langchain';\n * import { createReactAgent } from '@langchain/langgraph/prebuilt';\n *\n * const middleware = init();\n * const agent = createReactAgent({\n * llm: model,\n * tools: [myTool],\n * middleware: [middleware],\n * });\n * ```\n */\nexport class PrefactorMiddleware {\n private rootSpan: ReturnType<Tracer['startSpan']> | null = null;\n\n constructor(\n private tracer: Tracer,\n private agentManager: AgentInstanceManager,\n private agentInfo?: Parameters<AgentInstanceManager['startInstance']>[0]\n ) {}\n\n /**\n * Called before agent execution starts\n *\n * @param state - Agent state containing messages\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain state can be any structure\n async beforeAgent(state: any): Promise<void> {\n const messages = state?.messages ?? [];\n\n this.agentManager.startInstance(this.agentInfo);\n\n const span = this.tracer.startSpan({\n name: 'langchain:agent',\n spanType: SpanType.AGENT,\n inputs: { messages: messages.slice(-3).map((m: unknown) => String(m)) },\n });\n\n this.rootSpan = span;\n SpanContext.enter(span);\n }\n\n /**\n * Called after agent execution completes\n *\n * @param state - Agent state containing messages\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain state can be any structure\n async afterAgent(state: any): Promise<void> {\n if (!this.rootSpan) {\n return;\n }\n\n const messages = state?.messages ?? [];\n this.tracer.endSpan(this.rootSpan, {\n outputs: { messages: messages.slice(-3).map((m: unknown) => String(m)) },\n });\n\n this.agentManager.finishInstance();\n SpanContext.exit();\n this.rootSpan = null;\n }\n\n /**\n * Wrap a model call to trace LLM invocations\n *\n * @param request - Model invocation request\n * @param handler - The actual model call function\n * @returns Promise resolving to the model response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request/handler types are dynamic\n async wrapModelCall<T>(request: any, handler: (req: any) => Promise<T>): Promise<T> {\n const span = this.tracer.startSpan({\n name: this.extractModelName(request),\n spanType: SpanType.LLM,\n inputs: this.extractModelInputs(request),\n });\n\n try {\n // CRITICAL: Wrap handler in context so child operations see this span\n const response = await SpanContext.runAsync(span, async () => {\n return handler(request);\n });\n\n const outputs = this.extractModelOutputs(response);\n const tokenUsage = extractTokenUsage(response);\n\n this.tracer.endSpan(span, { outputs, tokenUsage: tokenUsage ?? undefined });\n return response;\n } catch (error) {\n this.tracer.endSpan(span, { error: error as Error });\n throw error;\n }\n }\n\n /**\n * Wrap a tool call to trace tool executions\n *\n * @param request - Tool invocation request\n * @param handler - The actual tool call function\n * @returns Promise resolving to the tool response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request/handler types are dynamic\n async wrapToolCall<T>(request: any, handler: (req: any) => Promise<T>): Promise<T> {\n const span = this.tracer.startSpan({\n name: this.extractToolName(request),\n spanType: SpanType.TOOL,\n inputs: this.extractToolInputs(request),\n });\n\n try {\n // CRITICAL: Wrap handler in context so child operations see this span\n const response = await SpanContext.runAsync(span, async () => {\n return handler(request);\n });\n\n this.tracer.endSpan(span, {\n outputs: this.extractToolOutputs(response),\n });\n return response;\n } catch (error) {\n this.tracer.endSpan(span, { error: error as Error });\n throw error;\n }\n }\n\n /**\n * Extract model name from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractModelName(request: any): string {\n return request?.model ?? request?.modelName ?? 'unknown';\n }\n\n /**\n * Extract model inputs from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractModelInputs(request: any): Record<string, unknown> {\n const messages = request?.messages ?? [];\n return { messages: messages.slice(-3).map((m: unknown) => String(m)) };\n }\n\n /**\n * Extract model outputs from response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain response structure is dynamic\n private extractModelOutputs(response: any): Record<string, unknown> {\n const content = response?.content ?? response?.text ?? '';\n return { content: String(content) };\n }\n\n /**\n * Extract tool name from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractToolName(request: any): string {\n return request?.name ?? request?.tool ?? 'unknown';\n }\n\n /**\n * Extract tool inputs from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractToolInputs(request: any): Record<string, unknown> {\n return { input: request?.input ?? request?.args ?? {} };\n }\n\n /**\n * Extract tool outputs from response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain response structure is dynamic\n private extractToolOutputs(response: any): Record<string, unknown> {\n return { output: response?.output ?? response };\n }\n}\n",
|
|
8
8
|
"import type { TokenUsage } from '@prefactor/core';\n\n/**\n * Extract token usage information from LLM responses.\n *\n * Handles multiple response formats from different LLM providers and LangChain versions.\n *\n * @param response - The LLM response object\n * @returns TokenUsage object or null if no usage data found\n *\n * @example\n * ```typescript\n * const response = await model.invoke(messages);\n * const tokenUsage = extractTokenUsage(response);\n * if (tokenUsage) {\n * console.log(`Tokens used: ${tokenUsage.totalTokens}`);\n * }\n * ```\n */\n// biome-ignore lint/suspicious/noExplicitAny: LLM response structure varies by provider\nexport function extractTokenUsage(response: any): TokenUsage | null {\n try {\n // Try token_usage field (common format)\n const tokenUsage = response?.token_usage ?? response?.usage;\n if (tokenUsage) {\n return {\n promptTokens: tokenUsage.prompt_tokens ?? 0,\n completionTokens: tokenUsage.completion_tokens ?? 0,\n totalTokens: tokenUsage.total_tokens ?? 0,\n };\n }\n\n // Try usage_metadata field (LangChain format)\n const usageMetadata = response?.usage_metadata;\n if (usageMetadata) {\n return {\n promptTokens: usageMetadata.input_tokens ?? 0,\n completionTokens: usageMetadata.output_tokens ?? 0,\n totalTokens: usageMetadata.total_tokens ?? 0,\n };\n }\n\n // Try response_metadata.token_usage (nested format)\n const responseMetadata = response?.response_metadata;\n if (responseMetadata?.token_usage) {\n return {\n promptTokens: responseMetadata.token_usage.prompt_tokens ?? 0,\n completionTokens: responseMetadata.token_usage.completion_tokens ?? 0,\n totalTokens: responseMetadata.token_usage.total_tokens ?? 0,\n };\n }\n\n return null;\n } catch {\n return null;\n }\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "476C65B0424F525B64756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { type Config, type HttpTransportConfig, type Span, SpanStatus, SpanType, } from '@prefactor/core';
|
|
1
|
+
export { type Config, type CoreRuntime, type HttpTransportConfig, type Span, SpanStatus, SpanType, } from '@prefactor/core';
|
|
2
2
|
export { getTracer, init, shutdown } from './init.js';
|
|
3
3
|
export { extractTokenUsage } from './metadata-extractor.js';
|
|
4
4
|
export { PrefactorMiddleware } from './middleware.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,mBAAmB,EACxB,KAAK,IAAI,EACT,UAAU,EACV,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,IAAI,EACT,UAAU,EACV,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,13 +8,10 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
configureLogging,
|
|
10
10
|
createConfig,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
StdioTransport,
|
|
15
|
-
Tracer
|
|
11
|
+
createCore,
|
|
12
|
+
DEFAULT_AGENT_SCHEMA,
|
|
13
|
+
getLogger
|
|
16
14
|
} from "@prefactor/core";
|
|
17
|
-
import { extractPartition } from "@prefactor/pfid";
|
|
18
15
|
import { createMiddleware } from "langchain";
|
|
19
16
|
|
|
20
17
|
// packages/langchain/src/middleware.ts
|
|
@@ -56,22 +53,24 @@ function extractTokenUsage(response) {
|
|
|
56
53
|
// packages/langchain/src/middleware.ts
|
|
57
54
|
class PrefactorMiddleware {
|
|
58
55
|
tracer;
|
|
56
|
+
agentManager;
|
|
57
|
+
agentInfo;
|
|
59
58
|
rootSpan = null;
|
|
60
|
-
constructor(tracer) {
|
|
59
|
+
constructor(tracer, agentManager, agentInfo) {
|
|
61
60
|
this.tracer = tracer;
|
|
61
|
+
this.agentManager = agentManager;
|
|
62
|
+
this.agentInfo = agentInfo;
|
|
62
63
|
}
|
|
63
64
|
async beforeAgent(state) {
|
|
64
|
-
const parentSpan = SpanContext.getCurrent();
|
|
65
65
|
const messages = state?.messages ?? [];
|
|
66
|
-
this.
|
|
66
|
+
this.agentManager.startInstance(this.agentInfo);
|
|
67
67
|
const span = this.tracer.startSpan({
|
|
68
|
-
name: "agent",
|
|
68
|
+
name: "langchain:agent",
|
|
69
69
|
spanType: SpanType.AGENT,
|
|
70
|
-
inputs: { messages: messages.slice(-3).map((m) => String(m)) }
|
|
71
|
-
parentSpanId: parentSpan?.spanId,
|
|
72
|
-
traceId: parentSpan?.traceId
|
|
70
|
+
inputs: { messages: messages.slice(-3).map((m) => String(m)) }
|
|
73
71
|
});
|
|
74
72
|
this.rootSpan = span;
|
|
73
|
+
SpanContext.enter(span);
|
|
75
74
|
}
|
|
76
75
|
async afterAgent(state) {
|
|
77
76
|
if (!this.rootSpan) {
|
|
@@ -81,18 +80,15 @@ class PrefactorMiddleware {
|
|
|
81
80
|
this.tracer.endSpan(this.rootSpan, {
|
|
82
81
|
outputs: { messages: messages.slice(-3).map((m) => String(m)) }
|
|
83
82
|
});
|
|
84
|
-
this.
|
|
85
|
-
SpanContext.
|
|
83
|
+
this.agentManager.finishInstance();
|
|
84
|
+
SpanContext.exit();
|
|
86
85
|
this.rootSpan = null;
|
|
87
86
|
}
|
|
88
87
|
async wrapModelCall(request, handler) {
|
|
89
|
-
const parentSpan = SpanContext.getCurrent();
|
|
90
88
|
const span = this.tracer.startSpan({
|
|
91
89
|
name: this.extractModelName(request),
|
|
92
90
|
spanType: SpanType.LLM,
|
|
93
|
-
inputs: this.extractModelInputs(request)
|
|
94
|
-
parentSpanId: parentSpan?.spanId,
|
|
95
|
-
traceId: parentSpan?.traceId
|
|
91
|
+
inputs: this.extractModelInputs(request)
|
|
96
92
|
});
|
|
97
93
|
try {
|
|
98
94
|
const response = await SpanContext.runAsync(span, async () => {
|
|
@@ -108,13 +104,10 @@ class PrefactorMiddleware {
|
|
|
108
104
|
}
|
|
109
105
|
}
|
|
110
106
|
async wrapToolCall(request, handler) {
|
|
111
|
-
const parentSpan = SpanContext.getCurrent();
|
|
112
107
|
const span = this.tracer.startSpan({
|
|
113
108
|
name: this.extractToolName(request),
|
|
114
109
|
spanType: SpanType.TOOL,
|
|
115
|
-
inputs: this.extractToolInputs(request)
|
|
116
|
-
parentSpanId: parentSpan?.spanId,
|
|
117
|
-
traceId: parentSpan?.traceId
|
|
110
|
+
inputs: this.extractToolInputs(request)
|
|
118
111
|
});
|
|
119
112
|
try {
|
|
120
113
|
const response = await SpanContext.runAsync(span, async () => {
|
|
@@ -153,36 +146,40 @@ class PrefactorMiddleware {
|
|
|
153
146
|
|
|
154
147
|
// packages/langchain/src/init.ts
|
|
155
148
|
var logger = getLogger("init");
|
|
149
|
+
var globalCore = null;
|
|
156
150
|
var globalTracer = null;
|
|
157
151
|
var globalMiddleware = null;
|
|
158
152
|
function init(config) {
|
|
159
153
|
configureLogging();
|
|
160
|
-
const
|
|
161
|
-
|
|
154
|
+
const configWithDefaults = {
|
|
155
|
+
...config,
|
|
156
|
+
httpConfig: config?.httpConfig ? {
|
|
157
|
+
schemaName: "langchain:agent",
|
|
158
|
+
...config.httpConfig
|
|
159
|
+
} : undefined
|
|
160
|
+
};
|
|
161
|
+
const finalConfig = createConfig(configWithDefaults);
|
|
162
162
|
if (globalMiddleware !== null) {
|
|
163
163
|
return globalMiddleware;
|
|
164
164
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
const core = createCore(finalConfig);
|
|
166
|
+
globalCore = core;
|
|
167
|
+
globalTracer = core.tracer;
|
|
168
|
+
const httpConfig = finalConfig.httpConfig;
|
|
169
|
+
if (httpConfig?.agentSchema) {
|
|
170
|
+
core.agentManager.registerSchema(httpConfig.agentSchema);
|
|
171
|
+
} else if (finalConfig.transportType === "http" && (httpConfig?.agentSchemaIdentifier || httpConfig?.skipSchema)) {
|
|
172
|
+
logger.debug("Skipping default schema registration based on httpConfig");
|
|
168
173
|
} else {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
partition = extractPartition(finalConfig.httpConfig.agentId);
|
|
179
|
-
logger.debug("Extracted partition from agent_id", { partition });
|
|
180
|
-
} catch (error) {
|
|
181
|
-
logger.warn("Failed to extract partition from agent_id, using random partition", { error });
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
globalTracer = new Tracer(transport, partition);
|
|
185
|
-
const prefactorMiddleware = new PrefactorMiddleware(globalTracer);
|
|
174
|
+
core.agentManager.registerSchema(DEFAULT_AGENT_SCHEMA);
|
|
175
|
+
}
|
|
176
|
+
const agentInfo = finalConfig.httpConfig ? {
|
|
177
|
+
agentId: finalConfig.httpConfig.agentId,
|
|
178
|
+
agentIdentifier: finalConfig.httpConfig.agentIdentifier,
|
|
179
|
+
agentName: finalConfig.httpConfig.agentName,
|
|
180
|
+
agentDescription: finalConfig.httpConfig.agentDescription
|
|
181
|
+
} : undefined;
|
|
182
|
+
const prefactorMiddleware = new PrefactorMiddleware(core.tracer, core.agentManager, agentInfo);
|
|
186
183
|
const middleware = createMiddleware({
|
|
187
184
|
name: "prefactor",
|
|
188
185
|
wrapModelCall: async (request, handler) => {
|
|
@@ -208,10 +205,11 @@ function getTracer() {
|
|
|
208
205
|
return globalTracer;
|
|
209
206
|
}
|
|
210
207
|
async function shutdown() {
|
|
211
|
-
if (
|
|
208
|
+
if (globalCore) {
|
|
212
209
|
logger.info("Shutting down Prefactor SDK");
|
|
213
|
-
await
|
|
210
|
+
await globalCore.shutdown();
|
|
214
211
|
}
|
|
212
|
+
globalCore = null;
|
|
215
213
|
globalTracer = null;
|
|
216
214
|
globalMiddleware = null;
|
|
217
215
|
}
|
|
@@ -230,4 +228,4 @@ export {
|
|
|
230
228
|
PrefactorMiddleware
|
|
231
229
|
};
|
|
232
230
|
|
|
233
|
-
//# debugId=
|
|
231
|
+
//# debugId=7CF7D7FD596ED20564756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/init.ts", "../src/middleware.ts", "../src/metadata-extractor.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"// Main entry points\n\n// Convenience re-exports from core\nexport {\n type Config,\n type HttpTransportConfig,\n type Span,\n SpanStatus,\n SpanType,\n} from '@prefactor/core';\nexport { getTracer, init, shutdown } from './init.js';\nexport { extractTokenUsage } from './metadata-extractor.js';\n// Middleware\nexport { PrefactorMiddleware } from './middleware.js';\n",
|
|
6
|
-
"import {\n type Config,\n
|
|
7
|
-
"import { type
|
|
5
|
+
"// Main entry points\n\n// Convenience re-exports from core\nexport {\n type Config,\n type CoreRuntime,\n type HttpTransportConfig,\n type Span,\n SpanStatus,\n SpanType,\n} from '@prefactor/core';\nexport { getTracer, init, shutdown } from './init.js';\nexport { extractTokenUsage } from './metadata-extractor.js';\n// Middleware\nexport { PrefactorMiddleware } from './middleware.js';\n",
|
|
6
|
+
"import {\n type Config,\n type CoreRuntime,\n configureLogging,\n createConfig,\n createCore,\n DEFAULT_AGENT_SCHEMA,\n getLogger,\n type Tracer,\n} from '@prefactor/core';\nimport { type AgentMiddleware, createMiddleware } from 'langchain';\nimport { PrefactorMiddleware } from './middleware.js';\n\nconst logger = getLogger('init');\n\nlet globalCore: CoreRuntime | null = null;\nlet globalTracer: Tracer | null = null;\nlet globalMiddleware: AgentMiddleware | null = null;\n\n/**\n * Initialize the Prefactor SDK and return middleware for LangChain.js\n *\n * This is the main entry point for the SDK. Call this function to create a middleware\n * instance that you can pass to your LangChain.js agents.\n *\n * @param config - Optional configuration object\n * @returns PrefactorMiddleware instance to use with LangChain.js agents\n *\n * @example\n * ```typescript\n * import { init } from '@prefactor/langchain';\n * import { createAgent } from 'langchain';\n *\n * // Initialize with defaults (stdio transport)\n * const middleware = init();\n *\n * // Or configure HTTP transport\n * const middleware = init({\n * transportType: 'http',\n * httpConfig: {\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * agentIdentifier: 'my-langchain-agent', // Required\n * agentId: 'legacy-agent-id', // Optional legacy identifier\n * }\n * });\n *\n * const agent = createAgent({\n * model: 'claude-sonnet-4-5-20250929',\n * tools: [myTool],\n * middleware: [middleware],\n * });\n * ```\n */\nexport function init(config?: Partial<Config>): AgentMiddleware {\n configureLogging();\n\n // Set default schema namespace for LangChain adaptor\n const configWithDefaults: Partial<Config> = {\n ...config,\n httpConfig: config?.httpConfig\n ? {\n schemaName: 'langchain:agent',\n ...config.httpConfig,\n }\n : undefined,\n };\n\n const finalConfig = createConfig(configWithDefaults);\n\n if (globalMiddleware !== null) {\n return globalMiddleware;\n }\n\n const core = createCore(finalConfig);\n globalCore = core;\n globalTracer = core.tracer;\n\n const httpConfig = finalConfig.httpConfig;\n if (httpConfig?.agentSchema) {\n core.agentManager.registerSchema(httpConfig.agentSchema);\n } else if (\n finalConfig.transportType === 'http' &&\n (httpConfig?.agentSchemaIdentifier || httpConfig?.skipSchema)\n ) {\n logger.debug('Skipping default schema registration based on httpConfig');\n } else {\n core.agentManager.registerSchema(DEFAULT_AGENT_SCHEMA);\n }\n\n const agentInfo = finalConfig.httpConfig\n ? {\n agentId: finalConfig.httpConfig.agentId,\n agentIdentifier: finalConfig.httpConfig.agentIdentifier,\n agentName: finalConfig.httpConfig.agentName,\n agentDescription: finalConfig.httpConfig.agentDescription,\n }\n : undefined;\n\n const prefactorMiddleware = new PrefactorMiddleware(core.tracer, core.agentManager, agentInfo);\n\n const middleware = createMiddleware({\n name: 'prefactor',\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n wrapModelCall: async (request: any, handler: any) => {\n return prefactorMiddleware.wrapModelCall(request, handler);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n wrapToolCall: async (request: any, handler: any) => {\n return prefactorMiddleware.wrapToolCall(request, handler);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n beforeAgent: async (state: any) => {\n await prefactorMiddleware.beforeAgent(state);\n },\n // biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types\n afterAgent: async (state: any) => {\n await prefactorMiddleware.afterAgent(state);\n },\n });\n\n globalMiddleware = middleware;\n return middleware;\n}\n\n/**\n * Get the current tracer instance.\n *\n * If no tracer has been created yet, this will call init() with default configuration.\n *\n * @returns Tracer instance\n *\n * @example\n * ```typescript\n * import { getTracer } from '@prefactor/langchain';\n *\n * const tracer = getTracer();\n * const span = tracer.startSpan({\n * name: 'custom-operation',\n * spanType: SpanType.TOOL,\n * inputs: { data: 'example' }\n * });\n * ```\n */\nexport function getTracer(): Tracer {\n if (!globalTracer) {\n init();\n }\n // Safe because init() always sets globalTracer\n return globalTracer as Tracer;\n}\n\n/**\n * Shutdown the SDK and flush any pending spans.\n *\n * Call this before your application exits to ensure all spans are sent to the transport.\n * This is especially important for HTTP transport which has a queue of pending requests.\n *\n * @returns Promise that resolves when shutdown is complete\n *\n * @example\n * ```typescript\n * import { shutdown } from '@prefactor/langchain';\n *\n * process.on('SIGTERM', async () => {\n * await shutdown();\n * process.exit(0);\n * });\n * ```\n */\nexport async function shutdown(): Promise<void> {\n if (globalCore) {\n logger.info('Shutting down Prefactor SDK');\n await globalCore.shutdown();\n }\n globalCore = null;\n globalTracer = null;\n globalMiddleware = null;\n}\n\n// Automatic shutdown on process exit\nprocess.on('beforeExit', () => {\n shutdown().catch((error) => {\n console.error('Error during Prefactor SDK shutdown:', error);\n });\n});\n",
|
|
7
|
+
"import { type AgentInstanceManager, SpanContext, SpanType, type Tracer } from '@prefactor/core';\nimport { extractTokenUsage } from './metadata-extractor.js';\n\n/**\n * Prefactor middleware for LangChain.js agents.\n *\n * This middleware automatically traces LLM calls, tool executions, and agent workflows.\n * It integrates with LangChain.js middleware API to provide transparent instrumentation.\n *\n * Features:\n * - Automatic parent-child span relationships via context propagation\n * - Token usage extraction for LLM calls\n * - Error tracking and debugging\n * - Zero-overhead instrumentation (graceful failure)\n *\n * @example\n * ```typescript\n * import { init } from '@prefactor/langchain';\n * import { createReactAgent } from '@langchain/langgraph/prebuilt';\n *\n * const middleware = init();\n * const agent = createReactAgent({\n * llm: model,\n * tools: [myTool],\n * middleware: [middleware],\n * });\n * ```\n */\nexport class PrefactorMiddleware {\n private rootSpan: ReturnType<Tracer['startSpan']> | null = null;\n\n constructor(\n private tracer: Tracer,\n private agentManager: AgentInstanceManager,\n private agentInfo?: Parameters<AgentInstanceManager['startInstance']>[0]\n ) {}\n\n /**\n * Called before agent execution starts\n *\n * @param state - Agent state containing messages\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain state can be any structure\n async beforeAgent(state: any): Promise<void> {\n const messages = state?.messages ?? [];\n\n this.agentManager.startInstance(this.agentInfo);\n\n const span = this.tracer.startSpan({\n name: 'langchain:agent',\n spanType: SpanType.AGENT,\n inputs: { messages: messages.slice(-3).map((m: unknown) => String(m)) },\n });\n\n this.rootSpan = span;\n SpanContext.enter(span);\n }\n\n /**\n * Called after agent execution completes\n *\n * @param state - Agent state containing messages\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain state can be any structure\n async afterAgent(state: any): Promise<void> {\n if (!this.rootSpan) {\n return;\n }\n\n const messages = state?.messages ?? [];\n this.tracer.endSpan(this.rootSpan, {\n outputs: { messages: messages.slice(-3).map((m: unknown) => String(m)) },\n });\n\n this.agentManager.finishInstance();\n SpanContext.exit();\n this.rootSpan = null;\n }\n\n /**\n * Wrap a model call to trace LLM invocations\n *\n * @param request - Model invocation request\n * @param handler - The actual model call function\n * @returns Promise resolving to the model response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request/handler types are dynamic\n async wrapModelCall<T>(request: any, handler: (req: any) => Promise<T>): Promise<T> {\n const span = this.tracer.startSpan({\n name: this.extractModelName(request),\n spanType: SpanType.LLM,\n inputs: this.extractModelInputs(request),\n });\n\n try {\n // CRITICAL: Wrap handler in context so child operations see this span\n const response = await SpanContext.runAsync(span, async () => {\n return handler(request);\n });\n\n const outputs = this.extractModelOutputs(response);\n const tokenUsage = extractTokenUsage(response);\n\n this.tracer.endSpan(span, { outputs, tokenUsage: tokenUsage ?? undefined });\n return response;\n } catch (error) {\n this.tracer.endSpan(span, { error: error as Error });\n throw error;\n }\n }\n\n /**\n * Wrap a tool call to trace tool executions\n *\n * @param request - Tool invocation request\n * @param handler - The actual tool call function\n * @returns Promise resolving to the tool response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request/handler types are dynamic\n async wrapToolCall<T>(request: any, handler: (req: any) => Promise<T>): Promise<T> {\n const span = this.tracer.startSpan({\n name: this.extractToolName(request),\n spanType: SpanType.TOOL,\n inputs: this.extractToolInputs(request),\n });\n\n try {\n // CRITICAL: Wrap handler in context so child operations see this span\n const response = await SpanContext.runAsync(span, async () => {\n return handler(request);\n });\n\n this.tracer.endSpan(span, {\n outputs: this.extractToolOutputs(response),\n });\n return response;\n } catch (error) {\n this.tracer.endSpan(span, { error: error as Error });\n throw error;\n }\n }\n\n /**\n * Extract model name from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractModelName(request: any): string {\n return request?.model ?? request?.modelName ?? 'unknown';\n }\n\n /**\n * Extract model inputs from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractModelInputs(request: any): Record<string, unknown> {\n const messages = request?.messages ?? [];\n return { messages: messages.slice(-3).map((m: unknown) => String(m)) };\n }\n\n /**\n * Extract model outputs from response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain response structure is dynamic\n private extractModelOutputs(response: any): Record<string, unknown> {\n const content = response?.content ?? response?.text ?? '';\n return { content: String(content) };\n }\n\n /**\n * Extract tool name from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractToolName(request: any): string {\n return request?.name ?? request?.tool ?? 'unknown';\n }\n\n /**\n * Extract tool inputs from request\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain request structure is dynamic\n private extractToolInputs(request: any): Record<string, unknown> {\n return { input: request?.input ?? request?.args ?? {} };\n }\n\n /**\n * Extract tool outputs from response\n */\n // biome-ignore lint/suspicious/noExplicitAny: LangChain response structure is dynamic\n private extractToolOutputs(response: any): Record<string, unknown> {\n return { output: response?.output ?? response };\n }\n}\n",
|
|
8
8
|
"import type { TokenUsage } from '@prefactor/core';\n\n/**\n * Extract token usage information from LLM responses.\n *\n * Handles multiple response formats from different LLM providers and LangChain versions.\n *\n * @param response - The LLM response object\n * @returns TokenUsage object or null if no usage data found\n *\n * @example\n * ```typescript\n * const response = await model.invoke(messages);\n * const tokenUsage = extractTokenUsage(response);\n * if (tokenUsage) {\n * console.log(`Tokens used: ${tokenUsage.totalTokens}`);\n * }\n * ```\n */\n// biome-ignore lint/suspicious/noExplicitAny: LLM response structure varies by provider\nexport function extractTokenUsage(response: any): TokenUsage | null {\n try {\n // Try token_usage field (common format)\n const tokenUsage = response?.token_usage ?? response?.usage;\n if (tokenUsage) {\n return {\n promptTokens: tokenUsage.prompt_tokens ?? 0,\n completionTokens: tokenUsage.completion_tokens ?? 0,\n totalTokens: tokenUsage.total_tokens ?? 0,\n };\n }\n\n // Try usage_metadata field (LangChain format)\n const usageMetadata = response?.usage_metadata;\n if (usageMetadata) {\n return {\n promptTokens: usageMetadata.input_tokens ?? 0,\n completionTokens: usageMetadata.output_tokens ?? 0,\n totalTokens: usageMetadata.total_tokens ?? 0,\n };\n }\n\n // Try response_metadata.token_usage (nested format)\n const responseMetadata = response?.response_metadata;\n if (responseMetadata?.token_usage) {\n return {\n promptTokens: responseMetadata.token_usage.prompt_tokens ?? 0,\n completionTokens: responseMetadata.token_usage.completion_tokens ?? 0,\n totalTokens: responseMetadata.token_usage.total_tokens ?? 0,\n };\n }\n\n return null;\n } catch {\n return null;\n }\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": ";AAGA;AAAA;AAAA,
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "7CF7D7FD596ED20564756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/dist/init.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Config, Tracer } from '@prefactor/core';
|
|
1
|
+
import { type Config, type Tracer } from '@prefactor/core';
|
|
2
2
|
import { type AgentMiddleware } from 'langchain';
|
|
3
3
|
/**
|
|
4
4
|
* Initialize the Prefactor SDK and return middleware for LangChain.js
|
|
@@ -23,6 +23,8 @@ import { type AgentMiddleware } from 'langchain';
|
|
|
23
23
|
* httpConfig: {
|
|
24
24
|
* apiUrl: 'https://api.prefactor.ai',
|
|
25
25
|
* apiToken: process.env.PREFACTOR_API_TOKEN!,
|
|
26
|
+
* agentIdentifier: 'my-langchain-agent', // Required
|
|
27
|
+
* agentId: 'legacy-agent-id', // Optional legacy identifier
|
|
26
28
|
* }
|
|
27
29
|
* });
|
|
28
30
|
*
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAOX,MAAM,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAOX,KAAK,MAAM,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,WAAW,CAAC;AASnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,eAAe,CAqE9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ9C"}
|
package/dist/init.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { configureLogging, createConfig,
|
|
2
|
-
import { extractPartition } from '@prefactor/pfid';
|
|
1
|
+
import { configureLogging, createConfig, createCore, DEFAULT_AGENT_SCHEMA, getLogger, } from '@prefactor/core';
|
|
3
2
|
import { createMiddleware } from 'langchain';
|
|
4
3
|
import { PrefactorMiddleware } from './middleware.js';
|
|
5
4
|
const logger = getLogger('init');
|
|
5
|
+
let globalCore = null;
|
|
6
6
|
let globalTracer = null;
|
|
7
7
|
let globalMiddleware = null;
|
|
8
8
|
/**
|
|
@@ -28,6 +28,8 @@ let globalMiddleware = null;
|
|
|
28
28
|
* httpConfig: {
|
|
29
29
|
* apiUrl: 'https://api.prefactor.ai',
|
|
30
30
|
* apiToken: process.env.PREFACTOR_API_TOKEN!,
|
|
31
|
+
* agentIdentifier: 'my-langchain-agent', // Required
|
|
32
|
+
* agentId: 'legacy-agent-id', // Optional legacy identifier
|
|
31
33
|
* }
|
|
32
34
|
* });
|
|
33
35
|
*
|
|
@@ -40,36 +42,43 @@ let globalMiddleware = null;
|
|
|
40
42
|
*/
|
|
41
43
|
export function init(config) {
|
|
42
44
|
configureLogging();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
// Set default schema namespace for LangChain adaptor
|
|
46
|
+
const configWithDefaults = {
|
|
47
|
+
...config,
|
|
48
|
+
httpConfig: config?.httpConfig
|
|
49
|
+
? {
|
|
50
|
+
schemaName: 'langchain:agent',
|
|
51
|
+
...config.httpConfig,
|
|
52
|
+
}
|
|
53
|
+
: undefined,
|
|
54
|
+
};
|
|
55
|
+
const finalConfig = createConfig(configWithDefaults);
|
|
45
56
|
if (globalMiddleware !== null) {
|
|
46
57
|
return globalMiddleware;
|
|
47
58
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
const core = createCore(finalConfig);
|
|
60
|
+
globalCore = core;
|
|
61
|
+
globalTracer = core.tracer;
|
|
62
|
+
const httpConfig = finalConfig.httpConfig;
|
|
63
|
+
if (httpConfig?.agentSchema) {
|
|
64
|
+
core.agentManager.registerSchema(httpConfig.agentSchema);
|
|
65
|
+
}
|
|
66
|
+
else if (finalConfig.transportType === 'http' &&
|
|
67
|
+
(httpConfig?.agentSchemaIdentifier || httpConfig?.skipSchema)) {
|
|
68
|
+
logger.debug('Skipping default schema registration based on httpConfig');
|
|
51
69
|
}
|
|
52
70
|
else {
|
|
53
|
-
|
|
54
|
-
throw new Error('HTTP transport requires httpConfig to be provided in configuration');
|
|
55
|
-
}
|
|
56
|
-
// Parse httpConfig to apply defaults from schema
|
|
57
|
-
const httpConfig = HttpTransportConfigSchema.parse(finalConfig.httpConfig);
|
|
58
|
-
transport = new HttpTransport(httpConfig);
|
|
71
|
+
core.agentManager.registerSchema(DEFAULT_AGENT_SCHEMA);
|
|
59
72
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
73
|
+
const agentInfo = finalConfig.httpConfig
|
|
74
|
+
? {
|
|
75
|
+
agentId: finalConfig.httpConfig.agentId,
|
|
76
|
+
agentIdentifier: finalConfig.httpConfig.agentIdentifier,
|
|
77
|
+
agentName: finalConfig.httpConfig.agentName,
|
|
78
|
+
agentDescription: finalConfig.httpConfig.agentDescription,
|
|
66
79
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
globalTracer = new Tracer(transport, partition);
|
|
72
|
-
const prefactorMiddleware = new PrefactorMiddleware(globalTracer);
|
|
80
|
+
: undefined;
|
|
81
|
+
const prefactorMiddleware = new PrefactorMiddleware(core.tracer, core.agentManager, agentInfo);
|
|
73
82
|
const middleware = createMiddleware({
|
|
74
83
|
name: 'prefactor',
|
|
75
84
|
// biome-ignore lint/suspicious/noExplicitAny: LangChain middleware hooks use dynamic types
|
|
@@ -137,10 +146,11 @@ export function getTracer() {
|
|
|
137
146
|
* ```
|
|
138
147
|
*/
|
|
139
148
|
export async function shutdown() {
|
|
140
|
-
if (
|
|
149
|
+
if (globalCore) {
|
|
141
150
|
logger.info('Shutting down Prefactor SDK');
|
|
142
|
-
await
|
|
151
|
+
await globalCore.shutdown();
|
|
143
152
|
}
|
|
153
|
+
globalCore = null;
|
|
144
154
|
globalTracer = null;
|
|
145
155
|
globalMiddleware = null;
|
|
146
156
|
}
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/middleware.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Tracer } from '@prefactor/core';
|
|
1
|
+
import { type AgentInstanceManager, type Tracer } from '@prefactor/core';
|
|
2
2
|
/**
|
|
3
3
|
* Prefactor middleware for LangChain.js agents.
|
|
4
4
|
*
|
|
@@ -26,8 +26,10 @@ import { type Tracer } from '@prefactor/core';
|
|
|
26
26
|
*/
|
|
27
27
|
export declare class PrefactorMiddleware {
|
|
28
28
|
private tracer;
|
|
29
|
+
private agentManager;
|
|
30
|
+
private agentInfo?;
|
|
29
31
|
private rootSpan;
|
|
30
|
-
constructor(tracer: Tracer);
|
|
32
|
+
constructor(tracer: Tracer, agentManager: AgentInstanceManager, agentInfo?: Parameters<AgentInstanceManager['startInstance']>[0]);
|
|
31
33
|
/**
|
|
32
34
|
* Called before agent execution starts
|
|
33
35
|
*
|
package/dist/middleware.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAyB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGhG;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,SAAS,CAAC;IALpB,OAAO,CAAC,QAAQ,CAAgD;gBAGtD,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,oBAAoB,EAClC,SAAS,CAAC,EAAE,UAAU,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAG1E;;;;OAIG;IAEG,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAe5C;;;;OAIG;IAEG,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3C;;;;;;OAMG;IAEG,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAwBnF;;;;;;OAMG;IAEG,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAuBlF;;OAEG;IAEH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IAEH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IAEH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IAEH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IAEH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IAEH,OAAO,CAAC,kBAAkB;CAG3B"}
|
package/dist/middleware.js
CHANGED
|
@@ -27,9 +27,13 @@ import { extractTokenUsage } from './metadata-extractor.js';
|
|
|
27
27
|
*/
|
|
28
28
|
export class PrefactorMiddleware {
|
|
29
29
|
tracer;
|
|
30
|
+
agentManager;
|
|
31
|
+
agentInfo;
|
|
30
32
|
rootSpan = null;
|
|
31
|
-
constructor(tracer) {
|
|
33
|
+
constructor(tracer, agentManager, agentInfo) {
|
|
32
34
|
this.tracer = tracer;
|
|
35
|
+
this.agentManager = agentManager;
|
|
36
|
+
this.agentInfo = agentInfo;
|
|
33
37
|
}
|
|
34
38
|
/**
|
|
35
39
|
* Called before agent execution starts
|
|
@@ -38,17 +42,15 @@ export class PrefactorMiddleware {
|
|
|
38
42
|
*/
|
|
39
43
|
// biome-ignore lint/suspicious/noExplicitAny: LangChain state can be any structure
|
|
40
44
|
async beforeAgent(state) {
|
|
41
|
-
const parentSpan = SpanContext.getCurrent();
|
|
42
45
|
const messages = state?.messages ?? [];
|
|
43
|
-
this.
|
|
46
|
+
this.agentManager.startInstance(this.agentInfo);
|
|
44
47
|
const span = this.tracer.startSpan({
|
|
45
|
-
name: 'agent',
|
|
48
|
+
name: 'langchain:agent',
|
|
46
49
|
spanType: SpanType.AGENT,
|
|
47
50
|
inputs: { messages: messages.slice(-3).map((m) => String(m)) },
|
|
48
|
-
parentSpanId: parentSpan?.spanId,
|
|
49
|
-
traceId: parentSpan?.traceId,
|
|
50
51
|
});
|
|
51
52
|
this.rootSpan = span;
|
|
53
|
+
SpanContext.enter(span);
|
|
52
54
|
}
|
|
53
55
|
/**
|
|
54
56
|
* Called after agent execution completes
|
|
@@ -64,8 +66,8 @@ export class PrefactorMiddleware {
|
|
|
64
66
|
this.tracer.endSpan(this.rootSpan, {
|
|
65
67
|
outputs: { messages: messages.slice(-3).map((m) => String(m)) },
|
|
66
68
|
});
|
|
67
|
-
this.
|
|
68
|
-
SpanContext.
|
|
69
|
+
this.agentManager.finishInstance();
|
|
70
|
+
SpanContext.exit();
|
|
69
71
|
this.rootSpan = null;
|
|
70
72
|
}
|
|
71
73
|
/**
|
|
@@ -77,13 +79,10 @@ export class PrefactorMiddleware {
|
|
|
77
79
|
*/
|
|
78
80
|
// biome-ignore lint/suspicious/noExplicitAny: LangChain request/handler types are dynamic
|
|
79
81
|
async wrapModelCall(request, handler) {
|
|
80
|
-
const parentSpan = SpanContext.getCurrent();
|
|
81
82
|
const span = this.tracer.startSpan({
|
|
82
83
|
name: this.extractModelName(request),
|
|
83
84
|
spanType: SpanType.LLM,
|
|
84
85
|
inputs: this.extractModelInputs(request),
|
|
85
|
-
parentSpanId: parentSpan?.spanId,
|
|
86
|
-
traceId: parentSpan?.traceId,
|
|
87
86
|
});
|
|
88
87
|
try {
|
|
89
88
|
// CRITICAL: Wrap handler in context so child operations see this span
|
|
@@ -109,13 +108,10 @@ export class PrefactorMiddleware {
|
|
|
109
108
|
*/
|
|
110
109
|
// biome-ignore lint/suspicious/noExplicitAny: LangChain request/handler types are dynamic
|
|
111
110
|
async wrapToolCall(request, handler) {
|
|
112
|
-
const parentSpan = SpanContext.getCurrent();
|
|
113
111
|
const span = this.tracer.startSpan({
|
|
114
112
|
name: this.extractToolName(request),
|
|
115
113
|
spanType: SpanType.TOOL,
|
|
116
114
|
inputs: this.extractToolInputs(request),
|
|
117
|
-
parentSpanId: parentSpan?.spanId,
|
|
118
|
-
traceId: parentSpan?.traceId,
|
|
119
115
|
});
|
|
120
116
|
try {
|
|
121
117
|
// CRITICAL: Wrap handler in context so child operations see this span
|
package/dist/middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prefactor/langchain",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "LangChain.js integration for Prefactor observability",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"author": "Prefactor",
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@prefactor/core": "0.1.
|
|
31
|
+
"@prefactor/core": "0.1.1",
|
|
32
32
|
"@prefactor/pfid": "^0.1.0"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|