@fastpaca/cria 1.4.0 → 1.6.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 +37 -27
- package/dist/dsl/builder.d.ts +275 -0
- package/dist/dsl/builder.d.ts.map +1 -0
- package/dist/dsl/builder.js +569 -0
- package/dist/dsl/builder.js.map +1 -0
- package/dist/dsl/index.d.ts +78 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +92 -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 +51 -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/{components → dsl}/vector-search.d.ts +11 -34
- 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 +16 -2
- package/dist/eval/index.d.ts.map +1 -1
- package/dist/eval/judge.d.ts +7 -5
- package/dist/eval/judge.d.ts.map +1 -1
- package/dist/eval/judge.js +18 -5
- package/dist/eval/judge.js.map +1 -1
- package/dist/index.d.ts +12 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/instrumentation/otel.js +5 -14
- package/dist/instrumentation/otel.js.map +1 -1
- package/dist/memory/chroma/index.js +4 -4
- package/dist/protocols/chat-completions.d.ts +38 -0
- package/dist/protocols/chat-completions.d.ts.map +1 -0
- package/dist/protocols/chat-completions.js +94 -0
- package/dist/protocols/chat-completions.js.map +1 -0
- package/dist/protocols/responses.d.ts +80 -0
- package/dist/protocols/responses.d.ts.map +1 -0
- package/dist/protocols/responses.js +148 -0
- package/dist/protocols/responses.js.map +1 -0
- package/dist/provider.d.ts +94 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +60 -0
- package/dist/provider.js.map +1 -0
- package/dist/providers/ai-sdk.d.ts +44 -0
- package/dist/providers/ai-sdk.d.ts.map +1 -0
- package/dist/providers/ai-sdk.js +144 -0
- package/dist/providers/ai-sdk.js.map +1 -0
- package/dist/providers/anthropic.d.ts +48 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +279 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/openai.d.ts +64 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +411 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/render.d.ts +25 -22
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +194 -63
- package/dist/render.js.map +1 -1
- package/dist/testing/plaintext.d.ts +29 -0
- package/dist/testing/plaintext.d.ts.map +1 -0
- package/dist/testing/plaintext.js +106 -0
- package/dist/testing/plaintext.js.map +1 -0
- package/dist/types.d.ts +186 -174
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +22 -104
- package/dist/types.js.map +1 -1
- package/package.json +25 -49
- 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 -89
- 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.map +0 -1
- package/dist/components/vector-search.js.map +0 -1
- package/dist/dsl.d.ts +0 -233
- package/dist/dsl.d.ts.map +0 -1
- package/dist/dsl.js +0 -428
- package/dist/dsl.js.map +0 -1
- package/dist/integrations/ai-sdk.d.ts +0 -22
- package/dist/integrations/ai-sdk.d.ts.map +0 -1
- package/dist/integrations/ai-sdk.js +0 -172
- package/dist/integrations/ai-sdk.js.map +0 -1
- package/dist/integrations/anthropic.d.ts +0 -50
- package/dist/integrations/anthropic.d.ts.map +0 -1
- package/dist/integrations/anthropic.js +0 -220
- package/dist/integrations/anthropic.js.map +0 -1
- package/dist/integrations/openai.d.ts +0 -48
- package/dist/integrations/openai.d.ts.map +0 -1
- package/dist/integrations/openai.js +0 -265
- package/dist/integrations/openai.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/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,569 @@
|
|
|
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, this.boundProvider?.codec).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, this.boundProvider?.codec).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 provider-native input (requires a bound provider).
|
|
200
|
+
*/
|
|
201
|
+
input(content) {
|
|
202
|
+
const provider = this.boundProvider;
|
|
203
|
+
if (!hasProvider(provider)) {
|
|
204
|
+
throw new Error("Inputs require a bound provider.");
|
|
205
|
+
}
|
|
206
|
+
const layout = provider.codec.parse(content);
|
|
207
|
+
return this.addChildren(promptLayoutToNodes(layout));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Add a PromptLayout input.
|
|
211
|
+
*/
|
|
212
|
+
inputLayout(content) {
|
|
213
|
+
return this.addChildren(promptLayoutToNodes(content));
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Add vector search results (async, resolved at render time).
|
|
217
|
+
*/
|
|
218
|
+
vectorSearch(opts) {
|
|
219
|
+
const asyncElement = VectorSearch({
|
|
220
|
+
store: opts.store,
|
|
221
|
+
query: opts.query,
|
|
222
|
+
...(opts.limit !== undefined ? { limit: opts.limit } : {}),
|
|
223
|
+
...(opts.threshold !== undefined ? { threshold: opts.threshold } : {}),
|
|
224
|
+
...(opts.formatter ? { formatResults: opts.formatter } : {}),
|
|
225
|
+
...(opts.priority !== undefined ? { priority: opts.priority } : {}),
|
|
226
|
+
...(opts.id !== undefined ? { id: opts.id } : {}),
|
|
227
|
+
});
|
|
228
|
+
return this.addChild(asyncElement);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Add content that will be summarized when over budget.
|
|
232
|
+
*/
|
|
233
|
+
summary(content, opts) {
|
|
234
|
+
const element = resolveScopeContent(content, this.boundProvider?.codec).then((children) => Summary({
|
|
235
|
+
id: opts.id,
|
|
236
|
+
store: opts.store,
|
|
237
|
+
children,
|
|
238
|
+
...(opts.summarize ? { summarize: opts.summarize } : {}),
|
|
239
|
+
...(opts.priority !== undefined ? { priority: opts.priority } : {}),
|
|
240
|
+
}));
|
|
241
|
+
return this.addChild(element);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Keep only the last N messages from the content.
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```typescript
|
|
248
|
+
* cria.prompt()
|
|
249
|
+
* .system("You are helpful.")
|
|
250
|
+
* .last(conversationHistory, { n: 20 })
|
|
251
|
+
* .user("What's next?")
|
|
252
|
+
* ```
|
|
253
|
+
*/
|
|
254
|
+
last(content, opts) {
|
|
255
|
+
const element = resolveScopeContent(content, this.boundProvider?.codec).then((children) => {
|
|
256
|
+
// Filter to only message nodes and take the last N
|
|
257
|
+
const messages = children.filter((child) => child.kind === "message");
|
|
258
|
+
const lastN = messages.slice(-opts.n);
|
|
259
|
+
return createScope(lastN, opts.id ? { id: opts.id } : undefined);
|
|
260
|
+
});
|
|
261
|
+
return this.addChild(element);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Add a raw PromptNode (escape hatch for advanced usage).
|
|
265
|
+
*/
|
|
266
|
+
raw(element) {
|
|
267
|
+
return this.addChild(element);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Merge builders or raw nodes into this one.
|
|
271
|
+
* Accepts PromptBuilders, individual PromptNodes, or arrays of PromptNodes.
|
|
272
|
+
*
|
|
273
|
+
* @example
|
|
274
|
+
* ```typescript
|
|
275
|
+
* // Merge builders
|
|
276
|
+
* cria.prompt().system("A").merge(otherBuilder)
|
|
277
|
+
*
|
|
278
|
+
* // Merge raw nodes
|
|
279
|
+
* cria.prompt().system("A").merge(...scope.children)
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
merge(...items) {
|
|
283
|
+
const newChildren = [...this.children];
|
|
284
|
+
let nextContext = this.context;
|
|
285
|
+
for (const item of items) {
|
|
286
|
+
nextContext = this.mergeItem(item, newChildren, nextContext);
|
|
287
|
+
}
|
|
288
|
+
return this.create(newChildren, nextContext);
|
|
289
|
+
}
|
|
290
|
+
mergeItem(item, target, currentContext) {
|
|
291
|
+
if (item instanceof PromptBuilder) {
|
|
292
|
+
if (item.context && currentContext && item.context !== currentContext) {
|
|
293
|
+
throw new Error("Cannot merge builders with different contexts/providers");
|
|
294
|
+
}
|
|
295
|
+
target.push(...item.children);
|
|
296
|
+
return item.context ?? currentContext;
|
|
297
|
+
}
|
|
298
|
+
if (Array.isArray(item)) {
|
|
299
|
+
for (const node of item) {
|
|
300
|
+
target.push(node);
|
|
301
|
+
}
|
|
302
|
+
return currentContext;
|
|
303
|
+
}
|
|
304
|
+
if (isPromptNode(item)) {
|
|
305
|
+
target.push(item);
|
|
306
|
+
}
|
|
307
|
+
return currentContext;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Conditionally apply a transformation to the builder.
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* ```typescript
|
|
314
|
+
* cria.prompt()
|
|
315
|
+
* .system("Hello")
|
|
316
|
+
* .when(hasContext, (p) => p.user("Context: ..."))
|
|
317
|
+
* .user("Question")
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
when(condition, fn) {
|
|
321
|
+
return condition ? fn(this) : this;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Add a system message.
|
|
325
|
+
*/
|
|
326
|
+
system(content, opts) {
|
|
327
|
+
return this.addMessage("system", content, opts);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Add a developer message.
|
|
331
|
+
*/
|
|
332
|
+
developer(content, opts) {
|
|
333
|
+
return this.addMessage("developer", content, opts);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Add a user message.
|
|
337
|
+
*/
|
|
338
|
+
user(content, opts) {
|
|
339
|
+
return this.addMessage("user", content, opts);
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Add an assistant message.
|
|
343
|
+
*/
|
|
344
|
+
assistant(content, opts) {
|
|
345
|
+
return this.addMessage("assistant", content, opts);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Add a tool result message.
|
|
349
|
+
*/
|
|
350
|
+
tool(result, opts) {
|
|
351
|
+
if (!this.boundProvider) {
|
|
352
|
+
throw new Error("Tool results require a bound provider. Bind one with cria.prompt(provider) or cria.prompt().provider(provider).");
|
|
353
|
+
}
|
|
354
|
+
const children = Array.isArray(result) ? [...result] : [result];
|
|
355
|
+
const element = createMessage("tool", children, opts?.id);
|
|
356
|
+
return this.addChild(element);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Add a message with a custom role.
|
|
360
|
+
*/
|
|
361
|
+
message(role, content, opts) {
|
|
362
|
+
return this.addMessage(role, content, opts);
|
|
363
|
+
}
|
|
364
|
+
async buildChildren() {
|
|
365
|
+
return await resolveScopeChildren(this.children);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Build the final PromptTree.
|
|
369
|
+
*/
|
|
370
|
+
async build() {
|
|
371
|
+
const element = {
|
|
372
|
+
kind: "scope",
|
|
373
|
+
priority: 0,
|
|
374
|
+
children: await this.buildChildren(),
|
|
375
|
+
...(this.context && { context: this.context }),
|
|
376
|
+
};
|
|
377
|
+
// Enforce message boundaries at build time so invalid trees fail early.
|
|
378
|
+
assertValidMessageScope(element);
|
|
379
|
+
return element;
|
|
380
|
+
}
|
|
381
|
+
async render(options) {
|
|
382
|
+
const element = await this.build();
|
|
383
|
+
const providerOverride = options?.provider;
|
|
384
|
+
if (providerOverride) {
|
|
385
|
+
return await renderPrompt(element, {
|
|
386
|
+
...(options ?? {}),
|
|
387
|
+
provider: providerOverride,
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
if (!this.boundProvider) {
|
|
391
|
+
throw new Error("Rendering requires a provider. Bind one with cria.prompt(provider) or cria.prompt().provider(provider), or pass a provider to render().");
|
|
392
|
+
}
|
|
393
|
+
return await renderPrompt(element, {
|
|
394
|
+
...(options ?? {}),
|
|
395
|
+
provider: this.boundProvider,
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
addMessage(role, content, opts) {
|
|
399
|
+
// Normalize text-like inputs into typed parts so tool IO stays provider-bound.
|
|
400
|
+
const childrenPromise = typeof content === "function"
|
|
401
|
+
? content(new MessageBuilder([], this.context)).buildChildren()
|
|
402
|
+
: Promise.resolve(normalizeTextInput(content));
|
|
403
|
+
const element = childrenPromise.then((children) => createMessage(role, children, opts?.id));
|
|
404
|
+
return this.addChild(element);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// Resolution functions (colocated with builders).
|
|
408
|
+
// They resolve async children and enforce message/scope boundaries early.
|
|
409
|
+
// This avoids deferred checks and ensures type safety at build time.
|
|
410
|
+
function isPromptNode(value) {
|
|
411
|
+
if (typeof value !== "object" || value === null) {
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
if (!("kind" in value)) {
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
const kind = value.kind;
|
|
418
|
+
return kind === "scope" || kind === "message";
|
|
419
|
+
}
|
|
420
|
+
async function resolveMessageChildren(children) {
|
|
421
|
+
const list = Array.isArray(children) ? children : [children];
|
|
422
|
+
const resolved = await Promise.all(list.map((child) => resolveBuilderChild(child, "message")));
|
|
423
|
+
return resolved.flat();
|
|
424
|
+
}
|
|
425
|
+
async function resolveScopeChildren(children) {
|
|
426
|
+
const list = Array.isArray(children) ? children : [children];
|
|
427
|
+
const resolved = await Promise.all(list.map((child) => resolveBuilderChild(child, "scope")));
|
|
428
|
+
return resolved.flat();
|
|
429
|
+
}
|
|
430
|
+
async function resolveScopeContent(content, codec) {
|
|
431
|
+
// Scope content can be trees, builders, layouts, or provider-native inputs.
|
|
432
|
+
// Provider-native inputs are decoded back into PromptLayout via the codec.
|
|
433
|
+
if (content instanceof PromptBuilder) {
|
|
434
|
+
const built = await content.build();
|
|
435
|
+
const nodes = [];
|
|
436
|
+
// Extract children so strategies operate on individual items, not a wrapper scope
|
|
437
|
+
for (const child of built.children) {
|
|
438
|
+
if (!isPromptNode(child)) {
|
|
439
|
+
throw new Error("Scope content must be prompt nodes.");
|
|
440
|
+
}
|
|
441
|
+
nodes.push(child);
|
|
442
|
+
}
|
|
443
|
+
return nodes;
|
|
444
|
+
}
|
|
445
|
+
if (content instanceof Promise) {
|
|
446
|
+
const value = await content;
|
|
447
|
+
return await resolveScopeContent(value, codec);
|
|
448
|
+
}
|
|
449
|
+
if (Array.isArray(content)) {
|
|
450
|
+
const resolved = await Promise.all(content.map((item) => resolveScopeContent(item, codec)));
|
|
451
|
+
return resolved.flat();
|
|
452
|
+
}
|
|
453
|
+
if (isPromptNode(content)) {
|
|
454
|
+
return [content];
|
|
455
|
+
}
|
|
456
|
+
if (isInputLayout(content)) {
|
|
457
|
+
return promptLayoutToNodes(content.value);
|
|
458
|
+
}
|
|
459
|
+
if (isPromptInput(content)) {
|
|
460
|
+
if (!isCodecForInput(codec, content)) {
|
|
461
|
+
throw new Error("Inputs require a provider with a codec.");
|
|
462
|
+
}
|
|
463
|
+
return resolveInputContent(content, codec);
|
|
464
|
+
}
|
|
465
|
+
throw new Error("Scope content must be prompt nodes, prompt builders, or input wrappers.");
|
|
466
|
+
}
|
|
467
|
+
function resolveInputContent(content, codec) {
|
|
468
|
+
const layout = codec.parse(content.value);
|
|
469
|
+
return promptLayoutToNodes(layout);
|
|
470
|
+
}
|
|
471
|
+
// Type-only narrowing: codec comes from the bound provider.
|
|
472
|
+
function isCodecForInput(codec, _content) {
|
|
473
|
+
return Boolean(codec);
|
|
474
|
+
}
|
|
475
|
+
function promptLayoutToNodes(layout) {
|
|
476
|
+
return layout.map((message) => promptMessageToNode(message));
|
|
477
|
+
}
|
|
478
|
+
function promptMessageToNode(message) {
|
|
479
|
+
if (message.role === "tool") {
|
|
480
|
+
const part = {
|
|
481
|
+
type: "tool-result",
|
|
482
|
+
toolCallId: message.toolCallId,
|
|
483
|
+
toolName: message.toolName,
|
|
484
|
+
output: message.output,
|
|
485
|
+
};
|
|
486
|
+
return createMessage("tool", [part]);
|
|
487
|
+
}
|
|
488
|
+
if (message.role === "assistant") {
|
|
489
|
+
const parts = [];
|
|
490
|
+
if (message.text) {
|
|
491
|
+
parts.push(textPart(message.text));
|
|
492
|
+
}
|
|
493
|
+
if (message.reasoning) {
|
|
494
|
+
parts.push({ type: "reasoning", text: message.reasoning });
|
|
495
|
+
}
|
|
496
|
+
if (message.toolCalls) {
|
|
497
|
+
parts.push(...message.toolCalls);
|
|
498
|
+
}
|
|
499
|
+
return createMessage("assistant", parts);
|
|
500
|
+
}
|
|
501
|
+
const parts = message.text ? [textPart(message.text)] : [];
|
|
502
|
+
return createMessage(message.role, parts);
|
|
503
|
+
}
|
|
504
|
+
function isInputLayout(value) {
|
|
505
|
+
return hasKind(value) && value.kind === "input-layout";
|
|
506
|
+
}
|
|
507
|
+
function isPromptInput(value) {
|
|
508
|
+
return hasKind(value) && value.kind === "input";
|
|
509
|
+
}
|
|
510
|
+
function hasKind(value) {
|
|
511
|
+
return typeof value === "object" && value !== null && "kind" in value;
|
|
512
|
+
}
|
|
513
|
+
// Narrow a bound provider so codec usage preserves render/tool IO types.
|
|
514
|
+
function hasProvider(provider) {
|
|
515
|
+
return Boolean(provider);
|
|
516
|
+
}
|
|
517
|
+
async function resolveBuilderChild(child, target) {
|
|
518
|
+
const resolved = await resolveBuilderChildPromise(child);
|
|
519
|
+
if (target === "message") {
|
|
520
|
+
return resolveMessageChild(resolved);
|
|
521
|
+
}
|
|
522
|
+
return await resolveScopeChild(resolved);
|
|
523
|
+
}
|
|
524
|
+
async function resolveBuilderChildPromise(child) {
|
|
525
|
+
if (child instanceof Promise) {
|
|
526
|
+
return await child;
|
|
527
|
+
}
|
|
528
|
+
return child;
|
|
529
|
+
}
|
|
530
|
+
function resolveMessageChild(child) {
|
|
531
|
+
if (child instanceof PromptBuilder) {
|
|
532
|
+
throw new Error("Prompt builders cannot be nested inside messages.");
|
|
533
|
+
}
|
|
534
|
+
if (typeof child === "string") {
|
|
535
|
+
return [textPart(child)];
|
|
536
|
+
}
|
|
537
|
+
if (typeof child === "number" || typeof child === "boolean") {
|
|
538
|
+
return [textPart(String(child))];
|
|
539
|
+
}
|
|
540
|
+
if (isPromptPart(child)) {
|
|
541
|
+
return [child];
|
|
542
|
+
}
|
|
543
|
+
if (isPromptNode(child)) {
|
|
544
|
+
throw new Error("Prompt nodes are not allowed inside messages.");
|
|
545
|
+
}
|
|
546
|
+
throw new Error("Unsupported child type.");
|
|
547
|
+
}
|
|
548
|
+
async function resolveScopeChild(child) {
|
|
549
|
+
if (child instanceof PromptBuilder) {
|
|
550
|
+
const built = await child.build();
|
|
551
|
+
if (!isPromptNode(built)) {
|
|
552
|
+
throw new Error("Scope content must be prompt nodes.");
|
|
553
|
+
}
|
|
554
|
+
return [built];
|
|
555
|
+
}
|
|
556
|
+
if (typeof child === "string" ||
|
|
557
|
+
typeof child === "number" ||
|
|
558
|
+
typeof child === "boolean") {
|
|
559
|
+
throw new Error("Text nodes are only allowed inside messages.");
|
|
560
|
+
}
|
|
561
|
+
if (isPromptPart(child)) {
|
|
562
|
+
throw new Error("Message parts are only allowed inside messages.");
|
|
563
|
+
}
|
|
564
|
+
if (isPromptNode(child)) {
|
|
565
|
+
return [child];
|
|
566
|
+
}
|
|
567
|
+
throw new Error("Unsupported child type.");
|
|
568
|
+
}
|
|
569
|
+
//# 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,78 @@
|
|
|
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 { InputLayout, ModelProvider, PromptInput } from "../provider";
|
|
23
|
+
import type { PromptLayout, PromptMessageNode, PromptRole, PromptScope, ProviderToolIO, ScopeChildren } from "../types";
|
|
24
|
+
import { PromptBuilder } from "./builder";
|
|
25
|
+
import { type TextInput, c as templateC } from "./templating";
|
|
26
|
+
/** Create a standalone message node */
|
|
27
|
+
declare function message<TToolIO extends ProviderToolIO>(role: PromptRole, content: TextInput<TToolIO>): PromptMessageNode<TToolIO>;
|
|
28
|
+
/** Create a standalone scope node */
|
|
29
|
+
declare function scope<TToolIO extends ProviderToolIO>(children: ScopeChildren<TToolIO>, opts?: {
|
|
30
|
+
priority?: number;
|
|
31
|
+
id?: string;
|
|
32
|
+
}): PromptScope<TToolIO>;
|
|
33
|
+
declare function input<TRendered>(value: TRendered): PromptInput<TRendered>;
|
|
34
|
+
declare function inputLayout<TToolIO extends ProviderToolIO>(value: PromptLayout<TToolIO>): InputLayout<TToolIO>;
|
|
35
|
+
declare function createPrompt(): PromptBuilder<unknown>;
|
|
36
|
+
declare function createPrompt<TProvider extends ModelProvider<unknown, ProviderToolIO>>(provider: TProvider): PromptBuilder<TProvider>;
|
|
37
|
+
/**
|
|
38
|
+
* Namespace for building prompts as code.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* import { cria } from "@fastpaca/cria";
|
|
43
|
+
*
|
|
44
|
+
* // Full prompt builder
|
|
45
|
+
* const prompt = cria
|
|
46
|
+
* .prompt()
|
|
47
|
+
* .system("You are helpful.")
|
|
48
|
+
* .user("Hello!")
|
|
49
|
+
* .build();
|
|
50
|
+
*
|
|
51
|
+
* // Standalone nodes
|
|
52
|
+
* const msg = cria.user("Hello!");
|
|
53
|
+
* const root = cria.scope([msg]);
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare const cria: {
|
|
57
|
+
readonly prompt: typeof createPrompt;
|
|
58
|
+
readonly c: typeof templateC;
|
|
59
|
+
readonly merge: (...builders: PromptBuilder[]) => PromptBuilder<unknown>;
|
|
60
|
+
readonly message: typeof message;
|
|
61
|
+
readonly scope: typeof scope;
|
|
62
|
+
readonly user: (content: TextInput) => PromptMessageNode<ProviderToolIO>;
|
|
63
|
+
readonly system: (content: TextInput) => PromptMessageNode<ProviderToolIO>;
|
|
64
|
+
readonly developer: (content: TextInput) => PromptMessageNode<ProviderToolIO>;
|
|
65
|
+
readonly assistant: (content: TextInput) => PromptMessageNode<ProviderToolIO>;
|
|
66
|
+
readonly input: typeof input;
|
|
67
|
+
readonly inputLayout: typeof inputLayout;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Standalone function to create a new prompt builder.
|
|
71
|
+
*/
|
|
72
|
+
export declare const prompt: typeof createPrompt;
|
|
73
|
+
/**
|
|
74
|
+
* Merge multiple builders into one (zod-like merge).
|
|
75
|
+
*/
|
|
76
|
+
export declare const merge: (...builders: PromptBuilder[]) => PromptBuilder;
|
|
77
|
+
export { input, inputLayout };
|
|
78
|
+
//# 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,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EACV,YAAY,EACZ,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,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAElE;AAED,iBAAS,WAAW,CAAC,OAAO,SAAS,cAAc,EACjD,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAC3B,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;kCACT,SAAS;;;CAGtB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM,qBAAe,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,UAAU,aAAa,EAAE,KAAG,aAC5B,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC"}
|