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
|
@@ -57,11 +57,11 @@ function createThreadManager(config) {
|
|
|
57
57
|
return {
|
|
58
58
|
async initialize() {
|
|
59
59
|
await redis.del(redisKey);
|
|
60
|
-
await redis.set(metaKey, "1",
|
|
60
|
+
await redis.set(metaKey, "1", { EX: ttlSeconds });
|
|
61
61
|
},
|
|
62
62
|
async load() {
|
|
63
63
|
await assertThreadExists();
|
|
64
|
-
const data = await redis.
|
|
64
|
+
const data = await redis.lRange(redisKey, 0, -1);
|
|
65
65
|
return data.map(deserialize);
|
|
66
66
|
},
|
|
67
67
|
async append(messages) {
|
|
@@ -69,22 +69,18 @@ function createThreadManager(config) {
|
|
|
69
69
|
await assertThreadExists();
|
|
70
70
|
if (idOf) {
|
|
71
71
|
const dedupId = messages.map(idOf).join(":");
|
|
72
|
-
await redis.eval(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
redisKey,
|
|
77
|
-
String(ttlSeconds),
|
|
78
|
-
...messages.map(serialize)
|
|
79
|
-
);
|
|
72
|
+
await redis.eval(APPEND_IDEMPOTENT_SCRIPT, {
|
|
73
|
+
keys: [dedupKey(dedupId), redisKey],
|
|
74
|
+
arguments: [String(ttlSeconds), ...messages.map(serialize)]
|
|
75
|
+
});
|
|
80
76
|
} else {
|
|
81
|
-
await redis.
|
|
77
|
+
await redis.rPush(redisKey, messages.map(serialize));
|
|
82
78
|
await redis.expire(redisKey, ttlSeconds);
|
|
83
79
|
}
|
|
84
80
|
},
|
|
85
81
|
async fork(newThreadId) {
|
|
86
82
|
await assertThreadExists();
|
|
87
|
-
const data = await redis.
|
|
83
|
+
const data = await redis.lRange(redisKey, 0, -1);
|
|
88
84
|
const stateRaw = await redis.get(stateKey);
|
|
89
85
|
const forked = createThreadManager({
|
|
90
86
|
...config,
|
|
@@ -93,12 +89,12 @@ function createThreadManager(config) {
|
|
|
93
89
|
await forked.initialize();
|
|
94
90
|
if (data.length > 0) {
|
|
95
91
|
const newKey = getThreadListKey(key, newThreadId);
|
|
96
|
-
await redis.
|
|
92
|
+
await redis.rPush(newKey, data);
|
|
97
93
|
await redis.expire(newKey, ttlSeconds);
|
|
98
94
|
}
|
|
99
95
|
if (stateRaw != null) {
|
|
100
96
|
const newStateKey = getThreadStateKey(key, newThreadId);
|
|
101
|
-
await redis.set(newStateKey, stateRaw,
|
|
97
|
+
await redis.set(newStateKey, stateRaw, { EX: ttlSeconds });
|
|
102
98
|
}
|
|
103
99
|
return forked;
|
|
104
100
|
},
|
|
@@ -109,20 +105,20 @@ function createThreadManager(config) {
|
|
|
109
105
|
"replaceAll requires the thread manager to be configured with `idOf`"
|
|
110
106
|
);
|
|
111
107
|
}
|
|
112
|
-
const existing = await redis.
|
|
108
|
+
const existing = await redis.lRange(redisKey, 0, -1);
|
|
113
109
|
const existingIds = existing.map((raw) => idOf(deserialize(raw))).filter((id) => typeof id === "string");
|
|
114
110
|
await redis.del(redisKey);
|
|
115
111
|
if (existingIds.length > 0) {
|
|
116
|
-
await redis.del(
|
|
112
|
+
await redis.del(existingIds.map(dedupKey));
|
|
117
113
|
}
|
|
118
114
|
if (messages.length > 0) {
|
|
119
|
-
await redis.
|
|
115
|
+
await redis.rPush(redisKey, messages.map(serialize));
|
|
120
116
|
await redis.expire(redisKey, ttlSeconds);
|
|
121
117
|
}
|
|
122
118
|
await redis.expire(metaKey, ttlSeconds);
|
|
123
119
|
},
|
|
124
120
|
async delete() {
|
|
125
|
-
await redis.del(redisKey, metaKey, stateKey);
|
|
121
|
+
await redis.del([redisKey, metaKey, stateKey]);
|
|
126
122
|
},
|
|
127
123
|
async loadState() {
|
|
128
124
|
const raw = await redis.get(stateKey);
|
|
@@ -131,14 +127,14 @@ function createThreadManager(config) {
|
|
|
131
127
|
},
|
|
132
128
|
async saveState(state) {
|
|
133
129
|
await assertThreadExists();
|
|
134
|
-
await redis.set(stateKey, JSON.stringify(state),
|
|
130
|
+
await redis.set(stateKey, JSON.stringify(state), { EX: ttlSeconds });
|
|
135
131
|
},
|
|
136
132
|
async deleteState() {
|
|
137
133
|
await redis.del(stateKey);
|
|
138
134
|
},
|
|
139
135
|
async length() {
|
|
140
136
|
await assertThreadExists();
|
|
141
|
-
return redis.
|
|
137
|
+
return redis.lLen(redisKey);
|
|
142
138
|
},
|
|
143
139
|
async truncateFromId(messageId) {
|
|
144
140
|
await assertThreadExists();
|
|
@@ -147,7 +143,7 @@ function createThreadManager(config) {
|
|
|
147
143
|
"truncateFromId requires the thread manager to be configured with `idOf`"
|
|
148
144
|
);
|
|
149
145
|
}
|
|
150
|
-
const data = await redis.
|
|
146
|
+
const data = await redis.lRange(redisKey, 0, -1);
|
|
151
147
|
let idx = -1;
|
|
152
148
|
const removedIds = [];
|
|
153
149
|
for (let i = 0; i < data.length; i++) {
|
|
@@ -162,11 +158,11 @@ function createThreadManager(config) {
|
|
|
162
158
|
await redis.del(redisKey);
|
|
163
159
|
await redis.expire(metaKey, ttlSeconds);
|
|
164
160
|
} else {
|
|
165
|
-
await redis.
|
|
161
|
+
await redis.lTrim(redisKey, 0, idx - 1);
|
|
166
162
|
await redis.expire(redisKey, ttlSeconds);
|
|
167
163
|
}
|
|
168
164
|
if (removedIds.length > 0) {
|
|
169
|
-
await redis.del(
|
|
165
|
+
await redis.del(removedIds.map(dedupKey));
|
|
170
166
|
}
|
|
171
167
|
}
|
|
172
168
|
};
|
|
@@ -181,7 +177,7 @@ async function encodeSnapshot(config) {
|
|
|
181
177
|
}
|
|
182
178
|
const listKey = getThreadListKey(threadKey, threadId);
|
|
183
179
|
const stateKey = getThreadStateKey(threadKey, threadId);
|
|
184
|
-
const messages = await redis.
|
|
180
|
+
const messages = await redis.lRange(listKey, 0, -1);
|
|
185
181
|
const stateRaw = await redis.get(stateKey);
|
|
186
182
|
const state = stateRaw == null ? null : JSON.parse(stateRaw);
|
|
187
183
|
const dedupIds = idOf ? messages.map(idOf) : [];
|
|
@@ -201,31 +197,38 @@ async function applySnapshot(config) {
|
|
|
201
197
|
}
|
|
202
198
|
const listKey = getThreadListKey(threadKey, threadId);
|
|
203
199
|
const stateKey = getThreadStateKey(threadKey, threadId);
|
|
204
|
-
await redis.del(listKey, stateKey);
|
|
205
|
-
const pipeline = redis.
|
|
200
|
+
await redis.del([listKey, stateKey]);
|
|
201
|
+
const pipeline = redis.multi();
|
|
206
202
|
if (snapshot.messages.length > 0) {
|
|
207
|
-
pipeline.
|
|
203
|
+
pipeline.rPush(listKey, snapshot.messages);
|
|
208
204
|
pipeline.expire(listKey, ttlSeconds);
|
|
209
205
|
}
|
|
210
206
|
if (snapshot.state != null) {
|
|
211
|
-
pipeline.set(stateKey, JSON.stringify(snapshot.state),
|
|
207
|
+
pipeline.set(stateKey, JSON.stringify(snapshot.state), { EX: ttlSeconds });
|
|
212
208
|
}
|
|
213
209
|
for (const id of snapshot.dedupIds) {
|
|
214
|
-
pipeline.set(getThreadDedupKey(threadId, id), "1",
|
|
210
|
+
pipeline.set(getThreadDedupKey(threadId, id), "1", { EX: ttlSeconds });
|
|
215
211
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
throw firstErr;
|
|
226
|
-
}
|
|
212
|
+
try {
|
|
213
|
+
await pipeline.execAsPipeline();
|
|
214
|
+
} catch (err) {
|
|
215
|
+
await redis.del([
|
|
216
|
+
listKey,
|
|
217
|
+
stateKey,
|
|
218
|
+
...snapshot.dedupIds.map((id) => getThreadDedupKey(threadId, id))
|
|
219
|
+
]).catch(() => void 0);
|
|
220
|
+
throw firstPipelineError(err);
|
|
227
221
|
}
|
|
228
|
-
await redis.set(metaKey, "1",
|
|
222
|
+
await redis.set(metaKey, "1", { EX: ttlSeconds });
|
|
223
|
+
}
|
|
224
|
+
function firstPipelineError(err) {
|
|
225
|
+
if (err != null && typeof err === "object" && "replies" in err && Array.isArray(err.replies)) {
|
|
226
|
+
const firstErr = err.replies.find(
|
|
227
|
+
(r) => r instanceof Error
|
|
228
|
+
);
|
|
229
|
+
if (firstErr) return firstErr;
|
|
230
|
+
}
|
|
231
|
+
return err;
|
|
229
232
|
}
|
|
230
233
|
async function clearHotTier(config) {
|
|
231
234
|
const { redis, threadKey, threadId, dedupIds = [] } = config;
|
|
@@ -235,7 +238,7 @@ async function clearHotTier(config) {
|
|
|
235
238
|
getThreadStateKey(threadKey, threadId),
|
|
236
239
|
...dedupIds.map((id) => getThreadDedupKey(threadId, id))
|
|
237
240
|
];
|
|
238
|
-
await redis.del(
|
|
241
|
+
await redis.del(keys);
|
|
239
242
|
}
|
|
240
243
|
|
|
241
244
|
// src/lib/thread/tiered.ts
|
|
@@ -422,7 +425,7 @@ function getActivityContext() {
|
|
|
422
425
|
}
|
|
423
426
|
|
|
424
427
|
// src/adapters/thread/langchain/model-invoker.ts
|
|
425
|
-
function createLangChainModelInvoker({ redis, model, hooks }) {
|
|
428
|
+
function createLangChainModelInvoker({ redis, model, hooks, ttlSeconds }) {
|
|
426
429
|
return async function invokeLangChainModel2(config) {
|
|
427
430
|
const { threadId, threadKey, agentName, state, metadata, assistantMessageId } = config;
|
|
428
431
|
const { heartbeat, signal } = getActivityContext();
|
|
@@ -430,7 +433,8 @@ function createLangChainModelInvoker({ redis, model, hooks }) {
|
|
|
430
433
|
redis,
|
|
431
434
|
threadId,
|
|
432
435
|
key: threadKey,
|
|
433
|
-
hooks
|
|
436
|
+
hooks,
|
|
437
|
+
...ttlSeconds !== void 0 && { ttlSeconds }
|
|
434
438
|
});
|
|
435
439
|
const runId = v4_default();
|
|
436
440
|
await thread.truncateFromId(assistantMessageId);
|
|
@@ -470,30 +474,35 @@ async function invokeLangChainModel({
|
|
|
470
474
|
redis,
|
|
471
475
|
model,
|
|
472
476
|
hooks,
|
|
477
|
+
ttlSeconds,
|
|
473
478
|
config
|
|
474
479
|
}) {
|
|
475
|
-
const invoker = createLangChainModelInvoker({
|
|
480
|
+
const invoker = createLangChainModelInvoker({
|
|
481
|
+
redis,
|
|
482
|
+
model,
|
|
483
|
+
hooks,
|
|
484
|
+
...ttlSeconds !== void 0 && { ttlSeconds }
|
|
485
|
+
});
|
|
476
486
|
return invoker(config);
|
|
477
487
|
}
|
|
478
488
|
|
|
479
489
|
// src/adapters/thread/langchain/activities.ts
|
|
480
490
|
function createLangChainAdapter(config) {
|
|
481
491
|
const { redis } = config;
|
|
482
|
-
const
|
|
492
|
+
const base = {
|
|
493
|
+
redis,
|
|
483
494
|
...config.ttlSeconds !== void 0 && { ttlSeconds: config.ttlSeconds }
|
|
484
495
|
};
|
|
485
496
|
const makeProviderThread = (threadId, threadKey) => createLangChainThreadManager({
|
|
486
|
-
|
|
497
|
+
...base,
|
|
487
498
|
threadId,
|
|
488
|
-
key: threadKey
|
|
489
|
-
...baseExtras
|
|
499
|
+
key: threadKey
|
|
490
500
|
});
|
|
491
501
|
const makeTieredBase = (threadId, threadKey) => createTieredThreadManager({
|
|
492
|
-
|
|
502
|
+
...base,
|
|
493
503
|
threadId,
|
|
494
504
|
key: threadKey,
|
|
495
505
|
idOf: storedMessageId,
|
|
496
|
-
...baseExtras,
|
|
497
506
|
...config.coldStore && { coldStore: config.coldStore }
|
|
498
507
|
});
|
|
499
508
|
const threadOps = {
|
|
@@ -521,11 +530,10 @@ function createLangChainAdapter(config) {
|
|
|
521
530
|
},
|
|
522
531
|
async forkThread(sourceThreadId, targetThreadId, threadKey) {
|
|
523
532
|
const thread = createLangChainThreadManager({
|
|
524
|
-
|
|
533
|
+
...base,
|
|
525
534
|
threadId: sourceThreadId,
|
|
526
535
|
key: threadKey,
|
|
527
|
-
hooks: config.hooks
|
|
528
|
-
...baseExtras
|
|
536
|
+
hooks: config.hooks
|
|
529
537
|
});
|
|
530
538
|
await thread.fork(targetThreadId);
|
|
531
539
|
},
|
|
@@ -557,7 +565,11 @@ function createLangChainAdapter(config) {
|
|
|
557
565
|
Object.entries(threadOps).map(([k, v]) => [`${prefix}${cap(k)}`, v])
|
|
558
566
|
);
|
|
559
567
|
}
|
|
560
|
-
const makeInvoker = (model) => createLangChainModelInvoker({
|
|
568
|
+
const makeInvoker = (model) => createLangChainModelInvoker({
|
|
569
|
+
...base,
|
|
570
|
+
model,
|
|
571
|
+
hooks: config.hooks
|
|
572
|
+
});
|
|
561
573
|
const invoker = config.model ? makeInvoker(config.model) : () => {
|
|
562
574
|
throw new Error(
|
|
563
575
|
"No default model provided to createLangChainAdapter. Either pass `model` in the config or use `createModelInvoker(model)` instead."
|