slotdeck 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +486 -2
- package/dist/deck/numbers.d.ts +14 -0
- package/dist/deck/numbers.js +48 -0
- package/dist/deck/numbers.js.map +1 -0
- package/dist/deck/spec.d.ts +73 -0
- package/dist/deck/spec.js +21 -0
- package/dist/deck/spec.js.map +1 -0
- package/dist/deck/validate.d.ts +49 -0
- package/dist/deck/validate.js +189 -0
- package/dist/deck/validate.js.map +1 -0
- package/dist/generate.d.ts +53 -0
- package/dist/generate.js +44 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/gemini.d.ts +39 -0
- package/dist/llm/gemini.js +147 -0
- package/dist/llm/gemini.js.map +1 -0
- package/dist/llm/provider.d.ts +38 -0
- package/dist/llm/provider.js +2 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/node.d.ts +3 -0
- package/dist/node.js +31 -0
- package/dist/node.js.map +1 -0
- package/dist/plan/assets.d.ts +28 -0
- package/dist/plan/assets.js +80 -0
- package/dist/plan/assets.js.map +1 -0
- package/dist/plan/catalog.d.ts +106 -0
- package/dist/plan/catalog.js +302 -0
- package/dist/plan/catalog.js.map +1 -0
- package/dist/plan/edit.d.ts +31 -0
- package/dist/plan/edit.js +364 -0
- package/dist/plan/edit.js.map +1 -0
- package/dist/plan/plan.d.ts +106 -0
- package/dist/plan/plan.js +243 -0
- package/dist/plan/plan.js.map +1 -0
- package/dist/plan/write.d.ts +39 -0
- package/dist/plan/write.js +179 -0
- package/dist/plan/write.js.map +1 -0
- package/dist/pptx/package.d.ts +48 -0
- package/dist/pptx/package.js +202 -0
- package/dist/pptx/package.js.map +1 -0
- package/dist/pptx/presentation.d.ts +20 -0
- package/dist/pptx/presentation.js +31 -0
- package/dist/pptx/presentation.js.map +1 -0
- package/dist/pptx/xml.d.ts +23 -0
- package/dist/pptx/xml.js +67 -0
- package/dist/pptx/xml.js.map +1 -0
- package/dist/render/chart.d.ts +18 -0
- package/dist/render/chart.js +158 -0
- package/dist/render/chart.js.map +1 -0
- package/dist/render/extract.d.ts +11 -0
- package/dist/render/extract.js +65 -0
- package/dist/render/extract.js.map +1 -0
- package/dist/render/picture.d.ts +20 -0
- package/dist/render/picture.js +114 -0
- package/dist/render/picture.js.map +1 -0
- package/dist/render/render.d.ts +32 -0
- package/dist/render/render.js +247 -0
- package/dist/render/render.js.map +1 -0
- package/dist/render/repeat.d.ts +15 -0
- package/dist/render/repeat.js +118 -0
- package/dist/render/repeat.js.map +1 -0
- package/dist/render/table.d.ts +12 -0
- package/dist/render/table.js +84 -0
- package/dist/render/table.js.map +1 -0
- package/dist/render/text.d.ts +31 -0
- package/dist/render/text.js +210 -0
- package/dist/render/text.js.map +1 -0
- package/dist/store.d.ts +18 -0
- package/dist/store.js +23 -0
- package/dist/store.js.map +1 -0
- package/dist/template/change.d.ts +138 -0
- package/dist/template/change.js +406 -0
- package/dist/template/change.js.map +1 -0
- package/dist/template/check.d.ts +15 -0
- package/dist/template/check.js +97 -0
- package/dist/template/check.js.map +1 -0
- package/dist/template/draft.d.ts +47 -0
- package/dist/template/draft.js +276 -0
- package/dist/template/draft.js.map +1 -0
- package/dist/template/inspect.d.ts +53 -0
- package/dist/template/inspect.js +157 -0
- package/dist/template/inspect.js.map +1 -0
- package/dist/template/instruct.d.ts +26 -0
- package/dist/template/instruct.js +278 -0
- package/dist/template/instruct.js.map +1 -0
- package/dist/template/manifest.d.ts +226 -0
- package/dist/template/manifest.js +116 -0
- package/dist/template/manifest.js.map +1 -0
- package/dist/template/measure.d.ts +80 -0
- package/dist/template/measure.js +212 -0
- package/dist/template/measure.js.map +1 -0
- package/dist/template/sample.d.ts +17 -0
- package/dist/template/sample.js +96 -0
- package/dist/template/sample.js.map +1 -0
- package/dist/template/view.d.ts +46 -0
- package/dist/template/view.js +38 -0
- package/dist/template/view.js.map +1 -0
- package/dist/tools.d.ts +68 -0
- package/dist/tools.js +266 -0
- package/dist/tools.js.map +1 -0
- package/dist/util/image.d.ts +11 -0
- package/dist/util/image.js +58 -0
- package/dist/util/image.js.map +1 -0
- package/dist/util/png.d.ts +2 -0
- package/dist/util/png.js +50 -0
- package/dist/util/png.js.map +1 -0
- package/package.json +63 -4
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { effectiveSlots, itemRange, textBudget } from '../template/manifest.js';
|
|
2
|
+
/**
|
|
3
|
+
* Works out which slots of a pattern the model writes, or why the pattern cannot be used.
|
|
4
|
+
* Slots named in `skip` are already taken care of (carried over from an existing slide)
|
|
5
|
+
* and are neither offered nor required.
|
|
6
|
+
*/
|
|
7
|
+
export function planPattern(def, context, skip = new Set(), items) {
|
|
8
|
+
if (def.figures && !context.figures)
|
|
9
|
+
return { reason: 'is built around numbers, and the brief gives none' };
|
|
10
|
+
const hasGraphics = context.assets.some((asset) => asset.kind === 'graphic');
|
|
11
|
+
const slots = [];
|
|
12
|
+
let reason;
|
|
13
|
+
let needsPhoto = false;
|
|
14
|
+
for (const slot of effectiveSlots(def, items)) {
|
|
15
|
+
if (skip.has(slot.name))
|
|
16
|
+
continue;
|
|
17
|
+
const policy = slot.empty ?? 'error';
|
|
18
|
+
// In strict layout nothing may be removed, so a removable slot has to be filled like any other.
|
|
19
|
+
const mustFill = policy === 'error' || (policy === 'remove' && context.layout === 'strict');
|
|
20
|
+
const mayFill = policy !== 'keep' && policy !== 'drop';
|
|
21
|
+
if (slot.kind === 'text') {
|
|
22
|
+
if (slot.deckField) {
|
|
23
|
+
if (!context.fields[slot.deckField] && mustFill)
|
|
24
|
+
reason = `needs the deck field "${slot.deckField}"`;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (!mayFill)
|
|
28
|
+
continue;
|
|
29
|
+
slots.push({ slot, mode: (slot.maxParagraphs ?? 1) > 1 ? 'paragraphs' : 'text', required: mustFill });
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (slot.kind === 'table') {
|
|
33
|
+
if (mayFill)
|
|
34
|
+
slots.push({ slot, mode: 'table', required: mustFill });
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (slot.kind === 'chart') {
|
|
38
|
+
if (mayFill)
|
|
39
|
+
slots.push({ slot, mode: 'chart', required: mustFill });
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
let available;
|
|
43
|
+
if (slot.imageKind === 'photo')
|
|
44
|
+
available = context.imageDensity !== 'none';
|
|
45
|
+
else if (slot.imageKind === 'icon')
|
|
46
|
+
available = context.icons.length > 0;
|
|
47
|
+
else
|
|
48
|
+
available = hasGraphics;
|
|
49
|
+
if (!available || !mayFill) {
|
|
50
|
+
if (mustFill) {
|
|
51
|
+
reason =
|
|
52
|
+
slot.imageKind === 'photo'
|
|
53
|
+
? 'needs a photo, and images are turned off'
|
|
54
|
+
: slot.imageKind === 'icon'
|
|
55
|
+
? 'needs icons, and no icon set was supplied'
|
|
56
|
+
: 'needs a graphic asset, and none was supplied';
|
|
57
|
+
}
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (slot.imageKind === 'photo' && mustFill)
|
|
61
|
+
needsPhoto = true;
|
|
62
|
+
slots.push({ slot, mode: slot.imageKind, required: mustFill });
|
|
63
|
+
}
|
|
64
|
+
if (reason)
|
|
65
|
+
return { reason };
|
|
66
|
+
const pattern = { def, slots, needsPhoto };
|
|
67
|
+
if (def.repeat && items !== undefined)
|
|
68
|
+
pattern.items = items;
|
|
69
|
+
return { pattern };
|
|
70
|
+
}
|
|
71
|
+
/** Works out which patterns can be filled with what the caller supplied, and which of their slots the model writes. */
|
|
72
|
+
export function buildCatalog(manifest, context) {
|
|
73
|
+
const patterns = [];
|
|
74
|
+
const excluded = [];
|
|
75
|
+
for (const def of manifest.patterns) {
|
|
76
|
+
if (context.allow && !context.allow.includes(def.id))
|
|
77
|
+
continue;
|
|
78
|
+
const planned = planPattern(def, context);
|
|
79
|
+
if ('reason' in planned)
|
|
80
|
+
excluded.push({ id: def.id, reason: planned.reason });
|
|
81
|
+
else
|
|
82
|
+
patterns.push(planned.pattern);
|
|
83
|
+
}
|
|
84
|
+
return { patterns, excluded };
|
|
85
|
+
}
|
|
86
|
+
function limits(slot, scale = 1) {
|
|
87
|
+
if (slot.kind === 'table') {
|
|
88
|
+
const parts = [];
|
|
89
|
+
if (slot.maxColumns !== undefined)
|
|
90
|
+
parts.push(`at most ${slot.maxColumns} columns`);
|
|
91
|
+
if (slot.maxRows !== undefined)
|
|
92
|
+
parts.push(`at most ${slot.maxRows} rows`);
|
|
93
|
+
if (slot.maxCellChars !== undefined)
|
|
94
|
+
parts.push(`at most ${slot.maxCellChars} characters in a cell`);
|
|
95
|
+
return parts.join(', ');
|
|
96
|
+
}
|
|
97
|
+
if (slot.kind === 'chart') {
|
|
98
|
+
const parts = [];
|
|
99
|
+
if (slot.maxCategories !== undefined)
|
|
100
|
+
parts.push(`at most ${slot.maxCategories} categories`);
|
|
101
|
+
if (slot.maxSeries !== undefined)
|
|
102
|
+
parts.push(`at most ${slot.maxSeries} series`);
|
|
103
|
+
return parts.join(', ');
|
|
104
|
+
}
|
|
105
|
+
if (slot.kind !== 'text')
|
|
106
|
+
return '';
|
|
107
|
+
const budget = textBudget(slot, scale);
|
|
108
|
+
const several = (slot.maxParagraphs ?? 1) > 1;
|
|
109
|
+
const parts = [];
|
|
110
|
+
if (budget.maxChars !== undefined)
|
|
111
|
+
parts.push(`at most ${budget.maxChars} characters${several ? ' in total' : ''}`);
|
|
112
|
+
if (several)
|
|
113
|
+
parts.push(`at most ${budget.maxParagraphs} items`);
|
|
114
|
+
return parts.join(', ');
|
|
115
|
+
}
|
|
116
|
+
/** The pattern list as the outline prompt shows it. */
|
|
117
|
+
export function describeCatalog(catalog, textScale = 1) {
|
|
118
|
+
return catalog.patterns
|
|
119
|
+
.map((pattern) => {
|
|
120
|
+
const repeat = pattern.def.repeat;
|
|
121
|
+
const range = itemRange(pattern.def);
|
|
122
|
+
// A row of items is described once, by its first item, with the number it may hold.
|
|
123
|
+
const itemSlot = new Map();
|
|
124
|
+
for (let n = 1; repeat && n <= (range?.drawn ?? 0); n++) {
|
|
125
|
+
for (const name of repeat.slots)
|
|
126
|
+
itemSlot.set(name.replace('{n}', String(n)), { n, label: name.replace('{n}', 'N') });
|
|
127
|
+
}
|
|
128
|
+
const slots = pattern.slots
|
|
129
|
+
.filter((planned) => (itemSlot.get(planned.slot.name)?.n ?? 1) === 1)
|
|
130
|
+
.map((planned) => {
|
|
131
|
+
const { slot } = planned;
|
|
132
|
+
const kind = planned.mode === 'text' || planned.mode === 'paragraphs'
|
|
133
|
+
? limits(slot, textScale) || 'text'
|
|
134
|
+
: planned.mode === 'table' || planned.mode === 'chart'
|
|
135
|
+
? [planned.mode, limits(slot)].filter(Boolean).join(': ')
|
|
136
|
+
: planned.mode;
|
|
137
|
+
return `${itemSlot.get(slot.name)?.label ?? slot.name}${planned.required ? '' : '?'} (${kind})`;
|
|
138
|
+
})
|
|
139
|
+
.join('; ');
|
|
140
|
+
const count = repeat && range && range.max > range.min ? `\n items: ${range.min} to ${range.max} ${repeat.item}s, numbered N = 1, 2, ...` : '';
|
|
141
|
+
return `- ${pattern.def.id}: ${pattern.def.description}\n slots: ${slots}${count}`;
|
|
142
|
+
})
|
|
143
|
+
.join('\n');
|
|
144
|
+
}
|
|
145
|
+
function slotSchema(planned, context) {
|
|
146
|
+
const { slot } = planned;
|
|
147
|
+
const note = [slot.description, limits(slot, context.textScale)].filter(Boolean).join('. ');
|
|
148
|
+
switch (planned.mode) {
|
|
149
|
+
case 'text':
|
|
150
|
+
return { type: 'string', description: note || 'Text' };
|
|
151
|
+
case 'paragraphs': {
|
|
152
|
+
const schema = { type: 'array', items: { type: 'string' }, minItems: 1, description: note || 'One string per paragraph' };
|
|
153
|
+
const most = textBudget(planned.slot, context.textScale).maxParagraphs;
|
|
154
|
+
if (most !== undefined)
|
|
155
|
+
schema.maxItems = most;
|
|
156
|
+
return schema;
|
|
157
|
+
}
|
|
158
|
+
case 'table': {
|
|
159
|
+
const cells = { type: 'array', items: { type: 'string' }, minItems: 2 };
|
|
160
|
+
const rows = { type: 'array', minItems: 1, description: 'Body rows. Every row has one cell per column, in column order.' };
|
|
161
|
+
if (planned.slot.maxColumns !== undefined)
|
|
162
|
+
cells.maxItems = planned.slot.maxColumns;
|
|
163
|
+
if (planned.slot.maxRows !== undefined)
|
|
164
|
+
rows.maxItems = planned.slot.maxRows;
|
|
165
|
+
rows.items = { ...cells };
|
|
166
|
+
return {
|
|
167
|
+
type: 'object',
|
|
168
|
+
description: note || 'A table',
|
|
169
|
+
properties: { header: { ...cells, description: 'Column headings, a word or two each' }, rows },
|
|
170
|
+
required: ['header', 'rows'],
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
case 'chart': {
|
|
174
|
+
const categories = { type: 'array', items: { type: 'string' }, minItems: 2, description: 'Labels along the axis, or the names of the pie slices' };
|
|
175
|
+
const series = {
|
|
176
|
+
type: 'array',
|
|
177
|
+
minItems: 1,
|
|
178
|
+
description: 'One or more series. A pie takes exactly one.',
|
|
179
|
+
items: {
|
|
180
|
+
type: 'object',
|
|
181
|
+
properties: {
|
|
182
|
+
name: { type: 'string', description: 'What the series measures, a word or two' },
|
|
183
|
+
values: { type: 'array', items: { type: 'number' }, description: 'One number per category, in category order' },
|
|
184
|
+
},
|
|
185
|
+
required: ['name', 'values'],
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
if (planned.slot.maxCategories !== undefined)
|
|
189
|
+
categories.maxItems = planned.slot.maxCategories;
|
|
190
|
+
if (planned.slot.maxSeries !== undefined)
|
|
191
|
+
series.maxItems = planned.slot.maxSeries;
|
|
192
|
+
return {
|
|
193
|
+
type: 'object',
|
|
194
|
+
description: (note ? `${note}. ` : '') +
|
|
195
|
+
'A chart of numbers the brief states. Use only those numbers: never estimate, interpolate or invent a value to complete a series.',
|
|
196
|
+
properties: {
|
|
197
|
+
type: { type: 'string', enum: ['column', 'bar', 'line', 'pie'], description: 'column: compare items. bar: compare items with long names. line: change over time. pie: shares of a whole.' },
|
|
198
|
+
categories,
|
|
199
|
+
series,
|
|
200
|
+
format: { type: 'string', enum: ['number', 'percent'], description: 'percent when the values are percentages (write 45 for 45%)' },
|
|
201
|
+
},
|
|
202
|
+
required: ['type', 'categories', 'series', 'format'],
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
case 'icon':
|
|
206
|
+
return { type: 'string', enum: context.icons.map((icon) => icon.id), description: note || 'Id of the icon that best matches the item' };
|
|
207
|
+
case 'graphic':
|
|
208
|
+
return {
|
|
209
|
+
type: 'string',
|
|
210
|
+
enum: context.assets.filter((asset) => asset.kind === 'graphic').map((asset) => asset.id),
|
|
211
|
+
description: note || 'Id of the supplied graphic to show here',
|
|
212
|
+
};
|
|
213
|
+
case 'photo': {
|
|
214
|
+
const properties = {
|
|
215
|
+
prompt: {
|
|
216
|
+
type: 'string',
|
|
217
|
+
description: 'What the photo shows, in English: subject, setting, light and mood, in one or two sentences. No text, logos or brand names in the picture.',
|
|
218
|
+
},
|
|
219
|
+
alt: { type: 'string', description: 'Short alternative text for screen readers, in the deck language' },
|
|
220
|
+
};
|
|
221
|
+
const photos = context.assets.filter((asset) => asset.kind === 'photo');
|
|
222
|
+
if (photos.length > 0) {
|
|
223
|
+
properties.asset = {
|
|
224
|
+
type: 'string',
|
|
225
|
+
enum: photos.map((asset) => asset.id),
|
|
226
|
+
description: 'Set only when one of the supplied photos fits; it is then used instead of generating one.',
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
return { type: 'object', properties, required: ['prompt', 'alt'], description: note || 'Photo for this slide' };
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Schema for the content of a fixed set of slides: one property per slide (`s1`, `s2`, ...),
|
|
235
|
+
* each holding exactly that pattern's slots. Having no unions keeps it small and easy to enforce.
|
|
236
|
+
*/
|
|
237
|
+
export function contentSchema(items, context) {
|
|
238
|
+
const properties = {};
|
|
239
|
+
for (const { number, pattern, purpose } of items) {
|
|
240
|
+
const slotProperties = {};
|
|
241
|
+
for (const planned of pattern.slots)
|
|
242
|
+
slotProperties[planned.slot.name] = slotSchema(planned, context);
|
|
243
|
+
properties[`s${number}`] = {
|
|
244
|
+
type: 'object',
|
|
245
|
+
description: `Slide ${number} (${pattern.def.id}): ${purpose}`,
|
|
246
|
+
properties: slotProperties,
|
|
247
|
+
required: pattern.slots.filter((planned) => planned.required).map((planned) => planned.slot.name),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return { type: 'object', properties, required: Object.keys(properties) };
|
|
251
|
+
}
|
|
252
|
+
export function outlineSchema(catalog, count) {
|
|
253
|
+
return {
|
|
254
|
+
type: 'object',
|
|
255
|
+
properties: {
|
|
256
|
+
title: { type: 'string', description: 'Title of the deck' },
|
|
257
|
+
slides: {
|
|
258
|
+
type: 'array',
|
|
259
|
+
minItems: count.min,
|
|
260
|
+
maxItems: count.max,
|
|
261
|
+
items: {
|
|
262
|
+
type: 'object',
|
|
263
|
+
properties: {
|
|
264
|
+
pattern: { type: 'string', enum: catalog.patterns.map((pattern) => pattern.def.id) },
|
|
265
|
+
purpose: { type: 'string', description: 'The one point this slide makes, in a sentence' },
|
|
266
|
+
...itemsProperty(catalog),
|
|
267
|
+
},
|
|
268
|
+
required: ['pattern', 'purpose'],
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
required: ['title', 'slides'],
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
/** The `items` property of an outline entry, when some pattern on offer has a row of items to vary. */
|
|
276
|
+
export function itemsProperty(catalog) {
|
|
277
|
+
const ranges = catalog.patterns.map((pattern) => itemRange(pattern.def)).filter((range) => range !== undefined && range.max > range.min);
|
|
278
|
+
if (ranges.length === 0)
|
|
279
|
+
return {};
|
|
280
|
+
return {
|
|
281
|
+
items: {
|
|
282
|
+
type: 'integer',
|
|
283
|
+
minimum: Math.min(...ranges.map((range) => range.min)),
|
|
284
|
+
maximum: Math.max(...ranges.map((range) => range.max)),
|
|
285
|
+
description: 'For a pattern with a row of items: how many items the content calls for. Leave it out for other patterns.',
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/** Reads the item count of an outline entry: the pattern's own number when it has no choice or none was given. */
|
|
290
|
+
export function readItems(pattern, value) {
|
|
291
|
+
const range = itemRange(pattern);
|
|
292
|
+
if (!range)
|
|
293
|
+
return {};
|
|
294
|
+
const items = Number(value);
|
|
295
|
+
if (value === undefined || value === null || !Number.isInteger(items))
|
|
296
|
+
return { items: range.drawn };
|
|
297
|
+
if (items < range.min || items > range.max) {
|
|
298
|
+
return { problem: `pattern "${pattern.id}" takes ${range.min} to ${range.max} ${pattern.repeat?.item ?? 'item'}s, not ${items}` };
|
|
299
|
+
}
|
|
300
|
+
return { items };
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/plan/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Issue } from '../deck/validate.ts';
|
|
2
|
+
import type { DeckSpec } from '../deck/spec.ts';
|
|
3
|
+
import type { Template } from '../render/render.ts';
|
|
4
|
+
import type { Direction } from '../template/manifest.ts';
|
|
5
|
+
import type { ImageDensity } from './catalog.ts';
|
|
6
|
+
import type { PlanOptions } from './plan.ts';
|
|
7
|
+
export interface EditOptions extends PlanOptions {
|
|
8
|
+
/** Replaces the deck-level values, e.g. a translated header text. Defaults to the deck's own. */
|
|
9
|
+
fields?: Record<string, string>;
|
|
10
|
+
/** Reading direction after the edit. Defaults to the direction of the deck's language. */
|
|
11
|
+
direction?: Direction;
|
|
12
|
+
/** Whether slides added by the edit may use photo patterns. Defaults to `medium`. */
|
|
13
|
+
imageDensity?: ImageDensity;
|
|
14
|
+
}
|
|
15
|
+
export interface EditResult {
|
|
16
|
+
deck: DeckSpec;
|
|
17
|
+
/** One sentence from the model on what it changed, for the person who asked. */
|
|
18
|
+
summary: string;
|
|
19
|
+
/** Slide numbers in the new deck that were written or rewritten. Every other slide is copied as it was. */
|
|
20
|
+
rewritten: number[];
|
|
21
|
+
warnings: Issue[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Applies an instruction such as "shorten slide 3" or "add a slide about pricing" to a deck.
|
|
25
|
+
*
|
|
26
|
+
* Two model calls: the first decides what the deck looks like after the change (which slides
|
|
27
|
+
* stay, move, go, get rewritten or are new); the second writes only the slides that change.
|
|
28
|
+
* Untouched slides are copied by code, so they cannot drift, and pictures are kept unless the
|
|
29
|
+
* instruction is about them.
|
|
30
|
+
*/
|
|
31
|
+
export declare function planEdit(template: Template, deck: DeckSpec, instruction: string, options: EditOptions): Promise<EditResult>;
|