@mondaydotcomorg/atp-langchain 0.20.1 → 0.20.3
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/event-adapter.d.ts +68 -0
- package/dist/event-adapter.d.ts.map +1 -0
- package/dist/event-adapter.js +197 -0
- package/dist/event-adapter.js.map +1 -0
- package/dist/index.cjs +591 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +579 -4
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/event-adapter.ts +289 -0
- package/src/index.ts +7 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain Event Adapter
|
|
3
|
+
*
|
|
4
|
+
* Converts ATP streaming events to LangChain-compatible event format.
|
|
5
|
+
* Works with LangChain's callback system and streamEvents API.
|
|
6
|
+
*/
|
|
7
|
+
import { type ATPEvent } from '@mondaydotcomorg/atp-protocol';
|
|
8
|
+
/**
|
|
9
|
+
* LangChain-style event format
|
|
10
|
+
* Compatible with LangChain's streamEvents() output format
|
|
11
|
+
*/
|
|
12
|
+
export interface LangChainEvent {
|
|
13
|
+
event: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
data: unknown;
|
|
16
|
+
run_id?: string;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
tags?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Options for creating the LangChain event handler
|
|
22
|
+
*/
|
|
23
|
+
export interface CreateLangChainEventHandlerOptions {
|
|
24
|
+
/**
|
|
25
|
+
* Tags to add to all events
|
|
26
|
+
*/
|
|
27
|
+
tags?: string[];
|
|
28
|
+
/**
|
|
29
|
+
* Metadata to add to all events
|
|
30
|
+
*/
|
|
31
|
+
metadata?: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates an event handler that converts ATP events to LangChain event format.
|
|
35
|
+
*
|
|
36
|
+
* @param onEvent - Callback to receive LangChain-formatted events
|
|
37
|
+
* @param options - Optional configuration
|
|
38
|
+
* @returns An event handler function to pass to ATP's executeStream
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const handler = createLangChainEventHandler((event) => {
|
|
43
|
+
* console.log(event.event, event.data);
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* const result = await client.executeStream(code, {}, handler);
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function createLangChainEventHandler(onEvent: (event: LangChainEvent) => void, options?: CreateLangChainEventHandlerOptions): (event: ATPEvent) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Creates an event handler compatible with LangChain's CallbackManager.
|
|
52
|
+
* Useful for integrating with existing LangChain callback infrastructure.
|
|
53
|
+
*
|
|
54
|
+
* @param callbackManager - LangChain CallbackManager or similar interface
|
|
55
|
+
* @returns An event handler function to pass to ATP's executeStream
|
|
56
|
+
*/
|
|
57
|
+
export declare function createCallbackManagerHandler(callbackManager: {
|
|
58
|
+
handleCustomEvent?: (eventName: string, data: unknown, runId?: string, tags?: string[], metadata?: Record<string, unknown>) => Promise<void> | void;
|
|
59
|
+
handleToolStart?: (tool: {
|
|
60
|
+
name: string;
|
|
61
|
+
}, input: string, runId?: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>) => Promise<void> | void;
|
|
62
|
+
handleToolEnd?: (output: string, runId?: string, parentRunId?: string, tags?: string[]) => Promise<void> | void;
|
|
63
|
+
handleLLMNewToken?: (token: string, idx?: {
|
|
64
|
+
prompt: number;
|
|
65
|
+
completion: number;
|
|
66
|
+
}, runId?: string) => Promise<void> | void;
|
|
67
|
+
}): (event: ATPEvent) => void;
|
|
68
|
+
//# sourceMappingURL=event-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-adapter.d.ts","sourceRoot":"","sources":["../src/event-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,+BAA+B,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kCAAkC;IAClD;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,EACxC,OAAO,GAAE,kCAAuC,GAC9C,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CA0J3B;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,eAAe,EAAE;IAC7D,iBAAiB,CAAC,EAAE,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,CACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,CACf,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EAAE,KACX,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAC5C,KAAK,CAAC,EAAE,MAAM,KACV,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1B,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CA2C5B"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain Event Adapter
|
|
3
|
+
*
|
|
4
|
+
* Converts ATP streaming events to LangChain-compatible event format.
|
|
5
|
+
* Works with LangChain's callback system and streamEvents API.
|
|
6
|
+
*/
|
|
7
|
+
import { ATPEventType } from '@mondaydotcomorg/atp-protocol';
|
|
8
|
+
/**
|
|
9
|
+
* Creates an event handler that converts ATP events to LangChain event format.
|
|
10
|
+
*
|
|
11
|
+
* @param onEvent - Callback to receive LangChain-formatted events
|
|
12
|
+
* @param options - Optional configuration
|
|
13
|
+
* @returns An event handler function to pass to ATP's executeStream
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const handler = createLangChainEventHandler((event) => {
|
|
18
|
+
* console.log(event.event, event.data);
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* const result = await client.executeStream(code, {}, handler);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function createLangChainEventHandler(onEvent, options = {}) {
|
|
25
|
+
const { tags = [], metadata = {} } = options;
|
|
26
|
+
return (event) => {
|
|
27
|
+
const baseEvent = {
|
|
28
|
+
run_id: event.runId,
|
|
29
|
+
tags: ['atp', ...tags],
|
|
30
|
+
metadata: { ...metadata, timestamp: event.timestamp },
|
|
31
|
+
};
|
|
32
|
+
switch (event.type) {
|
|
33
|
+
case ATPEventType.THINKING: {
|
|
34
|
+
const data = event.data;
|
|
35
|
+
onEvent({
|
|
36
|
+
...baseEvent,
|
|
37
|
+
event: 'on_llm_stream',
|
|
38
|
+
name: 'atp_thinking',
|
|
39
|
+
data: {
|
|
40
|
+
chunk: data.content,
|
|
41
|
+
step: data.step,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case ATPEventType.TOOL_START: {
|
|
47
|
+
const data = event.data;
|
|
48
|
+
onEvent({
|
|
49
|
+
...baseEvent,
|
|
50
|
+
event: 'on_tool_start',
|
|
51
|
+
name: `${data.apiGroup}.${data.toolName}`,
|
|
52
|
+
data: {
|
|
53
|
+
input: data.input,
|
|
54
|
+
},
|
|
55
|
+
metadata: {
|
|
56
|
+
...baseEvent.metadata,
|
|
57
|
+
apiGroup: data.apiGroup,
|
|
58
|
+
toolName: data.toolName,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case ATPEventType.TOOL_END: {
|
|
64
|
+
const data = event.data;
|
|
65
|
+
onEvent({
|
|
66
|
+
...baseEvent,
|
|
67
|
+
event: 'on_tool_end',
|
|
68
|
+
name: `${data.apiGroup}.${data.toolName}`,
|
|
69
|
+
data: {
|
|
70
|
+
output: data.output,
|
|
71
|
+
error: data.error,
|
|
72
|
+
},
|
|
73
|
+
metadata: {
|
|
74
|
+
...baseEvent.metadata,
|
|
75
|
+
apiGroup: data.apiGroup,
|
|
76
|
+
toolName: data.toolName,
|
|
77
|
+
duration: data.duration,
|
|
78
|
+
success: data.success,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case ATPEventType.TEXT: {
|
|
84
|
+
const data = event.data;
|
|
85
|
+
onEvent({
|
|
86
|
+
...baseEvent,
|
|
87
|
+
event: 'on_chain_stream',
|
|
88
|
+
name: 'atp_output',
|
|
89
|
+
data: {
|
|
90
|
+
chunk: data.text,
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case ATPEventType.TEXT_END:
|
|
96
|
+
onEvent({
|
|
97
|
+
...baseEvent,
|
|
98
|
+
event: 'on_chain_end',
|
|
99
|
+
name: 'atp_output',
|
|
100
|
+
data: {},
|
|
101
|
+
});
|
|
102
|
+
break;
|
|
103
|
+
case ATPEventType.SOURCE: {
|
|
104
|
+
const data = event.data;
|
|
105
|
+
onEvent({
|
|
106
|
+
...baseEvent,
|
|
107
|
+
event: 'on_custom_event',
|
|
108
|
+
name: 'atp_source',
|
|
109
|
+
data: {
|
|
110
|
+
url: data.url,
|
|
111
|
+
title: data.title,
|
|
112
|
+
summary: data.summary,
|
|
113
|
+
createdAt: data.createdAt,
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case ATPEventType.PROGRESS: {
|
|
119
|
+
const data = event.data;
|
|
120
|
+
onEvent({
|
|
121
|
+
...baseEvent,
|
|
122
|
+
event: 'on_custom_event',
|
|
123
|
+
name: 'atp_progress',
|
|
124
|
+
data: {
|
|
125
|
+
message: data.message,
|
|
126
|
+
fraction: data.fraction,
|
|
127
|
+
percentage: Math.round(data.fraction * 100),
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
case ATPEventType.ERROR: {
|
|
133
|
+
const data = event.data;
|
|
134
|
+
onEvent({
|
|
135
|
+
...baseEvent,
|
|
136
|
+
event: 'on_chain_error',
|
|
137
|
+
name: 'atp_error',
|
|
138
|
+
data: {
|
|
139
|
+
error: data.message,
|
|
140
|
+
code: data.code,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
default:
|
|
146
|
+
// Forward unknown events as custom events
|
|
147
|
+
onEvent({
|
|
148
|
+
...baseEvent,
|
|
149
|
+
event: 'on_custom_event',
|
|
150
|
+
name: `atp_${event.type}`,
|
|
151
|
+
data: event.data,
|
|
152
|
+
});
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Creates an event handler compatible with LangChain's CallbackManager.
|
|
159
|
+
* Useful for integrating with existing LangChain callback infrastructure.
|
|
160
|
+
*
|
|
161
|
+
* @param callbackManager - LangChain CallbackManager or similar interface
|
|
162
|
+
* @returns An event handler function to pass to ATP's executeStream
|
|
163
|
+
*/
|
|
164
|
+
export function createCallbackManagerHandler(callbackManager) {
|
|
165
|
+
return (event) => {
|
|
166
|
+
switch (event.type) {
|
|
167
|
+
case ATPEventType.THINKING: {
|
|
168
|
+
const data = event.data;
|
|
169
|
+
callbackManager.handleLLMNewToken?.(data.content, undefined, event.runId);
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case ATPEventType.TOOL_START: {
|
|
173
|
+
const data = event.data;
|
|
174
|
+
callbackManager.handleToolStart?.({ name: `${data.apiGroup}.${data.toolName}` }, JSON.stringify(data.input), event.runId, undefined, ['atp'], { apiGroup: data.apiGroup });
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case ATPEventType.TOOL_END: {
|
|
178
|
+
const data = event.data;
|
|
179
|
+
callbackManager.handleToolEnd?.(JSON.stringify(data.output), event.runId, undefined, [
|
|
180
|
+
'atp',
|
|
181
|
+
]);
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
case ATPEventType.TEXT: {
|
|
185
|
+
const data = event.data;
|
|
186
|
+
callbackManager.handleLLMNewToken?.(data.text, undefined, event.runId);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
default:
|
|
190
|
+
callbackManager.handleCustomEvent?.(`atp_${event.type}`, event.data, event.runId, ['atp'], {
|
|
191
|
+
timestamp: event.timestamp,
|
|
192
|
+
});
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=event-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-adapter.js","sourceRoot":"","sources":["../src/event-adapter.ts"],"names":[],"mappings":"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"}
|