@voltro/ai 0.29.0 → 0.30.1
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 +448 -0
- package/THIRD-PARTY-NOTICES.md +63 -1
- package/dist/index.d.ts +185 -0
- package/dist/index.js +474 -664
- package/dist/inferenceQueue-B25RTJZ4.js +447 -0
- package/dist/workflow.d.ts +304 -0
- package/dist/workflow.js +153 -0
- package/package.json +10 -4
package/dist/index.js
CHANGED
|
@@ -1,392 +1,27 @@
|
|
|
1
|
-
import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
[Ke]: !0
|
|
13
|
-
}), Je = (e) => typeof e == "object" && !!e && e[Ke] === !0, Ye = (e) => {
|
|
14
|
-
let t = e.default;
|
|
15
|
-
if (typeof t != "function") return 0;
|
|
16
|
-
let n = 0;
|
|
17
|
-
for (let r of Object.values(e)) Je(r) && r.execute === void 0 && r.handler === void 0 && (r.handler = t, n += 1);
|
|
18
|
-
return n;
|
|
19
|
-
}, Xe = (e, t) => {
|
|
20
|
-
let n = t ?? ke.defaultRuntime;
|
|
21
|
-
return ke.runPromise(n)(e);
|
|
22
|
-
}, Ze = (e, t, n) => n ? e.pipe(_.timeoutFail({
|
|
23
|
-
duration: `${n} millis`,
|
|
24
|
-
onTimeout: () => /* @__PURE__ */ Error(`tool '${t}' timed out`)
|
|
25
|
-
})) : e, Qe = (e, t, n) => {
|
|
26
|
-
if (e.execute) return Xe(Ze(Ge(e.execute, t), e.name, e.timeoutMs), n.runtime);
|
|
27
|
-
if (e.handler) {
|
|
28
|
-
let r = e.handler, i = r(t, n);
|
|
29
|
-
return _.isEffect(i) ? Xe(Ze(i, e.name, e.timeoutMs), n.runtime) : i;
|
|
30
|
-
}
|
|
31
|
-
return Promise.reject(/* @__PURE__ */ Error(`tool '${e.name}' has neither execute nor handler`));
|
|
32
|
-
}, $e = (e) => {
|
|
33
|
-
let t = De.make(e);
|
|
34
|
-
return t && t.type === "object" ? t : {
|
|
35
|
-
type: "object",
|
|
36
|
-
properties: {},
|
|
37
|
-
additionalProperties: !1
|
|
38
|
-
};
|
|
39
|
-
}, k = (e, t = { store: void 0 }) => {
|
|
40
|
-
let n = {};
|
|
41
|
-
for (let [r, i] of Object.entries(e)) n[i.name || r] = we({
|
|
42
|
-
description: i.description,
|
|
43
|
-
inputSchema: h($e(i.input)),
|
|
44
|
-
execute: async (e) => {
|
|
45
|
-
let n = await _.runPromise(b.decodeUnknown(i.input)(e)), r = await Qe(i, n, t);
|
|
46
|
-
return i.output ? _.runPromise(b.decodeUnknown(i.output)(r)) : r;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
return n;
|
|
50
|
-
}, et = {
|
|
51
|
-
"claude-opus-4-8": {
|
|
52
|
-
inputPer1M: 15,
|
|
53
|
-
outputPer1M: 75
|
|
54
|
-
},
|
|
55
|
-
"claude-opus-4-6": {
|
|
56
|
-
inputPer1M: 15,
|
|
57
|
-
outputPer1M: 75
|
|
58
|
-
},
|
|
59
|
-
"claude-sonnet-4-6": {
|
|
60
|
-
inputPer1M: 3,
|
|
61
|
-
outputPer1M: 15
|
|
62
|
-
},
|
|
63
|
-
"claude-haiku-4-5": {
|
|
64
|
-
inputPer1M: 1,
|
|
65
|
-
outputPer1M: 5
|
|
66
|
-
},
|
|
67
|
-
"claude-haiku-4-5-20251001": {
|
|
68
|
-
inputPer1M: 1,
|
|
69
|
-
outputPer1M: 5
|
|
70
|
-
},
|
|
71
|
-
"gpt-5.5": {
|
|
72
|
-
inputPer1M: 5,
|
|
73
|
-
outputPer1M: 30
|
|
74
|
-
},
|
|
75
|
-
"gpt-4o": {
|
|
76
|
-
inputPer1M: 2.5,
|
|
77
|
-
outputPer1M: 10
|
|
78
|
-
},
|
|
79
|
-
"gpt-4o-mini": {
|
|
80
|
-
inputPer1M: .15,
|
|
81
|
-
outputPer1M: .6
|
|
82
|
-
},
|
|
83
|
-
"gemini-2.5-pro": {
|
|
84
|
-
inputPer1M: 1.25,
|
|
85
|
-
outputPer1M: 10
|
|
86
|
-
},
|
|
87
|
-
"gemini-2.5-flash": {
|
|
88
|
-
inputPer1M: .3,
|
|
89
|
-
outputPer1M: 2.5
|
|
90
|
-
},
|
|
91
|
-
"gemini-2.0-flash": {
|
|
92
|
-
inputPer1M: .1,
|
|
93
|
-
outputPer1M: .4
|
|
94
|
-
}
|
|
95
|
-
}, A = {}, tt = (e) => {
|
|
96
|
-
let t = A;
|
|
97
|
-
return A = { ...e }, t;
|
|
98
|
-
}, nt = () => ({
|
|
99
|
-
...et,
|
|
100
|
-
...A
|
|
101
|
-
}), rt = (e) => {
|
|
102
|
-
let t = nt();
|
|
103
|
-
if (t[e] !== void 0) return t[e];
|
|
104
|
-
let n = e.indexOf("/");
|
|
105
|
-
if (n > 0) {
|
|
106
|
-
let r = e.slice(n + 1);
|
|
107
|
-
if (t[r] !== void 0) return t[r];
|
|
108
|
-
}
|
|
109
|
-
}, j = (e, t) => {
|
|
110
|
-
let n = e.inputTokens ?? 0, r = e.outputTokens ?? 0;
|
|
111
|
-
if (t.actualCostUsd !== void 0) {
|
|
112
|
-
let e = n + r, i = e > 0 ? n / e : 0;
|
|
113
|
-
return {
|
|
114
|
-
inputTokens: n,
|
|
115
|
-
outputTokens: r,
|
|
116
|
-
inputCostUsd: t.actualCostUsd * i,
|
|
117
|
-
outputCostUsd: t.actualCostUsd * (1 - i),
|
|
118
|
-
totalCostUsd: t.actualCostUsd,
|
|
119
|
-
costSource: "gateway"
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
let i = t.price ?? rt(t.model) ?? {
|
|
123
|
-
inputPer1M: 0,
|
|
124
|
-
outputPer1M: 0
|
|
125
|
-
}, a = n / 1e6 * i.inputPer1M, o = r / 1e6 * i.outputPer1M;
|
|
126
|
-
return {
|
|
127
|
-
inputTokens: n,
|
|
128
|
-
outputTokens: r,
|
|
129
|
-
inputCostUsd: a,
|
|
130
|
-
outputCostUsd: o,
|
|
131
|
-
totalCostUsd: a + o,
|
|
132
|
-
costSource: "estimated"
|
|
133
|
-
};
|
|
134
|
-
}, M = "_voltro_ai_usage", it = E(M, {
|
|
135
|
-
id: w({ prefix: "aiu" }),
|
|
136
|
-
tenantId: D().nullable(),
|
|
137
|
-
provider: D(),
|
|
138
|
-
model: D(),
|
|
139
|
-
operation: D(),
|
|
140
|
-
agent: D().nullable(),
|
|
141
|
-
inputTokens: T().default(0),
|
|
142
|
-
outputTokens: T().default(0),
|
|
143
|
-
costMicroUsd: T().default(0),
|
|
144
|
-
costSource: D().default("estimated"),
|
|
145
|
-
calledAt: O().default("now")
|
|
146
|
-
}).index(["tenantId"]), at = (e) => {
|
|
147
|
-
let t = e?.gateway?.cost, n = typeof t == "number" ? t : typeof t == "string" ? Number(t) : NaN;
|
|
148
|
-
return Number.isFinite(n) ? n : void 0;
|
|
149
|
-
}, ot = (e, t) => (Ve({
|
|
150
|
-
table: M,
|
|
151
|
-
timeColumn: "calledAt",
|
|
152
|
-
ttlMs: He(process.env.VOLTRO_AI_USAGE_TTL_HOURS, 24 * 365)
|
|
153
|
-
}), _.promise(async () => {
|
|
154
|
-
let n = j(t.usage, {
|
|
155
|
-
model: t.model,
|
|
156
|
-
...t.price === void 0 ? {} : { price: t.price },
|
|
157
|
-
...t.actualCostUsd === void 0 ? {} : { actualCostUsd: t.actualCostUsd }
|
|
158
|
-
});
|
|
159
|
-
return await e.insert(M, {
|
|
160
|
-
tenantId: t.tenantId ?? null,
|
|
161
|
-
provider: t.provider,
|
|
162
|
-
model: t.model,
|
|
163
|
-
operation: t.operation,
|
|
164
|
-
agent: t.agent ?? null,
|
|
165
|
-
inputTokens: n.inputTokens,
|
|
166
|
-
outputTokens: n.outputTokens,
|
|
167
|
-
costMicroUsd: Math.round(n.totalCostUsd * 1e6),
|
|
168
|
-
costSource: n.costSource,
|
|
169
|
-
calledAt: t.calledAt ?? /* @__PURE__ */ new Date()
|
|
170
|
-
}), n;
|
|
171
|
-
})), st = (e, t = {}) => _.promise(async () => {
|
|
172
|
-
let n = [...t.tenantId === void 0 ? [] : [C("tenantId", t.tenantId)], ...t.since === void 0 ? [] : [Pe("calledAt", t.since)]], r = Be(it), i = n.length === 0 ? r : r.where(n.length === 1 ? n[0] : S(...n));
|
|
173
|
-
return (await e.query(i.descriptor)).reduce((e, t) => e + (Number(t.costMicroUsd) || 0), 0) / 1e6;
|
|
174
|
-
}), ct = class extends b.TaggedError()("AiBudgetExceeded", {
|
|
175
|
-
tenantId: b.NullOr(b.String),
|
|
176
|
-
limitUsd: b.Number,
|
|
177
|
-
spentUsd: b.Number,
|
|
178
|
-
attemptedUsd: b.Number
|
|
179
|
-
}) {}, N = "_voltro_ai_budget", lt = E(N, {
|
|
180
|
-
id: w({ prefix: "aib" }),
|
|
181
|
-
bucket: D().maxLength(191),
|
|
182
|
-
tenantId: D().nullable(),
|
|
183
|
-
reservedMicroUsd: T().default(0),
|
|
184
|
-
updatedAt: O().default("now")
|
|
185
|
-
}).unique("byAiBudgetBucket", ["bucket"]), ut = (e, t) => `${e ?? "global"}::${t === void 0 ? "all" : String(t.getTime())}`, dt = 32, ft = (e, t) => _.gen(function* () {
|
|
186
|
-
Ve({
|
|
187
|
-
table: N,
|
|
188
|
-
timeColumn: "updatedAt",
|
|
189
|
-
ttlMs: He(process.env.VOLTRO_AI_USAGE_TTL_HOURS, 24 * 365)
|
|
190
|
-
});
|
|
191
|
-
let n = t.addUsd ?? 0, r = Math.round(n * 1e6), i = Math.round(t.limitUsd * 1e6), a = ut(t.tenantId, t.since), o = t.tenantId ?? null, s = (e) => new ct({
|
|
192
|
-
tenantId: o,
|
|
193
|
-
limitUsd: t.limitUsd,
|
|
194
|
-
spentUsd: e / 1e6,
|
|
195
|
-
attemptedUsd: n
|
|
196
|
-
}), c = yield* _.promise(async () => {
|
|
197
|
-
for (let t = 0; t < dt; t++) {
|
|
198
|
-
t > 0 && await new Promise((e) => setTimeout(e, t));
|
|
199
|
-
let n = (await e.query(Be(lt).where(C("bucket", a)).descriptor))[0], s = n && Number(n.reservedMicroUsd) || 0;
|
|
200
|
-
if (s + r > i) return {
|
|
201
|
-
ok: !1,
|
|
202
|
-
reservedMicro: s
|
|
203
|
-
};
|
|
204
|
-
if (r === 0) return { ok: !0 };
|
|
205
|
-
if (n) {
|
|
206
|
-
if (await e.updateMany("_voltro_ai_budget", {
|
|
207
|
-
reservedMicroUsd: s + r,
|
|
208
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
209
|
-
}, { where: S(C("id", String(n.id)), C("reservedMicroUsd", s)) }) === 1) return { ok: !0 };
|
|
210
|
-
} else {
|
|
211
|
-
let t = Me({
|
|
212
|
-
kind: "typeid",
|
|
213
|
-
prefix: "aib"
|
|
214
|
-
}, N), n = await e.insertIgnore(N, {
|
|
215
|
-
id: t,
|
|
216
|
-
bucket: a,
|
|
217
|
-
tenantId: o,
|
|
218
|
-
reservedMicroUsd: r,
|
|
219
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
220
|
-
}, { conflictColumns: ["bucket"] });
|
|
221
|
-
if (String(n.id) === t) return { ok: !0 };
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
throw Error(`requireAiBudget: contention on bucket '${a}' exceeded ${dt} attempts`);
|
|
225
|
-
});
|
|
226
|
-
if (!c.ok) return yield* _.fail(s(c.reservedMicro));
|
|
227
|
-
}), pt = Oe.exponential({
|
|
228
|
-
start: .001,
|
|
229
|
-
factor: 2,
|
|
230
|
-
count: 16
|
|
231
|
-
}), P = v.counter("voltro_ai_calls_total", { description: "Total AI provider calls (generate + stream)." }), mt = v.counter("voltro_ai_call_errors_total", { description: "AI provider calls that errored." }), F = v.histogram("voltro_ai_call_duration_seconds", pt, "AI provider call duration in seconds."), ht = v.counter("voltro_ai_input_tokens_total", {
|
|
232
|
-
description: "Total prompt (input) tokens across AI calls.",
|
|
233
|
-
incremental: !0
|
|
234
|
-
}), gt = v.counter("voltro_ai_output_tokens_total", {
|
|
235
|
-
description: "Total completion (output) tokens across AI calls.",
|
|
236
|
-
incremental: !0
|
|
237
|
-
}), _t = v.counter("voltro_ai_cost_microusd_total", {
|
|
238
|
-
description: "Total estimated AI spend in micro-USD (USD × 1e6).",
|
|
239
|
-
incremental: !0
|
|
240
|
-
}), I = (e, t) => ({
|
|
241
|
-
provider: e.name,
|
|
242
|
-
model: e.model ?? e.name,
|
|
243
|
-
operation: t
|
|
244
|
-
}), L = (e, t, n) => e.pipe(_.tagMetrics("provider", t.provider), _.tagMetrics("model", t.model), _.tagMetrics("operation", t.operation), _.tagMetrics("status", n)), vt = (e, t) => {
|
|
245
|
-
let n = t.inputTokens ?? 0, r = t.outputTokens ?? 0, i = j({
|
|
246
|
-
inputTokens: n,
|
|
247
|
-
outputTokens: r
|
|
248
|
-
}, { model: e.model }), a = Math.round(i.totalCostUsd * 1e6);
|
|
249
|
-
return _.all([
|
|
250
|
-
L(v.incrementBy(ht, n), e, "ok"),
|
|
251
|
-
L(v.incrementBy(gt, r), e, "ok"),
|
|
252
|
-
L(v.incrementBy(_t, a), e, "ok")
|
|
253
|
-
], { discard: !0 });
|
|
254
|
-
}, R = (e, t, n) => _.gen(function* () {
|
|
255
|
-
let r = yield* _.clockWith((e) => e.currentTimeMillis);
|
|
256
|
-
return yield* n.pipe(_.tap((n) => vt(e, t(n))), _.tap(() => L(v.increment(P), e, "ok").pipe(_.zipRight(_.clockWith((e) => e.currentTimeMillis).pipe(_.flatMap((t) => L(v.update(F, (t - r) / 1e3), e, "ok")))))), _.tapError(() => L(v.increment(P), e, "error").pipe(_.zipRight(L(v.increment(mt), e, "error")), _.zipRight(_.clockWith((e) => e.currentTimeMillis).pipe(_.flatMap((t) => L(v.update(F, (t - r) / 1e3), e, "error")))))), _.withSpan("voltro.ai.call", { attributes: {
|
|
257
|
-
"ai.provider": e.provider,
|
|
258
|
-
"ai.model": e.model,
|
|
259
|
-
"ai.operation": e.operation
|
|
260
|
-
} }));
|
|
261
|
-
}), yt = (e, t) => {
|
|
262
|
-
let n = Date.now();
|
|
263
|
-
return t.pipe(x.tap((t) => t._tag === "done" ? L(v.increment(P), e, "ok").pipe(_.zipRight(L(v.update(F, (Date.now() - n) / 1e3), e, "ok")), _.zipRight(vt(e, t.usage ?? {}))) : t._tag === "error" ? L(v.increment(P), e, "error").pipe(_.zipRight(L(v.increment(mt), e, "error")), _.zipRight(L(v.update(F, (Date.now() - n) / 1e3), e, "error"))) : _.void), x.withSpan("voltro.ai.call", { attributes: {
|
|
264
|
-
"ai.provider": e.provider,
|
|
265
|
-
"ai.model": e.model,
|
|
266
|
-
"ai.operation": e.operation
|
|
267
|
-
} }));
|
|
268
|
-
}, z = class extends b.TaggedError()("AiError", {
|
|
269
|
-
reason: b.Literal("generation", "decode"),
|
|
270
|
-
message: b.String
|
|
271
|
-
}) {}, bt = (e, t, n) => {
|
|
272
|
-
let r = [e, ...t ?? []], i = (e) => n(r[e]).pipe(_.catchTag("AiError", (t) => t.reason === "generation" && e + 1 < r.length ? i(e + 1) : _.fail(t)));
|
|
273
|
-
return i(0);
|
|
274
|
-
}, xt = (t) => bt(t.provider ?? d(), t.fallbacks, (n) => R(I(n, "generateText"), (e) => e.usage, _.tryPromise({
|
|
275
|
-
try: async () => {
|
|
276
|
-
let r = await be({
|
|
277
|
-
model: e(n),
|
|
278
|
-
prompt: t.prompt,
|
|
279
|
-
...t.system === void 0 ? {} : { system: t.system },
|
|
280
|
-
...t.maxTokens === void 0 ? {} : { maxOutputTokens: t.maxTokens },
|
|
281
|
-
...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
|
|
282
|
-
});
|
|
283
|
-
return {
|
|
284
|
-
text: r.text,
|
|
285
|
-
usage: {
|
|
286
|
-
inputTokens: r.usage.inputTokens,
|
|
287
|
-
outputTokens: r.usage.outputTokens,
|
|
288
|
-
totalTokens: r.usage.totalTokens
|
|
289
|
-
},
|
|
290
|
-
providerMetadata: r.providerMetadata
|
|
291
|
-
};
|
|
292
|
-
},
|
|
293
|
-
catch: (e) => new z({
|
|
294
|
-
reason: "generation",
|
|
295
|
-
message: String(e?.message ?? e)
|
|
296
|
-
})
|
|
297
|
-
}))), St = (e, t) => _.gen(function* () {
|
|
298
|
-
let n = De.make(e);
|
|
299
|
-
if (n?.type !== "object") {
|
|
300
|
-
let e = n?.anyOf === void 0 ? `type:${JSON.stringify(n?.type ?? null)}` : "anyOf (e.g. Schema.Struct({}) or a union)";
|
|
301
|
-
return yield* _.fail(new z({
|
|
302
|
-
reason: "generation",
|
|
303
|
-
message: `${t}: the output schema must render as a top-level JSON object (type:"object"), but got ${e}. Use a Schema.Struct({ ... }) as the output schema — wrap arrays/scalars in a field (e.g. Schema.Struct({ items: Schema.Array(...) })).`
|
|
304
|
-
}));
|
|
305
|
-
}
|
|
306
|
-
return n;
|
|
307
|
-
}), B = (t) => _.gen(function* () {
|
|
308
|
-
let n = yield* St(t.schema, "generateObject");
|
|
309
|
-
return yield* bt(t.provider ?? d(), t.fallbacks, (r) => R(I(r, "generateObject"), (e) => e.usage, _.gen(function* () {
|
|
310
|
-
let i = e(r), a = yield* _.tryPromise({
|
|
311
|
-
try: () => ve({
|
|
312
|
-
model: i,
|
|
313
|
-
schema: h(n),
|
|
314
|
-
prompt: t.prompt,
|
|
315
|
-
...t.system === void 0 ? {} : { system: t.system },
|
|
316
|
-
...t.maxTokens === void 0 ? {} : { maxOutputTokens: t.maxTokens },
|
|
317
|
-
...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
|
|
318
|
-
}),
|
|
319
|
-
catch: (e) => new z({
|
|
320
|
-
reason: "generation",
|
|
321
|
-
message: String(e?.message ?? e)
|
|
322
|
-
})
|
|
323
|
-
});
|
|
324
|
-
return {
|
|
325
|
-
object: yield* b.decodeUnknown(t.schema)(a.object).pipe(_.mapError((e) => new z({
|
|
326
|
-
reason: "decode",
|
|
327
|
-
message: `model output failed schema decode: ${String(e)}`
|
|
328
|
-
}))),
|
|
329
|
-
usage: {
|
|
330
|
-
inputTokens: a.usage.inputTokens,
|
|
331
|
-
outputTokens: a.usage.outputTokens,
|
|
332
|
-
totalTokens: a.usage.totalTokens
|
|
333
|
-
},
|
|
334
|
-
providerMetadata: a.providerMetadata
|
|
335
|
-
};
|
|
336
|
-
})));
|
|
337
|
-
}), Ct = (t) => _.gen(function* () {
|
|
338
|
-
let n = yield* _.runtime(), r = yield* St(t.schema, "generateObjectWithTools"), i = {
|
|
339
|
-
store: void 0,
|
|
340
|
-
...t.toolContext,
|
|
341
|
-
runtime: n
|
|
342
|
-
}, a = k(t.tools, i);
|
|
343
|
-
return yield* bt(t.provider ?? d(), t.fallbacks, (n) => R(I(n, "generateObjectWithTools"), (e) => e.usage, _.gen(function* () {
|
|
344
|
-
let i = e(n), o = yield* _.tryPromise({
|
|
345
|
-
try: () => be({
|
|
346
|
-
model: i,
|
|
347
|
-
prompt: t.prompt,
|
|
348
|
-
tools: a,
|
|
349
|
-
stopWhen: Se(t.maxSteps ?? 8),
|
|
350
|
-
output: pe.object({ schema: h(r) }),
|
|
351
|
-
...t.system === void 0 ? {} : { system: t.system },
|
|
352
|
-
...t.maxTokens === void 0 ? {} : { maxOutputTokens: t.maxTokens },
|
|
353
|
-
...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
|
|
354
|
-
}),
|
|
355
|
-
catch: (e) => new z({
|
|
356
|
-
reason: "generation",
|
|
357
|
-
message: String(e?.message ?? e)
|
|
358
|
-
})
|
|
359
|
-
});
|
|
360
|
-
return {
|
|
361
|
-
object: yield* b.decodeUnknown(t.schema)(o.output).pipe(_.mapError((e) => new z({
|
|
362
|
-
reason: "decode",
|
|
363
|
-
message: `model output failed schema decode: ${String(e)}`
|
|
364
|
-
}))),
|
|
365
|
-
usage: {
|
|
366
|
-
inputTokens: o.usage.inputTokens,
|
|
367
|
-
outputTokens: o.usage.outputTokens,
|
|
368
|
-
totalTokens: o.usage.totalTokens
|
|
369
|
-
},
|
|
370
|
-
providerMetadata: o.providerMetadata
|
|
371
|
-
};
|
|
372
|
-
})));
|
|
373
|
-
}), wt = class extends Te.Tag("@voltro/AiService")() {}, Tt = {
|
|
374
|
-
generateText: (e) => xt(e),
|
|
375
|
-
generateObject: (e) => B(e)
|
|
376
|
-
}, Et = (e) => e === void 0 ? {} : { providerOptions: e }, V = (e) => new z({
|
|
1
|
+
import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./provider-BOC5wBxx.js";
|
|
2
|
+
import { A as g, C as ee, D as te, E as ne, F as re, I as ie, L as ae, M as oe, N as se, O as ce, P as le, S as ue, T as de, _, a as fe, b as pe, c as me, d as he, f as v, g as ge, h as _e, i as ve, j as ye, k as be, l as y, m as xe, n as Se, o as Ce, p as we, r as Te, s as Ee, t as b, u as De, v as Oe, w as ke, x as Ae, y as x } from "./inferenceQueue-B25RTJZ4.js";
|
|
3
|
+
import { AgentErrorCode as je, AgentEvent as Me, SeqEvent as Ne } from "./events.js";
|
|
4
|
+
import { a as Pe, i as Fe, n as Ie, o as S, r as Le, s as C, t as Re } from "./agentDescriptor-CCeWeadZ.js";
|
|
5
|
+
import { createGateway as ze, gateway as Be } from "@ai-sdk/gateway";
|
|
6
|
+
import { cosineSimilarity as Ve, embed as He, embedMany as Ue, generateImage as We, generateSpeech as Ge, rerank as Ke, stepCountIs as qe, streamText as Je } from "ai";
|
|
7
|
+
import { Chunk as w, Duration as Ye, Effect as T, Option as E, Schema as D, Stream as O } from "effect";
|
|
8
|
+
import { and as k, boolean as Xe, contains as Ze, eq as A, generateId as Qe, gt as $e, gte as et, id as j, inSet as tt, integer as M, json as nt, lt as N, lte as P, neq as rt, or as it, table as F, text as I, timestamp as L } from "@voltro/database";
|
|
9
|
+
import { rowDep as at, tableDep as ot } from "@voltro/cache";
|
|
10
|
+
//#region src/media.ts
|
|
11
|
+
var st = (e) => e === void 0 ? {} : { providerOptions: e }, R = (e) => new y({
|
|
377
12
|
reason: "generation",
|
|
378
13
|
message: String(e?.message ?? e)
|
|
379
|
-
}),
|
|
380
|
-
let t = e.provider ??
|
|
381
|
-
return
|
|
14
|
+
}), ct = (e) => {
|
|
15
|
+
let t = e.provider ?? f();
|
|
16
|
+
return x(_(t, "generateImage"), (e) => e.usage ?? {}, T.tryPromise({
|
|
382
17
|
try: async () => {
|
|
383
|
-
let n = await
|
|
18
|
+
let n = await We({
|
|
384
19
|
model: o(t),
|
|
385
20
|
prompt: e.prompt,
|
|
386
21
|
...e.n === void 0 ? {} : { n: e.n },
|
|
387
22
|
...e.size === void 0 ? {} : { size: e.size },
|
|
388
23
|
...e.aspectRatio === void 0 ? {} : { aspectRatio: e.aspectRatio },
|
|
389
|
-
...
|
|
24
|
+
...st(e.providerOptions)
|
|
390
25
|
});
|
|
391
26
|
return {
|
|
392
27
|
images: n.images.map((e) => ({
|
|
@@ -401,13 +36,13 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
401
36
|
providerMetadata: n.providerMetadata
|
|
402
37
|
};
|
|
403
38
|
},
|
|
404
|
-
catch:
|
|
39
|
+
catch: R
|
|
405
40
|
}));
|
|
406
|
-
},
|
|
407
|
-
let t = e.provider ??
|
|
408
|
-
return
|
|
41
|
+
}, lt = (e) => {
|
|
42
|
+
let t = e.provider ?? f();
|
|
43
|
+
return x(_(t, "generateSpeech"), () => ({}), T.tryPromise({
|
|
409
44
|
try: async () => {
|
|
410
|
-
let n = await
|
|
45
|
+
let n = await Ge({
|
|
411
46
|
model: u(t),
|
|
412
47
|
text: e.text,
|
|
413
48
|
...e.voice === void 0 ? {} : { voice: e.voice },
|
|
@@ -415,7 +50,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
415
50
|
...e.instructions === void 0 ? {} : { instructions: e.instructions },
|
|
416
51
|
...e.speed === void 0 ? {} : { speed: e.speed },
|
|
417
52
|
...e.language === void 0 ? {} : { language: e.language },
|
|
418
|
-
...
|
|
53
|
+
...st(e.providerOptions)
|
|
419
54
|
});
|
|
420
55
|
return {
|
|
421
56
|
audio: {
|
|
@@ -425,16 +60,16 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
425
60
|
providerMetadata: n.providerMetadata
|
|
426
61
|
};
|
|
427
62
|
},
|
|
428
|
-
catch:
|
|
63
|
+
catch: R
|
|
429
64
|
}));
|
|
430
|
-
},
|
|
65
|
+
}, ut = (e) => ({
|
|
431
66
|
type: "url",
|
|
432
67
|
url: e
|
|
433
|
-
}),
|
|
434
|
-
let t = e.provider ??
|
|
435
|
-
return
|
|
68
|
+
}), dt = (e) => Uint8Array.from(Buffer.from(e, "base64")), ft = (e) => {
|
|
69
|
+
let t = e.provider ?? f();
|
|
70
|
+
return x(_(t, "generateVideo"), () => ({}), T.tryPromise({
|
|
436
71
|
try: async () => {
|
|
437
|
-
let n = await
|
|
72
|
+
let n = await p(t).doGenerate({
|
|
438
73
|
prompt: e.prompt,
|
|
439
74
|
n: 1,
|
|
440
75
|
aspectRatio: e.params?.aspectRatio,
|
|
@@ -442,9 +77,9 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
442
77
|
duration: e.params?.durationSeconds,
|
|
443
78
|
fps: e.params?.fps,
|
|
444
79
|
seed: e.params?.seed,
|
|
445
|
-
image: e.inputs?.image === void 0 ? void 0 :
|
|
80
|
+
image: e.inputs?.image === void 0 ? void 0 : ut(e.inputs.image),
|
|
446
81
|
frameImages: void 0,
|
|
447
|
-
inputReferences: e.inputs?.references?.map(
|
|
82
|
+
inputReferences: e.inputs?.references?.map(ut),
|
|
448
83
|
generateAudio: void 0,
|
|
449
84
|
providerOptions: e.providerOptions ?? {}
|
|
450
85
|
}), r = n.videos[0];
|
|
@@ -454,7 +89,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
454
89
|
url: r.url,
|
|
455
90
|
mediaType: r.mediaType
|
|
456
91
|
} : r.type === "base64" ? {
|
|
457
|
-
data:
|
|
92
|
+
data: dt(r.data),
|
|
458
93
|
mediaType: r.mediaType
|
|
459
94
|
} : {
|
|
460
95
|
data: r.data,
|
|
@@ -463,53 +98,53 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
463
98
|
providerMetadata: n.providerMetadata
|
|
464
99
|
};
|
|
465
100
|
},
|
|
466
|
-
catch:
|
|
101
|
+
catch: R
|
|
467
102
|
}));
|
|
468
|
-
},
|
|
103
|
+
}, pt = (e) => RegExp("^" + e.split("*").map((e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join(".*") + "$"), mt = (e, t) => t instanceof RegExp ? t.test(e) : t.some((t) => pt(t).test(e)), z = (e, t) => !(t.deny !== void 0 && mt(e, t.deny) || t.allow !== void 0 && !mt(e, t.allow)), B = (e) => e === "mutation" || e === "action", ht = (e) => ({
|
|
469
104
|
id: e,
|
|
470
105
|
via: "agent"
|
|
471
|
-
}),
|
|
106
|
+
}), V = (e, t) => {
|
|
472
107
|
let n = e.exposeAsTool;
|
|
473
108
|
if (n === void 0 || n === !1 || n === !0) return null;
|
|
474
|
-
let r =
|
|
109
|
+
let r = B(e.kind), i = n.confirm ?? (r && (t.requireConfirmForWrites ?? !0));
|
|
475
110
|
return {
|
|
476
111
|
description: n.description,
|
|
477
112
|
confirm: i,
|
|
478
113
|
...n.maxPerRun === void 0 ? {} : { maxPerRun: n.maxPerRun }
|
|
479
114
|
};
|
|
480
|
-
},
|
|
115
|
+
}, gt = (e, t = {}) => e.filter((e) => z(e.descriptor.name, t)).map((e) => ({
|
|
481
116
|
entry: e,
|
|
482
|
-
exposure:
|
|
117
|
+
exposure: V(e.descriptor, t)
|
|
483
118
|
})).filter((e) => e.exposure !== null).map(({ entry: e, exposure: t }) => ({
|
|
484
119
|
name: e.descriptor.name,
|
|
485
120
|
kind: e.descriptor.kind,
|
|
486
121
|
description: t.description,
|
|
487
|
-
write:
|
|
122
|
+
write: B(e.descriptor.kind),
|
|
488
123
|
confirm: t.confirm,
|
|
489
124
|
...t.maxPerRun === void 0 ? {} : { maxPerRun: t.maxPerRun }
|
|
490
|
-
})).sort((e, t) => e.name.localeCompare(t.name)),
|
|
491
|
-
let n =
|
|
492
|
-
return
|
|
125
|
+
})).sort((e, t) => e.name.localeCompare(t.name)), _t = (e, t = {}) => e.filter((e) => z(e.descriptor.name, t)).filter((e) => V(e.descriptor, t) !== null).filter((e) => t.includeWrites === !0 || !B(e.descriptor.kind)).map((e) => {
|
|
126
|
+
let n = V(e.descriptor, t);
|
|
127
|
+
return re({
|
|
493
128
|
name: e.descriptor.name,
|
|
494
129
|
description: n.description,
|
|
495
130
|
input: e.descriptor.input,
|
|
496
131
|
...e.descriptor.output === void 0 ? {} : { output: e.descriptor.output },
|
|
497
132
|
handler: (t) => Promise.resolve(e.invoke(t))
|
|
498
133
|
});
|
|
499
|
-
}),
|
|
500
|
-
let t =
|
|
134
|
+
}), H = /* @__PURE__ */ new Map(), vt = (e) => {
|
|
135
|
+
let t = H.get(e);
|
|
501
136
|
if (t) return t;
|
|
502
137
|
let n = new AbortController();
|
|
503
|
-
return
|
|
504
|
-
},
|
|
505
|
-
let t =
|
|
506
|
-
return t ? (
|
|
507
|
-
},
|
|
508
|
-
|
|
509
|
-
},
|
|
138
|
+
return H.set(e, n), n;
|
|
139
|
+
}, yt = (e) => {
|
|
140
|
+
let t = H.get(e);
|
|
141
|
+
return t ? (H.delete(e), t.abort(), !0) : !1;
|
|
142
|
+
}, bt = (e) => H.has(e), xt = (e) => {
|
|
143
|
+
H.delete(e);
|
|
144
|
+
}, St = () => H.size, Ct = (e) => {
|
|
510
145
|
let t = e?.name, n = String(e?.message ?? e ?? "");
|
|
511
146
|
return t === "AbortError" || t === "TimeoutError" || /\babort(ed)?\b/i.test(n);
|
|
512
|
-
},
|
|
147
|
+
}, wt = (e) => {
|
|
513
148
|
switch (e?.type) {
|
|
514
149
|
case "text-delta": return {
|
|
515
150
|
_tag: "token",
|
|
@@ -575,14 +210,14 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
575
210
|
};
|
|
576
211
|
default: return null;
|
|
577
212
|
}
|
|
578
|
-
},
|
|
579
|
-
let n = yield*
|
|
213
|
+
}, U = (t) => O.unwrap(T.gen(function* () {
|
|
214
|
+
let n = yield* T.runtime(), r = t.provider ?? f(), i = e(r), a = t.tools ? {
|
|
580
215
|
store: void 0,
|
|
581
216
|
...t.toolContext,
|
|
582
217
|
runtime: n
|
|
583
|
-
} : t.toolContext, o = t.tools ?
|
|
218
|
+
} : t.toolContext, o = t.tools ? le(t.tools, a) : void 0, s = t.streamId === void 0 ? new AbortController() : vt(t.streamId);
|
|
584
219
|
t.signal !== void 0 && (t.signal.aborted ? s.abort() : t.signal.addEventListener("abort", () => s.abort(), { once: !0 }));
|
|
585
|
-
let c = s.signal, l =
|
|
220
|
+
let c = s.signal, l = Je({
|
|
586
221
|
model: i,
|
|
587
222
|
...t.messages === void 0 ? { prompt: t.prompt } : { messages: [...t.messages] },
|
|
588
223
|
...t.system === void 0 ? {} : { system: t.system },
|
|
@@ -592,59 +227,59 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
592
227
|
abortSignal: c,
|
|
593
228
|
...o ? {
|
|
594
229
|
tools: o,
|
|
595
|
-
stopWhen:
|
|
230
|
+
stopWhen: qe(t.maxSteps ?? 8)
|
|
596
231
|
} : {}
|
|
597
232
|
});
|
|
598
|
-
return
|
|
599
|
-
let t = c.aborted ||
|
|
600
|
-
return
|
|
233
|
+
return Oe(_(r, "streamText"), O.fromAsyncIterable(l.fullStream, (e) => e).pipe(O.map(wt), O.filter((e) => e !== null), O.catchAll((e) => {
|
|
234
|
+
let t = c.aborted || Ct(e);
|
|
235
|
+
return O.make({
|
|
601
236
|
_tag: "error",
|
|
602
237
|
code: t ? "cancelled" : "provider",
|
|
603
238
|
message: t ? "stream aborted" : String(e),
|
|
604
239
|
retryable: !t
|
|
605
240
|
});
|
|
606
|
-
}),
|
|
607
|
-
s.abort(), t.streamId !== void 0 &&
|
|
241
|
+
}), O.ensuring(T.sync(() => {
|
|
242
|
+
s.abort(), t.streamId !== void 0 && xt(t.streamId);
|
|
608
243
|
}))));
|
|
609
|
-
})),
|
|
244
|
+
})), Tt = (e) => e._tag === "token" || e._tag === "reasoning" || e._tag === "toolCall" || e._tag === "toolResult" || e._tag === "source" || e._tag === "file" || e._tag === "message", Et = (e) => e._tag === "done" || e._tag === "error", Dt = (e, t = {}) => {
|
|
610
245
|
let n = Math.max(1, t.maxAttempts ?? 3), r = t.backoffMs ?? 250, i = t.maxBackoffMs ?? 5e3, a = [e.provider, ...e.fallbacks ?? []], o = (t, s) => {
|
|
611
246
|
let c = !1, l = a[t];
|
|
612
|
-
return
|
|
247
|
+
return U(l === void 0 ? e : {
|
|
613
248
|
...e,
|
|
614
249
|
provider: l
|
|
615
|
-
}).pipe(
|
|
250
|
+
}).pipe(O.takeUntil(Et), O.flatMap((e) => {
|
|
616
251
|
if (e._tag === "error" && e.retryable && !c) {
|
|
617
252
|
if (s + 1 < n) {
|
|
618
253
|
let e = Math.min(i, r * 2 ** s);
|
|
619
|
-
return
|
|
254
|
+
return O.unwrap(T.as(T.sleep(Ye.millis(e)), o(t, s + 1)));
|
|
620
255
|
}
|
|
621
256
|
if (t + 1 < a.length) return o(t + 1, 0);
|
|
622
257
|
}
|
|
623
|
-
return
|
|
258
|
+
return Tt(e) && (c = !0), O.make(e);
|
|
624
259
|
}, { concurrency: 1 }));
|
|
625
260
|
};
|
|
626
261
|
return o(0, 0);
|
|
627
|
-
},
|
|
262
|
+
}, Ot = (e) => {
|
|
628
263
|
let t = [e.provider, ...e.fallbacks ?? []], n = (r) => {
|
|
629
264
|
let i = !1, a = t[r];
|
|
630
|
-
return
|
|
265
|
+
return U(a === void 0 ? e : {
|
|
631
266
|
...e,
|
|
632
267
|
provider: a
|
|
633
|
-
}).pipe(
|
|
268
|
+
}).pipe(O.takeUntil(Et), O.flatMap((e) => e._tag === "error" && e.retryable && !i && r + 1 < t.length ? n(r + 1) : (Tt(e) && (i = !0), O.make(e)), { concurrency: 1 }));
|
|
634
269
|
};
|
|
635
270
|
return n(0);
|
|
636
|
-
},
|
|
637
|
-
let r = n.pollMs ?? 50, i = n.fromSeq ?? 0, a = n.idleTimeoutMs, o = [
|
|
638
|
-
return
|
|
271
|
+
}, kt = (e, t, n = {}) => {
|
|
272
|
+
let r = n.pollMs ?? 50, i = n.fromSeq ?? 0, a = n.idleTimeoutMs, o = [w.empty(), E.none()];
|
|
273
|
+
return O.paginateChunkEffect({
|
|
639
274
|
cursor: i,
|
|
640
275
|
finishing: !1,
|
|
641
276
|
idleMs: 0
|
|
642
|
-
}, (n) =>
|
|
277
|
+
}, (n) => T.gen(function* () {
|
|
643
278
|
if (n.finishing) return o;
|
|
644
279
|
let i = yield* t.read(e, n.cursor);
|
|
645
280
|
if (i.length > 0) {
|
|
646
281
|
let e = i[i.length - 1].seq;
|
|
647
|
-
return [
|
|
282
|
+
return [w.fromIterable(i), E.some({
|
|
648
283
|
cursor: e,
|
|
649
284
|
finishing: !1,
|
|
650
285
|
idleMs: 0
|
|
@@ -654,38 +289,38 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
654
289
|
let r = yield* t.read(e, n.cursor);
|
|
655
290
|
if (r.length === 0) return o;
|
|
656
291
|
let i = r[r.length - 1].seq;
|
|
657
|
-
return [
|
|
292
|
+
return [w.fromIterable(r), E.some({
|
|
658
293
|
cursor: i,
|
|
659
294
|
finishing: !0,
|
|
660
295
|
idleMs: 0
|
|
661
296
|
})];
|
|
662
297
|
}
|
|
663
298
|
let s = n.idleMs + r;
|
|
664
|
-
return a !== void 0 && s >= a ? o : (yield*
|
|
299
|
+
return a !== void 0 && s >= a ? o : (yield* T.sleep(Ye.millis(r)), [w.empty(), E.some({
|
|
665
300
|
...n,
|
|
666
301
|
idleMs: s
|
|
667
302
|
})]);
|
|
668
303
|
}));
|
|
669
|
-
},
|
|
304
|
+
}, At = (e, t, n) => {
|
|
670
305
|
let r = 0;
|
|
671
|
-
return n().pipe(
|
|
306
|
+
return n().pipe(O.runForEach((n) => (r += 1, t.append(e, {
|
|
672
307
|
seq: r,
|
|
673
308
|
event: n
|
|
674
|
-
}))),
|
|
675
|
-
},
|
|
676
|
-
return (yield* e.store.claimProducer(e.streamId)) && (yield*
|
|
309
|
+
}))), T.ensuring(t.markDone(e)), T.catchAllCause(() => T.void));
|
|
310
|
+
}, jt = (e) => O.unwrap(T.gen(function* () {
|
|
311
|
+
return (yield* e.store.claimProducer(e.streamId)) && (yield* T.forkDaemon(At(e.streamId, e.store, e.source))), kt(e.streamId, e.store, {
|
|
677
312
|
fromSeq: e.fromSeq ?? 0,
|
|
678
313
|
pollMs: e.pollMs ?? 50,
|
|
679
314
|
...e.idleTimeoutMs === void 0 ? {} : { idleTimeoutMs: e.idleTimeoutMs }
|
|
680
315
|
});
|
|
681
|
-
})),
|
|
316
|
+
})), Mt = (e) => jt({
|
|
682
317
|
streamId: e.streamId,
|
|
683
318
|
store: e.store,
|
|
684
|
-
source: () =>
|
|
319
|
+
source: () => U(e.options),
|
|
685
320
|
...e.fromSeq === void 0 ? {} : { fromSeq: e.fromSeq },
|
|
686
321
|
...e.pollMs === void 0 ? {} : { pollMs: e.pollMs },
|
|
687
322
|
...e.idleTimeoutMs === void 0 ? {} : { idleTimeoutMs: e.idleTimeoutMs }
|
|
688
|
-
}),
|
|
323
|
+
}), Nt = () => {
|
|
689
324
|
let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Set(), n = (t) => {
|
|
690
325
|
let n = e.get(t);
|
|
691
326
|
return n || (n = {
|
|
@@ -694,42 +329,42 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
694
329
|
}, e.set(t, n)), n;
|
|
695
330
|
};
|
|
696
331
|
return {
|
|
697
|
-
claimProducer: (e) =>
|
|
698
|
-
append: (e, t) =>
|
|
332
|
+
claimProducer: (e) => T.sync(() => t.has(e) ? !1 : (t.add(e), !0)),
|
|
333
|
+
append: (e, t) => T.sync(() => {
|
|
699
334
|
n(e).events.push(t);
|
|
700
335
|
}),
|
|
701
|
-
read: (e, t) =>
|
|
702
|
-
markDone: (e) =>
|
|
336
|
+
read: (e, t) => T.sync(() => n(e).events.filter((e) => e.seq > t)),
|
|
337
|
+
markDone: (e) => T.sync(() => {
|
|
703
338
|
n(e).done = !0;
|
|
704
339
|
}),
|
|
705
|
-
isDone: (e) =>
|
|
340
|
+
isDone: (e) => T.sync(() => n(e).done)
|
|
706
341
|
};
|
|
707
|
-
},
|
|
708
|
-
id:
|
|
709
|
-
streamId:
|
|
710
|
-
seq:
|
|
711
|
-
event:
|
|
712
|
-
createdAt:
|
|
713
|
-
}).unique(["streamId", "seq"]).index(["streamId"]),
|
|
714
|
-
id:
|
|
715
|
-
streamId:
|
|
716
|
-
done:
|
|
717
|
-
createdAt:
|
|
718
|
-
updatedAt:
|
|
719
|
-
}).index(["createdAt"]),
|
|
342
|
+
}, W = "_voltro_stream_events", G = "_voltro_stream_state", Pt = F(W, {
|
|
343
|
+
id: j({ prefix: "sev" }),
|
|
344
|
+
streamId: I(),
|
|
345
|
+
seq: M(),
|
|
346
|
+
event: nt(),
|
|
347
|
+
createdAt: L().default("now")
|
|
348
|
+
}).unique(["streamId", "seq"]).index(["streamId"]), Ft = F(G, {
|
|
349
|
+
id: j({ prefix: "sst" }),
|
|
350
|
+
streamId: I().unique(),
|
|
351
|
+
done: Xe().default(!1),
|
|
352
|
+
createdAt: L().default("now"),
|
|
353
|
+
updatedAt: L().default("now")
|
|
354
|
+
}).index(["createdAt"]), It = (e) => e === !0 || e === 1 || e === "1" || e === "t", Lt = async (e, t) => (await e.query({
|
|
720
355
|
table: "_voltro_stream_state",
|
|
721
|
-
predicate:
|
|
356
|
+
predicate: A("streamId", t),
|
|
722
357
|
order: [],
|
|
723
358
|
take: 1,
|
|
724
359
|
skip: void 0,
|
|
725
360
|
projection: void 0
|
|
726
|
-
}))[0]?.id ?? null,
|
|
727
|
-
claimProducer: (t) =>
|
|
728
|
-
let n =
|
|
361
|
+
}))[0]?.id ?? null, Rt = (e) => ({
|
|
362
|
+
claimProducer: (t) => T.promise(async () => {
|
|
363
|
+
let n = Qe({
|
|
729
364
|
kind: "typeid",
|
|
730
365
|
prefix: "sst"
|
|
731
|
-
},
|
|
732
|
-
return (await e.insertIgnore(
|
|
366
|
+
}, G);
|
|
367
|
+
return (await e.insertIgnore(G, {
|
|
733
368
|
id: n,
|
|
734
369
|
streamId: t,
|
|
735
370
|
done: !1,
|
|
@@ -737,17 +372,17 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
737
372
|
updatedAt: /* @__PURE__ */ new Date()
|
|
738
373
|
}, { conflictColumns: ["streamId"] })).id === n;
|
|
739
374
|
}),
|
|
740
|
-
append: (t, n) =>
|
|
741
|
-
await e.insert(
|
|
375
|
+
append: (t, n) => T.promise(async () => {
|
|
376
|
+
await e.insert(W, {
|
|
742
377
|
streamId: t,
|
|
743
378
|
seq: n.seq,
|
|
744
379
|
event: n.event,
|
|
745
380
|
createdAt: /* @__PURE__ */ new Date()
|
|
746
381
|
});
|
|
747
382
|
}),
|
|
748
|
-
read: (t, n) =>
|
|
749
|
-
table:
|
|
750
|
-
predicate:
|
|
383
|
+
read: (t, n) => T.promise(async () => (await e.query({
|
|
384
|
+
table: W,
|
|
385
|
+
predicate: k(A("streamId", t), $e("seq", n)),
|
|
751
386
|
order: [{
|
|
752
387
|
column: "seq",
|
|
753
388
|
direction: "asc"
|
|
@@ -759,28 +394,28 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
759
394
|
seq: Number(e.seq),
|
|
760
395
|
event: e.event
|
|
761
396
|
}))),
|
|
762
|
-
markDone: (t) =>
|
|
763
|
-
let n = await
|
|
764
|
-
n !== null && await e.update(
|
|
397
|
+
markDone: (t) => T.promise(async () => {
|
|
398
|
+
let n = await Lt(e, t);
|
|
399
|
+
n !== null && await e.update(G, n, {
|
|
765
400
|
done: !0,
|
|
766
401
|
updatedAt: /* @__PURE__ */ new Date()
|
|
767
402
|
});
|
|
768
403
|
}),
|
|
769
|
-
isDone: (t) =>
|
|
404
|
+
isDone: (t) => T.promise(async () => {
|
|
770
405
|
let n = (await e.query({
|
|
771
|
-
table:
|
|
772
|
-
predicate:
|
|
406
|
+
table: G,
|
|
407
|
+
predicate: A("streamId", t),
|
|
773
408
|
order: [],
|
|
774
409
|
take: 1,
|
|
775
410
|
skip: void 0,
|
|
776
411
|
projection: void 0
|
|
777
412
|
}))[0];
|
|
778
|
-
return n !== void 0 &&
|
|
413
|
+
return n !== void 0 && It(n.done);
|
|
779
414
|
})
|
|
780
|
-
}),
|
|
415
|
+
}), zt = (e, t) => T.promise(async () => {
|
|
781
416
|
let n = await e.query({
|
|
782
|
-
table:
|
|
783
|
-
predicate:
|
|
417
|
+
table: G,
|
|
418
|
+
predicate: A("done", !0),
|
|
784
419
|
order: [],
|
|
785
420
|
take: void 0,
|
|
786
421
|
skip: void 0,
|
|
@@ -790,25 +425,25 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
790
425
|
let n = i;
|
|
791
426
|
if ((n.createdAt instanceof Date ? n.createdAt : new Date(String(n.createdAt))).getTime() >= t.olderThan.getTime()) continue;
|
|
792
427
|
let a = await e.query({
|
|
793
|
-
table:
|
|
794
|
-
predicate:
|
|
428
|
+
table: W,
|
|
429
|
+
predicate: A("streamId", n.streamId),
|
|
795
430
|
order: [],
|
|
796
431
|
take: void 0,
|
|
797
432
|
skip: void 0,
|
|
798
433
|
projection: void 0
|
|
799
434
|
});
|
|
800
|
-
for (let t of a) await e.delete(
|
|
801
|
-
await e.delete(
|
|
435
|
+
for (let t of a) await e.delete(W, t.id);
|
|
436
|
+
await e.delete(G, n.id), r += 1;
|
|
802
437
|
}
|
|
803
438
|
return r;
|
|
804
|
-
}),
|
|
439
|
+
}), Bt = (e, t = {}) => {
|
|
805
440
|
let n = t.keyPrefix ?? "voltro:rstream", r = t.ttlSeconds ?? 3600, i = (e) => `${n}:log:${e}`, a = (e) => `${n}:producer:${e}`, o = (e) => `${n}:done:${e}`;
|
|
806
441
|
return {
|
|
807
|
-
claimProducer: (t) =>
|
|
808
|
-
append: (t, n) =>
|
|
442
|
+
claimProducer: (t) => T.promise(() => e.setNx(a(t), "1", r)),
|
|
443
|
+
append: (t, n) => T.promise(async () => {
|
|
809
444
|
await e.rpush(i(t), JSON.stringify(n)), e.expire && await e.expire(i(t), r);
|
|
810
445
|
}),
|
|
811
|
-
read: (t, n) =>
|
|
446
|
+
read: (t, n) => T.promise(async () => {
|
|
812
447
|
let r = await e.lrange(i(t), n, -1), a = [];
|
|
813
448
|
for (let e of r) try {
|
|
814
449
|
let t = JSON.parse(e);
|
|
@@ -816,39 +451,39 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
816
451
|
} catch {}
|
|
817
452
|
return a;
|
|
818
453
|
}),
|
|
819
|
-
markDone: (t) =>
|
|
820
|
-
isDone: (t) =>
|
|
454
|
+
markDone: (t) => T.promise(() => e.set(o(t), "1", r)),
|
|
455
|
+
isDone: (t) => T.promise(() => e.exists(o(t)))
|
|
821
456
|
};
|
|
822
|
-
},
|
|
823
|
-
id:
|
|
824
|
-
tenantId:
|
|
825
|
-
title:
|
|
826
|
-
createdAt:
|
|
827
|
-
updatedAt:
|
|
828
|
-
}).renamedFrom("agent_threads").index(["tenantId"]),
|
|
829
|
-
id:
|
|
830
|
-
threadId:
|
|
831
|
-
tenantId:
|
|
832
|
-
role:
|
|
833
|
-
content:
|
|
834
|
-
streaming:
|
|
835
|
-
order:
|
|
836
|
-
stepOrder:
|
|
837
|
-
parts:
|
|
838
|
-
createdAt:
|
|
839
|
-
}).renamedFrom("agent_messages").index(["threadId"]),
|
|
457
|
+
}, Vt = F(C, {
|
|
458
|
+
id: j({ prefix: "thread" }),
|
|
459
|
+
tenantId: I().nullable(),
|
|
460
|
+
title: I().nullable(),
|
|
461
|
+
createdAt: L(),
|
|
462
|
+
updatedAt: L()
|
|
463
|
+
}).renamedFrom("agent_threads").index(["tenantId"]), Ht = F(S, {
|
|
464
|
+
id: j({ prefix: "msg" }),
|
|
465
|
+
threadId: I(),
|
|
466
|
+
tenantId: I().nullable(),
|
|
467
|
+
role: I(),
|
|
468
|
+
content: I(),
|
|
469
|
+
streaming: Xe(),
|
|
470
|
+
order: M(),
|
|
471
|
+
stepOrder: M(),
|
|
472
|
+
parts: nt(),
|
|
473
|
+
createdAt: L()
|
|
474
|
+
}).renamedFrom("agent_messages").index(["threadId"]), Ut = (e, t = {}) => T.promise(async () => {
|
|
840
475
|
let n = /* @__PURE__ */ new Date();
|
|
841
|
-
return await e.insert(
|
|
476
|
+
return await e.insert(C, {
|
|
842
477
|
tenantId: t.tenantId ?? null,
|
|
843
478
|
title: t.title ?? null,
|
|
844
479
|
createdAt: n,
|
|
845
480
|
updatedAt: n
|
|
846
481
|
});
|
|
847
|
-
}),
|
|
482
|
+
}), Wt = (e, t) => T.promise(async () => {
|
|
848
483
|
let n = t.parts ?? (t.content ? [{
|
|
849
484
|
type: "text",
|
|
850
485
|
text: t.content
|
|
851
|
-
}] : []), r = await e.insert(
|
|
486
|
+
}] : []), r = await e.insert(S, {
|
|
852
487
|
threadId: t.threadId,
|
|
853
488
|
tenantId: t.tenantId ?? null,
|
|
854
489
|
role: t.role,
|
|
@@ -859,9 +494,9 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
859
494
|
parts: n,
|
|
860
495
|
createdAt: /* @__PURE__ */ new Date()
|
|
861
496
|
});
|
|
862
|
-
return await e.update(
|
|
863
|
-
}),
|
|
864
|
-
table:
|
|
497
|
+
return await e.update(C, t.threadId, { updatedAt: /* @__PURE__ */ new Date() }).catch(() => null), r;
|
|
498
|
+
}), K = (e, t) => T.promise(async () => await e.query({
|
|
499
|
+
table: S,
|
|
865
500
|
predicate: {
|
|
866
501
|
_tag: "leaf",
|
|
867
502
|
column: "threadId",
|
|
@@ -875,7 +510,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
875
510
|
take: void 0,
|
|
876
511
|
skip: void 0,
|
|
877
512
|
projection: void 0
|
|
878
|
-
})),
|
|
513
|
+
})), Gt = (e, t) => T.promise(async () => (await e.query({
|
|
879
514
|
table: "_voltro_agent_threads",
|
|
880
515
|
predicate: {
|
|
881
516
|
_tag: "leaf",
|
|
@@ -887,14 +522,14 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
887
522
|
take: 1,
|
|
888
523
|
skip: void 0,
|
|
889
524
|
projection: void 0
|
|
890
|
-
}))[0] ?? null),
|
|
525
|
+
}))[0] ?? null), Kt = (e) => [...e].sort((e, t) => e.order - t.order || e.stepOrder - t.stepOrder).filter((e) => !e.streaming && e.content.length > 0 && (e.role === "user" || e.role === "assistant")).map((e) => e.role === "user" ? {
|
|
891
526
|
role: "user",
|
|
892
527
|
content: e.content
|
|
893
528
|
} : {
|
|
894
529
|
role: "assistant",
|
|
895
530
|
content: e.content
|
|
896
|
-
}),
|
|
897
|
-
let n = await e.insert(
|
|
531
|
+
}), qt = (e, t) => T.promise(async () => {
|
|
532
|
+
let n = await e.insert(S, {
|
|
898
533
|
threadId: t.threadId,
|
|
899
534
|
tenantId: t.tenantId ?? null,
|
|
900
535
|
role: "assistant",
|
|
@@ -905,18 +540,18 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
905
540
|
parts: [],
|
|
906
541
|
createdAt: /* @__PURE__ */ new Date()
|
|
907
542
|
});
|
|
908
|
-
return await e.update(
|
|
909
|
-
}),
|
|
910
|
-
await e.update(
|
|
543
|
+
return await e.update(C, t.threadId, { updatedAt: /* @__PURE__ */ new Date() }).catch(() => null), n.id;
|
|
544
|
+
}), Jt = (e, t, n) => T.promise(async () => {
|
|
545
|
+
await e.update(S, t, {
|
|
911
546
|
parts: n,
|
|
912
|
-
content:
|
|
547
|
+
content: q(n)
|
|
913
548
|
});
|
|
914
|
-
}),
|
|
915
|
-
let n = yield*
|
|
549
|
+
}), q = (e) => e.filter((e) => e.type === "text").map((e) => e.text).join(""), Yt = (e, t) => T.gen(function* () {
|
|
550
|
+
let n = yield* qt(e, {
|
|
916
551
|
threadId: t.threadId,
|
|
917
552
|
tenantId: t.tenantId ?? null,
|
|
918
553
|
order: t.order
|
|
919
|
-
}), r = "", i = "", a = /* @__PURE__ */ new Map(), o = [], s = [], c = 0, l = null, u = t.throttleMs ?? 100,
|
|
554
|
+
}), r = "", i = "", a = /* @__PURE__ */ new Map(), o = [], s = [], c = 0, l = null, u = t.throttleMs ?? 100, d = () => {
|
|
920
555
|
let e = [];
|
|
921
556
|
r.length > 0 && e.push({
|
|
922
557
|
type: "reasoning",
|
|
@@ -929,11 +564,11 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
929
564
|
for (let t of o) e.push(t);
|
|
930
565
|
for (let t of s) e.push(t);
|
|
931
566
|
return e;
|
|
932
|
-
},
|
|
567
|
+
}, f = (t) => {
|
|
933
568
|
let r = Date.now();
|
|
934
|
-
return !t && r - c < u ?
|
|
569
|
+
return !t && r - c < u ? T.void : (c = r, Jt(e, n, d()));
|
|
935
570
|
};
|
|
936
|
-
yield*
|
|
571
|
+
yield* U({
|
|
937
572
|
prompt: t.prompt,
|
|
938
573
|
...t.messages === void 0 ? {} : { messages: t.messages },
|
|
939
574
|
...t.system === void 0 ? {} : { system: t.system },
|
|
@@ -942,10 +577,10 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
942
577
|
...t.maxSteps === void 0 ? {} : { maxSteps: t.maxSteps },
|
|
943
578
|
...t.toolContext === void 0 ? {} : { toolContext: t.toolContext },
|
|
944
579
|
...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
|
|
945
|
-
}).pipe(
|
|
580
|
+
}).pipe(O.runForEach((e) => T.gen(function* () {
|
|
946
581
|
switch (e._tag) {
|
|
947
582
|
case "token":
|
|
948
|
-
i += e.text, yield*
|
|
583
|
+
i += e.text, yield* f(!1);
|
|
949
584
|
break;
|
|
950
585
|
case "toolCall":
|
|
951
586
|
a.set(e.id, {
|
|
@@ -954,7 +589,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
954
589
|
toolName: e.name,
|
|
955
590
|
state: "input-available",
|
|
956
591
|
input: e.input
|
|
957
|
-
}), yield*
|
|
592
|
+
}), yield* f(!0);
|
|
958
593
|
break;
|
|
959
594
|
case "toolResult": {
|
|
960
595
|
let t = a.get(e.id);
|
|
@@ -966,11 +601,11 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
966
601
|
input: t?.input,
|
|
967
602
|
output: e.output,
|
|
968
603
|
...e.error ? { errorText: e.error } : {}
|
|
969
|
-
}), yield*
|
|
604
|
+
}), yield* f(!0);
|
|
970
605
|
break;
|
|
971
606
|
}
|
|
972
607
|
case "reasoning":
|
|
973
|
-
r += e.text, yield*
|
|
608
|
+
r += e.text, yield* f(!1);
|
|
974
609
|
break;
|
|
975
610
|
case "source":
|
|
976
611
|
o.push({
|
|
@@ -981,14 +616,14 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
981
616
|
...e.title === void 0 ? {} : { title: e.title },
|
|
982
617
|
...e.mediaType === void 0 ? {} : { mediaType: e.mediaType },
|
|
983
618
|
...e.filename === void 0 ? {} : { filename: e.filename }
|
|
984
|
-
}), yield*
|
|
619
|
+
}), yield* f(!0);
|
|
985
620
|
break;
|
|
986
621
|
case "file":
|
|
987
622
|
s.push({
|
|
988
623
|
type: "file",
|
|
989
624
|
mediaType: e.mediaType,
|
|
990
625
|
data: e.data
|
|
991
|
-
}), yield*
|
|
626
|
+
}), yield* f(!0);
|
|
992
627
|
break;
|
|
993
628
|
case "error":
|
|
994
629
|
l = e.message;
|
|
@@ -997,33 +632,33 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
997
632
|
case "message": break;
|
|
998
633
|
}
|
|
999
634
|
})));
|
|
1000
|
-
let
|
|
1001
|
-
return yield*
|
|
1002
|
-
parts:
|
|
1003
|
-
content:
|
|
635
|
+
let p = d();
|
|
636
|
+
return yield* T.promise(() => e.update(S, n, {
|
|
637
|
+
parts: p,
|
|
638
|
+
content: q(p),
|
|
1004
639
|
streaming: !1
|
|
1005
|
-
})), l ? yield*
|
|
1006
|
-
}),
|
|
1007
|
-
_brand:
|
|
640
|
+
})), l ? yield* T.fail(Error(l)) : q(p);
|
|
641
|
+
}), Xt = "@voltro/ai/AgentExecutor", Zt = (e, t) => ({
|
|
642
|
+
_brand: Xt,
|
|
1008
643
|
descriptor: e,
|
|
1009
644
|
config: t
|
|
1010
|
-
}),
|
|
645
|
+
}), Qt = (e) => typeof e == "object" && !!e && e._brand === Xt, $t = (e, t) => {
|
|
1011
646
|
let n = e.config.system;
|
|
1012
647
|
if (n !== void 0) return typeof n == "function" ? n(t) : n;
|
|
1013
|
-
},
|
|
648
|
+
}, en = (e, t) => {
|
|
1014
649
|
let n = e.config.model;
|
|
1015
650
|
return typeof n == "function" ? n(t) : n;
|
|
1016
|
-
},
|
|
1017
|
-
let r = n.promptOf ? n.promptOf(n.input) : String(n.input?.prompt ?? ""), i =
|
|
1018
|
-
yield*
|
|
651
|
+
}, tn = (e, t, n) => T.gen(function* () {
|
|
652
|
+
let r = n.promptOf ? n.promptOf(n.input) : String(n.input?.prompt ?? ""), i = $t(e, n.input), a = en(e, n.input);
|
|
653
|
+
yield* Wt(t, {
|
|
1019
654
|
threadId: n.threadId,
|
|
1020
655
|
role: "user",
|
|
1021
656
|
content: r,
|
|
1022
657
|
tenantId: n.tenantId ?? null,
|
|
1023
658
|
order: n.order
|
|
1024
659
|
});
|
|
1025
|
-
let o =
|
|
1026
|
-
return yield*
|
|
660
|
+
let o = Kt(yield* K(t, n.threadId));
|
|
661
|
+
return yield* Yt(t, {
|
|
1027
662
|
threadId: n.threadId,
|
|
1028
663
|
tenantId: n.tenantId ?? null,
|
|
1029
664
|
prompt: r,
|
|
@@ -1037,18 +672,18 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1037
672
|
order: n.order + 1,
|
|
1038
673
|
...n.throttleMs === void 0 ? {} : { throttleMs: n.throttleMs }
|
|
1039
674
|
});
|
|
1040
|
-
}),
|
|
675
|
+
}), nn = (e, t) => K(e, t), rn = (e, t) => ({
|
|
1041
676
|
specificationVersion: "v4",
|
|
1042
677
|
provider: "mock",
|
|
1043
678
|
modelId: e,
|
|
1044
679
|
maxEmbeddingsPerCall: 2048,
|
|
1045
680
|
supportsParallelCalls: !0,
|
|
1046
681
|
doEmbed: async ({ values: e }) => ({
|
|
1047
|
-
embeddings: e.map((e) =>
|
|
682
|
+
embeddings: e.map((e) => an(e, t)),
|
|
1048
683
|
usage: { tokens: e.reduce((e, t) => e + t.length, 0) },
|
|
1049
684
|
warnings: []
|
|
1050
685
|
})
|
|
1051
|
-
}),
|
|
686
|
+
}), an = (e, t) => {
|
|
1052
687
|
let n = Array(t);
|
|
1053
688
|
for (let r = 0; r < t; r++) {
|
|
1054
689
|
let t = 2166136261 ^ r * 16777619;
|
|
@@ -1056,14 +691,14 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1056
691
|
n[r] = (t >>> 0) / 4294967295 * 2 - 1;
|
|
1057
692
|
}
|
|
1058
693
|
return n;
|
|
1059
|
-
},
|
|
694
|
+
}, J = async (e) => {
|
|
1060
695
|
switch (e.name) {
|
|
1061
|
-
case "mock": return
|
|
1062
|
-
case "openai": return (await
|
|
1063
|
-
case "voyage": return (await
|
|
1064
|
-
case "cohere": return (await
|
|
696
|
+
case "mock": return rn(e.model, e.mockDim ?? 8);
|
|
697
|
+
case "openai": return (await Y("@ai-sdk/openai", "openai")).openai.textEmbeddingModel(e.model);
|
|
698
|
+
case "voyage": return (await Y("voyage-ai-provider", "voyage")).voyage.textEmbeddingModel(e.model);
|
|
699
|
+
case "cohere": return (await Y("@ai-sdk/cohere", "cohere")).cohere.textEmbeddingModel(e.model);
|
|
1065
700
|
}
|
|
1066
|
-
},
|
|
701
|
+
}, Y = async (e, t) => {
|
|
1067
702
|
try {
|
|
1068
703
|
return await import(
|
|
1069
704
|
/* @vite-ignore */
|
|
@@ -1072,71 +707,71 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1072
707
|
} catch {
|
|
1073
708
|
throw Error(`embedding provider '${t}' needs the '${e}' package — install it (pnpm add ${e}) or use AI_EMBED_PROVIDER=mock for tests/demos.`);
|
|
1074
709
|
}
|
|
1075
|
-
},
|
|
710
|
+
}, X = (e = process.env) => {
|
|
1076
711
|
let t = (e.AI_EMBED_PROVIDER ?? "mock").toLowerCase(), n = t === "openai" ? "text-embedding-3-small" : t === "voyage" ? "voyage-3" : t === "cohere" ? "embed-english-v3.0" : "mock", r = e.AI_EMBED_MODEL ?? n, i = e.AI_EMBED_MOCK_DIM === void 0 ? void 0 : Number(e.AI_EMBED_MOCK_DIM);
|
|
1077
712
|
return {
|
|
1078
713
|
name: t,
|
|
1079
714
|
model: r,
|
|
1080
715
|
...i !== void 0 && Number.isFinite(i) ? { mockDim: i } : {}
|
|
1081
716
|
};
|
|
1082
|
-
},
|
|
1083
|
-
try: async () => (await
|
|
1084
|
-
model: await
|
|
717
|
+
}, Z = (e, t) => T.tryPromise({
|
|
718
|
+
try: async () => (await He({
|
|
719
|
+
model: await J(t ?? X()),
|
|
1085
720
|
value: e
|
|
1086
721
|
})).embedding,
|
|
1087
|
-
catch: (e) => new
|
|
722
|
+
catch: (e) => new y({
|
|
1088
723
|
reason: "generation",
|
|
1089
724
|
message: String(e?.message ?? e)
|
|
1090
725
|
})
|
|
1091
|
-
}),
|
|
1092
|
-
try: async () => (await
|
|
1093
|
-
model: await
|
|
726
|
+
}), on = (e, t) => T.tryPromise({
|
|
727
|
+
try: async () => (await Ue({
|
|
728
|
+
model: await J(t ?? X()),
|
|
1094
729
|
values: [...e]
|
|
1095
730
|
})).embeddings,
|
|
1096
|
-
catch: (e) => new
|
|
731
|
+
catch: (e) => new y({
|
|
1097
732
|
reason: "generation",
|
|
1098
733
|
message: String(e?.message ?? e)
|
|
1099
734
|
})
|
|
1100
|
-
}),
|
|
735
|
+
}), sn = (e, t) => Ve([...e], [...t]), cn = {
|
|
1101
736
|
inputTokens: 0,
|
|
1102
737
|
outputTokens: 0,
|
|
1103
738
|
totalTokens: 0
|
|
1104
|
-
},
|
|
739
|
+
}, ln = .95, un = (e, t) => t === void 0 ? e : `${t}\n\n${e}`, dn = (e, t, n) => e.lookup(t, { threshold: n }).pipe(T.catchTag("CacheError", () => T.succeed(E.none()))), fn = (e, t, n, r) => e.put(t, n, {
|
|
1105
740
|
deps: r.deps,
|
|
1106
741
|
...r.ttlMs === void 0 ? {} : { ttlMs: r.ttlMs }
|
|
1107
|
-
}).pipe(
|
|
1108
|
-
let r = n.embed ??
|
|
1109
|
-
if (
|
|
742
|
+
}).pipe(T.catchTag("CacheError", () => T.void)), pn = (e, t, n) => T.gen(function* () {
|
|
743
|
+
let r = n.embed ?? Z, i = t.threshold ?? ln, a = yield* r(un(e.prompt, e.system)), o = yield* dn(n.cache, a, i);
|
|
744
|
+
if (E.isSome(o)) return {
|
|
1110
745
|
value: o.value,
|
|
1111
746
|
cached: !0,
|
|
1112
|
-
usage:
|
|
747
|
+
usage: cn
|
|
1113
748
|
};
|
|
1114
|
-
let s = yield*
|
|
1115
|
-
return yield*
|
|
749
|
+
let s = yield* _e(e);
|
|
750
|
+
return yield* fn(n.cache, a, s.text, t), {
|
|
1116
751
|
value: s.text,
|
|
1117
752
|
cached: !1,
|
|
1118
753
|
usage: s.usage
|
|
1119
754
|
};
|
|
1120
|
-
}),
|
|
1121
|
-
let r = n.embed ??
|
|
1122
|
-
if (
|
|
755
|
+
}), mn = (e, t, n) => T.gen(function* () {
|
|
756
|
+
let r = n.embed ?? Z, i = t.threshold ?? ln, a = yield* r(un(e.prompt, e.system)), o = yield* dn(n.cache, a, i);
|
|
757
|
+
if (E.isSome(o)) return {
|
|
1123
758
|
value: o.value,
|
|
1124
759
|
cached: !0,
|
|
1125
|
-
usage:
|
|
760
|
+
usage: cn
|
|
1126
761
|
};
|
|
1127
|
-
let s = yield*
|
|
1128
|
-
return yield*
|
|
762
|
+
let s = yield* v(e);
|
|
763
|
+
return yield* fn(n.cache, a, s.object, t), {
|
|
1129
764
|
value: s.object,
|
|
1130
765
|
cached: !1,
|
|
1131
766
|
usage: s.usage
|
|
1132
767
|
};
|
|
1133
|
-
}),
|
|
768
|
+
}), hn = (e) => {
|
|
1134
769
|
let t = /* @__PURE__ */ new Set(), n = async (n) => {
|
|
1135
770
|
let r = await e.query(n);
|
|
1136
|
-
t.add(
|
|
771
|
+
t.add(ot(n.table));
|
|
1137
772
|
for (let e of r) {
|
|
1138
773
|
let r = e.id;
|
|
1139
|
-
r != null && t.add(
|
|
774
|
+
r != null && t.add(at(n.table, String(r)));
|
|
1140
775
|
}
|
|
1141
776
|
return r;
|
|
1142
777
|
};
|
|
@@ -1147,26 +782,26 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1147
782
|
deps: () => [...t],
|
|
1148
783
|
reset: () => t.clear()
|
|
1149
784
|
};
|
|
1150
|
-
},
|
|
785
|
+
}, gn = (e) => T.tryPromise({
|
|
1151
786
|
try: async () => {
|
|
1152
|
-
let t = e.getText ?? ((e) => String(e)), n = e.provider ?? "mock", r = [...n === "mock" ?
|
|
787
|
+
let t = e.getText ?? ((e) => String(e)), n = e.provider ?? "mock", r = [...n === "mock" ? _n(e.query, e.documents, t) : await yn(n, e.query, e.documents, t, e.model)].sort((e, t) => t.score - e.score);
|
|
1153
788
|
return e.topN === void 0 ? r : r.slice(0, e.topN);
|
|
1154
789
|
},
|
|
1155
|
-
catch: (e) => new
|
|
790
|
+
catch: (e) => new y({
|
|
1156
791
|
reason: "generation",
|
|
1157
792
|
message: String(e?.message ?? e)
|
|
1158
793
|
})
|
|
1159
|
-
}),
|
|
1160
|
-
let r =
|
|
794
|
+
}), _n = (e, t, n) => {
|
|
795
|
+
let r = vn(e), i = new Set(r);
|
|
1161
796
|
return t.map((e) => {
|
|
1162
|
-
let t = new Set(
|
|
797
|
+
let t = new Set(vn(n(e))), r = 0;
|
|
1163
798
|
for (let e of i) t.has(e) && r++;
|
|
1164
799
|
return {
|
|
1165
800
|
document: e,
|
|
1166
801
|
score: i.size === 0 ? 0 : r / i.size
|
|
1167
802
|
};
|
|
1168
803
|
});
|
|
1169
|
-
},
|
|
804
|
+
}, vn = (e) => e.toLowerCase().split(/[^a-z0-9]+/).filter((e) => e.length > 0), yn = async (e, t, n, r, i) => {
|
|
1170
805
|
let a = e === "cohere" ? "@ai-sdk/cohere" : "voyage-ai-provider", o;
|
|
1171
806
|
try {
|
|
1172
807
|
o = await import(
|
|
@@ -1178,7 +813,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1178
813
|
}
|
|
1179
814
|
let s = o[e], c = s?.rerankingModel ?? s?.reranking;
|
|
1180
815
|
if (typeof c != "function") throw Error(`rerank provider '${e}' does not expose a reranking model in '${a}'.`);
|
|
1181
|
-
return (await
|
|
816
|
+
return (await Ke({
|
|
1182
817
|
model: c(i ?? (e === "cohere" ? "rerank-english-v3.0" : "rerank-2")),
|
|
1183
818
|
query: t,
|
|
1184
819
|
documents: n.map(r)
|
|
@@ -1186,7 +821,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1186
821
|
document: n[e.originalIndex],
|
|
1187
822
|
score: e.score
|
|
1188
823
|
}));
|
|
1189
|
-
},
|
|
824
|
+
}, bn = (e) => {
|
|
1190
825
|
if (e.name.trim() === "") throw Error("defineEval: name must be non-empty");
|
|
1191
826
|
if (e.cases.length === 0) throw Error(`defineEval "${e.name}": at least one case is required`);
|
|
1192
827
|
let t = /* @__PURE__ */ new Set();
|
|
@@ -1201,7 +836,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1201
836
|
...e,
|
|
1202
837
|
__eval: !0
|
|
1203
838
|
};
|
|
1204
|
-
},
|
|
839
|
+
}, xn = (e) => typeof e == "object" && !!e && "__eval" in e && e.__eval === !0, Sn = (e, t) => {
|
|
1205
840
|
let n = [], r = e.text;
|
|
1206
841
|
for (let i of t) switch (i.kind) {
|
|
1207
842
|
case "contains": {
|
|
@@ -1257,8 +892,8 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1257
892
|
break;
|
|
1258
893
|
}
|
|
1259
894
|
return n;
|
|
1260
|
-
},
|
|
1261
|
-
let a =
|
|
895
|
+
}, Cn = .7, wn = (e, t, n, r, i) => {
|
|
896
|
+
let a = Sn(t, [...n, ...e.assert ?? []]), o = r?.threshold ?? .7, s = i === void 0 || i.score >= o;
|
|
1262
897
|
return {
|
|
1263
898
|
id: e.id,
|
|
1264
899
|
pass: a.length === 0 && s,
|
|
@@ -1266,7 +901,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1266
901
|
...i === void 0 ? {} : { judge: i },
|
|
1267
902
|
output: t
|
|
1268
903
|
};
|
|
1269
|
-
},
|
|
904
|
+
}, Tn = async (e, t) => {
|
|
1270
905
|
let n = [];
|
|
1271
906
|
for (let r of e.cases) {
|
|
1272
907
|
let i = await t.replay({
|
|
@@ -1277,7 +912,7 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1277
912
|
output: i,
|
|
1278
913
|
config: e.judge
|
|
1279
914
|
}) : void 0;
|
|
1280
|
-
n.push(
|
|
915
|
+
n.push(wn(r, i, e.assert ?? [], e.judge, a));
|
|
1281
916
|
}
|
|
1282
917
|
let r = n.filter((e) => !e.pass).length;
|
|
1283
918
|
return {
|
|
@@ -1288,11 +923,11 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1288
923
|
cases: n,
|
|
1289
924
|
...t.branchId === void 0 ? {} : { branch: { id: t.branchId } }
|
|
1290
925
|
};
|
|
1291
|
-
},
|
|
1292
|
-
pass:
|
|
1293
|
-
score:
|
|
1294
|
-
reason:
|
|
1295
|
-
}),
|
|
926
|
+
}, En = D.Struct({
|
|
927
|
+
pass: D.Boolean,
|
|
928
|
+
score: D.Number,
|
|
929
|
+
reason: D.String
|
|
930
|
+
}), Dn = (e, t, n) => [
|
|
1296
931
|
"You are grading an AI assistant response against a rubric. Respond with a JSON",
|
|
1297
932
|
"object { pass: boolean, score: number (0..1), reason: string }. Score 1 is a",
|
|
1298
933
|
"perfect response, 0 is unusable. Be strict: a plausible-sounding but wrong or",
|
|
@@ -1303,20 +938,20 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1303
938
|
...e.input.prompt === "" ? [] : ["", `USER PROMPT:\n${e.input.prompt}`],
|
|
1304
939
|
"",
|
|
1305
940
|
`CANDIDATE RESPONSE (to grade):\n${t.text}`
|
|
1306
|
-
].join("\n"),
|
|
1307
|
-
schema:
|
|
1308
|
-
prompt:
|
|
1309
|
-
provider:
|
|
1310
|
-
}).pipe(
|
|
941
|
+
].join("\n"), On = async ({ case: e, output: t, config: n }) => await T.runPromise(v({
|
|
942
|
+
schema: En,
|
|
943
|
+
prompt: Dn(e, t, n),
|
|
944
|
+
provider: f()
|
|
945
|
+
}).pipe(T.map((e) => e.object), T.catchAll((e) => T.succeed({
|
|
1311
946
|
pass: !1,
|
|
1312
947
|
score: 0,
|
|
1313
948
|
reason: `judge failed: ${e.message}`
|
|
1314
|
-
})))),
|
|
949
|
+
})))), kn = (e) => {
|
|
1315
950
|
if (e === void 0) return;
|
|
1316
951
|
let t = Number(e);
|
|
1317
952
|
return Number.isFinite(t) ? t * 1e6 : void 0;
|
|
1318
|
-
},
|
|
1319
|
-
let t =
|
|
953
|
+
}, An = (e) => {
|
|
954
|
+
let t = kn(e.pricing?.input), n = kn(e.pricing?.output), r = kn(e.pricing?.cachedInputTokens ?? void 0);
|
|
1320
955
|
return {
|
|
1321
956
|
id: e.id,
|
|
1322
957
|
name: e.name,
|
|
@@ -1328,16 +963,16 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1328
963
|
...r === void 0 ? {} : { cachedInputPer1M: r }
|
|
1329
964
|
} } : {}
|
|
1330
965
|
};
|
|
1331
|
-
},
|
|
1332
|
-
let t = (await (e.gatewayProvider ?? (e.apiKey !== void 0 || e.baseURL !== void 0 ?
|
|
966
|
+
}, jn = async (e = {}) => {
|
|
967
|
+
let t = (await (e.gatewayProvider ?? (e.apiKey !== void 0 || e.baseURL !== void 0 ? ze({
|
|
1333
968
|
...e.apiKey === void 0 ? {} : { apiKey: e.apiKey },
|
|
1334
969
|
...e.baseURL === void 0 ? {} : { baseURL: e.baseURL }
|
|
1335
|
-
}) :
|
|
970
|
+
}) : Be)).getAvailableModels()).models.map(An);
|
|
1336
971
|
return e.modality === void 0 ? t : t.filter((t) => t.modality === e.modality);
|
|
1337
|
-
},
|
|
1338
|
-
reason:
|
|
1339
|
-
detail:
|
|
1340
|
-
}) {},
|
|
972
|
+
}, Mn = class extends D.TaggedError()("CopilotRejected", {
|
|
973
|
+
reason: D.Literal("unknown-table", "unknown-column", "bad-op", "bad-aggregate", "empty"),
|
|
974
|
+
detail: D.String
|
|
975
|
+
}) {}, Nn = 200, Pn = 50, Fn = /* @__PURE__ */ new Set([
|
|
1341
976
|
"eq",
|
|
1342
977
|
"neq",
|
|
1343
978
|
"gt",
|
|
@@ -1346,38 +981,38 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1346
981
|
"lte",
|
|
1347
982
|
"contains",
|
|
1348
983
|
"in"
|
|
1349
|
-
]),
|
|
984
|
+
]), In = (e) => {
|
|
1350
985
|
switch (e.op) {
|
|
1351
|
-
case "eq": return
|
|
1352
|
-
case "neq": return
|
|
1353
|
-
case "gt": return
|
|
1354
|
-
case "gte": return
|
|
1355
|
-
case "lt": return
|
|
1356
|
-
case "lte": return
|
|
1357
|
-
case "contains": return
|
|
1358
|
-
case "in": return
|
|
986
|
+
case "eq": return A(e.column, e.value);
|
|
987
|
+
case "neq": return rt(e.column, e.value);
|
|
988
|
+
case "gt": return $e(e.column, e.value);
|
|
989
|
+
case "gte": return et(e.column, e.value);
|
|
990
|
+
case "lt": return N(e.column, e.value);
|
|
991
|
+
case "lte": return P(e.column, e.value);
|
|
992
|
+
case "contains": return Ze(e.column, e.value);
|
|
993
|
+
case "in": return tt(e.column, Array.isArray(e.value) ? e.value : [e.value]);
|
|
1359
994
|
}
|
|
1360
|
-
},
|
|
995
|
+
}, Q = (e, t) => ({
|
|
1361
996
|
ok: !1,
|
|
1362
|
-
rejection: new
|
|
997
|
+
rejection: new Mn({
|
|
1363
998
|
reason: e,
|
|
1364
999
|
detail: t
|
|
1365
1000
|
})
|
|
1366
|
-
}),
|
|
1001
|
+
}), Ln = (e, t) => {
|
|
1367
1002
|
let n = t.tables.find((t) => t.name === e.table);
|
|
1368
|
-
if (n === void 0) return
|
|
1003
|
+
if (n === void 0) return Q("unknown-table", e.table);
|
|
1369
1004
|
let r = new Set(n.columns.map((e) => e.name));
|
|
1370
|
-
for (let t of e.columns ?? []) if (!r.has(t)) return
|
|
1005
|
+
for (let t of e.columns ?? []) if (!r.has(t)) return Q("unknown-column", `${e.table}.${t}`);
|
|
1371
1006
|
for (let t of e.filters ?? []) {
|
|
1372
|
-
if (!
|
|
1373
|
-
if (!r.has(t.column)) return
|
|
1007
|
+
if (!Fn.has(t.op)) return Q("bad-op", String(t.op));
|
|
1008
|
+
if (!r.has(t.column)) return Q("unknown-column", `${e.table}.${t.column}`);
|
|
1374
1009
|
}
|
|
1375
|
-
if (e.orderBy !== void 0 && !r.has(e.orderBy.column)) return
|
|
1010
|
+
if (e.orderBy !== void 0 && !r.has(e.orderBy.column)) return Q("unknown-column", `${e.table}.${e.orderBy.column}`);
|
|
1376
1011
|
if (e.aggregate !== void 0) {
|
|
1377
1012
|
let { fn: t, column: n } = e.aggregate;
|
|
1378
|
-
if (t !== "count" && (n === void 0 || !r.has(n))) return
|
|
1013
|
+
if (t !== "count" && (n === void 0 || !r.has(n))) return Q("bad-aggregate", `${t}(${n ?? "∅"})`);
|
|
1379
1014
|
}
|
|
1380
|
-
let i = e.filters ?? [], a = i.length === 0 ? void 0 : i.length === 1 ?
|
|
1015
|
+
let i = e.filters ?? [], a = i.length === 0 ? void 0 : i.length === 1 ? In(i[0]) : k(...i.map(In)), o = Math.min(Math.max(1, e.limit ?? Pn), 200), s = {
|
|
1381
1016
|
table: e.table,
|
|
1382
1017
|
predicate: a,
|
|
1383
1018
|
order: e.orderBy ? [{
|
|
@@ -1398,24 +1033,24 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1398
1033
|
descriptor: s,
|
|
1399
1034
|
table: e.table
|
|
1400
1035
|
};
|
|
1401
|
-
},
|
|
1402
|
-
table:
|
|
1403
|
-
columns:
|
|
1404
|
-
filters:
|
|
1405
|
-
column:
|
|
1406
|
-
op:
|
|
1407
|
-
value:
|
|
1036
|
+
}, Rn = D.Struct({
|
|
1037
|
+
table: D.String,
|
|
1038
|
+
columns: D.optional(D.Array(D.String)),
|
|
1039
|
+
filters: D.optional(D.Array(D.Struct({
|
|
1040
|
+
column: D.String,
|
|
1041
|
+
op: D.Literal("eq", "neq", "gt", "gte", "lt", "lte", "contains", "in"),
|
|
1042
|
+
value: D.Unknown
|
|
1408
1043
|
}))),
|
|
1409
|
-
orderBy:
|
|
1410
|
-
column:
|
|
1411
|
-
direction:
|
|
1044
|
+
orderBy: D.optional(D.Struct({
|
|
1045
|
+
column: D.String,
|
|
1046
|
+
direction: D.optional(D.Literal("asc", "desc"))
|
|
1412
1047
|
})),
|
|
1413
|
-
limit:
|
|
1414
|
-
aggregate:
|
|
1415
|
-
fn:
|
|
1416
|
-
column:
|
|
1048
|
+
limit: D.optional(D.Number),
|
|
1049
|
+
aggregate: D.optional(D.Struct({
|
|
1050
|
+
fn: D.Literal("count", "sum", "avg", "min", "max"),
|
|
1051
|
+
column: D.optional(D.String)
|
|
1417
1052
|
}))
|
|
1418
|
-
}),
|
|
1053
|
+
}), zn = (e) => [
|
|
1419
1054
|
"You are a data copilot. Translate the user question into a JSON query proposal.",
|
|
1420
1055
|
"",
|
|
1421
1056
|
"You may ONLY reference these tables and columns:",
|
|
@@ -1427,12 +1062,187 @@ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
|
|
|
1427
1062
|
"- NEVER invent a table or column. If the question cannot be answered from the listed schema, pick the closest table and leave filters empty.",
|
|
1428
1063
|
"- The query is READ-ONLY. You cannot insert, update, or delete.",
|
|
1429
1064
|
"- Keep the result small (limit ≤ 200)."
|
|
1430
|
-
].join("\n"),
|
|
1431
|
-
let r =
|
|
1432
|
-
return
|
|
1065
|
+
].join("\n"), Bn = async (e, t, n) => {
|
|
1066
|
+
let r = zn(t);
|
|
1067
|
+
return Ln(await n.propose({
|
|
1433
1068
|
system: r,
|
|
1434
1069
|
prompt: e
|
|
1435
1070
|
}), t);
|
|
1071
|
+
}, Vn = 4, Hn = 250, Un = {
|
|
1072
|
+
examined: !1,
|
|
1073
|
+
claimed: 0,
|
|
1074
|
+
succeeded: 0,
|
|
1075
|
+
failed: 0,
|
|
1076
|
+
retried: 0,
|
|
1077
|
+
reclaimed: 0,
|
|
1078
|
+
failures: []
|
|
1079
|
+
}, $ = (e) => {
|
|
1080
|
+
let t = e instanceof Error ? e.message : String(e);
|
|
1081
|
+
return t.length > 1e3 ? `${t.slice(0, 1e3)}…` : t;
|
|
1082
|
+
}, Wn = (e) => {
|
|
1083
|
+
let t = e;
|
|
1084
|
+
if (typeof t?.retryAfterMillis == "number") return t.retryAfterMillis;
|
|
1085
|
+
if (typeof t?.retryAfter == "number") return t.retryAfter * 1e3;
|
|
1086
|
+
}, Gn = (e) => it(k(A("status", "pending"), P("enqueuedAt", new Date(e))), k(A("status", "running"), N("leaseUntil", new Date(e)))), Kn = async (e, t = {}) => {
|
|
1087
|
+
let n = e.now?.() ?? Date.now(), r = t.batch ?? 4, i = t.leaseMs ?? 3e5, a = t.maxAttempts ?? 4, o = e.replicaId ?? `pid-${process.pid}`, s;
|
|
1088
|
+
try {
|
|
1089
|
+
s = await e.store.query({
|
|
1090
|
+
table: b,
|
|
1091
|
+
predicate: Gn(n),
|
|
1092
|
+
order: [{
|
|
1093
|
+
column: "enqueuedAt",
|
|
1094
|
+
direction: "asc"
|
|
1095
|
+
}],
|
|
1096
|
+
take: r,
|
|
1097
|
+
skip: void 0,
|
|
1098
|
+
projection: void 0
|
|
1099
|
+
});
|
|
1100
|
+
} catch (e) {
|
|
1101
|
+
return {
|
|
1102
|
+
...Un,
|
|
1103
|
+
examined: !0,
|
|
1104
|
+
failures: [{
|
|
1105
|
+
id: b,
|
|
1106
|
+
detail: $(e)
|
|
1107
|
+
}]
|
|
1108
|
+
};
|
|
1109
|
+
}
|
|
1110
|
+
if (s.length === 0) return {
|
|
1111
|
+
...Un,
|
|
1112
|
+
examined: !0
|
|
1113
|
+
};
|
|
1114
|
+
let c = [], l = 0, u = 0, d = 0, f = 0, p = 0, m = s.map((r) => async () => {
|
|
1115
|
+
let s = me(r), m = String(r.status) === "running", h = 0;
|
|
1116
|
+
try {
|
|
1117
|
+
h = await e.store.updateMany(b, {
|
|
1118
|
+
status: "running",
|
|
1119
|
+
leaseUntil: new Date(n + i),
|
|
1120
|
+
claimedBy: o,
|
|
1121
|
+
startedAt: new Date(n)
|
|
1122
|
+
}, { where: k(A("id", s.id), m ? k(A("status", "running"), N("leaseUntil", new Date(n))) : k(A("status", "pending"), P("enqueuedAt", new Date(n)))) });
|
|
1123
|
+
} catch (e) {
|
|
1124
|
+
c.push({
|
|
1125
|
+
id: s.id,
|
|
1126
|
+
detail: $(e)
|
|
1127
|
+
});
|
|
1128
|
+
return;
|
|
1129
|
+
}
|
|
1130
|
+
if (h !== 1) return;
|
|
1131
|
+
l += 1, m && (p += 1);
|
|
1132
|
+
let g = Date.now();
|
|
1133
|
+
try {
|
|
1134
|
+
let t = await qn(e, s);
|
|
1135
|
+
await e.resume({
|
|
1136
|
+
executionId: s.executionId,
|
|
1137
|
+
workflowName: s.workflowName,
|
|
1138
|
+
signalName: s.signalName,
|
|
1139
|
+
payload: t.payload
|
|
1140
|
+
}), await e.store.update(b, s.id, {
|
|
1141
|
+
status: "succeeded",
|
|
1142
|
+
result: t.payload,
|
|
1143
|
+
completedAt: /* @__PURE__ */ new Date(),
|
|
1144
|
+
durationMs: Date.now() - g,
|
|
1145
|
+
leaseUntil: null
|
|
1146
|
+
}), u += 1, e.log?.info("ai.infer: offloaded call completed", {
|
|
1147
|
+
id: s.id,
|
|
1148
|
+
model: s.model,
|
|
1149
|
+
durationMs: Date.now() - g
|
|
1150
|
+
});
|
|
1151
|
+
} catch (n) {
|
|
1152
|
+
let r = fe({
|
|
1153
|
+
attempts: s.attempts,
|
|
1154
|
+
maxAttempts: a,
|
|
1155
|
+
baseDelayMs: t.baseDelayMs ?? 1e3,
|
|
1156
|
+
maxDelayMs: t.maxDelayMs ?? 3e4,
|
|
1157
|
+
retryAfterMs: Wn(n)
|
|
1158
|
+
}), i = $(n);
|
|
1159
|
+
if (c.push({
|
|
1160
|
+
id: s.id,
|
|
1161
|
+
detail: i
|
|
1162
|
+
}), r.kind === "retry") {
|
|
1163
|
+
await e.store.update(b, s.id, {
|
|
1164
|
+
status: "pending",
|
|
1165
|
+
attempts: r.attempts,
|
|
1166
|
+
errorMessage: i,
|
|
1167
|
+
leaseUntil: null,
|
|
1168
|
+
enqueuedAt: new Date(Date.now() + r.delayMs)
|
|
1169
|
+
}).catch(() => {}), f += 1;
|
|
1170
|
+
return;
|
|
1171
|
+
}
|
|
1172
|
+
await e.resume({
|
|
1173
|
+
executionId: s.executionId,
|
|
1174
|
+
workflowName: s.workflowName,
|
|
1175
|
+
signalName: s.signalName,
|
|
1176
|
+
payload: {
|
|
1177
|
+
__voltro_ai_error: !0,
|
|
1178
|
+
message: i,
|
|
1179
|
+
attempts: r.attempts
|
|
1180
|
+
}
|
|
1181
|
+
}).catch((e) => {
|
|
1182
|
+
c.push({
|
|
1183
|
+
id: s.id,
|
|
1184
|
+
detail: `could not resume the parked run: ${$(e)}`
|
|
1185
|
+
});
|
|
1186
|
+
}), await e.store.update(b, s.id, {
|
|
1187
|
+
status: "failed",
|
|
1188
|
+
attempts: r.attempts,
|
|
1189
|
+
errorMessage: i,
|
|
1190
|
+
completedAt: /* @__PURE__ */ new Date(),
|
|
1191
|
+
leaseUntil: null
|
|
1192
|
+
}).catch(() => {}), d += 1, e.log?.warn("ai.infer: offloaded call gave up", {
|
|
1193
|
+
id: s.id,
|
|
1194
|
+
model: s.model,
|
|
1195
|
+
attempts: r.attempts,
|
|
1196
|
+
detail: i
|
|
1197
|
+
});
|
|
1198
|
+
}
|
|
1199
|
+
});
|
|
1200
|
+
return await Promise.all(m.map((e) => e())), {
|
|
1201
|
+
examined: !0,
|
|
1202
|
+
claimed: l,
|
|
1203
|
+
succeeded: u,
|
|
1204
|
+
failed: d,
|
|
1205
|
+
retried: f,
|
|
1206
|
+
reclaimed: p,
|
|
1207
|
+
failures: c
|
|
1208
|
+
};
|
|
1209
|
+
}, qn = async (e, t) => {
|
|
1210
|
+
let n = {
|
|
1211
|
+
provider: t.provider,
|
|
1212
|
+
model: t.model
|
|
1213
|
+
}, r = {
|
|
1214
|
+
prompt: t.prompt,
|
|
1215
|
+
provider: n,
|
|
1216
|
+
...t.system === null ? {} : { system: t.system },
|
|
1217
|
+
...t.maxTokens === null ? {} : { maxTokens: t.maxTokens },
|
|
1218
|
+
...t.providerOptions !== null && t.providerOptions !== void 0 ? { providerOptions: t.providerOptions } : {}
|
|
1219
|
+
};
|
|
1220
|
+
if (t.kind === "object") {
|
|
1221
|
+
if (t.jsonSchema === null) throw Error(`inference ${t.id} is kind 'object' but carries no jsonSchema`);
|
|
1222
|
+
let n = await e.run(we({
|
|
1223
|
+
...r,
|
|
1224
|
+
jsonSchema: t.jsonSchema
|
|
1225
|
+
}));
|
|
1226
|
+
return await Jn(e, t, "generateObject", n), { payload: n.object };
|
|
1227
|
+
}
|
|
1228
|
+
let i = await e.run(_e(r));
|
|
1229
|
+
return await Jn(e, t, "generateText", i), { payload: {
|
|
1230
|
+
text: i.text,
|
|
1231
|
+
inputTokens: i.usage.inputTokens ?? null,
|
|
1232
|
+
outputTokens: i.usage.outputTokens ?? null,
|
|
1233
|
+
totalTokens: i.usage.totalTokens ?? null
|
|
1234
|
+
} };
|
|
1235
|
+
}, Jn = async (e, t, n, r) => {
|
|
1236
|
+
let i = ce(r.providerMetadata);
|
|
1237
|
+
await e.run(ye(e.store, {
|
|
1238
|
+
provider: t.provider,
|
|
1239
|
+
model: t.model,
|
|
1240
|
+
operation: n,
|
|
1241
|
+
agent: t.stepName,
|
|
1242
|
+
usage: r.usage,
|
|
1243
|
+
...t.tenantId === null ? {} : { tenantId: t.tenantId },
|
|
1244
|
+
...i === void 0 ? {} : { actualCostUsd: i }
|
|
1245
|
+
})).catch(() => {});
|
|
1436
1246
|
};
|
|
1437
1247
|
//#endregion
|
|
1438
|
-
export {
|
|
1248
|
+
export { S as AGENT_MESSAGES_TABLE, C as AGENT_THREADS_TABLE, pe as AI_BUDGET_TABLE, b as AI_INFERENCES_TABLE, Ae as AI_USAGE_TABLE, je as AgentErrorCode, Me as AgentEvent, ue as AiBudgetExceeded, y as AiError, De as AiService, Nn as COPILOT_MAX_LIMIT, Rn as CopilotProposalSchema, Mn as CopilotRejected, Se as DEFAULT_INFERENCE_ATTEMPTS, Vn as DEFAULT_INFERENCE_CONCURRENCY, Te as DEFAULT_INFERENCE_LEASE_MS, Hn as DEFAULT_INFERENCE_POLL_MS, Cn as DEFAULT_JUDGE_THRESHOLD, ee as MODEL_PRICING_DEFAULTS, m as MockScript, W as STREAM_EVENTS_TABLE, G as STREAM_STATE_TABLE, Ne as SeqEvent, St as activeStreamCount, ht as agentActor, Re as agentInputSchema, Ie as agentMessageSchema, Ht as agentMessagesTable, Le as agentRouteDescriptors, Vt as agentThreadsTable, ke as aiBudgetTable, _ as aiCallAttributes, ve as aiInferencesTable, de as aiSpendUsd, ne as aiUsageTable, _t as appTools, Wt as appendMessage, qt as appendStreamingMessage, s as applyMiddleware, zn as buildCopilotSystemPrompt, le as buildSdkTools, yt as cancelStream, h as clearAiMiddleware, kt as consumeResumableStream, sn as cosineSimilarity, Ut as createThread, Rt as dataStoreResumableStreamStore, fe as decideInferenceFailure, he as defaultAiService, n as defaultSettingsMiddleware, Fe as defineAgent, Zt as defineAgentExecutor, bn as defineEval, re as defineTool, Kn as dispatchInferences, Z as embed, on as embedMany, X as embeddingProviderFromEnv, te as estimateCostUsd, Sn as evaluateAssertions, r as extractReasoningMiddleware, ce as gatewayCostUsd, zt as gcResumableStreams, ct as generateImage, v as generateObject, we as generateObjectJson, xe as generateObjectWithTools, lt as generateSpeech, _e as generateText, ft as generateVideo, d as getAiMiddleware, jn as getAvailableModels, K as getMessages, l as getProviderOverride, Gt as getThread, an as hashToVector, Kt as historyToModelMessages, Ce as inferenceSignalName, Pe as isAgentDescriptor, Qt as isAgentExecutor, xn as isEvalDefinition, bt as isStreamActive, ie as isTool, On as llmJudge, nn as loadAgentMessages, c as loggingMiddleware, Nt as memoryResumableStreamStore, be as modelPricing, Oe as observeStream, Ee as offloadedInferenceId, ge as outputJsonSchema, z as passesPolicy, Jt as patchStreamingMessage, g as priceForModel, f as providerFromEnv, ye as recordAiUsage, hn as recordReads, Bt as redisResumableStreamStore, vt as registerStream, oe as requireAiBudget, gn as rerank, en as resolveAgentModel, J as resolveEmbeddingModel, o as resolveImageModel, e as resolveModel, u as resolveSpeechModel, $t as resolveSystem, ae as resolveToolModuleHandlers, p as resolveVideoModel, jt as resumableStream, Mt as resumableStreamText, tn as runAgentTurn, Yt as runAssistant, Bn as runDataCopilot, Tn as runEval, wn as scoreCase, mn as semanticGenerateObject, pn as semanticGenerateText, a as setAiMiddleware, se as setModelPricing, t as setProviderOverride, i as simulateStreamingMiddleware, At as startResumableProducer, Pt as streamEventsTable, Ft as streamStateTable, U as streamText, Ot as streamTextWithFallback, Dt as streamTextWithRetry, gt as synthesizeToolSpecs, An as toModelInfo, me as toQueuedInference, xt as unregisterStream, Ln as validateCopilotProposal, x as withAiCallSpan };
|