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