@burdenoff/fe-libs 2026.904.3 → 2026.904.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.
- package/dist/shared/assistant/attachments.d.ts +340 -0
- package/dist/shared/assistant/attachments.d.ts.map +1 -0
- package/dist/shared/assistant/attachments.js +370 -0
- package/dist/shared/assistant/conversation.d.ts +153 -0
- package/dist/shared/assistant/conversation.d.ts.map +1 -0
- package/dist/shared/assistant/documentText.d.ts +261 -0
- package/dist/shared/assistant/documentText.d.ts.map +1 -0
- package/dist/shared/assistant/documentText.js +235 -0
- package/dist/shared/assistant/gatewayLimits.d.ts +25 -0
- package/dist/shared/assistant/gatewayLimits.d.ts.map +1 -0
- package/dist/shared/assistant/gatewayLimits.js +4 -0
- package/dist/shared/assistant/index.d.ts +6 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/store.d.ts +114 -0
- package/dist/shared/assistant/store.d.ts.map +1 -0
- package/dist/shared/assistant/store.js +198 -0
- package/dist/shared/assistant/turnState.d.ts +16 -0
- package/dist/shared/assistant/turnState.d.ts.map +1 -0
- package/dist/shared/assistant/turnState.js +6 -0
- package/dist/shared-assistant.js +6 -1
- package/package.json +1 -1
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { DocumentExtraction, DocumentFormat } from './documentText';
|
|
2
|
+
import { AssistantPromptPart } from './types';
|
|
3
|
+
export declare const MAX_ATTACHMENTS = 5;
|
|
4
|
+
/** Per-file ceiling before downscaling (images) / rejection (everything else). */
|
|
5
|
+
export declare const MAX_FILE_BYTES: number;
|
|
6
|
+
/** Per-file inline budget for text-like content, in characters. */
|
|
7
|
+
export declare const MAX_INLINE_CHARS_PER_FILE = 8000;
|
|
8
|
+
/** Total inline budget across all attachments in one turn. */
|
|
9
|
+
export declare const MAX_INLINE_CHARS_TOTAL = 20000;
|
|
10
|
+
export type AssistantAttachmentKind = "image" | "text" | "document";
|
|
11
|
+
export type AssistantAttachmentStatus = "pending" | "uploading" | "ready" | "error";
|
|
12
|
+
export type AttachmentRejection = "too-many" | "too-large" | "empty" | "unreadable" | "unsupported-image";
|
|
13
|
+
/**
|
|
14
|
+
* Thrown while PREPARING a file (after it passed `validateFile`) to reject it
|
|
15
|
+
* with a specific reason rather than the generic 'unreadable'.
|
|
16
|
+
*
|
|
17
|
+
* `validateFile` runs before the bytes have been touched, so it cannot know
|
|
18
|
+
* whether an oversized image will actually survive the downscale — that verdict
|
|
19
|
+
* only exists once the browser has tried to rasterise it.
|
|
20
|
+
*/
|
|
21
|
+
export declare class AttachmentRejectedError extends Error {
|
|
22
|
+
readonly reason: AttachmentRejection;
|
|
23
|
+
constructor(reason: AttachmentRejection);
|
|
24
|
+
}
|
|
25
|
+
export interface AssistantAttachment {
|
|
26
|
+
/** Client-side id; stable for the lifetime of the draft + the sent message. */
|
|
27
|
+
id: string;
|
|
28
|
+
filename: string;
|
|
29
|
+
mimeType: string;
|
|
30
|
+
/** Size of the bytes we actually kept (post-downscale for images). */
|
|
31
|
+
size: number;
|
|
32
|
+
kind: AssistantAttachmentKind;
|
|
33
|
+
status: AssistantAttachmentStatus;
|
|
34
|
+
/** Object/data URL for the composer thumbnail. Images only; never persisted. */
|
|
35
|
+
previewUrl?: string;
|
|
36
|
+
/**
|
|
37
|
+
* A smaller `data:` URL of the same image, sized for the request body rather
|
|
38
|
+
* than for the eye. Preferred over `previewUrl` when building the multimodal
|
|
39
|
+
* parts; see `MAX_TURN_BODY_BYTES`. Images only; never persisted.
|
|
40
|
+
*/
|
|
41
|
+
inlineDataUrl?: string;
|
|
42
|
+
/** wspace-files-svc id, once the upload lands. */
|
|
43
|
+
fileId?: string;
|
|
44
|
+
/** Short-lived presigned URL, resolved at send time. */
|
|
45
|
+
downloadUrl?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Inlined content for this attachment, already truncated to
|
|
48
|
+
* `MAX_INLINE_CHARS_PER_FILE`. Text files carry the file itself; PDF/DOCX/XLSX
|
|
49
|
+
* carry whatever `extractDocumentText` pulled out of them (BOFF-6291).
|
|
50
|
+
*/
|
|
51
|
+
textContent?: string;
|
|
52
|
+
/** True when `textContent` is a prefix of a longer file. */
|
|
53
|
+
textTruncated?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Outcome of the client-side document extraction. Present on every `document`
|
|
56
|
+
* we ATTEMPTED to read — including the failures, which is the point: a scanned
|
|
57
|
+
* or encrypted PDF has to reach the model as a sentence rather than as
|
|
58
|
+
* nothing. Absent means no extractor exists for the type.
|
|
59
|
+
*/
|
|
60
|
+
extraction?: DocumentExtraction;
|
|
61
|
+
/**
|
|
62
|
+
* Per-page text for a PDF, kept so the SHARED inline budget can also cut on a
|
|
63
|
+
* page boundary rather than mid-sentence. Already trimmed to the per-file
|
|
64
|
+
* budget at prepare time, so this never holds a whole 50-page document.
|
|
65
|
+
* Draft-only; `toMessageAttachment` never carries it to storage.
|
|
66
|
+
*/
|
|
67
|
+
documentPages?: string[];
|
|
68
|
+
/** Human-readable failure reason when `status === 'error'`. */
|
|
69
|
+
error?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Why an upload that is still `uploading` is taking so long — e.g. "File service
|
|
72
|
+
* is starting up — retry 2 of 3".
|
|
73
|
+
*
|
|
74
|
+
* wspace-files-svc runs at minReplicas 0 and needs >=51s to bind its port against
|
|
75
|
+
* the gateway's 15s budget, so the first attachment after a quiet period
|
|
76
|
+
* legitimately sits for about a minute while fe-libs walks its retry ladder. A
|
|
77
|
+
* spinner alone reads as a hang. Draft-only, and NEVER a failure: `status` is still
|
|
78
|
+
* `uploading` and `error` is still unset.
|
|
79
|
+
*/
|
|
80
|
+
progressNote?: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The slice of an attachment that is safe to keep on a sent message.
|
|
84
|
+
*
|
|
85
|
+
* Conversations are persisted to (profile-scoped) localStorage by the assistant
|
|
86
|
+
* store, so the heavy fields — the base64 `previewUrl` and the inlined
|
|
87
|
+
* `textContent` — MUST NOT travel here: five 1280px JPEG data URLs would exhaust
|
|
88
|
+
* the ~5 MB quota on their own and take the whole conversation history down with
|
|
89
|
+
* them. The bubble re-resolves a thumbnail from `fileId` on demand instead, the
|
|
90
|
+
* same way the pest-scan list does.
|
|
91
|
+
*/
|
|
92
|
+
export interface AssistantMessageAttachment {
|
|
93
|
+
id: string;
|
|
94
|
+
filename: string;
|
|
95
|
+
mimeType: string;
|
|
96
|
+
size: number;
|
|
97
|
+
kind: AssistantAttachmentKind;
|
|
98
|
+
fileId?: string;
|
|
99
|
+
}
|
|
100
|
+
export declare function toMessageAttachment(attachment: AssistantAttachment): AssistantMessageAttachment;
|
|
101
|
+
export declare function getExtension(filename: string): string;
|
|
102
|
+
export declare function classifyAttachment(mimeType: string, filename: string): AssistantAttachmentKind;
|
|
103
|
+
/**
|
|
104
|
+
* Document formats we can turn into text in the browser (BOFF-6291).
|
|
105
|
+
*
|
|
106
|
+
* Anything else stays a `document` with no extraction, and the prompt block
|
|
107
|
+
* says so — the honest fallback that used to be the ONLY behaviour.
|
|
108
|
+
*/
|
|
109
|
+
export type { DocumentFormat } from './documentText';
|
|
110
|
+
/**
|
|
111
|
+
* Which extractor (if any) can read this file.
|
|
112
|
+
*
|
|
113
|
+
* MIME first, extension second — same order as `classifyAttachment`, and for
|
|
114
|
+
* the same reason: Windows reports `application/octet-stream` for plenty of
|
|
115
|
+
* files whose extension is perfectly informative.
|
|
116
|
+
*/
|
|
117
|
+
export declare function detectDocumentFormat(mimeType: string, filename: string): DocumentFormat | null;
|
|
118
|
+
/**
|
|
119
|
+
* The composer's `<input accept>` — DERIVED from what we can actually read.
|
|
120
|
+
*
|
|
121
|
+
* It used to be a hand-written list (`…,.pdf,.csv,.json,.md,.txt,.xlsx,.docx`)
|
|
122
|
+
* that invited exactly the files the model could not see: a farmer picked a
|
|
123
|
+
* soil-test PDF because the picker offered it, and the assistant then asked
|
|
124
|
+
* them to paste it as text. Building the list from `TEXT_EXTENSIONS` and
|
|
125
|
+
* `DOCUMENT_EXTENSIONS` makes that class of mismatch a compile-time
|
|
126
|
+
* impossibility rather than a thing to remember.
|
|
127
|
+
*/
|
|
128
|
+
export declare const ATTACHMENT_ACCEPT: string;
|
|
129
|
+
export declare function formatBytes(bytes: number): string;
|
|
130
|
+
/**
|
|
131
|
+
* Is there attachment work in flight that must block sending?
|
|
132
|
+
*
|
|
133
|
+
* `preparingCount` counts files the user has ALREADY dropped/picked but whose
|
|
134
|
+
* image-downscale or text-read has not resolved yet. Those files have no id and
|
|
135
|
+
* no row in `attachments`, so a check that looked only at `attachments` reported
|
|
136
|
+
* "idle" during the whole preparation window — the composer stayed sendable, the
|
|
137
|
+
* turn went out without the photo, and the photo then attached itself to the
|
|
138
|
+
* user's NEXT message. Both halves must be counted.
|
|
139
|
+
*/
|
|
140
|
+
export declare function hasAttachmentWorkInFlight(preparingCount: number, attachments: AssistantAttachment[]): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* The attachments a send would ACTUALLY carry to the model.
|
|
143
|
+
*
|
|
144
|
+
* This is the single definition of "sendable" — `buildAttachmentPromptBlock`,
|
|
145
|
+
* `buildPromptParts`, `countInlineImageCandidates` and the composer's send
|
|
146
|
+
* handler all route through it, so the set the user is shown and the set the
|
|
147
|
+
* model receives cannot drift apart by one of them being updated and the others
|
|
148
|
+
* not.
|
|
149
|
+
*
|
|
150
|
+
* `status` is the whole test, and that is deliberate rather than lazy: an
|
|
151
|
+
* attachment whose content is already inlined does not need its upload to have
|
|
152
|
+
* worked, so `useAssistantAttachments` marks a text file — and, since
|
|
153
|
+
* BOFF-6291, a document whose text WAS extracted — `ready` even when the upload
|
|
154
|
+
* failed. Such a file is sendable and does not block: its contents travel in
|
|
155
|
+
* the prompt block, and all it lost is the URL. Only attachments with nothing
|
|
156
|
+
* left to send (an image, or a document that could not be read) reach 'error',
|
|
157
|
+
* and those are exactly the ones worth stopping a turn for.
|
|
158
|
+
*/
|
|
159
|
+
export declare function getSendableAttachments(attachments: AssistantAttachment[]): AssistantAttachment[];
|
|
160
|
+
/** Why a draft cannot be sent yet, as far as its attachments are concerned. */
|
|
161
|
+
export type AttachmentSendBlocker = "in-flight" | "failed";
|
|
162
|
+
/**
|
|
163
|
+
* Whether the attachments block sending, and why — `null` when they do not.
|
|
164
|
+
*
|
|
165
|
+
* Two distinct reasons, deliberately not collapsed into one boolean:
|
|
166
|
+
*
|
|
167
|
+
* - `'in-flight'` is momentary and resolves itself; the composer shows a
|
|
168
|
+
* spinner and the user just waits.
|
|
169
|
+
* - `'failed'` never resolves on its own. It is the case this function was
|
|
170
|
+
* added for: a failed attachment is omitted from the outgoing turn by
|
|
171
|
+
* `getSendableAttachments`, but send used to stay enabled as long as there
|
|
172
|
+
* was message text, and `clear()` then wiped the failed chip along with the
|
|
173
|
+
* draft. So the user watched their photo's chip vanish into a sent message
|
|
174
|
+
* that never contained it, and the assistant answered a question about an
|
|
175
|
+
* image it was never given. Blocking is the honest response: the chip offers
|
|
176
|
+
* both retry and remove, so the user picks whether the file matters, and
|
|
177
|
+
* whichever they pick the UI and the model end up agreeing.
|
|
178
|
+
*
|
|
179
|
+
* In-flight is reported first: while an upload is still running the failure is
|
|
180
|
+
* not yet final, and "wait" is better advice than "retry or remove".
|
|
181
|
+
*
|
|
182
|
+
* Nothing here needs to special-case text files or extracted documents: they
|
|
183
|
+
* never reach 'error' in the first place (see `getSendableAttachments`), so a
|
|
184
|
+
* soil-test PDF the browser read but the file library refused still sends, with
|
|
185
|
+
* its text, and never blocks.
|
|
186
|
+
*/
|
|
187
|
+
export declare function getAttachmentSendBlocker(preparingCount: number, attachments: AssistantAttachment[]): AttachmentSendBlocker | null;
|
|
188
|
+
/**
|
|
189
|
+
* Gate a candidate file. Images over the ceiling are still accepted — the
|
|
190
|
+
* composer downscales them before upload, so a 12 MB phone photo is fine while
|
|
191
|
+
* a 12 MB PDF is not.
|
|
192
|
+
*
|
|
193
|
+
* That exemption is a PROMISE, not a fact: it holds only if the browser can
|
|
194
|
+
* actually rasterise the image. When it cannot (HEIC), `prepareFile` re-applies
|
|
195
|
+
* this ceiling to the original bytes and rejects there instead.
|
|
196
|
+
*/
|
|
197
|
+
export declare function validateFile(file: File, currentCount: number): AttachmentRejection | null;
|
|
198
|
+
/**
|
|
199
|
+
* Truncate on a line boundary where possible, so an inlined CSV/JSON prefix ends
|
|
200
|
+
* at a row rather than mid-token (which reads as corrupt data to the model).
|
|
201
|
+
*/
|
|
202
|
+
export declare function truncateForInline(content: string, limit: number): {
|
|
203
|
+
text: string;
|
|
204
|
+
truncated: boolean;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* What the modelled body genuinely misses: `buildPromptForMode` prepends its
|
|
208
|
+
* preambles AFTER this block is built, and `parts[0]` duplicates the whole
|
|
209
|
+
* prompt, so each is charged twice.
|
|
210
|
+
*
|
|
211
|
+
* api-calls preamble ~493 bytes x2 = ~986
|
|
212
|
+
* language directive ~290 bytes x2 = ~580 (BOFF-7107)
|
|
213
|
+
* total ~1,566
|
|
214
|
+
*
|
|
215
|
+
* The old 1,024 covered only the api-calls preamble, so adding the language
|
|
216
|
+
* directive could push a turn that `fitInlineBudget` promised would keep its
|
|
217
|
+
* pixels over the cap — and `buildPromptParts` would then demote the very image
|
|
218
|
+
* the question was about.
|
|
219
|
+
*
|
|
220
|
+
* The GraphQL document and page context remain covered many times over by
|
|
221
|
+
* `TURN_BODY_HEADROOM_BYTES`. Still deliberately tight: every byte here is a
|
|
222
|
+
* byte of document text a farmer does not get.
|
|
223
|
+
*/
|
|
224
|
+
export declare const PROMPT_ENVELOPE_RESERVE_BYTES = 2048;
|
|
225
|
+
/**
|
|
226
|
+
* Render the attachment block appended to the outgoing prompt. Returns '' when
|
|
227
|
+
* there is nothing to say, so callers can concatenate unconditionally.
|
|
228
|
+
*
|
|
229
|
+
* `userText` is the user's own message — the rest of the prompt this block will
|
|
230
|
+
* be concatenated with. It is optional only so existing callers and tests keep
|
|
231
|
+
* compiling; passing it is what lets the budget be measured against the real
|
|
232
|
+
* turn rather than against the block alone.
|
|
233
|
+
*
|
|
234
|
+
* Attachments that failed to upload are omitted: the user already sees the
|
|
235
|
+
* failure in the composer, and a half-described file only confuses the model.
|
|
236
|
+
*/
|
|
237
|
+
export declare function buildAttachmentPromptBlock(attachments: AssistantAttachment[], userText?: string): string;
|
|
238
|
+
/**
|
|
239
|
+
* Compose the text actually sent to the agent: the user's words, then the
|
|
240
|
+
* attachment block. The user-facing bubble keeps the raw text (attachments are
|
|
241
|
+
* rendered as chips there), matching how `buildPromptForMode` already separates
|
|
242
|
+
* agent-only preamble from displayed content.
|
|
243
|
+
*/
|
|
244
|
+
export declare function buildPromptWithAttachments(content: string, attachments: AssistantAttachment[]): string;
|
|
245
|
+
export type { AssistantPromptPart };
|
|
246
|
+
/**
|
|
247
|
+
* How many images may travel INLINE in one turn.
|
|
248
|
+
*
|
|
249
|
+
* Inline bytes are what make vision work without the sandbox needing egress to
|
|
250
|
+
* our storage. Images beyond the budget still travel, by URL only, and the
|
|
251
|
+
* prompt block still describes them.
|
|
252
|
+
*/
|
|
253
|
+
export declare const MAX_INLINE_IMAGE_PARTS = 3;
|
|
254
|
+
/**
|
|
255
|
+
* Belt-and-braces per-turn ceiling on base64 characters.
|
|
256
|
+
*
|
|
257
|
+
* Kept as a cheap guard against a pathological single image, but it is NO
|
|
258
|
+
* LONGER the operative limit — `MAX_TURN_BODY_BYTES` is. See below for why the
|
|
259
|
+
* previous 1.5M-character budget was a fiction.
|
|
260
|
+
*/
|
|
261
|
+
export declare const MAX_INLINE_IMAGE_BASE64_CHARS = 1500000;
|
|
262
|
+
/**
|
|
263
|
+
* The real ceiling: what the gateway will accept as a request body.
|
|
264
|
+
*
|
|
265
|
+
* `wspace-public-gateway` enforces `MAX_REQUEST_BODY_SIZE`, and both the alpha
|
|
266
|
+
* and prod configs set it to **256kb** (`burdenoff-gitops`
|
|
267
|
+
* `apps/config-workspace{,-prod}/wspace-public-gateway-config.yaml`). It is
|
|
268
|
+
* checked against `Content-Length` before authentication and before anything is
|
|
269
|
+
* forwarded, and it answers 413 with a JSON body — which fe-libs' `graphqlFetch`
|
|
270
|
+
* maps to the generic 4xx sentence, discarding the status. So an oversized turn
|
|
271
|
+
* does not degrade: it dies, and the user is told to refresh.
|
|
272
|
+
*
|
|
273
|
+
* The old budget (1.5M base64 characters ≈ 1.43 MB) was ~5.7x that cap, so a
|
|
274
|
+
* single ordinary 1280px photo — 150-400 KB, i.e. 200-530 KB of base64 — was
|
|
275
|
+
* enough to lose the whole turn. Measure the body instead of guessing at it.
|
|
276
|
+
*/
|
|
277
|
+
export declare const MAX_TURN_BODY_BYTES = 262144;
|
|
278
|
+
/**
|
|
279
|
+
* Headroom left for everything `estimateTurnBodyBytes` does not model: the
|
|
280
|
+
* GraphQL query document, the operation name, the sandbox id / path / method,
|
|
281
|
+
* the context input and the page context.
|
|
282
|
+
*
|
|
283
|
+
* Measured, that overhead is under 1 KB — the ProxySandboxRequest document is
|
|
284
|
+
* ~150 bytes and the page context a few hundred. 32 KB is therefore deliberately
|
|
285
|
+
* ~30x the real figure, because the two ways of being wrong are not
|
|
286
|
+
* symmetrical: reserve too much and one photo travels as a link instead of as
|
|
287
|
+
* pixels; reserve too little and the entire turn is rejected and the farmer's
|
|
288
|
+
* question is lost.
|
|
289
|
+
*/
|
|
290
|
+
export declare const TURN_BODY_HEADROOM_BYTES = 32768;
|
|
291
|
+
/** What the modelled part of the body must fit inside. */
|
|
292
|
+
export declare const MAX_INLINE_TURN_BODY_BYTES: number;
|
|
293
|
+
/**
|
|
294
|
+
* Encode settings for the copy of an image that travels INSIDE the turn.
|
|
295
|
+
*
|
|
296
|
+
* Separate from the upload encode (1280px / q0.72) on purpose: the file that
|
|
297
|
+
* lands in the farmer's file library should not be degraded to fit a transport
|
|
298
|
+
* limit. At 768px / q0.6 a photo is typically 40-90 KB — 53-120 KB of base64 —
|
|
299
|
+
* so one image fits inside `MAX_INLINE_TURN_BODY_BYTES` with room for the
|
|
300
|
+
* prompt, and often two do. Vision models downsample to roughly this size
|
|
301
|
+
* anyway, so the diagnostic detail that matters survives.
|
|
302
|
+
*/
|
|
303
|
+
export declare const INLINE_IMAGE_MAX_DIM = 768;
|
|
304
|
+
export declare const INLINE_IMAGE_QUALITY = 0.6;
|
|
305
|
+
/**
|
|
306
|
+
* Estimate the bytes the prompt + parts will occupy in the POSTed body.
|
|
307
|
+
*
|
|
308
|
+
* Shaped like the JSON fe-libs actually builds (`{ mode, prompt, pageContext,
|
|
309
|
+
* parts }` inside `proxySandboxRequest.body`), so the number tracks the thing
|
|
310
|
+
* being limited rather than a proxy for it. Deliberately an UNDER-estimate of
|
|
311
|
+
* the full request — `TURN_BODY_HEADROOM_BYTES` covers the difference.
|
|
312
|
+
*/
|
|
313
|
+
export declare function estimateTurnBodyBytes(promptText: string, parts?: AssistantPromptPart[]): number;
|
|
314
|
+
/**
|
|
315
|
+
* How many attachments COULD have travelled as pixels — i.e. are ready images
|
|
316
|
+
* that have a `data:` URL to inline.
|
|
317
|
+
*
|
|
318
|
+
* Compared against how many actually did, this is what tells the user their
|
|
319
|
+
* photo was demoted to a link. Without it the deterministic budget path is
|
|
320
|
+
* silent, and only the transport-rejection path ever admits to anything.
|
|
321
|
+
*/
|
|
322
|
+
export declare function countInlineImageCandidates(attachments: AssistantAttachment[]): number;
|
|
323
|
+
/** How many parts actually carry image bytes. */
|
|
324
|
+
export declare function countInlinedImageParts(parts: AssistantPromptPart[] | undefined): number;
|
|
325
|
+
/** Split a `data:<mime>;base64,<payload>` URL. Returns null for anything else. */
|
|
326
|
+
export declare function parseDataUrl(dataUrl: string): {
|
|
327
|
+
mimeType: string;
|
|
328
|
+
base64: string;
|
|
329
|
+
} | null;
|
|
330
|
+
/**
|
|
331
|
+
* Build the structured multimodal turn.
|
|
332
|
+
*
|
|
333
|
+
* `promptText` MUST be the exact string also sent as `prompt`, so the two
|
|
334
|
+
* channels are equivalent: a bridge that understands `parts` sees everything a
|
|
335
|
+
* text-only bridge sees, plus the images. Returns `undefined` when there is
|
|
336
|
+
* nothing an image/file part could add, which keeps the wire body byte-identical
|
|
337
|
+
* to a pre-multimodal client for every ordinary text turn.
|
|
338
|
+
*/
|
|
339
|
+
export declare function buildPromptParts(promptText: string, attachments: AssistantAttachment[]): AssistantPromptPart[] | undefined;
|
|
340
|
+
//# sourceMappingURL=attachments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/attachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,kFAAkF;AAClF,eAAO,MAAM,cAAc,QAAmB,CAAC;AAE/C,mEAAmE;AACnE,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAEpE,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,WAAW,GACX,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAC3B,UAAU,GACV,WAAW,GACX,OAAO,GACP,YAAY,GACZ,mBAAmB,CAAC;AAExB;;;;;;;GAOG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,MAAM,EAAE,mBAAmB;gBAA3B,MAAM,EAAE,mBAAmB;CAIjD;AAED,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,yBAAyB,CAAC;IAClC,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,mBAAmB,GAC9B,0BAA0B,CAS5B;AA+BD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,uBAAuB,CAYzB;AAED;;;;;GAKG;AACH,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAgBrD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,cAAc,GAAG,IAAI,CAMvB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,QAKnB,CAAC;AAEZ,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,mBAAmB,EAAE,GACjC,OAAO,CAQT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,mBAAmB,EAAE,GACjC,mBAAmB,EAAE,CAEvB;AAED,+EAA+E;AAC/E,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,mBAAmB,EAAE,GACjC,qBAAqB,GAAG,IAAI,CAM9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,MAAM,GACnB,mBAAmB,GAAG,IAAI,CAM5B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAQtC;AA8ZD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AA+FnD;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,mBAAmB,EAAE,EAClC,QAAQ,SAAK,GACZ,MAAM,CAUR;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,mBAAmB,EAAE,GACjC,MAAM,CAIR;AAID;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,UAAY,CAAC;AAEvD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,SAAyB,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B,QACS,CAAC;AAEjD;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAWxC;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,mBAAmB,EAAE,GAC5B,MAAM,CAIR;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,mBAAmB,EAAE,GACjC,MAAM,CAMR;AAED,iDAAiD;AACjD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,mBAAmB,EAAE,GAAG,SAAS,GACvC,MAAM,CAIR;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG7C;AAiGD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,mBAAmB,EAAE,GACjC,mBAAmB,EAAE,GAAG,SAAS,CA4DnC"}
|