@vibes.diy/api-svc 4.4.2 → 4.5.4

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.
Files changed (63) hide show
  1. package/app-msg-evento.js.map +1 -1
  2. package/chat-msg-evento.js.map +1 -1
  3. package/intern/prompt-assembly.d.ts +1 -0
  4. package/intern/prompt-assembly.js +11 -7
  5. package/intern/prompt-assembly.js.map +1 -1
  6. package/package.json +12 -15
  7. package/public/access-function.js +73 -15
  8. package/public/access-function.js.map +1 -1
  9. package/public/app-documents-broadcast.d.ts +36 -0
  10. package/public/app-documents-broadcast.js +99 -0
  11. package/public/app-documents-broadcast.js.map +1 -0
  12. package/public/app-documents-grant-delta.d.ts +13 -0
  13. package/public/app-documents-grant-delta.js +76 -0
  14. package/public/app-documents-grant-delta.js.map +1 -0
  15. package/public/app-documents-put-persist.d.ts +28 -0
  16. package/public/app-documents-put-persist.js +106 -0
  17. package/public/app-documents-put-persist.js.map +1 -0
  18. package/public/app-documents-read-eventos.js +10 -4
  19. package/public/app-documents-read-eventos.js.map +1 -1
  20. package/public/app-documents-write-eventos.js +71 -280
  21. package/public/app-documents-write-eventos.js.map +1 -1
  22. package/public/app-settings-icon-gen.d.ts +8 -0
  23. package/public/app-settings-icon-gen.js +29 -0
  24. package/public/app-settings-icon-gen.js.map +1 -0
  25. package/public/app-settings-secrets.d.ts +5 -0
  26. package/public/app-settings-secrets.js +92 -0
  27. package/public/app-settings-secrets.js.map +1 -0
  28. package/public/app-settings-sql-upsert.d.ts +5 -0
  29. package/public/app-settings-sql-upsert.js +139 -0
  30. package/public/app-settings-sql-upsert.js.map +1 -0
  31. package/public/app-settings-suggestion-bless.d.ts +4 -0
  32. package/public/app-settings-suggestion-bless.js +88 -0
  33. package/public/app-settings-suggestion-bless.js.map +1 -0
  34. package/public/ensure-app-settings.d.ts +5 -5
  35. package/public/ensure-app-settings.js +6 -337
  36. package/public/ensure-app-settings.js.map +1 -1
  37. package/public/fs-prompt.d.ts +16 -0
  38. package/public/fs-prompt.js +173 -0
  39. package/public/fs-prompt.js.map +1 -0
  40. package/public/image-gen.d.ts +15 -0
  41. package/public/image-gen.js +222 -0
  42. package/public/image-gen.js.map +1 -0
  43. package/public/llm-dispatch.d.ts +113 -0
  44. package/public/llm-dispatch.js +621 -0
  45. package/public/llm-dispatch.js.map +1 -0
  46. package/public/prompt-chat-section.d.ts +5 -41
  47. package/public/prompt-chat-section.js +10 -1607
  48. package/public/prompt-chat-section.js.map +1 -1
  49. package/public/provider-errors.d.ts +55 -0
  50. package/public/provider-errors.js +150 -0
  51. package/public/provider-errors.js.map +1 -0
  52. package/public/request-flow.js +4 -2
  53. package/public/request-flow.js.map +1 -1
  54. package/public/set-mode-fsid.js +2 -2
  55. package/public/set-mode-fsid.js.map +1 -1
  56. package/public/stream-assembly.d.ts +38 -0
  57. package/public/stream-assembly.js +470 -0
  58. package/public/stream-assembly.js.map +1 -0
  59. package/shared-msg-evento.js.map +1 -1
  60. package/types.js.map +1 -1
  61. package/intern/get-slug-binding.d.ts +0 -7
  62. package/intern/get-slug-binding.js +0 -34
  63. package/intern/get-slug-binding.js.map +0 -1
