@fastpaca/cria 1.3.0 → 1.5.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/README.md +51 -26
- package/dist/dsl/builder.d.ts +243 -0
- package/dist/dsl/builder.d.ts.map +1 -0
- package/dist/dsl/builder.js +458 -0
- package/dist/dsl/builder.js.map +1 -0
- package/dist/dsl/index.d.ts +71 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +82 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl/strategies.d.ts +29 -0
- package/dist/dsl/strategies.d.ts.map +1 -0
- package/dist/dsl/strategies.js +62 -0
- package/dist/dsl/strategies.js.map +1 -0
- package/dist/dsl/summary.d.ts +50 -0
- package/dist/dsl/summary.d.ts.map +1 -0
- package/dist/dsl/summary.js +56 -0
- package/dist/dsl/summary.js.map +1 -0
- package/dist/dsl/templating.d.ts +31 -0
- package/dist/dsl/templating.d.ts.map +1 -0
- package/dist/dsl/templating.js +83 -0
- package/dist/dsl/templating.js.map +1 -0
- package/dist/dsl/vector-search.d.ts +52 -0
- package/dist/dsl/vector-search.d.ts.map +1 -0
- package/dist/{components → dsl}/vector-search.js +12 -34
- package/dist/dsl/vector-search.js.map +1 -0
- package/dist/eval/index.d.ts +49 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +34 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/judge.d.ts +20 -0
- package/dist/eval/judge.d.ts.map +1 -0
- package/dist/eval/judge.js +59 -0
- package/dist/eval/judge.js.map +1 -0
- package/dist/index.d.ts +6 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -7
- package/dist/index.js.map +1 -1
- package/dist/instrumentation/otel.js +5 -14
- package/dist/instrumentation/otel.js.map +1 -1
- package/dist/providers/ai-sdk.d.ts +29 -0
- package/dist/providers/ai-sdk.d.ts.map +1 -0
- package/dist/providers/ai-sdk.js +104 -0
- package/dist/providers/ai-sdk.js.map +1 -0
- package/dist/providers/anthropic.d.ts +30 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +160 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/openai.d.ts +37 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +164 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/render.d.ts +24 -22
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +191 -63
- package/dist/render.js.map +1 -1
- package/dist/testing/plaintext.d.ts +28 -0
- package/dist/testing/plaintext.d.ts.map +1 -0
- package/dist/testing/plaintext.js +71 -0
- package/dist/testing/plaintext.js.map +1 -0
- package/dist/types.d.ts +202 -174
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +37 -100
- package/dist/types.js.map +1 -1
- package/package.json +11 -33
- package/dist/ai-sdk/index.d.ts +0 -68
- package/dist/ai-sdk/index.d.ts.map +0 -1
- package/dist/ai-sdk/index.js +0 -375
- package/dist/ai-sdk/index.js.map +0 -1
- package/dist/anthropic/index.d.ts +0 -102
- package/dist/anthropic/index.d.ts.map +0 -1
- package/dist/anthropic/index.js +0 -281
- package/dist/anthropic/index.js.map +0 -1
- package/dist/components/index.d.ts +0 -147
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -181
- package/dist/components/index.js.map +0 -1
- package/dist/components/summary.d.ts +0 -90
- package/dist/components/summary.d.ts.map +0 -1
- package/dist/components/summary.js +0 -118
- package/dist/components/summary.js.map +0 -1
- package/dist/components/vector-search.d.ts +0 -70
- package/dist/components/vector-search.d.ts.map +0 -1
- package/dist/components/vector-search.js.map +0 -1
- package/dist/dsl.d.ts +0 -202
- package/dist/dsl.d.ts.map +0 -1
- package/dist/dsl.js +0 -320
- package/dist/dsl.js.map +0 -1
- package/dist/jsx/index.d.ts +0 -6
- package/dist/jsx/index.d.ts.map +0 -1
- package/dist/jsx/index.js +0 -7
- package/dist/jsx/index.js.map +0 -1
- package/dist/jsx/jsx-dev-runtime.d.ts +0 -2
- package/dist/jsx/jsx-dev-runtime.d.ts.map +0 -1
- package/dist/jsx/jsx-dev-runtime.js +0 -3
- package/dist/jsx/jsx-dev-runtime.js.map +0 -1
- package/dist/jsx/jsx-runtime.d.ts +0 -40
- package/dist/jsx/jsx-runtime.d.ts.map +0 -1
- package/dist/jsx/jsx-runtime.js +0 -40
- package/dist/jsx/jsx-runtime.js.map +0 -1
- package/dist/openai/index.d.ts +0 -73
- package/dist/openai/index.d.ts.map +0 -1
- package/dist/openai/index.js +0 -306
- package/dist/openai/index.js.map +0 -1
- package/dist/renderers/markdown.d.ts +0 -3
- package/dist/renderers/markdown.d.ts.map +0 -1
- package/dist/renderers/markdown.js +0 -43
- package/dist/renderers/markdown.js.map +0 -1
- package/dist/renderers/shared.d.ts +0 -82
- package/dist/renderers/shared.d.ts.map +0 -1
- package/dist/renderers/shared.js +0 -156
- package/dist/renderers/shared.js.map +0 -1
- package/dist/snapshot.d.ts +0 -47
- package/dist/snapshot.d.ts.map +0 -1
- package/dist/snapshot.js +0 -144
- package/dist/snapshot.js.map +0 -1
- package/dist/tokenizers.d.ts +0 -14
- package/dist/tokenizers.d.ts.map +0 -1
- package/dist/tokenizers.js +0 -45
- package/dist/tokenizers.js.map +0 -1
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluent builders for constructing prompts.
|
|
3
|
+
*/
|
|
4
|
+
import { assertValidMessageScope, render as renderPrompt } from "../render";
|
|
5
|
+
import { createMessage, createOmitStrategy, createScope, createTruncateStrategy, formatExamples, } from "./strategies";
|
|
6
|
+
import { Summary } from "./summary";
|
|
7
|
+
import { isPromptPart, normalizeTextInput, textPart, } from "./templating";
|
|
8
|
+
import { VectorSearch } from "./vector-search";
|
|
9
|
+
/**
|
|
10
|
+
* Shared fluent API for prompt-level and message-level builders.
|
|
11
|
+
*/
|
|
12
|
+
export class BuilderBase {
|
|
13
|
+
children;
|
|
14
|
+
context;
|
|
15
|
+
constructor(children = [], context = undefined) {
|
|
16
|
+
this.children = children;
|
|
17
|
+
this.context = context;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Merge another builder's contents into this one (zod-like merge).
|
|
21
|
+
* Contexts must be compatible (either identical or undefined).
|
|
22
|
+
*/
|
|
23
|
+
merge(...builders) {
|
|
24
|
+
const sources = [this, ...builders];
|
|
25
|
+
let nextContext = this.context;
|
|
26
|
+
const totalChildren = sources.reduce((sum, builder) => sum + builder.children.length, 0);
|
|
27
|
+
const mergedChildren = new Array(totalChildren);
|
|
28
|
+
let writeIndex = 0;
|
|
29
|
+
for (const builder of sources) {
|
|
30
|
+
if (builder.context && nextContext && builder.context !== nextContext) {
|
|
31
|
+
throw new Error("Cannot merge builders with different contexts/providers");
|
|
32
|
+
}
|
|
33
|
+
if (!nextContext) {
|
|
34
|
+
nextContext = builder.context;
|
|
35
|
+
}
|
|
36
|
+
for (const child of builder.children) {
|
|
37
|
+
mergedChildren[writeIndex] = child;
|
|
38
|
+
writeIndex += 1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
mergedChildren.length = writeIndex;
|
|
42
|
+
return this.create(mergedChildren, nextContext);
|
|
43
|
+
}
|
|
44
|
+
addChild(child) {
|
|
45
|
+
return this.create([...this.children, child], this.context);
|
|
46
|
+
}
|
|
47
|
+
addChildren(children) {
|
|
48
|
+
return this.create([...this.children, ...children], this.context);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class MessageBuilder extends BuilderBase {
|
|
52
|
+
constructor(children = [], context = undefined) {
|
|
53
|
+
super(children, context);
|
|
54
|
+
}
|
|
55
|
+
create(children, context) {
|
|
56
|
+
return new MessageBuilder(children, context);
|
|
57
|
+
}
|
|
58
|
+
append(content) {
|
|
59
|
+
const normalized = normalizeTextInput(content);
|
|
60
|
+
return this.addChildren(normalized);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Add vector search results as message content (async, resolved at render time).
|
|
64
|
+
*/
|
|
65
|
+
vectorSearch(opts) {
|
|
66
|
+
const asyncPart = VectorSearch({
|
|
67
|
+
store: opts.store,
|
|
68
|
+
query: opts.query,
|
|
69
|
+
...(opts.limit !== undefined ? { limit: opts.limit } : {}),
|
|
70
|
+
...(opts.threshold !== undefined ? { threshold: opts.threshold } : {}),
|
|
71
|
+
...(opts.formatter ? { formatResults: opts.formatter } : {}),
|
|
72
|
+
}).then((scope) => {
|
|
73
|
+
const message = scope.children[0];
|
|
74
|
+
if (!message || message.kind !== "message") {
|
|
75
|
+
throw new Error("VectorSearch did not return a message node.");
|
|
76
|
+
}
|
|
77
|
+
const part = message.children[0];
|
|
78
|
+
if (!part || part.type !== "text") {
|
|
79
|
+
throw new Error("VectorSearch did not return a text part.");
|
|
80
|
+
}
|
|
81
|
+
return part;
|
|
82
|
+
});
|
|
83
|
+
return this.addChild(asyncPart);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Add a formatted list of examples.
|
|
87
|
+
*/
|
|
88
|
+
examples(title, items) {
|
|
89
|
+
const element = formatExamples(title, items);
|
|
90
|
+
return this.addChild(element);
|
|
91
|
+
}
|
|
92
|
+
async buildChildren() {
|
|
93
|
+
return await resolveMessageChildren(this.children);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Fluent builder for constructing prompt trees.
|
|
98
|
+
*
|
|
99
|
+
* Every method returns a new immutable builder instance; large chains will copy
|
|
100
|
+
* child arrays, so keep prompts reasonably sized.
|
|
101
|
+
* Call `.build()` to get the final `PromptTree`.
|
|
102
|
+
*/
|
|
103
|
+
export class PromptBuilder extends BuilderBase {
|
|
104
|
+
boundProvider;
|
|
105
|
+
constructor(children = [], context = undefined, provider = undefined) {
|
|
106
|
+
const existingProvider = context?.provider;
|
|
107
|
+
if (provider && existingProvider && provider !== existingProvider) {
|
|
108
|
+
throw new Error("Cannot create a prompt builder with a mismatched provider.");
|
|
109
|
+
}
|
|
110
|
+
const nextContext = provider && (!context || context.provider !== provider)
|
|
111
|
+
? { ...(context ?? {}), provider }
|
|
112
|
+
: context;
|
|
113
|
+
super(children, nextContext);
|
|
114
|
+
this.boundProvider = provider;
|
|
115
|
+
}
|
|
116
|
+
static create(provider) {
|
|
117
|
+
if (!provider) {
|
|
118
|
+
return new PromptBuilder();
|
|
119
|
+
}
|
|
120
|
+
return new PromptBuilder([], undefined, provider);
|
|
121
|
+
}
|
|
122
|
+
create(children, context) {
|
|
123
|
+
return new PromptBuilder(children, context, this.boundProvider);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Bind this prompt builder to a provider.
|
|
127
|
+
* Enables provider-specific rendering without passing a provider at render time.
|
|
128
|
+
* This also locks tool-call input/output types for the rest of the builder chain.
|
|
129
|
+
*/
|
|
130
|
+
provider(modelProvider) {
|
|
131
|
+
if (this.context?.provider && this.context.provider !== modelProvider) {
|
|
132
|
+
throw new Error("Cannot bind a prompt builder to a different provider.");
|
|
133
|
+
}
|
|
134
|
+
return PromptBuilder.create(modelProvider).merge(this);
|
|
135
|
+
}
|
|
136
|
+
scope(fn, opts) {
|
|
137
|
+
if (typeof fn !== "function") {
|
|
138
|
+
throw new Error(`scope() requires a callback function. Received: ${typeof fn}`);
|
|
139
|
+
}
|
|
140
|
+
const inner = fn(this.create([], this.context));
|
|
141
|
+
const element = inner
|
|
142
|
+
.buildChildren()
|
|
143
|
+
.then((children) => createScope(children, opts?.id ? { id: opts.id } : undefined));
|
|
144
|
+
return this.addChild(element);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Add content that will be truncated when over budget.
|
|
148
|
+
*/
|
|
149
|
+
truncate(content, opts) {
|
|
150
|
+
const node = resolveScopeContent(content).then((children) => createScope(children, {
|
|
151
|
+
...(opts.priority !== undefined && { priority: opts.priority }),
|
|
152
|
+
strategy: createTruncateStrategy(opts.budget, opts.from ?? "start"),
|
|
153
|
+
...(opts.id && { id: opts.id }),
|
|
154
|
+
}));
|
|
155
|
+
return this.addChild(node);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Add content that will be entirely removed when over budget.
|
|
159
|
+
*/
|
|
160
|
+
omit(content, opts) {
|
|
161
|
+
const node = resolveScopeContent(content).then((children) => createScope(children, {
|
|
162
|
+
...(opts?.priority !== undefined && { priority: opts.priority }),
|
|
163
|
+
strategy: createOmitStrategy(),
|
|
164
|
+
...(opts?.id && { id: opts.id }),
|
|
165
|
+
}));
|
|
166
|
+
return this.addChild(node);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Create a provider scope for AI-powered operations like Summary.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* import { createProvider } from "@fastpaca/cria/ai-sdk";
|
|
174
|
+
* import { openai } from "@ai-sdk/openai";
|
|
175
|
+
*
|
|
176
|
+
* const provider = createProvider(openai("gpt-4o"));
|
|
177
|
+
* cria.prompt()
|
|
178
|
+
* .providerScope(provider, (p) =>
|
|
179
|
+
* p.summary(content, { id: "conv", store })
|
|
180
|
+
* )
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
providerScope(modelProvider, fn) {
|
|
184
|
+
const context = { provider: modelProvider };
|
|
185
|
+
if (this.context?.provider && this.context.provider !== modelProvider) {
|
|
186
|
+
throw new Error("Cannot bind a prompt builder to a different provider.");
|
|
187
|
+
}
|
|
188
|
+
const bound = this.provider(modelProvider);
|
|
189
|
+
const inner = fn(PromptBuilder.create(modelProvider));
|
|
190
|
+
const element = inner.buildChildren().then((children) => ({
|
|
191
|
+
kind: "scope",
|
|
192
|
+
priority: 0,
|
|
193
|
+
children,
|
|
194
|
+
context,
|
|
195
|
+
}));
|
|
196
|
+
return bound.addChild(element);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Add vector search results (async, resolved at render time).
|
|
200
|
+
*/
|
|
201
|
+
vectorSearch(opts) {
|
|
202
|
+
const asyncElement = VectorSearch({
|
|
203
|
+
store: opts.store,
|
|
204
|
+
query: opts.query,
|
|
205
|
+
...(opts.limit !== undefined ? { limit: opts.limit } : {}),
|
|
206
|
+
...(opts.threshold !== undefined ? { threshold: opts.threshold } : {}),
|
|
207
|
+
...(opts.formatter ? { formatResults: opts.formatter } : {}),
|
|
208
|
+
...(opts.priority !== undefined ? { priority: opts.priority } : {}),
|
|
209
|
+
...(opts.id !== undefined ? { id: opts.id } : {}),
|
|
210
|
+
});
|
|
211
|
+
return this.addChild(asyncElement);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Add content that will be summarized when over budget.
|
|
215
|
+
*/
|
|
216
|
+
summary(content, opts) {
|
|
217
|
+
const element = resolveScopeContent(content).then((children) => Summary({
|
|
218
|
+
id: opts.id,
|
|
219
|
+
store: opts.store,
|
|
220
|
+
children,
|
|
221
|
+
...(opts.summarize ? { summarize: opts.summarize } : {}),
|
|
222
|
+
...(opts.priority !== undefined ? { priority: opts.priority } : {}),
|
|
223
|
+
}));
|
|
224
|
+
return this.addChild(element);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Add a raw PromptNode (escape hatch for advanced usage).
|
|
228
|
+
*/
|
|
229
|
+
raw(element) {
|
|
230
|
+
return this.addChild(element);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Merge builders or raw nodes into this one.
|
|
234
|
+
* Accepts PromptBuilders, individual PromptNodes, or arrays of PromptNodes.
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```typescript
|
|
238
|
+
* // Merge builders
|
|
239
|
+
* cria.prompt().system("A").merge(otherBuilder)
|
|
240
|
+
*
|
|
241
|
+
* // Merge raw nodes
|
|
242
|
+
* cria.prompt().system("A").merge(...scope.children)
|
|
243
|
+
* ```
|
|
244
|
+
*/
|
|
245
|
+
merge(...items) {
|
|
246
|
+
const newChildren = [...this.children];
|
|
247
|
+
let nextContext = this.context;
|
|
248
|
+
for (const item of items) {
|
|
249
|
+
nextContext = this.mergeItem(item, newChildren, nextContext);
|
|
250
|
+
}
|
|
251
|
+
return this.create(newChildren, nextContext);
|
|
252
|
+
}
|
|
253
|
+
mergeItem(item, target, currentContext) {
|
|
254
|
+
if (item instanceof PromptBuilder) {
|
|
255
|
+
if (item.context && currentContext && item.context !== currentContext) {
|
|
256
|
+
throw new Error("Cannot merge builders with different contexts/providers");
|
|
257
|
+
}
|
|
258
|
+
target.push(...item.children);
|
|
259
|
+
return item.context ?? currentContext;
|
|
260
|
+
}
|
|
261
|
+
if (Array.isArray(item)) {
|
|
262
|
+
for (const node of item) {
|
|
263
|
+
target.push(node);
|
|
264
|
+
}
|
|
265
|
+
return currentContext;
|
|
266
|
+
}
|
|
267
|
+
if (isPromptNode(item)) {
|
|
268
|
+
target.push(item);
|
|
269
|
+
}
|
|
270
|
+
return currentContext;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Conditionally apply a transformation to the builder.
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* cria.prompt()
|
|
278
|
+
* .system("Hello")
|
|
279
|
+
* .when(hasContext, (p) => p.user("Context: ..."))
|
|
280
|
+
* .user("Question")
|
|
281
|
+
* ```
|
|
282
|
+
*/
|
|
283
|
+
when(condition, fn) {
|
|
284
|
+
return condition ? fn(this) : this;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Add a system message.
|
|
288
|
+
*/
|
|
289
|
+
system(content, opts) {
|
|
290
|
+
return this.addMessage("system", content, opts);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Add a user message.
|
|
294
|
+
*/
|
|
295
|
+
user(content, opts) {
|
|
296
|
+
return this.addMessage("user", content, opts);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Add an assistant message.
|
|
300
|
+
*/
|
|
301
|
+
assistant(content, opts) {
|
|
302
|
+
return this.addMessage("assistant", content, opts);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Add a tool result message.
|
|
306
|
+
*/
|
|
307
|
+
tool(result, opts) {
|
|
308
|
+
if (!this.boundProvider) {
|
|
309
|
+
throw new Error("Tool results require a bound provider. Bind one with cria.prompt(provider) or cria.prompt().provider(provider).");
|
|
310
|
+
}
|
|
311
|
+
const children = Array.isArray(result) ? [...result] : [result];
|
|
312
|
+
const element = createMessage("tool", children, opts?.id);
|
|
313
|
+
return this.addChild(element);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Add a message with a custom role.
|
|
317
|
+
*/
|
|
318
|
+
message(role, content, opts) {
|
|
319
|
+
return this.addMessage(role, content, opts);
|
|
320
|
+
}
|
|
321
|
+
async buildChildren() {
|
|
322
|
+
return await resolveScopeChildren(this.children);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Build the final PromptTree.
|
|
326
|
+
*/
|
|
327
|
+
async build() {
|
|
328
|
+
const element = {
|
|
329
|
+
kind: "scope",
|
|
330
|
+
priority: 0,
|
|
331
|
+
children: await this.buildChildren(),
|
|
332
|
+
...(this.context && { context: this.context }),
|
|
333
|
+
};
|
|
334
|
+
// Enforce message boundaries at build time so invalid trees fail early.
|
|
335
|
+
assertValidMessageScope(element);
|
|
336
|
+
return element;
|
|
337
|
+
}
|
|
338
|
+
async render(options) {
|
|
339
|
+
const element = await this.build();
|
|
340
|
+
const providerOverride = options?.provider;
|
|
341
|
+
if (providerOverride) {
|
|
342
|
+
return await renderPrompt(element, {
|
|
343
|
+
...(options ?? {}),
|
|
344
|
+
provider: providerOverride,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
if (!this.boundProvider) {
|
|
348
|
+
throw new Error("Rendering requires a provider. Bind one with cria.prompt(provider) or cria.prompt().provider(provider), or pass a provider to render().");
|
|
349
|
+
}
|
|
350
|
+
return await renderPrompt(element, {
|
|
351
|
+
...(options ?? {}),
|
|
352
|
+
provider: this.boundProvider,
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
addMessage(role, content, opts) {
|
|
356
|
+
// Normalize text-like inputs into typed parts so tool IO stays provider-bound.
|
|
357
|
+
const childrenPromise = typeof content === "function"
|
|
358
|
+
? content(new MessageBuilder([], this.context)).buildChildren()
|
|
359
|
+
: Promise.resolve(normalizeTextInput(content));
|
|
360
|
+
const element = childrenPromise.then((children) => createMessage(role, children, opts?.id));
|
|
361
|
+
return this.addChild(element);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// Resolution functions (colocated with builders).
|
|
365
|
+
// They resolve async children and enforce message/scope boundaries early.
|
|
366
|
+
// This avoids deferred checks and ensures type safety at build time.
|
|
367
|
+
function isPromptNode(value) {
|
|
368
|
+
return typeof value === "object" && value !== null && "kind" in value;
|
|
369
|
+
}
|
|
370
|
+
async function resolveMessageChildren(children) {
|
|
371
|
+
const list = Array.isArray(children) ? children : [children];
|
|
372
|
+
const resolved = await Promise.all(list.map((child) => resolveBuilderChild(child, "message")));
|
|
373
|
+
return resolved.flat();
|
|
374
|
+
}
|
|
375
|
+
async function resolveScopeChildren(children) {
|
|
376
|
+
const list = Array.isArray(children) ? children : [children];
|
|
377
|
+
const resolved = await Promise.all(list.map((child) => resolveBuilderChild(child, "scope")));
|
|
378
|
+
return resolved.flat();
|
|
379
|
+
}
|
|
380
|
+
async function resolveScopeContent(content) {
|
|
381
|
+
if (content instanceof PromptBuilder) {
|
|
382
|
+
const built = await content.build();
|
|
383
|
+
const nodes = [];
|
|
384
|
+
// Extract children so strategies operate on individual items, not a wrapper scope
|
|
385
|
+
for (const child of built.children) {
|
|
386
|
+
if (!isPromptNode(child)) {
|
|
387
|
+
throw new Error("Scope content must be prompt nodes.");
|
|
388
|
+
}
|
|
389
|
+
nodes.push(child);
|
|
390
|
+
}
|
|
391
|
+
return nodes;
|
|
392
|
+
}
|
|
393
|
+
if (content instanceof Promise) {
|
|
394
|
+
const value = await content;
|
|
395
|
+
return await resolveScopeContent(value);
|
|
396
|
+
}
|
|
397
|
+
if (Array.isArray(content)) {
|
|
398
|
+
const resolved = await Promise.all(content.map((item) => resolveScopeContent(item)));
|
|
399
|
+
return resolved.flat();
|
|
400
|
+
}
|
|
401
|
+
if (isPromptNode(content)) {
|
|
402
|
+
return [content];
|
|
403
|
+
}
|
|
404
|
+
throw new Error("Scope content must be prompt nodes or prompt builders.");
|
|
405
|
+
}
|
|
406
|
+
async function resolveBuilderChild(child, target) {
|
|
407
|
+
const resolved = await resolveBuilderChildPromise(child);
|
|
408
|
+
if (target === "message") {
|
|
409
|
+
return resolveMessageChild(resolved);
|
|
410
|
+
}
|
|
411
|
+
return await resolveScopeChild(resolved);
|
|
412
|
+
}
|
|
413
|
+
async function resolveBuilderChildPromise(child) {
|
|
414
|
+
if (child instanceof Promise) {
|
|
415
|
+
return await child;
|
|
416
|
+
}
|
|
417
|
+
return child;
|
|
418
|
+
}
|
|
419
|
+
function resolveMessageChild(child) {
|
|
420
|
+
if (child instanceof PromptBuilder) {
|
|
421
|
+
throw new Error("Prompt builders cannot be nested inside messages.");
|
|
422
|
+
}
|
|
423
|
+
if (typeof child === "string") {
|
|
424
|
+
return [textPart(child)];
|
|
425
|
+
}
|
|
426
|
+
if (typeof child === "number" || typeof child === "boolean") {
|
|
427
|
+
return [textPart(String(child))];
|
|
428
|
+
}
|
|
429
|
+
if (isPromptPart(child)) {
|
|
430
|
+
return [child];
|
|
431
|
+
}
|
|
432
|
+
if (isPromptNode(child)) {
|
|
433
|
+
throw new Error("Prompt nodes are not allowed inside messages.");
|
|
434
|
+
}
|
|
435
|
+
throw new Error("Unsupported child type.");
|
|
436
|
+
}
|
|
437
|
+
async function resolveScopeChild(child) {
|
|
438
|
+
if (child instanceof PromptBuilder) {
|
|
439
|
+
const built = await child.build();
|
|
440
|
+
if (!isPromptNode(built)) {
|
|
441
|
+
throw new Error("Scope content must be prompt nodes.");
|
|
442
|
+
}
|
|
443
|
+
return [built];
|
|
444
|
+
}
|
|
445
|
+
if (typeof child === "string" ||
|
|
446
|
+
typeof child === "number" ||
|
|
447
|
+
typeof child === "boolean") {
|
|
448
|
+
throw new Error("Text nodes are only allowed inside messages.");
|
|
449
|
+
}
|
|
450
|
+
if (isPromptPart(child)) {
|
|
451
|
+
throw new Error("Message parts are only allowed inside messages.");
|
|
452
|
+
}
|
|
453
|
+
if (isPromptNode(child)) {
|
|
454
|
+
return [child];
|
|
455
|
+
}
|
|
456
|
+
throw new Error("Unsupported child type.");
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/dsl/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluent DSL for building prompts.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { cria } from "@fastpaca/cria";
|
|
7
|
+
*
|
|
8
|
+
* const prompt = await cria
|
|
9
|
+
* .prompt(provider)
|
|
10
|
+
* .system("You are a helpful assistant.")
|
|
11
|
+
* .user("What is the capital of France?")
|
|
12
|
+
* .render({ budget: 4000 });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
export type { BuilderChild, Prompt, ScopeContent, } from "./builder";
|
|
18
|
+
export { BuilderBase, MessageBuilder, PromptBuilder, } from "./builder";
|
|
19
|
+
export type { StoredSummary, Summarizer, SummarizerContext, } from "./summary";
|
|
20
|
+
export { c, type TextInput } from "./templating";
|
|
21
|
+
export type { ResultFormatter } from "./vector-search";
|
|
22
|
+
import type { ModelProvider, PromptMessageNode, PromptRole, PromptScope, ProviderToolIO, ScopeChildren } from "../types";
|
|
23
|
+
import { PromptBuilder } from "./builder";
|
|
24
|
+
import { type TextInput, c as templateC } from "./templating";
|
|
25
|
+
/** Create a standalone message node */
|
|
26
|
+
declare function message<TToolIO extends ProviderToolIO>(role: PromptRole, content: TextInput<TToolIO>): PromptMessageNode<TToolIO>;
|
|
27
|
+
/** Create a standalone scope node */
|
|
28
|
+
declare function scope<TToolIO extends ProviderToolIO>(children: ScopeChildren<TToolIO>, opts?: {
|
|
29
|
+
priority?: number;
|
|
30
|
+
id?: string;
|
|
31
|
+
}): PromptScope<TToolIO>;
|
|
32
|
+
declare function createPrompt(): PromptBuilder<unknown>;
|
|
33
|
+
declare function createPrompt<TProvider extends ModelProvider<unknown, ProviderToolIO>>(provider: TProvider): PromptBuilder<TProvider>;
|
|
34
|
+
/**
|
|
35
|
+
* Namespace for building prompts as code.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* import { cria } from "@fastpaca/cria";
|
|
40
|
+
*
|
|
41
|
+
* // Full prompt builder
|
|
42
|
+
* const prompt = cria
|
|
43
|
+
* .prompt()
|
|
44
|
+
* .system("You are helpful.")
|
|
45
|
+
* .user("Hello!")
|
|
46
|
+
* .build();
|
|
47
|
+
*
|
|
48
|
+
* // Standalone nodes
|
|
49
|
+
* const msg = cria.user("Hello!");
|
|
50
|
+
* const root = cria.scope([msg]);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare const cria: {
|
|
54
|
+
readonly prompt: typeof createPrompt;
|
|
55
|
+
readonly c: typeof templateC;
|
|
56
|
+
readonly merge: (...builders: PromptBuilder[]) => PromptBuilder<unknown>;
|
|
57
|
+
readonly message: typeof message;
|
|
58
|
+
readonly scope: typeof scope;
|
|
59
|
+
readonly user: (content: TextInput) => PromptMessageNode<ProviderToolIO>;
|
|
60
|
+
readonly system: (content: TextInput) => PromptMessageNode<ProviderToolIO>;
|
|
61
|
+
readonly assistant: (content: TextInput) => PromptMessageNode<ProviderToolIO>;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Standalone function to create a new prompt builder.
|
|
65
|
+
*/
|
|
66
|
+
export declare const prompt: typeof createPrompt;
|
|
67
|
+
/**
|
|
68
|
+
* Merge multiple builders into one (zod-like merge).
|
|
69
|
+
*/
|
|
70
|
+
export declare const merge: (...builders: PromptBuilder[]) => PromptBuilder;
|
|
71
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,YAAY,EACV,YAAY,EACZ,MAAM,EACN,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,CAAC,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGjD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAEL,KAAK,SAAS,EACd,CAAC,IAAI,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,uCAAuC;AACvC,iBAAS,OAAO,CAAC,OAAO,SAAS,cAAc,EAC7C,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,GAC1B,iBAAiB,CAAC,OAAO,CAAC,CAE5B;AAED,qCAAqC;AACrC,iBAAS,KAAK,CAAC,OAAO,SAAS,cAAc,EAC3C,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,WAAW,CAAC,OAAO,CAAC,CAEtB;AAED,iBAAS,YAAY,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AAChD,iBAAS,YAAY,CAAC,SAAS,SAAS,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,EAC5E,QAAQ,EAAE,SAAS,GAClB,aAAa,CAAC,SAAS,CAAC,CAAC;AAQ5B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,IAAI;;;kCAGM,aAAa,EAAE;;;6BAUpB,SAAS;+BACP,SAAS;kCACN,SAAS;CACtB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM,qBAAe,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,UAAU,aAAa,EAAE,KAAG,aAC5B,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluent DSL for building prompts.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { cria } from "@fastpaca/cria";
|
|
7
|
+
*
|
|
8
|
+
* const prompt = await cria
|
|
9
|
+
* .prompt(provider)
|
|
10
|
+
* .system("You are a helpful assistant.")
|
|
11
|
+
* .user("What is the capital of France?")
|
|
12
|
+
* .render({ budget: 4000 });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
// biome-ignore lint/performance/noBarrelFile: dsl/index.ts is the primary DSL module entry point, not a barrel file
|
|
18
|
+
export { BuilderBase, MessageBuilder, PromptBuilder, } from "./builder";
|
|
19
|
+
export { c } from "./templating";
|
|
20
|
+
import { PromptBuilder } from "./builder";
|
|
21
|
+
import { createMessage, createScope } from "./strategies";
|
|
22
|
+
// Import for namespace
|
|
23
|
+
import { normalizeTextInput, c as templateC, } from "./templating";
|
|
24
|
+
/** Create a standalone message node */
|
|
25
|
+
function message(role, content) {
|
|
26
|
+
return createMessage(role, normalizeTextInput(content));
|
|
27
|
+
}
|
|
28
|
+
/** Create a standalone scope node */
|
|
29
|
+
function scope(children, opts) {
|
|
30
|
+
return createScope(children, opts);
|
|
31
|
+
}
|
|
32
|
+
function createPrompt(provider) {
|
|
33
|
+
if (provider === undefined) {
|
|
34
|
+
return PromptBuilder.create();
|
|
35
|
+
}
|
|
36
|
+
return PromptBuilder.create(provider);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Namespace for building prompts as code.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* import { cria } from "@fastpaca/cria";
|
|
44
|
+
*
|
|
45
|
+
* // Full prompt builder
|
|
46
|
+
* const prompt = cria
|
|
47
|
+
* .prompt()
|
|
48
|
+
* .system("You are helpful.")
|
|
49
|
+
* .user("Hello!")
|
|
50
|
+
* .build();
|
|
51
|
+
*
|
|
52
|
+
* // Standalone nodes
|
|
53
|
+
* const msg = cria.user("Hello!");
|
|
54
|
+
* const root = cria.scope([msg]);
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export const cria = {
|
|
58
|
+
prompt: createPrompt,
|
|
59
|
+
c: templateC,
|
|
60
|
+
merge: (...builders) => {
|
|
61
|
+
const [first, ...rest] = builders;
|
|
62
|
+
if (!first) {
|
|
63
|
+
return PromptBuilder.create();
|
|
64
|
+
}
|
|
65
|
+
return first.merge(...rest);
|
|
66
|
+
},
|
|
67
|
+
// Standalone node creators
|
|
68
|
+
message,
|
|
69
|
+
scope,
|
|
70
|
+
user: (content) => message("user", content),
|
|
71
|
+
system: (content) => message("system", content),
|
|
72
|
+
assistant: (content) => message("assistant", content),
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Standalone function to create a new prompt builder.
|
|
76
|
+
*/
|
|
77
|
+
export const prompt = createPrompt;
|
|
78
|
+
/**
|
|
79
|
+
* Merge multiple builders into one (zod-like merge).
|
|
80
|
+
*/
|
|
81
|
+
export const merge = (...builders) => cria.merge(...builders);
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,oHAAoH;AACpH,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,WAAW,CAAC;AAOnB,OAAO,EAAE,CAAC,EAAkB,MAAM,cAAc,CAAC;AAajD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,uBAAuB;AACvB,OAAO,EACL,kBAAkB,EAElB,CAAC,IAAI,SAAS,GACf,MAAM,cAAc,CAAC;AAEtB,uCAAuC;AACvC,SAAS,OAAO,CACd,IAAgB,EAChB,OAA2B;IAE3B,OAAO,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAU,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,qCAAqC;AACrC,SAAS,KAAK,CACZ,QAAgC,EAChC,IAAyC;IAEzC,OAAO,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAMD,SAAS,YAAY,CAAC,QAAiD;IACrE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,MAAM,EAAE,YAAY;IACpB,CAAC,EAAE,SAAS;IACZ,KAAK,EAAE,CAAC,GAAG,QAAyB,EAAE,EAAE;QACtC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,2BAA2B;IAC3B,OAAO;IACP,KAAK;IACL,IAAI,EAAE,CAAC,OAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,MAAM,EAAE,CAAC,OAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC1D,SAAS,EAAE,CAAC,OAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;CACxD,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,QAAyB,EAAiB,EAAE,CACnE,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy factories and component helpers for the DSL module.
|
|
3
|
+
*/
|
|
4
|
+
import type { MessageChildren, PromptMessageNode, PromptPart, PromptRole, PromptScope, ProviderToolIO, ScopeChildren, Strategy } from "../types";
|
|
5
|
+
/**
|
|
6
|
+
* Create a scope node with optional priority, strategy, and id.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createScope<TToolIO extends ProviderToolIO>(children: ScopeChildren<TToolIO>, opts?: {
|
|
9
|
+
priority?: number;
|
|
10
|
+
strategy?: Strategy;
|
|
11
|
+
id?: string;
|
|
12
|
+
}): PromptScope<TToolIO>;
|
|
13
|
+
/**
|
|
14
|
+
* Create a message node with role and children.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createMessage<TToolIO extends ProviderToolIO>(role: PromptRole, children: MessageChildren<TToolIO>, id?: string): PromptMessageNode<TToolIO>;
|
|
17
|
+
/**
|
|
18
|
+
* Create a truncate strategy that removes children from one end.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createTruncateStrategy(budget: number, from: "start" | "end"): Strategy;
|
|
21
|
+
/**
|
|
22
|
+
* Create an omit strategy that removes the entire scope.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createOmitStrategy(): Strategy;
|
|
25
|
+
/**
|
|
26
|
+
* Format examples into a text prompt part.
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatExamples<TToolIO extends ProviderToolIO>(title: string, items: readonly string[], separator?: string): PromptPart<TToolIO>;
|
|
29
|
+
//# sourceMappingURL=strategies.d.ts.map
|