zeitlich 0.2.49 → 0.2.51
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 +26 -23
- package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/index.d.cts +3 -3
- package/dist/adapters/sandbox/daytona/index.d.ts +3 -3
- package/dist/adapters/sandbox/daytona/index.js.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.cts +2 -2
- package/dist/adapters/sandbox/daytona/workflow.d.ts +2 -2
- package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/index.d.cts +1 -1
- package/dist/adapters/sandbox/e2b/index.d.ts +1 -1
- package/dist/adapters/sandbox/e2b/index.js.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.ts +1 -1
- package/dist/adapters/thread/anthropic/index.cjs +60 -55
- package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/index.d.cts +20 -15
- package/dist/adapters/thread/anthropic/index.d.ts +20 -15
- package/dist/adapters/thread/anthropic/index.js +60 -55
- package/dist/adapters/thread/anthropic/index.js.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.d.cts +7 -7
- package/dist/adapters/thread/anthropic/workflow.d.ts +7 -7
- package/dist/adapters/thread/google-genai/index.cjs +135 -66
- package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/index.d.cts +200 -26
- package/dist/adapters/thread/google-genai/index.d.ts +200 -26
- package/dist/adapters/thread/google-genai/index.js +135 -66
- package/dist/adapters/thread/google-genai/index.js.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.d.cts +8 -8
- package/dist/adapters/thread/google-genai/workflow.d.ts +8 -8
- package/dist/adapters/thread/langchain/index.cjs +67 -55
- package/dist/adapters/thread/langchain/index.cjs.map +1 -1
- package/dist/adapters/thread/langchain/index.d.cts +20 -15
- package/dist/adapters/thread/langchain/index.d.ts +20 -15
- package/dist/adapters/thread/langchain/index.js +67 -55
- package/dist/adapters/thread/langchain/index.js.map +1 -1
- package/dist/adapters/thread/langchain/workflow.d.cts +7 -7
- package/dist/adapters/thread/langchain/workflow.d.ts +7 -7
- package/dist/{cold-store-DKMAO1Dd.d.ts → cold-store-DyHodfAB.d.ts} +1 -1
- package/dist/{cold-store-CkWoNtMh.d.cts → cold-store-YOx9nmgR.d.cts} +1 -1
- package/dist/index.cjs +15050 -420
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +79 -83
- package/dist/index.d.ts +79 -83
- package/dist/index.js +15051 -417
- package/dist/index.js.map +1 -1
- package/dist/{proxy-B7CWEV-T.d.cts → proxy-2htgGQrc.d.cts} +1 -1
- package/dist/{proxy-ByFHMVRX.d.ts → proxy-CmiTP4pp.d.ts} +1 -1
- package/dist/{thread-manager-nK-WcFzM.d.ts → thread-manager-BJ5pz5Cx.d.cts} +6 -7
- package/dist/{thread-manager-7AW4rhfu.d.ts → thread-manager-BQAbrYXH.d.cts} +6 -7
- package/dist/{thread-manager-Cibe0X5m.d.cts → thread-manager-CcvltOuq.d.ts} +6 -7
- package/dist/{thread-manager-B9rtMEVn.d.cts → thread-manager-DHAbncHX.d.ts} +6 -7
- package/dist/{types-gVa5XCWD.d.ts → types-BQvXWcft.d.ts} +1 -1
- package/dist/{types-XUUFvrJ9.d.cts → types-BjdqxKYp.d.cts} +709 -709
- package/dist/{types-CJ7tCdl6.d.ts → types-D8W5TnSa.d.cts} +3 -3
- package/dist/{types-CJ7tCdl6.d.cts → types-D8W5TnSa.d.ts} +3 -3
- package/dist/{types-DO4Tkwxo.d.ts → types-DEbkLA06.d.ts} +3 -3
- package/dist/{types-DeVNWqlb.d.ts → types-DiI7mZhI.d.ts} +709 -709
- package/dist/{types-BR-k7h0e.d.cts → types-N_LTWe4b.d.cts} +3 -3
- package/dist/{types-CjY93AWZ.d.cts → types-OEN1xrFg.d.cts} +1 -1
- package/dist/{workflow-uhOIj9D-.d.ts → workflow-CcgD6EUB.d.cts} +34 -3
- package/dist/{workflow-KbGsxpfh.d.cts → workflow-DBjPOKBr.d.ts} +34 -3
- package/dist/workflow.cjs +15008 -377
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +3 -3
- package/dist/workflow.d.ts +3 -3
- package/dist/workflow.js +15009 -374
- package/dist/workflow.js.map +1 -1
- package/package.json +10 -37
- package/src/adapters/thread/anthropic/activities.test.ts +115 -0
- package/src/adapters/thread/anthropic/activities.ts +11 -19
- package/src/adapters/thread/anthropic/fork-transform.test.ts +17 -11
- package/src/adapters/thread/anthropic/model-invoker.test.ts +54 -3
- package/src/adapters/thread/anthropic/model-invoker.ts +11 -1
- package/src/adapters/thread/anthropic/thread-manager.test.ts +2 -2
- package/src/adapters/thread/anthropic/thread-manager.ts +3 -4
- package/src/adapters/thread/google-genai/activities.test.ts +162 -0
- package/src/adapters/thread/google-genai/activities.ts +38 -15
- package/src/adapters/thread/google-genai/fork-transform.test.ts +17 -11
- package/src/adapters/thread/google-genai/model-invoker.test.ts +386 -0
- package/src/adapters/thread/google-genai/model-invoker.ts +118 -23
- package/src/adapters/thread/google-genai/thread-manager.test.ts +2 -2
- package/src/adapters/thread/google-genai/thread-manager.ts +3 -4
- package/src/adapters/thread/langchain/activities.test.ts +88 -0
- package/src/adapters/thread/langchain/activities.ts +15 -12
- package/src/adapters/thread/langchain/fork-transform.test.ts +17 -11
- package/src/adapters/thread/langchain/model-invoker.test.ts +74 -0
- package/src/adapters/thread/langchain/model-invoker.ts +16 -3
- package/src/adapters/thread/langchain/thread-manager.test.ts +2 -2
- package/src/adapters/thread/langchain/thread-manager.ts +3 -4
- package/src/index.ts +2 -2
- package/src/lib/sandbox/capability-types.test.ts +2 -2
- package/src/lib/sandbox/manager.ts +2 -6
- package/src/lib/sandbox/sandbox.test.ts +1 -1
- package/src/lib/sandbox/types.ts +2 -2
- package/src/lib/session/session.integration.test.ts +92 -0
- package/src/lib/session/session.ts +23 -11
- package/src/lib/thread/keys.test.ts +9 -9
- package/src/lib/thread/keys.ts +1 -1
- package/src/lib/thread/manager.test.ts +24 -14
- package/src/lib/thread/manager.ts +19 -23
- package/src/lib/thread/snapshot.test.ts +51 -43
- package/src/lib/thread/snapshot.ts +54 -32
- package/src/lib/thread/test-utils.ts +106 -59
- package/src/lib/thread/tiered.test.ts +1 -1
- package/src/lib/thread/types.ts +2 -2
- package/src/lib/tool-router/router.integration.test.ts +44 -0
- package/src/lib/tool-router/router.ts +140 -32
- package/src/lib/workflow.ts +49 -0
- package/src/{adapters/sandbox/inmemory/proxy.ts → test-utils/in-memory-sandbox-proxy.ts} +5 -16
- package/src/{adapters/sandbox/inmemory/index.ts → test-utils/in-memory-sandbox.ts} +11 -3
- package/src/tools/bash/bash.test.ts +1 -1
- package/src/tools/edit/handler.test.ts +1 -1
- package/tsup.config.ts +2 -4
- package/dist/activities-7OcT_vdR.d.cts +0 -162
- package/dist/activities-zG_FBoY2.d.ts +0 -162
- package/dist/adapters/sandbox/inmemory/index.cjs +0 -214
- package/dist/adapters/sandbox/inmemory/index.cjs.map +0 -1
- package/dist/adapters/sandbox/inmemory/index.d.cts +0 -40
- package/dist/adapters/sandbox/inmemory/index.d.ts +0 -40
- package/dist/adapters/sandbox/inmemory/index.js +0 -211
- package/dist/adapters/sandbox/inmemory/index.js.map +0 -1
- package/dist/adapters/sandbox/inmemory/workflow.cjs +0 -36
- package/dist/adapters/sandbox/inmemory/workflow.cjs.map +0 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.cts +0 -27
- package/dist/adapters/sandbox/inmemory/workflow.d.ts +0 -27
- package/dist/adapters/sandbox/inmemory/workflow.js +0 -34
- package/dist/adapters/sandbox/inmemory/workflow.js.map +0 -1
|
@@ -55,11 +55,11 @@ function createThreadManager(config) {
|
|
|
55
55
|
return {
|
|
56
56
|
async initialize() {
|
|
57
57
|
await redis.del(redisKey);
|
|
58
|
-
await redis.set(metaKey, "1",
|
|
58
|
+
await redis.set(metaKey, "1", { EX: ttlSeconds });
|
|
59
59
|
},
|
|
60
60
|
async load() {
|
|
61
61
|
await assertThreadExists();
|
|
62
|
-
const data = await redis.
|
|
62
|
+
const data = await redis.lRange(redisKey, 0, -1);
|
|
63
63
|
return data.map(deserialize);
|
|
64
64
|
},
|
|
65
65
|
async append(messages) {
|
|
@@ -67,22 +67,18 @@ function createThreadManager(config) {
|
|
|
67
67
|
await assertThreadExists();
|
|
68
68
|
if (idOf) {
|
|
69
69
|
const dedupId = messages.map(idOf).join(":");
|
|
70
|
-
await redis.eval(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
redisKey,
|
|
75
|
-
String(ttlSeconds),
|
|
76
|
-
...messages.map(serialize)
|
|
77
|
-
);
|
|
70
|
+
await redis.eval(APPEND_IDEMPOTENT_SCRIPT, {
|
|
71
|
+
keys: [dedupKey(dedupId), redisKey],
|
|
72
|
+
arguments: [String(ttlSeconds), ...messages.map(serialize)]
|
|
73
|
+
});
|
|
78
74
|
} else {
|
|
79
|
-
await redis.
|
|
75
|
+
await redis.rPush(redisKey, messages.map(serialize));
|
|
80
76
|
await redis.expire(redisKey, ttlSeconds);
|
|
81
77
|
}
|
|
82
78
|
},
|
|
83
79
|
async fork(newThreadId) {
|
|
84
80
|
await assertThreadExists();
|
|
85
|
-
const data = await redis.
|
|
81
|
+
const data = await redis.lRange(redisKey, 0, -1);
|
|
86
82
|
const stateRaw = await redis.get(stateKey);
|
|
87
83
|
const forked = createThreadManager({
|
|
88
84
|
...config,
|
|
@@ -91,12 +87,12 @@ function createThreadManager(config) {
|
|
|
91
87
|
await forked.initialize();
|
|
92
88
|
if (data.length > 0) {
|
|
93
89
|
const newKey = getThreadListKey(key, newThreadId);
|
|
94
|
-
await redis.
|
|
90
|
+
await redis.rPush(newKey, data);
|
|
95
91
|
await redis.expire(newKey, ttlSeconds);
|
|
96
92
|
}
|
|
97
93
|
if (stateRaw != null) {
|
|
98
94
|
const newStateKey = getThreadStateKey(key, newThreadId);
|
|
99
|
-
await redis.set(newStateKey, stateRaw,
|
|
95
|
+
await redis.set(newStateKey, stateRaw, { EX: ttlSeconds });
|
|
100
96
|
}
|
|
101
97
|
return forked;
|
|
102
98
|
},
|
|
@@ -107,20 +103,20 @@ function createThreadManager(config) {
|
|
|
107
103
|
"replaceAll requires the thread manager to be configured with `idOf`"
|
|
108
104
|
);
|
|
109
105
|
}
|
|
110
|
-
const existing = await redis.
|
|
106
|
+
const existing = await redis.lRange(redisKey, 0, -1);
|
|
111
107
|
const existingIds = existing.map((raw) => idOf(deserialize(raw))).filter((id) => typeof id === "string");
|
|
112
108
|
await redis.del(redisKey);
|
|
113
109
|
if (existingIds.length > 0) {
|
|
114
|
-
await redis.del(
|
|
110
|
+
await redis.del(existingIds.map(dedupKey));
|
|
115
111
|
}
|
|
116
112
|
if (messages.length > 0) {
|
|
117
|
-
await redis.
|
|
113
|
+
await redis.rPush(redisKey, messages.map(serialize));
|
|
118
114
|
await redis.expire(redisKey, ttlSeconds);
|
|
119
115
|
}
|
|
120
116
|
await redis.expire(metaKey, ttlSeconds);
|
|
121
117
|
},
|
|
122
118
|
async delete() {
|
|
123
|
-
await redis.del(redisKey, metaKey, stateKey);
|
|
119
|
+
await redis.del([redisKey, metaKey, stateKey]);
|
|
124
120
|
},
|
|
125
121
|
async loadState() {
|
|
126
122
|
const raw = await redis.get(stateKey);
|
|
@@ -129,14 +125,14 @@ function createThreadManager(config) {
|
|
|
129
125
|
},
|
|
130
126
|
async saveState(state) {
|
|
131
127
|
await assertThreadExists();
|
|
132
|
-
await redis.set(stateKey, JSON.stringify(state),
|
|
128
|
+
await redis.set(stateKey, JSON.stringify(state), { EX: ttlSeconds });
|
|
133
129
|
},
|
|
134
130
|
async deleteState() {
|
|
135
131
|
await redis.del(stateKey);
|
|
136
132
|
},
|
|
137
133
|
async length() {
|
|
138
134
|
await assertThreadExists();
|
|
139
|
-
return redis.
|
|
135
|
+
return redis.lLen(redisKey);
|
|
140
136
|
},
|
|
141
137
|
async truncateFromId(messageId) {
|
|
142
138
|
await assertThreadExists();
|
|
@@ -145,7 +141,7 @@ function createThreadManager(config) {
|
|
|
145
141
|
"truncateFromId requires the thread manager to be configured with `idOf`"
|
|
146
142
|
);
|
|
147
143
|
}
|
|
148
|
-
const data = await redis.
|
|
144
|
+
const data = await redis.lRange(redisKey, 0, -1);
|
|
149
145
|
let idx = -1;
|
|
150
146
|
const removedIds = [];
|
|
151
147
|
for (let i = 0; i < data.length; i++) {
|
|
@@ -160,11 +156,11 @@ function createThreadManager(config) {
|
|
|
160
156
|
await redis.del(redisKey);
|
|
161
157
|
await redis.expire(metaKey, ttlSeconds);
|
|
162
158
|
} else {
|
|
163
|
-
await redis.
|
|
159
|
+
await redis.lTrim(redisKey, 0, idx - 1);
|
|
164
160
|
await redis.expire(redisKey, ttlSeconds);
|
|
165
161
|
}
|
|
166
162
|
if (removedIds.length > 0) {
|
|
167
|
-
await redis.del(
|
|
163
|
+
await redis.del(removedIds.map(dedupKey));
|
|
168
164
|
}
|
|
169
165
|
}
|
|
170
166
|
};
|
|
@@ -179,7 +175,7 @@ async function encodeSnapshot(config) {
|
|
|
179
175
|
}
|
|
180
176
|
const listKey = getThreadListKey(threadKey, threadId);
|
|
181
177
|
const stateKey = getThreadStateKey(threadKey, threadId);
|
|
182
|
-
const messages = await redis.
|
|
178
|
+
const messages = await redis.lRange(listKey, 0, -1);
|
|
183
179
|
const stateRaw = await redis.get(stateKey);
|
|
184
180
|
const state = stateRaw == null ? null : JSON.parse(stateRaw);
|
|
185
181
|
const dedupIds = idOf ? messages.map(idOf) : [];
|
|
@@ -199,31 +195,38 @@ async function applySnapshot(config) {
|
|
|
199
195
|
}
|
|
200
196
|
const listKey = getThreadListKey(threadKey, threadId);
|
|
201
197
|
const stateKey = getThreadStateKey(threadKey, threadId);
|
|
202
|
-
await redis.del(listKey, stateKey);
|
|
203
|
-
const pipeline = redis.
|
|
198
|
+
await redis.del([listKey, stateKey]);
|
|
199
|
+
const pipeline = redis.multi();
|
|
204
200
|
if (snapshot.messages.length > 0) {
|
|
205
|
-
pipeline.
|
|
201
|
+
pipeline.rPush(listKey, snapshot.messages);
|
|
206
202
|
pipeline.expire(listKey, ttlSeconds);
|
|
207
203
|
}
|
|
208
204
|
if (snapshot.state != null) {
|
|
209
|
-
pipeline.set(stateKey, JSON.stringify(snapshot.state),
|
|
205
|
+
pipeline.set(stateKey, JSON.stringify(snapshot.state), { EX: ttlSeconds });
|
|
210
206
|
}
|
|
211
207
|
for (const id of snapshot.dedupIds) {
|
|
212
|
-
pipeline.set(getThreadDedupKey(threadId, id), "1",
|
|
208
|
+
pipeline.set(getThreadDedupKey(threadId, id), "1", { EX: ttlSeconds });
|
|
213
209
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
throw firstErr;
|
|
224
|
-
}
|
|
210
|
+
try {
|
|
211
|
+
await pipeline.execAsPipeline();
|
|
212
|
+
} catch (err) {
|
|
213
|
+
await redis.del([
|
|
214
|
+
listKey,
|
|
215
|
+
stateKey,
|
|
216
|
+
...snapshot.dedupIds.map((id) => getThreadDedupKey(threadId, id))
|
|
217
|
+
]).catch(() => void 0);
|
|
218
|
+
throw firstPipelineError(err);
|
|
225
219
|
}
|
|
226
|
-
await redis.set(metaKey, "1",
|
|
220
|
+
await redis.set(metaKey, "1", { EX: ttlSeconds });
|
|
221
|
+
}
|
|
222
|
+
function firstPipelineError(err) {
|
|
223
|
+
if (err != null && typeof err === "object" && "replies" in err && Array.isArray(err.replies)) {
|
|
224
|
+
const firstErr = err.replies.find(
|
|
225
|
+
(r) => r instanceof Error
|
|
226
|
+
);
|
|
227
|
+
if (firstErr) return firstErr;
|
|
228
|
+
}
|
|
229
|
+
return err;
|
|
227
230
|
}
|
|
228
231
|
async function clearHotTier(config) {
|
|
229
232
|
const { redis, threadKey, threadId, dedupIds = [] } = config;
|
|
@@ -233,7 +236,7 @@ async function clearHotTier(config) {
|
|
|
233
236
|
getThreadStateKey(threadKey, threadId),
|
|
234
237
|
...dedupIds.map((id) => getThreadDedupKey(threadId, id))
|
|
235
238
|
];
|
|
236
|
-
await redis.del(
|
|
239
|
+
await redis.del(keys);
|
|
237
240
|
}
|
|
238
241
|
|
|
239
242
|
// src/lib/thread/tiered.ts
|
|
@@ -420,7 +423,7 @@ function getActivityContext() {
|
|
|
420
423
|
}
|
|
421
424
|
|
|
422
425
|
// src/adapters/thread/langchain/model-invoker.ts
|
|
423
|
-
function createLangChainModelInvoker({ redis, model, hooks }) {
|
|
426
|
+
function createLangChainModelInvoker({ redis, model, hooks, ttlSeconds }) {
|
|
424
427
|
return async function invokeLangChainModel2(config) {
|
|
425
428
|
const { threadId, threadKey, agentName, state, metadata, assistantMessageId } = config;
|
|
426
429
|
const { heartbeat, signal } = getActivityContext();
|
|
@@ -428,7 +431,8 @@ function createLangChainModelInvoker({ redis, model, hooks }) {
|
|
|
428
431
|
redis,
|
|
429
432
|
threadId,
|
|
430
433
|
key: threadKey,
|
|
431
|
-
hooks
|
|
434
|
+
hooks,
|
|
435
|
+
...ttlSeconds !== void 0 && { ttlSeconds }
|
|
432
436
|
});
|
|
433
437
|
const runId = v4_default();
|
|
434
438
|
await thread.truncateFromId(assistantMessageId);
|
|
@@ -468,30 +472,35 @@ async function invokeLangChainModel({
|
|
|
468
472
|
redis,
|
|
469
473
|
model,
|
|
470
474
|
hooks,
|
|
475
|
+
ttlSeconds,
|
|
471
476
|
config
|
|
472
477
|
}) {
|
|
473
|
-
const invoker = createLangChainModelInvoker({
|
|
478
|
+
const invoker = createLangChainModelInvoker({
|
|
479
|
+
redis,
|
|
480
|
+
model,
|
|
481
|
+
hooks,
|
|
482
|
+
...ttlSeconds !== void 0 && { ttlSeconds }
|
|
483
|
+
});
|
|
474
484
|
return invoker(config);
|
|
475
485
|
}
|
|
476
486
|
|
|
477
487
|
// src/adapters/thread/langchain/activities.ts
|
|
478
488
|
function createLangChainAdapter(config) {
|
|
479
489
|
const { redis } = config;
|
|
480
|
-
const
|
|
490
|
+
const base = {
|
|
491
|
+
redis,
|
|
481
492
|
...config.ttlSeconds !== void 0 && { ttlSeconds: config.ttlSeconds }
|
|
482
493
|
};
|
|
483
494
|
const makeProviderThread = (threadId, threadKey) => createLangChainThreadManager({
|
|
484
|
-
|
|
495
|
+
...base,
|
|
485
496
|
threadId,
|
|
486
|
-
key: threadKey
|
|
487
|
-
...baseExtras
|
|
497
|
+
key: threadKey
|
|
488
498
|
});
|
|
489
499
|
const makeTieredBase = (threadId, threadKey) => createTieredThreadManager({
|
|
490
|
-
|
|
500
|
+
...base,
|
|
491
501
|
threadId,
|
|
492
502
|
key: threadKey,
|
|
493
503
|
idOf: storedMessageId,
|
|
494
|
-
...baseExtras,
|
|
495
504
|
...config.coldStore && { coldStore: config.coldStore }
|
|
496
505
|
});
|
|
497
506
|
const threadOps = {
|
|
@@ -519,11 +528,10 @@ function createLangChainAdapter(config) {
|
|
|
519
528
|
},
|
|
520
529
|
async forkThread(sourceThreadId, targetThreadId, threadKey) {
|
|
521
530
|
const thread = createLangChainThreadManager({
|
|
522
|
-
|
|
531
|
+
...base,
|
|
523
532
|
threadId: sourceThreadId,
|
|
524
533
|
key: threadKey,
|
|
525
|
-
hooks: config.hooks
|
|
526
|
-
...baseExtras
|
|
534
|
+
hooks: config.hooks
|
|
527
535
|
});
|
|
528
536
|
await thread.fork(targetThreadId);
|
|
529
537
|
},
|
|
@@ -555,7 +563,11 @@ function createLangChainAdapter(config) {
|
|
|
555
563
|
Object.entries(threadOps).map(([k, v]) => [`${prefix}${cap(k)}`, v])
|
|
556
564
|
);
|
|
557
565
|
}
|
|
558
|
-
const makeInvoker = (model) => createLangChainModelInvoker({
|
|
566
|
+
const makeInvoker = (model) => createLangChainModelInvoker({
|
|
567
|
+
...base,
|
|
568
|
+
model,
|
|
569
|
+
hooks: config.hooks
|
|
570
|
+
});
|
|
559
571
|
const invoker = config.model ? makeInvoker(config.model) : () => {
|
|
560
572
|
throw new Error(
|
|
561
573
|
"No default model provided to createLangChainAdapter. Either pass `model` in the config or use `createModelInvoker(model)` instead."
|