@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.
Files changed (119) hide show
  1. package/README.md +51 -26
  2. package/dist/dsl/builder.d.ts +243 -0
  3. package/dist/dsl/builder.d.ts.map +1 -0
  4. package/dist/dsl/builder.js +458 -0
  5. package/dist/dsl/builder.js.map +1 -0
  6. package/dist/dsl/index.d.ts +71 -0
  7. package/dist/dsl/index.d.ts.map +1 -0
  8. package/dist/dsl/index.js +82 -0
  9. package/dist/dsl/index.js.map +1 -0
  10. package/dist/dsl/strategies.d.ts +29 -0
  11. package/dist/dsl/strategies.d.ts.map +1 -0
  12. package/dist/dsl/strategies.js +62 -0
  13. package/dist/dsl/strategies.js.map +1 -0
  14. package/dist/dsl/summary.d.ts +50 -0
  15. package/dist/dsl/summary.d.ts.map +1 -0
  16. package/dist/dsl/summary.js +56 -0
  17. package/dist/dsl/summary.js.map +1 -0
  18. package/dist/dsl/templating.d.ts +31 -0
  19. package/dist/dsl/templating.d.ts.map +1 -0
  20. package/dist/dsl/templating.js +83 -0
  21. package/dist/dsl/templating.js.map +1 -0
  22. package/dist/dsl/vector-search.d.ts +52 -0
  23. package/dist/dsl/vector-search.d.ts.map +1 -0
  24. package/dist/{components → dsl}/vector-search.js +12 -34
  25. package/dist/dsl/vector-search.js.map +1 -0
  26. package/dist/eval/index.d.ts +49 -0
  27. package/dist/eval/index.d.ts.map +1 -0
  28. package/dist/eval/index.js +34 -0
  29. package/dist/eval/index.js.map +1 -0
  30. package/dist/eval/judge.d.ts +20 -0
  31. package/dist/eval/judge.d.ts.map +1 -0
  32. package/dist/eval/judge.js +59 -0
  33. package/dist/eval/judge.js.map +1 -0
  34. package/dist/index.d.ts +6 -10
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +4 -7
  37. package/dist/index.js.map +1 -1
  38. package/dist/instrumentation/otel.js +5 -14
  39. package/dist/instrumentation/otel.js.map +1 -1
  40. package/dist/providers/ai-sdk.d.ts +29 -0
  41. package/dist/providers/ai-sdk.d.ts.map +1 -0
  42. package/dist/providers/ai-sdk.js +104 -0
  43. package/dist/providers/ai-sdk.js.map +1 -0
  44. package/dist/providers/anthropic.d.ts +30 -0
  45. package/dist/providers/anthropic.d.ts.map +1 -0
  46. package/dist/providers/anthropic.js +160 -0
  47. package/dist/providers/anthropic.js.map +1 -0
  48. package/dist/providers/openai.d.ts +37 -0
  49. package/dist/providers/openai.d.ts.map +1 -0
  50. package/dist/providers/openai.js +164 -0
  51. package/dist/providers/openai.js.map +1 -0
  52. package/dist/render.d.ts +24 -22
  53. package/dist/render.d.ts.map +1 -1
  54. package/dist/render.js +191 -63
  55. package/dist/render.js.map +1 -1
  56. package/dist/testing/plaintext.d.ts +28 -0
  57. package/dist/testing/plaintext.d.ts.map +1 -0
  58. package/dist/testing/plaintext.js +71 -0
  59. package/dist/testing/plaintext.js.map +1 -0
  60. package/dist/types.d.ts +202 -174
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/types.js +37 -100
  63. package/dist/types.js.map +1 -1
  64. package/package.json +11 -33
  65. package/dist/ai-sdk/index.d.ts +0 -68
  66. package/dist/ai-sdk/index.d.ts.map +0 -1
  67. package/dist/ai-sdk/index.js +0 -375
  68. package/dist/ai-sdk/index.js.map +0 -1
  69. package/dist/anthropic/index.d.ts +0 -102
  70. package/dist/anthropic/index.d.ts.map +0 -1
  71. package/dist/anthropic/index.js +0 -281
  72. package/dist/anthropic/index.js.map +0 -1
  73. package/dist/components/index.d.ts +0 -147
  74. package/dist/components/index.d.ts.map +0 -1
  75. package/dist/components/index.js +0 -181
  76. package/dist/components/index.js.map +0 -1
  77. package/dist/components/summary.d.ts +0 -90
  78. package/dist/components/summary.d.ts.map +0 -1
  79. package/dist/components/summary.js +0 -118
  80. package/dist/components/summary.js.map +0 -1
  81. package/dist/components/vector-search.d.ts +0 -70
  82. package/dist/components/vector-search.d.ts.map +0 -1
  83. package/dist/components/vector-search.js.map +0 -1
  84. package/dist/dsl.d.ts +0 -202
  85. package/dist/dsl.d.ts.map +0 -1
  86. package/dist/dsl.js +0 -320
  87. package/dist/dsl.js.map +0 -1
  88. package/dist/jsx/index.d.ts +0 -6
  89. package/dist/jsx/index.d.ts.map +0 -1
  90. package/dist/jsx/index.js +0 -7
  91. package/dist/jsx/index.js.map +0 -1
  92. package/dist/jsx/jsx-dev-runtime.d.ts +0 -2
  93. package/dist/jsx/jsx-dev-runtime.d.ts.map +0 -1
  94. package/dist/jsx/jsx-dev-runtime.js +0 -3
  95. package/dist/jsx/jsx-dev-runtime.js.map +0 -1
  96. package/dist/jsx/jsx-runtime.d.ts +0 -40
  97. package/dist/jsx/jsx-runtime.d.ts.map +0 -1
  98. package/dist/jsx/jsx-runtime.js +0 -40
  99. package/dist/jsx/jsx-runtime.js.map +0 -1
  100. package/dist/openai/index.d.ts +0 -73
  101. package/dist/openai/index.d.ts.map +0 -1
  102. package/dist/openai/index.js +0 -306
  103. package/dist/openai/index.js.map +0 -1
  104. package/dist/renderers/markdown.d.ts +0 -3
  105. package/dist/renderers/markdown.d.ts.map +0 -1
  106. package/dist/renderers/markdown.js +0 -43
  107. package/dist/renderers/markdown.js.map +0 -1
  108. package/dist/renderers/shared.d.ts +0 -82
  109. package/dist/renderers/shared.d.ts.map +0 -1
  110. package/dist/renderers/shared.js +0 -156
  111. package/dist/renderers/shared.js.map +0 -1
  112. package/dist/snapshot.d.ts +0 -47
  113. package/dist/snapshot.d.ts.map +0 -1
  114. package/dist/snapshot.js +0 -144
  115. package/dist/snapshot.js.map +0 -1
  116. package/dist/tokenizers.d.ts +0 -14
  117. package/dist/tokenizers.d.ts.map +0 -1
  118. package/dist/tokenizers.js +0 -45
  119. 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