@@ -0,0 +1,621 @@
1
+ import { Result, Option, exception2Result, chunkyAsync } from "@adviser/cement";
2
+ import { convertImageEvtToFileRef } from "./convert-image-evt.js";
3
+ import { isPromptFSStyle, } from "@vibes.diy/api-types";
4
+ import { type } from "arktype";
5
+ import { costCentsFromUsage } from "../billing.js";
6
+ import { wrapMsgBase } from "../unwrap-msg-base.js";
7
+ import { FileSystemRef, isBlockStreamMsg, isBlockImage, } from "@vibes.diy/call-ai-v2";
8
+ import { ensureAppSlugItem } from "./ensure-app-slug-item.js";
9
+ import { getModelDefaults } from "../intern/get-model-defaults.js";
10
+ import { loadVersionTimeline } from "../intern/version-timeline.js";
11
+ import { resolveCodeBlocksToFileSystem, createBlockAccumulator } from "../intern/prompt-streaming.js";
12
+ import { persistCodegenThemeMarker } from "../intern/prompt-assembly.js";
13
+ import { stripVibesFileBlocks } from "../intern/inflate-file-attachments.js";
14
+ import { loadModels } from "./list-models.js";
15
+ import { delayForAttempt, extractEdgeError, extractProviderErrorFields, formatLlmAttemptFailures, isInvalidModelError, parseRetryAfterMs, pickDiagnosticHeaders, readFailureBody, waitMs, } from "./provider-errors.js";
16
+ const TRANSIENT_LLM_STATUSES = new Set([429, 502, 503, 504]);
17
+ const PRIMARY_RETRY_DELAY_MS = 100;
18
+ const FALLBACK_RETRY_DELAY_MS = 250;
19
+ const DISPATCH_FIRST_TOKEN_TIMEOUT_MS = 45_000;
20
+ const DISPATCH_TOTAL_BUDGET_MS = 120_000;
21
+ function envPositiveInt(vctx, key, fallback) {
22
+ const raw = vctx.sthis.env.get(key);
23
+ if (typeof raw !== "string")
24
+ return fallback;
25
+ const n = Number.parseInt(raw, 10);
26
+ return Number.isFinite(n) && n > 0 ? n : fallback;
27
+ }
28
+ function logLlmAttemptFailure(args) {
29
+ const { vctx, diag, label, model, elapsedMs, details } = args;
30
+ vctx.logger
31
+ .Warn()
32
+ .Any("event", {
33
+ chatId: diag.chatId,
34
+ promptId: diag.promptId,
35
+ phase: diag.phase,
36
+ mode: diag.mode,
37
+ label,
38
+ model,
39
+ elapsedMs,
40
+ ...details,
41
+ })
42
+ .Msg("llm-request-attempt-failed");
43
+ }
44
+ export async function findFallbackModel(vctx, mode, failedModel) {
45
+ if (mode !== "codegen" && mode !== "runtime") {
46
+ return Result.Err(`Mode ${mode} does not support LLM fallback`);
47
+ }
48
+ const rModels = await loadModels(vctx);
49
+ if (rModels.isErr()) {
50
+ vctx.logger.Warn().Err(rModels).Msg("llm-fallback-model-load-failed");
51
+ return Result.Err(`Failed to load fallback model catalog: ${String(rModels.Err())}`);
52
+ }
53
+ for (const model of rModels.Ok().models) {
54
+ if (model.id !== failedModel && Array.isArray(model.fallbackFor) && model.fallbackFor.includes(mode)) {
55
+ return Result.Ok(model.id);
56
+ }
57
+ }
58
+ return Result.Err(`No fallback model configured for ${mode} after ${failedModel}`);
59
+ }
60
+ export async function attemptLlmRequest(args) {
61
+ const { vctx, diag, llmReq, label, firstTokenTimeoutMs } = args;
62
+ const abort = new AbortController();
63
+ const startedAt = Date.now();
64
+ let timedOut = false;
65
+ const timer = setTimeout(() => {
66
+ timedOut = true;
67
+ abort.abort();
68
+ }, firstTokenTimeoutMs);
69
+ const rRes = await exception2Result(() => vctx.llmRequest(llmReq, { signal: abort.signal }));
70
+ clearTimeout(timer);
71
+ const elapsedMs = Date.now() - startedAt;
72
+ if (rRes.isErr()) {
73
+ abort.abort();
74
+ if (timedOut) {
75
+ logLlmAttemptFailure({
76
+ vctx,
77
+ diag,
78
+ label,
79
+ model: llmReq.model,
80
+ elapsedMs,
81
+ details: { kind: "timeout", retryable: true, timeoutMs: firstTokenTimeoutMs },
82
+ });
83
+ return {
84
+ ok: false,
85
+ abort,
86
+ failure: {
87
+ kind: "timeout",
88
+ label,
89
+ model: llmReq.model,
90
+ elapsedMs,
91
+ retryable: true,
92
+ },
93
+ };
94
+ }
95
+ const error = String(rRes.Err());
96
+ logLlmAttemptFailure({
97
+ vctx,
98
+ diag,
99
+ label,
100
+ model: llmReq.model,
101
+ elapsedMs,
102
+ details: { kind: "exception", retryable: false, error },
103
+ });
104
+ return {
105
+ ok: false,
106
+ abort,
107
+ failure: {
108
+ kind: "exception",
109
+ label,
110
+ model: llmReq.model,
111
+ error,
112
+ retryable: false,
113
+ },
114
+ };
115
+ }
116
+ const res = rRes.Ok();
117
+ if (res.ok && res.body !== null) {
118
+ return { ok: true, res, abort };
119
+ }
120
+ if (res.ok) {
121
+ abort.abort();
122
+ logLlmAttemptFailure({
123
+ vctx,
124
+ diag,
125
+ label,
126
+ model: llmReq.model,
127
+ elapsedMs,
128
+ details: {
129
+ kind: "missing-body",
130
+ status: res.status,
131
+ statusText: res.statusText,
132
+ retryable: false,
133
+ error: "response body missing",
134
+ },
135
+ });
136
+ return {
137
+ ok: false,
138
+ abort,
139
+ failure: {
140
+ kind: "missing-body",
141
+ label,
142
+ model: llmReq.model,
143
+ status: res.status,
144
+ statusText: res.statusText,
145
+ error: "response body missing",
146
+ retryable: false,
147
+ },
148
+ };
149
+ }
150
+ const { snippet: bodySnippet, full: bodyFull } = await readFailureBody(res);
151
+ const retryAfterMs = parseRetryAfterMs(res.headers);
152
+ abort.abort();
153
+ const retryable = TRANSIENT_LLM_STATUSES.has(res.status);
154
+ const provider = extractProviderErrorFields(bodyFull);
155
+ const invalidModel = isInvalidModelError(res.status, provider);
156
+ const edge = extractEdgeError(bodySnippet, provider.rawSnippet, res.headers);
157
+ const headers = pickDiagnosticHeaders(res.headers);
158
+ logLlmAttemptFailure({
159
+ vctx,
160
+ diag,
161
+ label,
162
+ model: llmReq.model,
163
+ elapsedMs,
164
+ details: {
165
+ kind: "http-status",
166
+ status: res.status,
167
+ statusText: res.statusText,
168
+ retryable,
169
+ ...(invalidModel ? { invalidModel } : {}),
170
+ ...(typeof retryAfterMs === "number" ? { retryAfterMs } : {}),
171
+ ...(headers ? { headers } : {}),
172
+ ...(bodySnippet.length > 0 ? { bodySnippet } : {}),
173
+ ...provider,
174
+ ...edge,
175
+ },
176
+ });
177
+ const failure = {
178
+ kind: "http-status",
179
+ label,
180
+ model: llmReq.model,
181
+ status: res.status,
182
+ statusText: res.statusText,
183
+ retryable,
184
+ ...(invalidModel ? { invalidModel } : {}),
185
+ ...(bodySnippet.length > 0 ? { bodySnippet } : {}),
186
+ ...(typeof retryAfterMs === "number" ? { retryAfterMs } : {}),
187
+ };
188
+ return {
189
+ ok: false,
190
+ abort,
191
+ failure,
192
+ };
193
+ }
194
+ export async function dispatchLlmRequestWithFallback(args) {
195
+ const attempts = [];
196
+ const diag = {
197
+ chatId: args.chatId,
198
+ promptId: args.promptId,
199
+ phase: args.phase,
200
+ mode: args.mode,
201
+ };
202
+ const firstTokenTimeoutMs = envPositiveInt(args.vctx, "DISPATCH_FIRST_TOKEN_TIMEOUT_MS", DISPATCH_FIRST_TOKEN_TIMEOUT_MS);
203
+ const totalBudgetMs = envPositiveInt(args.vctx, "DISPATCH_TOTAL_BUDGET_MS", DISPATCH_TOTAL_BUDGET_MS);
204
+ const dispatchDeadline = Date.now() + totalBudgetMs;
205
+ const budgetRemainingMs = () => Math.max(0, dispatchDeadline - Date.now());
206
+ const attemptTimeoutMs = () => Math.min(firstTokenTimeoutMs, budgetRemainingMs());
207
+ const backoffMs = (failure, defaultDelayMs) => Math.min(delayForAttempt(failure, defaultDelayMs), budgetRemainingMs());
208
+ const budgetExhausted = () => {
209
+ const abort = new AbortController();
210
+ abort.abort();
211
+ const note = `LLM dispatch exceeded ${totalBudgetMs}ms budget before a response`;
212
+ const error = attempts.length > 0 ? `${formatLlmAttemptFailures(attempts)}; ${note}` : note;
213
+ args.vctx.logger
214
+ .Warn()
215
+ .Any("event", { chatId: args.chatId, promptId: args.promptId, phase: args.phase, mode: args.mode, attempts: attempts.length })
216
+ .Msg("llm-dispatch-budget-exhausted");
217
+ return { ok: false, llmReq: args.llmReq, abort, attempts, error };
218
+ };
219
+ let lastPrimary;
220
+ for (const label of ["primary", "primary-retry"]) {
221
+ if (lastPrimary) {
222
+ await waitMs(backoffMs(lastPrimary.failure, PRIMARY_RETRY_DELAY_MS));
223
+ }
224
+ if (Date.now() >= dispatchDeadline)
225
+ return budgetExhausted();
226
+ const attempt = await attemptLlmRequest({
227
+ vctx: args.vctx,
228
+ diag,
229
+ llmReq: args.llmReq,
230
+ label,
231
+ firstTokenTimeoutMs: attemptTimeoutMs(),
232
+ });
233
+ if (attempt.ok)
234
+ return { ok: true, res: attempt.res, llmReq: args.llmReq, abort: attempt.abort, attempts };
235
+ attempts.push(attempt.failure);
236
+ if (attempt.failure.retryable === false) {
237
+ if (attempt.failure.kind === "http-status" && attempt.failure.invalidModel === true) {
238
+ lastPrimary = attempt;
239
+ break;
240
+ }
241
+ return { ok: false, llmReq: args.llmReq, abort: attempt.abort, attempts, error: formatLlmAttemptFailures(attempts) };
242
+ }
243
+ lastPrimary = attempt;
244
+ }
245
+ const failedPrimary = lastPrimary;
246
+ const rFallbackModel = await findFallbackModel(args.vctx, args.mode, args.llmReq.model);
247
+ if (rFallbackModel.isErr()) {
248
+ const error = `${formatLlmAttemptFailures(attempts)}; ${String(rFallbackModel.Err())}`;
249
+ return { ok: false, llmReq: args.llmReq, abort: failedPrimary.abort, attempts, error };
250
+ }
251
+ const fallbackModel = rFallbackModel.Ok();
252
+ const fallbackReq = { ...args.llmReq, model: fallbackModel };
253
+ await waitMs(backoffMs(failedPrimary.failure, FALLBACK_RETRY_DELAY_MS));
254
+ if (Date.now() >= dispatchDeadline)
255
+ return budgetExhausted();
256
+ const fallback = await attemptLlmRequest({
257
+ vctx: args.vctx,
258
+ diag,
259
+ llmReq: fallbackReq,
260
+ label: "fallback",
261
+ firstTokenTimeoutMs: attemptTimeoutMs(),
262
+ });
263
+ if (fallback.ok) {
264
+ args.vctx.logger
265
+ .Info()
266
+ .Any("event", {
267
+ mode: args.mode,
268
+ fromModel: args.llmReq.model,
269
+ toModel: fallbackModel,
270
+ })
271
+ .Msg("llm-fallback-succeeded");
272
+ return { ok: true, res: fallback.res, llmReq: fallbackReq, abort: fallback.abort, attempts };
273
+ }
274
+ attempts.push(fallback.failure);
275
+ return { ok: false, llmReq: fallbackReq, abort: fallback.abort, attempts, error: formatLlmAttemptFailures(attempts) };
276
+ }
277
+ export async function appendBlockEvent({ ctx, vctx, req, promptId, blockSeq, evt, emitMode = "store", resChat, }) {
278
+ let processedEvt = evt;
279
+ if (isBlockImage(evt) && evt.url && resChat) {
280
+ const rConv = await convertImageEvtToFileRef(vctx, {
281
+ evt,
282
+ userId: req._auth.verifiedAuth.claims.userId,
283
+ ownerHandle: resChat.ownerHandle,
284
+ appSlug: resChat.appSlug,
285
+ });
286
+ if (rConv.isOk()) {
287
+ processedEvt = rConv.Ok();
288
+ }
289
+ else {
290
+ vctx.logger.Error().Err(rConv).Msg("[block.image] convert failed");
291
+ }
292
+ }
293
+ const now = new Date();
294
+ const msgBase = wrapMsgBase(ctx.validated, {
295
+ payload: {
296
+ type: "vibes.diy.section-event",
297
+ chatId: req.chatId,
298
+ promptId,
299
+ blockSeq,
300
+ blocks: [processedEvt],
301
+ timestamp: now,
302
+ },
303
+ tid: req.outerTid,
304
+ src: "promptChatSection",
305
+ });
306
+ if (emitMode !== "store-only") {
307
+ for (const conn of vctx.connections) {
308
+ const chatCtx = conn.chatIds.get(req.chatId);
309
+ if (chatCtx) {
310
+ for (const tid of chatCtx.tids) {
311
+ await conn.send(ctx, { ...msgBase, tid });
312
+ }
313
+ }
314
+ }
315
+ }
316
+ if (emitMode === "store" || emitMode === "store-only") {
317
+ const rUpdate = await exception2Result(() => vctx.sql.db.insert(vctx.sql.tables.chatSections).values({
318
+ chatId: req.chatId,
319
+ promptId,
320
+ blockSeq,
321
+ blocks: [processedEvt],
322
+ created: now.toISOString(),
323
+ }));
324
+ if (rUpdate.isErr()) {
325
+ return Result.Err(rUpdate);
326
+ }
327
+ }
328
+ return Result.Ok();
329
+ }
330
+ export async function handlePromptContext({ vctx, req, resChat, promptId, blockSeq, value, collectedMsgs: iCollectedMsgs, blockChunks = 100, fileSystem, model, codegenTheme, onFsRef, }) {
331
+ let fsRef = Option.None();
332
+ const code = [];
333
+ const sections = [];
334
+ const collectedMsgs = [...iCollectedMsgs];
335
+ const blockAcc = createBlockAccumulator();
336
+ for (const msg of collectedMsgs) {
337
+ if (!isBlockStreamMsg(msg)) {
338
+ continue;
339
+ }
340
+ let sqlVal = sections[sections.length - 1];
341
+ if (sections.length === 0 || sqlVal.blocks.length >= blockChunks) {
342
+ sections.push({
343
+ chatId: req.chatId,
344
+ promptId,
345
+ blockSeq: blockSeq++,
346
+ blocks: [],
347
+ created: msg.timestamp.toISOString(),
348
+ });
349
+ sqlVal = sections[sections.length - 1];
350
+ }
351
+ sqlVal.blocks.push(msg);
352
+ const closed = blockAcc.ingest(msg);
353
+ if (closed)
354
+ code.push({ begin: closed.begin, lines: [...closed.lines], end: closed.end });
355
+ }
356
+ if (code.length > 0 && (resChat.mode === "codegen" || isPromptFSStyle(resChat.mode))) {
357
+ let resolvedFileSystem;
358
+ if (fileSystem) {
359
+ resolvedFileSystem = fileSystem;
360
+ }
361
+ else {
362
+ const timelineResult = await loadVersionTimeline(vctx, req.chatId);
363
+ if (timelineResult.isErr())
364
+ return Result.Err(timelineResult);
365
+ const timeline = timelineResult.Ok();
366
+ const seed = timeline.length > 0 ? timeline[timeline.length - 1].vfs : new Map();
367
+ resolvedFileSystem = resolveCodeBlocksToFileSystem(code, seed);
368
+ }
369
+ const rFs = await ensureAppSlugItem(vctx, {
370
+ type: "vibes.diy.req-ensure-app-slug",
371
+ mode: "dev",
372
+ runId: promptId,
373
+ appSlug: resChat.appSlug,
374
+ ownerHandle: resChat.ownerHandle,
375
+ fileSystem: resolvedFileSystem,
376
+ auth: req.auth,
377
+ _auth: req._auth,
378
+ });
379
+ if (rFs.isErr()) {
380
+ console.error("Failed to ensure app slug item for code blocks:", rFs.Err());
381
+ return Result.Err(rFs);
382
+ }
383
+ const tFsRef = type(FileSystemRef).onDeepUndeclaredKey("delete")(rFs.Ok());
384
+ if (tFsRef instanceof type.errors) {
385
+ return Result.Err(`Failed to parse FileSystemRef: ${tFsRef.summary}`);
386
+ }
387
+ fsRef = Option.Some(tFsRef);
388
+ if (onFsRef) {
389
+ const rReveal = await exception2Result(() => onFsRef(tFsRef));
390
+ if (rReveal.isErr()) {
391
+ vctx.logger.Warn().Err(rReveal).Str("promptId", promptId).Msg("reveal-emit-failed");
392
+ }
393
+ }
394
+ }
395
+ value.fsRef = fsRef.toValue();
396
+ const rSql = await exception2Result(() => vctx.sql.db.insert(vctx.sql.tables.promptContexts).values({
397
+ userId: req._auth.verifiedAuth.claims.userId,
398
+ chatId: req.chatId,
399
+ promptId,
400
+ fsId: fsRef.IsSome() ? fsRef.unwrap().fsId : undefined,
401
+ nethash: vctx.netHash(),
402
+ promptTokens: value.usage.calculated.prompt_tokens,
403
+ completionTokens: value.usage.calculated.completion_tokens,
404
+ totalTokens: value.usage.calculated.total_tokens,
405
+ ref: {
406
+ type: "prompt.usage.sql",
407
+ usage: value.usage,
408
+ fsRef: fsRef.toValue(),
409
+ ...(model !== undefined && model !== "" ? { model } : {}),
410
+ },
411
+ created: new Date().toISOString(),
412
+ }));
413
+ if (rSql.isErr()) {
414
+ return Result.Err(rSql);
415
+ }
416
+ const costCents = costCentsFromUsage(value.usage);
417
+ const billingP = (async () => {
418
+ if (costCents <= 0)
419
+ return;
420
+ const rTrack = await vctx.billing.trackUsage({
421
+ userId: req._auth.verifiedAuth.claims.userId,
422
+ costCents,
423
+ promptId,
424
+ ...(model !== undefined && model !== "" ? { model } : {}),
425
+ mode: resChat.mode,
426
+ });
427
+ if (rTrack.isErr()) {
428
+ vctx.logger.Warn().Err(rTrack).Str("promptId", promptId).Msg("billing-track-failed");
429
+ }
430
+ })();
431
+ const markerP = (async () => {
432
+ if (!(resChat.mode === "codegen" && fsRef.IsSome()))
433
+ return;
434
+ const rMark = await exception2Result(() => persistCodegenThemeMarker(vctx, {
435
+ userId: req._auth.verifiedAuth.claims.userId,
436
+ ownerHandle: resChat.ownerHandle,
437
+ appSlug: resChat.appSlug,
438
+ theme: codegenTheme,
439
+ }));
440
+ if (rMark.isErr()) {
441
+ vctx.logger.Warn().Err(rMark).Str("chatId", req.chatId).Msg("persistCodegenThemeMarker failed");
442
+ }
443
+ })();
444
+ await Promise.all([
445
+ billingP,
446
+ markerP,
447
+ chunkyAsync({
448
+ input: sections,
449
+ splitCondition: (secChunk) => secChunk.length >= 20,
450
+ commit: async (secChunk) => {
451
+ await exception2Result(() => vctx.sql.db.insert(vctx.sql.tables.chatSections).values(secChunk));
452
+ },
453
+ }),
454
+ ]);
455
+ iCollectedMsgs.splice(0, collectedMsgs.length);
456
+ return Result.Ok({ blockSeq, fsRef });
457
+ }
458
+ export async function handlerLlmRequest({ scope, ctx, vctx, blockSeq, req, resChat, promptId, preAssembled, }) {
459
+ const modelId = await scope
460
+ .evalResult(async () => {
461
+ const r = await getModelDefaults(vctx, { appSlug: resChat.appSlug, ownerHandle: resChat.ownerHandle });
462
+ if (r.isErr()) {
463
+ return Result.Err(r);
464
+ }
465
+ switch (req.mode) {
466
+ case "codegen":
467
+ return Result.Ok(req.prompt.model ?? r.Ok().codegen.model.id);
468
+ case "runtime":
469
+ return Result.Ok(req.prompt.model ?? r.Ok().runtime.model.id);
470
+ case "img":
471
+ return Result.Ok(req.prompt.model ?? r.Ok().img.model.id);
472
+ default:
473
+ return Result.Err(`Unknown prompt mode: ${req.mode}`);
474
+ }
475
+ })
476
+ .do();
477
+ const withSystemPrompt = await scope
478
+ .evalResult(async () => {
479
+ let withSystemPrompt = Result.Ok({
480
+ model: modelId,
481
+ messages: [],
482
+ });
483
+ if (preAssembled !== undefined) {
484
+ withSystemPrompt = Result.Ok(preAssembled);
485
+ }
486
+ else if (req.mode === "runtime" || req.mode === "img") {
487
+ let messages = stripVibesFileBlocks(req.prompt.messages);
488
+ if (req.mode === "img") {
489
+ const imgReq = req;
490
+ if (imgReq.inputImageBase64) {
491
+ const lastUserIdx = (() => {
492
+ for (let i = messages.length - 1; i >= 0; i--) {
493
+ if (messages[i].role === "user")
494
+ return i;
495
+ }
496
+ return -1;
497
+ })();
498
+ if (lastUserIdx >= 0) {
499
+ const target = messages[lastUserIdx];
500
+ messages = [
501
+ ...messages.slice(0, lastUserIdx),
502
+ {
503
+ ...target,
504
+ content: [...target.content, { type: "image_url", image_url: { url: imgReq.inputImageBase64 } }],
505
+ },
506
+ ...messages.slice(lastUserIdx + 1),
507
+ ];
508
+ }
509
+ }
510
+ }
511
+ withSystemPrompt = Result.Ok({
512
+ model: req.prompt.model ?? modelId,
513
+ messages,
514
+ });
515
+ }
516
+ return withSystemPrompt;
517
+ })
518
+ .do();
519
+ const isInitialTurn = withSystemPrompt.messages.filter((m) => m.role === "user").length <= 1;
520
+ const llmReq = {
521
+ ...{
522
+ ...req.prompt,
523
+ messages: withSystemPrompt.messages,
524
+ },
525
+ ...vctx.params.llm.enforced,
526
+ model: withSystemPrompt.model,
527
+ headers: vctx.params.llm.headers,
528
+ stream: true,
529
+ ...(isInitialTurn && req.mode === "codegen" ? { verbosity: "low" } : {}),
530
+ ...(req.mode === "img" ? { modalities: ["text", "image"] } : {}),
531
+ };
532
+ await scope
533
+ .evalResult(async () => {
534
+ const r = await appendBlockEvent({
535
+ ctx,
536
+ vctx,
537
+ req,
538
+ promptId,
539
+ blockSeq: blockSeq,
540
+ evt: {
541
+ type: "prompt.req",
542
+ streamId: promptId,
543
+ chatId: req.chatId,
544
+ seq: blockSeq,
545
+ request: { ...req.prompt, model: modelId },
546
+ timestamp: new Date(),
547
+ },
548
+ });
549
+ blockSeq++;
550
+ return r;
551
+ })
552
+ .do();
553
+ if (vctx.billing.enforceEnabled) {
554
+ await scope
555
+ .evalResult(async () => {
556
+ const rCheck = await vctx.billing.checkCredits({ userId: req._auth.verifiedAuth.claims.userId });
557
+ if (rCheck.isErr()) {
558
+ vctx.logger.Warn().Err(rCheck).Str("chatId", req.chatId).Msg("billing-check-failed-open");
559
+ return Result.Ok(undefined);
560
+ }
561
+ if (rCheck.Ok().allowed === false) {
562
+ return Result.Err("credits-exhausted: you have used your included AI credits — upgrade to continue");
563
+ }
564
+ return Result.Ok(undefined);
565
+ })
566
+ .do();
567
+ }
568
+ const dispatchStartedAt = Date.now();
569
+ vctx.logger.Info().Any("event", { chatId: req.chatId, promptId, mode: req.mode, model: modelId }).Msg("llm-dispatch-start");
570
+ const dispatch = await dispatchLlmRequestWithFallback({
571
+ vctx,
572
+ mode: req.mode,
573
+ llmReq,
574
+ chatId: req.chatId,
575
+ promptId,
576
+ phase: "initial",
577
+ });
578
+ vctx.logger
579
+ .Info()
580
+ .Any("event", {
581
+ chatId: req.chatId,
582
+ promptId,
583
+ mode: req.mode,
584
+ ok: dispatch.ok,
585
+ model: dispatch.llmReq.model,
586
+ attempts: dispatch.attempts.length,
587
+ elapsedMs: Date.now() - dispatchStartedAt,
588
+ })
589
+ .Msg("llm-dispatch-settled");
590
+ const res = await scope
591
+ .evalResult(async () => {
592
+ return dispatch.ok ? Result.Ok(dispatch.res) : Result.Err(dispatch.error);
593
+ })
594
+ .do();
595
+ const finalModel = dispatch.llmReq.model;
596
+ if (dispatch.ok && finalModel !== undefined && finalModel !== modelId) {
597
+ await scope
598
+ .evalResult(async () => {
599
+ const r = await appendBlockEvent({
600
+ ctx,
601
+ vctx,
602
+ req,
603
+ promptId,
604
+ blockSeq,
605
+ evt: {
606
+ type: "prompt.model-resolved",
607
+ streamId: promptId,
608
+ chatId: req.chatId,
609
+ seq: blockSeq,
610
+ model: finalModel,
611
+ timestamp: new Date(),
612
+ },
613
+ });
614
+ blockSeq++;
615
+ return r;
616
+ })
617
+ .do();
618
+ }
619
+ return { res, blockSeq, llmReq: dispatch.llmReq, abort: dispatch.abort };
620
+ }
621
+ //# sourceMappingURL=llm-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-dispatch.js","sourceRoot":"","sources":["../../jsr/public/llm-dispatch.ts"],"names":[],"mappings":"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"}