@voltro/ai 0.69.1 → 0.71.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/CHANGELOG.md +1369 -111
- package/THIRD-PARTY-NOTICES.md +178 -1
- package/dist/events.d.ts +16 -0
- package/dist/events.js +8 -2
- package/dist/index.d.ts +174 -74
- package/dist/index.js +640 -527
- package/dist/inferenceQueue-TwTEBG3Q.js +864 -0
- package/dist/{provider-RA0getTL.js → provider-C_Sms_DA.js} +90 -52
- package/dist/test.js +1 -1
- package/dist/workflow.d.ts +4 -0
- package/dist/workflow.js +51 -49
- package/package.json +7 -5
- package/dist/inferenceQueue-BS3PVSkk.js +0 -664
|
@@ -30,7 +30,45 @@ var u = [], d = (...e) => {
|
|
|
30
30
|
model: n.modelId
|
|
31
31
|
}), e())
|
|
32
32
|
};
|
|
33
|
-
}, g = {
|
|
33
|
+
}, g = (e, t) => ({
|
|
34
|
+
...e,
|
|
35
|
+
fetch: async (n, r) => {
|
|
36
|
+
let i = e.fetch ?? globalThis.fetch;
|
|
37
|
+
if (t === void 0) return i(n, r);
|
|
38
|
+
if (r?.method !== "POST" || typeof r.body != "string") throw Error("Gateway media: expected a JSON POST to preserve the requested seed");
|
|
39
|
+
let a;
|
|
40
|
+
try {
|
|
41
|
+
a = JSON.parse(r.body);
|
|
42
|
+
} catch {
|
|
43
|
+
throw Error("Gateway media: expected a JSON object to preserve the requested seed");
|
|
44
|
+
}
|
|
45
|
+
if (typeof a != "object" || !a || Array.isArray(a)) throw Error("Gateway media: expected a JSON object to preserve the requested seed");
|
|
46
|
+
return i(n, {
|
|
47
|
+
...r,
|
|
48
|
+
body: JSON.stringify({
|
|
49
|
+
...a,
|
|
50
|
+
seed: t
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}), _ = (e, t) => {
|
|
55
|
+
let n = Reflect.get(e, t, e);
|
|
56
|
+
return typeof n == "function" && t !== "constructor" ? n.bind(e) : n;
|
|
57
|
+
}, v = (e, t) => {
|
|
58
|
+
let n = i(e).image(t), r = (n) => i(g(e, n.seed)).image(t).doGenerate(n);
|
|
59
|
+
return new Proxy(n, { get: (e, t) => t === "doGenerate" ? r : _(e, t) });
|
|
60
|
+
}, y = (e, t) => {
|
|
61
|
+
let n = i(e).video(t), r = n.doGenerate === void 0 ? void 0 : (n) => {
|
|
62
|
+
let r = i(g(e, n.seed)).video(t);
|
|
63
|
+
if (!r.doGenerate) throw Error("Gateway video does not implement doGenerate");
|
|
64
|
+
return r.doGenerate(n);
|
|
65
|
+
}, a = n.doStart === void 0 ? void 0 : (n) => {
|
|
66
|
+
let r = i(g(e, n.seed)).video(t);
|
|
67
|
+
if (!r.doStart) throw Error("Gateway video does not implement doStart");
|
|
68
|
+
return r.doStart(n);
|
|
69
|
+
};
|
|
70
|
+
return new Proxy(n, { get: (e, t) => t === "doGenerate" ? r : t === "doStart" ? a : _(e, t) });
|
|
71
|
+
}, b = {
|
|
34
72
|
inputTokens: {
|
|
35
73
|
total: 0,
|
|
36
74
|
noCache: 0,
|
|
@@ -42,10 +80,10 @@ var u = [], d = (...e) => {
|
|
|
42
80
|
text: 0,
|
|
43
81
|
reasoning: 0
|
|
44
82
|
}
|
|
45
|
-
},
|
|
83
|
+
}, x = (e) => ({
|
|
46
84
|
unified: e,
|
|
47
85
|
raw: void 0
|
|
48
|
-
}),
|
|
86
|
+
}), S = class {
|
|
49
87
|
turns;
|
|
50
88
|
cursor = 0;
|
|
51
89
|
calls = [];
|
|
@@ -65,12 +103,12 @@ var u = [], d = (...e) => {
|
|
|
65
103
|
reset() {
|
|
66
104
|
this.cursor = 0, this.calls.length = 0;
|
|
67
105
|
}
|
|
68
|
-
},
|
|
106
|
+
}, C = (e) => (e.toolCalls ?? []).map((e, t) => ({
|
|
69
107
|
type: "tool-call",
|
|
70
108
|
toolCallId: `mock_tool_${t}`,
|
|
71
109
|
toolName: e.name,
|
|
72
110
|
input: JSON.stringify(e.input ?? {})
|
|
73
|
-
})),
|
|
111
|
+
})), w = (e) => (e.sources ?? []).map((e, t) => e.sourceType === "document" ? {
|
|
74
112
|
type: "source",
|
|
75
113
|
sourceType: "document",
|
|
76
114
|
id: e.id ?? `mock_src_${t}`,
|
|
@@ -83,14 +121,14 @@ var u = [], d = (...e) => {
|
|
|
83
121
|
id: e.id ?? `mock_src_${t}`,
|
|
84
122
|
url: e.url ?? "https://example.com",
|
|
85
123
|
...e.title === void 0 ? {} : { title: e.title }
|
|
86
|
-
}),
|
|
124
|
+
}), T = (e) => (e.files ?? []).map((e) => ({
|
|
87
125
|
type: "file",
|
|
88
126
|
mediaType: e.mediaType,
|
|
89
127
|
data: {
|
|
90
128
|
type: "data",
|
|
91
129
|
data: e.data
|
|
92
130
|
}
|
|
93
|
-
})),
|
|
131
|
+
})), E = (e) => [
|
|
94
132
|
{
|
|
95
133
|
type: "text-start",
|
|
96
134
|
id: "0"
|
|
@@ -104,7 +142,7 @@ var u = [], d = (...e) => {
|
|
|
104
142
|
type: "text-end",
|
|
105
143
|
id: "0"
|
|
106
144
|
}
|
|
107
|
-
],
|
|
145
|
+
], D = (e) => e.length === 0 ? [] : [
|
|
108
146
|
{
|
|
109
147
|
type: "reasoning-start",
|
|
110
148
|
id: "r0"
|
|
@@ -118,7 +156,7 @@ var u = [], d = (...e) => {
|
|
|
118
156
|
type: "reasoning-end",
|
|
119
157
|
id: "r0"
|
|
120
158
|
}
|
|
121
|
-
],
|
|
159
|
+
], O = (e, t, n, r) => ({
|
|
122
160
|
specificationVersion: "v4",
|
|
123
161
|
provider: "mock",
|
|
124
162
|
modelId: e,
|
|
@@ -135,16 +173,16 @@ var u = [], d = (...e) => {
|
|
|
135
173
|
toolName: e.name,
|
|
136
174
|
input: JSON.stringify(e.input ?? {})
|
|
137
175
|
})),
|
|
138
|
-
finishReason:
|
|
139
|
-
usage:
|
|
176
|
+
finishReason: x("tool-calls"),
|
|
177
|
+
usage: b,
|
|
140
178
|
warnings: []
|
|
141
179
|
} : {
|
|
142
180
|
content: [{
|
|
143
181
|
type: "text",
|
|
144
182
|
text: o?.text ?? t ?? `[mock(${e})] ${s}`
|
|
145
183
|
}],
|
|
146
|
-
finishReason:
|
|
147
|
-
usage:
|
|
184
|
+
finishReason: x("stop"),
|
|
185
|
+
usage: b,
|
|
148
186
|
warnings: [],
|
|
149
187
|
...r === void 0 ? {} : { providerMetadata: r }
|
|
150
188
|
};
|
|
@@ -160,18 +198,18 @@ var u = [], d = (...e) => {
|
|
|
160
198
|
error: Error(i.error.message)
|
|
161
199
|
}), s.push({
|
|
162
200
|
type: "finish",
|
|
163
|
-
finishReason:
|
|
164
|
-
usage:
|
|
165
|
-
})) : (s.push(...
|
|
201
|
+
finishReason: x("error"),
|
|
202
|
+
usage: b
|
|
203
|
+
})) : (s.push(...D(i?.reasoning ?? "")), o.length > 0 && s.push(...E(o)), s.push(...w(i ?? {})), s.push(...T(i ?? {})), s.push(...C(i ?? {})), s.push({
|
|
166
204
|
type: "finish",
|
|
167
|
-
finishReason:
|
|
168
|
-
usage:
|
|
205
|
+
finishReason: x(a ? "tool-calls" : "stop"),
|
|
206
|
+
usage: b
|
|
169
207
|
})), { stream: new ReadableStream({ start(e) {
|
|
170
208
|
for (let t of s) e.enqueue(t);
|
|
171
209
|
e.close();
|
|
172
210
|
} }) };
|
|
173
211
|
}
|
|
174
|
-
}),
|
|
212
|
+
}), k = "iVBORw0KGgo=", A = "SUQzBAAAAAAAAA==", j = "video/mp4", M = "mock transcript", N = (e, t) => ({
|
|
175
213
|
specificationVersion: "v4",
|
|
176
214
|
provider: "mock",
|
|
177
215
|
modelId: e,
|
|
@@ -190,7 +228,7 @@ var u = [], d = (...e) => {
|
|
|
190
228
|
totalTokens: 0
|
|
191
229
|
}
|
|
192
230
|
})
|
|
193
|
-
}),
|
|
231
|
+
}), P = (e, t, n) => ({
|
|
194
232
|
specificationVersion: "v4",
|
|
195
233
|
provider: "mock",
|
|
196
234
|
modelId: e,
|
|
@@ -203,7 +241,7 @@ var u = [], d = (...e) => {
|
|
|
203
241
|
},
|
|
204
242
|
...n === void 0 ? {} : { providerMetadata: n }
|
|
205
243
|
})
|
|
206
|
-
}),
|
|
244
|
+
}), F = (e, t, n) => ({
|
|
207
245
|
specificationVersion: "v4",
|
|
208
246
|
provider: "mock",
|
|
209
247
|
modelId: e,
|
|
@@ -221,7 +259,7 @@ var u = [], d = (...e) => {
|
|
|
221
259
|
},
|
|
222
260
|
...n === void 0 ? {} : { providerMetadata: n }
|
|
223
261
|
})
|
|
224
|
-
}),
|
|
262
|
+
}), I = (e, t, n) => ({
|
|
225
263
|
specificationVersion: "v4",
|
|
226
264
|
provider: "mock",
|
|
227
265
|
modelId: e,
|
|
@@ -236,67 +274,67 @@ var u = [], d = (...e) => {
|
|
|
236
274
|
},
|
|
237
275
|
...n === void 0 ? {} : { providerMetadata: n }
|
|
238
276
|
})
|
|
239
|
-
}),
|
|
277
|
+
}), L = (e) => e.apiKey !== void 0 || e.baseURL !== void 0, R = (e) => ({
|
|
240
278
|
...e.apiKey === void 0 ? {} : { apiKey: e.apiKey },
|
|
241
279
|
...e.baseURL === void 0 ? {} : { baseURL: e.baseURL }
|
|
242
|
-
}),
|
|
280
|
+
}), z = (o, s) => m((() => {
|
|
243
281
|
switch (o.name) {
|
|
244
|
-
case "mock": return
|
|
245
|
-
case "anthropic": return
|
|
246
|
-
case "openai": return
|
|
247
|
-
case "gateway": return
|
|
282
|
+
case "mock": return O(o.model ?? "mock", o.mockText, o.script, o.providerMetadata);
|
|
283
|
+
case "anthropic": return L(o) ? t(R(o))(o.model) : e(o.model);
|
|
284
|
+
case "openai": return L(o) ? n(R(o))(o.model) : r(o.model);
|
|
285
|
+
case "gateway": return L(o) ? i(R(o))(o.model) : a(o.model);
|
|
248
286
|
}
|
|
249
|
-
})(), s),
|
|
287
|
+
})(), s), B = (e) => {
|
|
250
288
|
switch (e.name) {
|
|
251
|
-
case "mock": return
|
|
252
|
-
case "openai": return
|
|
253
|
-
case "gateway": return
|
|
289
|
+
case "mock": return N(e.model ?? "mock", e.mockMedia?.imageBase64 ?? k);
|
|
290
|
+
case "openai": return L(e) ? n(R(e)).image(e.model) : r.image(e.model);
|
|
291
|
+
case "gateway": return v(R(e), e.model);
|
|
254
292
|
case "anthropic": throw Error("Provider 'anthropic' does not support image generation. Use 'openai' or 'gateway'.");
|
|
255
293
|
}
|
|
256
|
-
},
|
|
294
|
+
}, V = (e) => {
|
|
257
295
|
switch (e.name) {
|
|
258
|
-
case "mock": return
|
|
259
|
-
case "openai": return
|
|
260
|
-
case "gateway": return
|
|
296
|
+
case "mock": return P(e.model ?? "mock", e.mockMedia?.audioBase64 ?? A, e.providerMetadata);
|
|
297
|
+
case "openai": return L(e) ? n(R(e)).speech(e.model) : r.speech(e.model);
|
|
298
|
+
case "gateway": return L(e) ? i(R(e)).speech(e.model) : a.speech(e.model);
|
|
261
299
|
case "anthropic": throw Error("Provider 'anthropic' does not support speech generation. Use 'openai' or 'gateway'.");
|
|
262
300
|
}
|
|
263
|
-
},
|
|
301
|
+
}, H = (e) => {
|
|
264
302
|
switch (e.name) {
|
|
265
|
-
case "mock": return
|
|
266
|
-
case "openai": return
|
|
267
|
-
case "gateway": return
|
|
303
|
+
case "mock": return F(e.model ?? "mock", e.mockMedia?.transcript ?? M, e.providerMetadata);
|
|
304
|
+
case "openai": return L(e) ? n(R(e)).transcription(e.model) : r.transcription(e.model);
|
|
305
|
+
case "gateway": return L(e) ? i(R(e)).transcription(e.model) : a.transcription(e.model);
|
|
268
306
|
case "anthropic": throw Error("Provider 'anthropic' does not support transcription. Use 'openai' or 'gateway'.");
|
|
269
307
|
}
|
|
270
|
-
},
|
|
308
|
+
}, U = (e) => {
|
|
271
309
|
switch (e.name) {
|
|
272
310
|
case "mock": {
|
|
273
311
|
let t = e.mockMedia, n = t?.videoBase64 === void 0 ? {
|
|
274
312
|
type: "url",
|
|
275
313
|
url: t?.videoUrl ?? `https://mock.local/${e.model ?? "mock"}.mp4`,
|
|
276
|
-
mediaType:
|
|
314
|
+
mediaType: j
|
|
277
315
|
} : {
|
|
278
316
|
type: "base64",
|
|
279
317
|
data: t.videoBase64,
|
|
280
|
-
mediaType:
|
|
318
|
+
mediaType: j
|
|
281
319
|
};
|
|
282
|
-
return
|
|
320
|
+
return I(e.model ?? "mock", n, e.providerMetadata);
|
|
283
321
|
}
|
|
284
|
-
case "gateway": return
|
|
322
|
+
case "gateway": return y(R(e), e.model);
|
|
285
323
|
case "openai": throw Error("Provider 'openai' does not support video generation. Use 'gateway'.");
|
|
286
324
|
case "anthropic": throw Error("Provider 'anthropic' does not support video generation. Use 'gateway'.");
|
|
287
325
|
}
|
|
288
|
-
},
|
|
289
|
-
let t =
|
|
290
|
-
return
|
|
291
|
-
},
|
|
326
|
+
}, W = null, G = (e) => {
|
|
327
|
+
let t = W;
|
|
328
|
+
return W = e, t;
|
|
329
|
+
}, K = () => W, q = (e) => {
|
|
292
330
|
switch (e.toLowerCase()) {
|
|
293
331
|
case "anthropic": return "ANTHROPIC_API_KEY";
|
|
294
332
|
case "openai": return "OPENAI_API_KEY";
|
|
295
333
|
case "gateway": return "AI_GATEWAY_API_KEY";
|
|
296
334
|
default: return;
|
|
297
335
|
}
|
|
298
|
-
},
|
|
299
|
-
if (
|
|
336
|
+
}, J = (e = process.env) => {
|
|
337
|
+
if (W) return W;
|
|
300
338
|
let t = (e.AI_PROVIDER ?? "mock").toLowerCase(), n = e.AI_MODEL;
|
|
301
339
|
switch (t) {
|
|
302
340
|
case "mock": return {
|
|
@@ -323,4 +361,4 @@ var u = [], d = (...e) => {
|
|
|
323
361
|
}
|
|
324
362
|
};
|
|
325
363
|
//#endregion
|
|
326
|
-
export { d as _,
|
|
364
|
+
export { d as _, B as a, H as c, m as d, p as f, h as g, f as h, q as i, U as l, s as m, K as n, z as o, o as p, J as r, V as s, S as t, G as u, c as v };
|
package/dist/test.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e, u as t } from "./provider-
|
|
1
|
+
import { t as e, u as t } from "./provider-C_Sms_DA.js";
|
|
2
2
|
//#region src/test/index.ts
|
|
3
3
|
var n = (e) => e.turns && e.turns.length > 0 ? e.turns : e.stream && e.stream.length > 0 ? [{ text: e.stream.join("") }] : e.generate ? [{ text: e.generate.text }] : [{ text: "" }], r = (t) => {
|
|
4
4
|
let r = new e(n(t));
|
package/dist/workflow.d.ts
CHANGED
|
@@ -492,6 +492,10 @@ declare interface ToolContext {
|
|
|
492
492
|
readonly subject?: unknown;
|
|
493
493
|
};
|
|
494
494
|
readonly runtime?: Runtime.Runtime<unknown>;
|
|
495
|
+
/** SDK tool-call identity for this execution, not a durable application idempotency key. */
|
|
496
|
+
readonly invocationId?: string;
|
|
497
|
+
/** The SDK's cancellation signal; Promise handlers must pass it to their I/O. */
|
|
498
|
+
readonly abortSignal?: AbortSignal;
|
|
495
499
|
}
|
|
496
500
|
|
|
497
501
|
/** A context-receiving tool body — the `*.tool.tsx` default-export form.
|
package/dist/workflow.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as e } from "./provider-
|
|
2
|
-
import {
|
|
1
|
+
import { r as e } from "./provider-C_Sms_DA.js";
|
|
2
|
+
import { D as t, E as n, O as r, R as i, U as a, Z as o, b as s, m as c, o as l, p as u, s as d, t as f, w as p, y as m } from "./inferenceQueue-TwTEBG3Q.js";
|
|
3
3
|
import { Effect as h, Schema as g } from "effect";
|
|
4
4
|
import { eq as _ } from "@voltro/database";
|
|
5
5
|
import { CurrentWorkflowExecutionId as v, awaitSignalSuspending as y, step as b, suspendForBudget as x } from "@voltro/workflow";
|
|
@@ -42,16 +42,16 @@ var S = {
|
|
|
42
42
|
}, D = (e) => ({
|
|
43
43
|
provider: String(e.provider ?? "unknown"),
|
|
44
44
|
model: String(e.model ?? "unknown")
|
|
45
|
-
}), O = (e, n, r,
|
|
45
|
+
}), O = (e, t, n, r, o) => {
|
|
46
46
|
let s = e.store;
|
|
47
47
|
if (s === void 0) return h.void;
|
|
48
|
-
let { provider: c, model: l } = D(
|
|
49
|
-
return
|
|
48
|
+
let { provider: c, model: l } = D(t), u = i(r.providerMetadata);
|
|
49
|
+
return a(s, {
|
|
50
50
|
provider: c,
|
|
51
51
|
model: l,
|
|
52
|
-
operation:
|
|
52
|
+
operation: n,
|
|
53
53
|
agent: e.name,
|
|
54
|
-
usage:
|
|
54
|
+
usage: r.usage,
|
|
55
55
|
...e.tenantId === void 0 ? {} : { tenantId: e.tenantId },
|
|
56
56
|
...u === void 0 ? {} : { actualCostUsd: u },
|
|
57
57
|
...o === void 0 ? {} : { prompt: o }
|
|
@@ -136,33 +136,35 @@ var S = {
|
|
|
136
136
|
if (t === void 0) return;
|
|
137
137
|
let n = e.store;
|
|
138
138
|
if (n === void 0) return yield* h.die(new I(e.name));
|
|
139
|
-
let r = e.tenantId ?? null, i = t.name ?? "ai-usd",
|
|
139
|
+
let r = e.tenantId ?? null, i = t.name ?? "ai-usd", a = yield* v, s = () => o(n, {
|
|
140
140
|
tenantId: r,
|
|
141
141
|
limitUsd: t.limitUsd,
|
|
142
142
|
addUsd: 0,
|
|
143
143
|
...t.since === void 0 ? {} : { since: t.since }
|
|
144
|
-
}).pipe(h.as(null), h.catchTag("AiBudgetExceeded", (e) => h.succeed(e))),
|
|
144
|
+
}).pipe(h.as(null), h.catchTag("AiBudgetExceeded", (e) => h.succeed(e))), c = () => t.estimateUsd === void 0 ? h.void : o(n, {
|
|
145
145
|
tenantId: r,
|
|
146
146
|
limitUsd: t.limitUsd,
|
|
147
147
|
addUsd: t.estimateUsd,
|
|
148
|
+
...a === void 0 ? {} : { reservationId: d(a, JSON.stringify([
|
|
149
|
+
"budget",
|
|
150
|
+
i,
|
|
151
|
+
e.name
|
|
152
|
+
])) },
|
|
148
153
|
...t.since === void 0 ? {} : { since: t.since }
|
|
149
|
-
}),
|
|
150
|
-
|
|
151
|
-
if ((t.onExceeded ?? "fail") !== "suspend") return yield* h.fail(c);
|
|
152
|
-
let l = yield* v;
|
|
153
|
-
return l === void 0 ? yield* h.fail(c) : (yield* x({
|
|
154
|
+
}).pipe(h.asVoid), l = yield* s();
|
|
155
|
+
return l === null ? yield* c() : (t.onExceeded ?? "fail") !== "suspend" || a === void 0 ? yield* h.fail(l) : (yield* x({
|
|
154
156
|
store: n,
|
|
155
157
|
budget: i,
|
|
156
158
|
tenantId: r,
|
|
157
|
-
executionId:
|
|
158
|
-
workflowName: yield* R(n,
|
|
159
|
+
executionId: a,
|
|
160
|
+
workflowName: yield* R(n, a),
|
|
159
161
|
stepName: e.name,
|
|
160
|
-
spentMicroUsd: Math.round(
|
|
162
|
+
spentMicroUsd: Math.round(l.spentUsd * 1e6),
|
|
161
163
|
limitMicroUsd: Math.round(t.limitUsd * 1e6),
|
|
162
|
-
hasHeadroom:
|
|
164
|
+
hasHeadroom: s().pipe(h.map((e) => e === null)),
|
|
163
165
|
...t.holdTimeoutMs === void 0 ? {} : { timeoutMs: t.holdTimeoutMs },
|
|
164
166
|
...t.recheckEveryMs === void 0 ? {} : { recheckEveryMs: t.recheckEveryMs }
|
|
165
|
-
}).pipe(h.catchAll((e) => h.die(e))), yield*
|
|
167
|
+
}).pipe(h.catchAll((e) => h.die(e))), yield* c());
|
|
166
168
|
}), R = (e, t) => h.promise(async () => {
|
|
167
169
|
let n = await e.query({
|
|
168
170
|
table: "_voltro_workflow_runs",
|
|
@@ -173,29 +175,29 @@ var S = {
|
|
|
173
175
|
projection: void 0
|
|
174
176
|
});
|
|
175
177
|
return String(n[0]?.tag ?? "");
|
|
176
|
-
}), z = (
|
|
177
|
-
let r =
|
|
178
|
+
}), z = (n) => {
|
|
179
|
+
let r = n.provider ?? e(), i = E(n), a = {
|
|
178
180
|
...D(r),
|
|
179
181
|
operation: "generateText",
|
|
180
|
-
offloaded:
|
|
181
|
-
...T(i.text, i.system,
|
|
182
|
-
}, o = (e) =>
|
|
183
|
-
return
|
|
184
|
-
name:
|
|
182
|
+
offloaded: n.offload === !0,
|
|
183
|
+
...T(i.text, i.system, n.recordPrompt ?? "digest", i.rendered)
|
|
184
|
+
}, o = (e) => n.budget === void 0 ? e : h.zipRight(L(n), e);
|
|
185
|
+
return n.offload === !0 ? o(F(n, r, "text", null, a, i)) : o(b({
|
|
186
|
+
name: n.name,
|
|
185
187
|
success: A,
|
|
186
188
|
input: a,
|
|
187
|
-
retry:
|
|
188
|
-
execute:
|
|
189
|
+
retry: n.retry ?? S,
|
|
190
|
+
execute: t({
|
|
189
191
|
prompt: i.text,
|
|
190
192
|
provider: r,
|
|
191
193
|
...i.system === void 0 ? {} : { system: i.system },
|
|
192
|
-
...
|
|
193
|
-
...
|
|
194
|
-
...
|
|
195
|
-
...
|
|
196
|
-
...
|
|
197
|
-
...
|
|
198
|
-
}).pipe(h.tap((e) => O(
|
|
194
|
+
...n.fallbacks === void 0 ? {} : { fallbacks: n.fallbacks },
|
|
195
|
+
...n.maxTokens === void 0 ? {} : { maxTokens: n.maxTokens },
|
|
196
|
+
...n.providerOptions === void 0 ? {} : { providerOptions: n.providerOptions },
|
|
197
|
+
...n.tools === void 0 ? {} : { tools: n.tools },
|
|
198
|
+
...n.maxSteps === void 0 ? {} : { maxSteps: n.maxSteps },
|
|
199
|
+
...n.toolContext === void 0 ? {} : { toolContext: n.toolContext }
|
|
200
|
+
}).pipe(h.tap((e) => O(n, r, "generateText", e, i.rendered)), h.tap(() => k(n, i.rendered)), h.map((e) => ({
|
|
199
201
|
text: e.text,
|
|
200
202
|
inputTokens: e.usage.inputTokens ?? null,
|
|
201
203
|
outputTokens: e.usage.outputTokens ?? null,
|
|
@@ -238,40 +240,40 @@ var S = {
|
|
|
238
240
|
})))
|
|
239
241
|
}));
|
|
240
242
|
}, H = (t) => {
|
|
241
|
-
let
|
|
242
|
-
...D(
|
|
243
|
+
let i = t.provider ?? e(), a = E(t), o = {
|
|
244
|
+
...D(i),
|
|
243
245
|
operation: "generateObject",
|
|
244
246
|
offloaded: t.offload === !0,
|
|
245
|
-
...T(
|
|
247
|
+
...T(a.text, a.system, t.recordPrompt ?? "digest", a.rendered)
|
|
246
248
|
}, s = (e) => t.budget === void 0 ? e : h.zipRight(L(t), e);
|
|
247
249
|
return t.offload === !0 ? s(h.gen(function* () {
|
|
248
|
-
let e = yield*
|
|
249
|
-
return yield* g.decodeUnknown(t.schema)(
|
|
250
|
+
let e = yield* r(t.schema, "aiObjectStep"), n = yield* F(t, i, "object", e, o, a);
|
|
251
|
+
return yield* g.decodeUnknown(t.schema)(n);
|
|
250
252
|
})) : s(b({
|
|
251
253
|
name: t.name,
|
|
252
254
|
success: t.schema,
|
|
253
|
-
input:
|
|
255
|
+
input: o,
|
|
254
256
|
retry: t.retry ?? S,
|
|
255
257
|
execute: (t.tools === void 0 ? p({
|
|
256
|
-
prompt:
|
|
258
|
+
prompt: a.text,
|
|
257
259
|
schema: t.schema,
|
|
258
|
-
provider:
|
|
259
|
-
...
|
|
260
|
+
provider: i,
|
|
261
|
+
...a.system === void 0 ? {} : { system: a.system },
|
|
260
262
|
...t.fallbacks === void 0 ? {} : { fallbacks: t.fallbacks },
|
|
261
263
|
...t.maxTokens === void 0 ? {} : { maxTokens: t.maxTokens },
|
|
262
264
|
...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
|
|
263
|
-
}) :
|
|
264
|
-
prompt:
|
|
265
|
+
}) : n({
|
|
266
|
+
prompt: a.text,
|
|
265
267
|
schema: t.schema,
|
|
266
|
-
provider:
|
|
268
|
+
provider: i,
|
|
267
269
|
tools: t.tools,
|
|
268
270
|
...t.maxSteps === void 0 ? {} : { maxSteps: t.maxSteps },
|
|
269
271
|
...t.toolContext === void 0 ? {} : { toolContext: t.toolContext },
|
|
270
|
-
...
|
|
272
|
+
...a.system === void 0 ? {} : { system: a.system },
|
|
271
273
|
...t.fallbacks === void 0 ? {} : { fallbacks: t.fallbacks },
|
|
272
274
|
...t.maxTokens === void 0 ? {} : { maxTokens: t.maxTokens },
|
|
273
275
|
...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
|
|
274
|
-
})).pipe(h.tap((e) => O(t,
|
|
276
|
+
})).pipe(h.tap((e) => O(t, i, "generateObject", e, a.rendered)), h.tap(() => k(t, a.rendered)), h.map((e) => e.object))
|
|
275
277
|
}));
|
|
276
278
|
};
|
|
277
279
|
//#endregion
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltro/ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.71.0",
|
|
4
4
|
"description": "Effect-native AI primitives — generateText / generateObject / streamText, tools, agents, media generation, cost tracking + budgets, and provider fallback.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|
|
@@ -55,10 +55,12 @@
|
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@ai-sdk/anthropic": "^4.0.49",
|
|
57
57
|
"@ai-sdk/openai": "^4.0.58",
|
|
58
|
-
"@voltro/cache": "0.
|
|
59
|
-
"@voltro/database": "0.
|
|
60
|
-
"@voltro/protocol": "0.
|
|
61
|
-
"@voltro/workflow": "0.
|
|
58
|
+
"@voltro/cache": "0.71.0",
|
|
59
|
+
"@voltro/database": "0.71.0",
|
|
60
|
+
"@voltro/protocol": "0.71.0",
|
|
61
|
+
"@voltro/workflow": "0.71.0",
|
|
62
|
+
"ajv": "^8.20.0",
|
|
63
|
+
"ajv-formats": "^3.0.1"
|
|
62
64
|
},
|
|
63
65
|
"peerDependencies": {
|
|
64
66
|
"@ai-sdk/gateway": "^4.0.74",
|