@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.
Files changed (129) hide show
  1. package/README.md +37 -27
  2. package/dist/dsl/builder.d.ts +275 -0
  3. package/dist/dsl/builder.d.ts.map +1 -0
  4. package/dist/dsl/builder.js +569 -0
  5. package/dist/dsl/builder.js.map +1 -0
  6. package/dist/dsl/index.d.ts +78 -0
  7. package/dist/dsl/index.d.ts.map +1 -0
  8. package/dist/dsl/index.js +92 -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 +51 -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/{components → dsl}/vector-search.d.ts +11 -34
  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 +16 -2
  27. package/dist/eval/index.d.ts.map +1 -1
  28. package/dist/eval/judge.d.ts +7 -5
  29. package/dist/eval/judge.d.ts.map +1 -1
  30. package/dist/eval/judge.js +18 -5
  31. package/dist/eval/judge.js.map +1 -1
  32. package/dist/index.d.ts +12 -11
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +8 -8
  35. package/dist/index.js.map +1 -1
  36. package/dist/instrumentation/otel.js +5 -14
  37. package/dist/instrumentation/otel.js.map +1 -1
  38. package/dist/memory/chroma/index.js +4 -4
  39. package/dist/protocols/chat-completions.d.ts +38 -0
  40. package/dist/protocols/chat-completions.d.ts.map +1 -0
  41. package/dist/protocols/chat-completions.js +94 -0
  42. package/dist/protocols/chat-completions.js.map +1 -0
  43. package/dist/protocols/responses.d.ts +80 -0
  44. package/dist/protocols/responses.d.ts.map +1 -0
  45. package/dist/protocols/responses.js +148 -0
  46. package/dist/protocols/responses.js.map +1 -0
  47. package/dist/provider.d.ts +94 -0
  48. package/dist/provider.d.ts.map +1 -0
  49. package/dist/provider.js +60 -0
  50. package/dist/provider.js.map +1 -0
  51. package/dist/providers/ai-sdk.d.ts +44 -0
  52. package/dist/providers/ai-sdk.d.ts.map +1 -0
  53. package/dist/providers/ai-sdk.js +144 -0
  54. package/dist/providers/ai-sdk.js.map +1 -0
  55. package/dist/providers/anthropic.d.ts +48 -0
  56. package/dist/providers/anthropic.d.ts.map +1 -0
  57. package/dist/providers/anthropic.js +279 -0
  58. package/dist/providers/anthropic.js.map +1 -0
  59. package/dist/providers/openai.d.ts +64 -0
  60. package/dist/providers/openai.d.ts.map +1 -0
  61. package/dist/providers/openai.js +411 -0
  62. package/dist/providers/openai.js.map +1 -0
  63. package/dist/render.d.ts +25 -22
  64. package/dist/render.d.ts.map +1 -1
  65. package/dist/render.js +194 -63
  66. package/dist/render.js.map +1 -1
  67. package/dist/testing/plaintext.d.ts +29 -0
  68. package/dist/testing/plaintext.d.ts.map +1 -0
  69. package/dist/testing/plaintext.js +106 -0
  70. package/dist/testing/plaintext.js.map +1 -0
  71. package/dist/types.d.ts +186 -174
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js +22 -104
  74. package/dist/types.js.map +1 -1
  75. package/package.json +25 -49
  76. package/dist/components/index.d.ts +0 -147
  77. package/dist/components/index.d.ts.map +0 -1
  78. package/dist/components/index.js +0 -181
  79. package/dist/components/index.js.map +0 -1
  80. package/dist/components/summary.d.ts +0 -89
  81. package/dist/components/summary.d.ts.map +0 -1
  82. package/dist/components/summary.js +0 -118
  83. package/dist/components/summary.js.map +0 -1
  84. package/dist/components/vector-search.d.ts.map +0 -1
  85. package/dist/components/vector-search.js.map +0 -1
  86. package/dist/dsl.d.ts +0 -233
  87. package/dist/dsl.d.ts.map +0 -1
  88. package/dist/dsl.js +0 -428
  89. package/dist/dsl.js.map +0 -1
  90. package/dist/integrations/ai-sdk.d.ts +0 -22
  91. package/dist/integrations/ai-sdk.d.ts.map +0 -1
  92. package/dist/integrations/ai-sdk.js +0 -172
  93. package/dist/integrations/ai-sdk.js.map +0 -1
  94. package/dist/integrations/anthropic.d.ts +0 -50
  95. package/dist/integrations/anthropic.d.ts.map +0 -1
  96. package/dist/integrations/anthropic.js +0 -220
  97. package/dist/integrations/anthropic.js.map +0 -1
  98. package/dist/integrations/openai.d.ts +0 -48
  99. package/dist/integrations/openai.d.ts.map +0 -1
  100. package/dist/integrations/openai.js +0 -265
  101. package/dist/integrations/openai.js.map +0 -1
  102. package/dist/jsx/index.d.ts +0 -6
  103. package/dist/jsx/index.d.ts.map +0 -1
  104. package/dist/jsx/index.js +0 -7
  105. package/dist/jsx/index.js.map +0 -1
  106. package/dist/jsx/jsx-dev-runtime.d.ts +0 -2
  107. package/dist/jsx/jsx-dev-runtime.d.ts.map +0 -1
  108. package/dist/jsx/jsx-dev-runtime.js +0 -3
  109. package/dist/jsx/jsx-dev-runtime.js.map +0 -1
  110. package/dist/jsx/jsx-runtime.d.ts +0 -40
  111. package/dist/jsx/jsx-runtime.d.ts.map +0 -1
  112. package/dist/jsx/jsx-runtime.js +0 -40
  113. package/dist/jsx/jsx-runtime.js.map +0 -1
  114. package/dist/renderers/markdown.d.ts +0 -3
  115. package/dist/renderers/markdown.d.ts.map +0 -1
  116. package/dist/renderers/markdown.js +0 -43
  117. package/dist/renderers/markdown.js.map +0 -1
  118. package/dist/renderers/shared.d.ts +0 -82
  119. package/dist/renderers/shared.d.ts.map +0 -1
  120. package/dist/renderers/shared.js +0 -156
  121. package/dist/renderers/shared.js.map +0 -1
  122. package/dist/snapshot.d.ts +0 -47
  123. package/dist/snapshot.d.ts.map +0 -1
  124. package/dist/snapshot.js +0 -144
  125. package/dist/snapshot.js.map +0 -1
  126. package/dist/tokenizers.d.ts +0 -14
  127. package/dist/tokenizers.d.ts.map +0 -1
  128. package/dist/tokenizers.js +0 -45
  129. package/dist/tokenizers.js.map +0 -1
@@ -0,0 +1,92 @@
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 input(value) {
33
+ return { kind: "input", value };
34
+ }
35
+ function inputLayout(value) {
36
+ return { kind: "input-layout", value };
37
+ }
38
+ function createPrompt(provider) {
39
+ if (provider === undefined) {
40
+ return PromptBuilder.create();
41
+ }
42
+ return PromptBuilder.create(provider);
43
+ }
44
+ /**
45
+ * Namespace for building prompts as code.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * import { cria } from "@fastpaca/cria";
50
+ *
51
+ * // Full prompt builder
52
+ * const prompt = cria
53
+ * .prompt()
54
+ * .system("You are helpful.")
55
+ * .user("Hello!")
56
+ * .build();
57
+ *
58
+ * // Standalone nodes
59
+ * const msg = cria.user("Hello!");
60
+ * const root = cria.scope([msg]);
61
+ * ```
62
+ */
63
+ export const cria = {
64
+ prompt: createPrompt,
65
+ c: templateC,
66
+ merge: (...builders) => {
67
+ const [first, ...rest] = builders;
68
+ if (!first) {
69
+ return PromptBuilder.create();
70
+ }
71
+ return first.merge(...rest);
72
+ },
73
+ // Standalone node creators
74
+ message,
75
+ scope,
76
+ user: (content) => message("user", content),
77
+ system: (content) => message("system", content),
78
+ developer: (content) => message("developer", content),
79
+ assistant: (content) => message("assistant", content),
80
+ input,
81
+ inputLayout,
82
+ };
83
+ /**
84
+ * Standalone function to create a new prompt builder.
85
+ */
86
+ export const prompt = createPrompt;
87
+ /**
88
+ * Merge multiple builders into one (zod-like merge).
89
+ */
90
+ export const merge = (...builders) => cria.merge(...builders);
91
+ export { input, inputLayout };
92
+ //# 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;AAcjD,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;AAED,SAAS,KAAK,CAAY,KAAgB;IACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,WAAW,CAClB,KAA4B;IAE5B,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;AACzC,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;IAChE,SAAS,EAAE,CAAC,OAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;IAChE,KAAK;IACL,WAAW;CACH,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;AAE1B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../../src/dsl/strategies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,QAAQ,EACT,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,SAAS,cAAc,EACxD,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D,WAAW,CAAC,OAAO,CAAC,CAStB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAS,cAAc,EAC1D,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAClC,EAAE,CAAC,EAAE,MAAM,GACV,iBAAiB,CAAC,OAAO,CAAC,CAQ5B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GAAG,KAAK,GACpB,QAAQ,CAsBV;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAE7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAS,cAAc,EAC3D,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,SAAS,SAAS,GACjB,UAAU,CAAC,OAAO,CAAC,CAIrB"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Strategy factories and component helpers for the DSL module.
3
+ */
4
+ /**
5
+ * Create a scope node with optional priority, strategy, and id.
6
+ */
7
+ export function createScope(children, opts) {
8
+ // Thin helper that preserves tool IO types without coercion.
9
+ return {
10
+ kind: "scope",
11
+ priority: opts?.priority ?? 0,
12
+ children,
13
+ ...(opts?.strategy && { strategy: opts.strategy }),
14
+ ...(opts?.id && { id: opts.id }),
15
+ };
16
+ }
17
+ /**
18
+ * Create a message node with role and children.
19
+ */
20
+ export function createMessage(role, children, id) {
21
+ // Message nodes only carry already-normalized parts; no conversion happens here.
22
+ return {
23
+ kind: "message",
24
+ role,
25
+ children,
26
+ ...(id && { id }),
27
+ };
28
+ }
29
+ /**
30
+ * Create a truncate strategy that removes children from one end.
31
+ */
32
+ export function createTruncateStrategy(budget, from) {
33
+ return (input) => {
34
+ const { children: currentChildren } = input.target;
35
+ if (currentChildren.length === 0) {
36
+ return null;
37
+ }
38
+ const dropCount = Math.max(1, Math.floor(input.totalTokens / budget));
39
+ const nextChildren = from === "start"
40
+ ? currentChildren.slice(dropCount)
41
+ : currentChildren.slice(0, Math.max(0, currentChildren.length - dropCount));
42
+ if (nextChildren.length === 0) {
43
+ return null;
44
+ }
45
+ return { ...input.target, children: nextChildren };
46
+ };
47
+ }
48
+ /**
49
+ * Create an omit strategy that removes the entire scope.
50
+ */
51
+ export function createOmitStrategy() {
52
+ return () => null;
53
+ }
54
+ /**
55
+ * Format examples into a text prompt part.
56
+ */
57
+ export function formatExamples(title, items, separator = "\n\n") {
58
+ const body = items.length === 0 ? "" : items.join(separator);
59
+ const text = title ? `${title}\n${body}` : body;
60
+ return { type: "text", text };
61
+ }
62
+ //# sourceMappingURL=strategies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../src/dsl/strategies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,QAAgC,EAChC,IAA8D;IAE9D,6DAA6D;IAC7D,OAAO;QACL,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC;QAC7B,QAAQ;QACR,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClD,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAgB,EAChB,QAAkC,EAClC,EAAW;IAEX,iFAAiF;IACjF,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI;QACJ,QAAQ;QACR,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,IAAqB;IAErB,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QACnD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;QACtE,MAAM,YAAY,GAChB,IAAI,KAAK,OAAO;YACd,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC;YAClC,CAAC,CAAC,eAAe,CAAC,KAAK,CACnB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC,CAChD,CAAC;QAER,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,KAAwB,EACxB,SAAS,GAAG,MAAM;IAElB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Summary strategy for progressively summarizing conversation history.
3
+ */
4
+ import type { KVMemory } from "../memory";
5
+ import type { ModelProvider } from "../provider";
6
+ import type { MaybePromise, PromptRole, PromptScope, ProviderToolIO, ScopeChildren } from "../types";
7
+ /**
8
+ * Stored summary data persisted across renders.
9
+ */
10
+ export interface StoredSummary {
11
+ /** The summary text content */
12
+ content: string;
13
+ }
14
+ /**
15
+ * Context passed to the summarizer function.
16
+ */
17
+ export interface SummarizerContext {
18
+ /** The subtree being summarized */
19
+ target: PromptScope<ProviderToolIO>;
20
+ /** Previous summary to build upon (null if first summary) */
21
+ existingSummary: string | null;
22
+ /** Provider in scope, if any */
23
+ provider?: ModelProvider<unknown, ProviderToolIO>;
24
+ }
25
+ /**
26
+ * Function that generates summaries.
27
+ */
28
+ export type Summarizer = (ctx: SummarizerContext) => MaybePromise<string>;
29
+ interface SummaryProps<TToolIO extends ProviderToolIO = ProviderToolIO> {
30
+ /** Unique identifier for this summary in the store */
31
+ id: string;
32
+ /** Storage adapter for persisting summaries */
33
+ store: KVMemory<StoredSummary>;
34
+ /**
35
+ * Function that generates summaries.
36
+ * If omitted, uses the ModelProvider from render options with a default prompt.
37
+ */
38
+ summarize?: Summarizer;
39
+ /** Priority for this scope (higher number = reduced first). Default: 0 */
40
+ priority?: number;
41
+ /** Role for the summary message. Default: "system" */
42
+ role?: PromptRole;
43
+ /** Content to potentially summarize */
44
+ children?: ScopeChildren<TToolIO>;
45
+ }
46
+ /**
47
+ * A scope that summarizes its content when the prompt needs to shrink.
48
+ */
49
+ export declare function Summary<TToolIO extends ProviderToolIO>({ id, store, summarize, priority, role, children, }: SummaryProps<TToolIO>): PromptScope<TToolIO>;
50
+ export {};
51
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/dsl/summary.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EAEd,MAAM,UAAU,CAAC;AAIlB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IACpC,6DAA6D;IAC7D,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,iBAAiB,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;AAgC1E,UAAU,YAAY,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc;IACpE,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,SAAS,cAAc,EAAE,EACtD,EAAE,EACF,KAAK,EACL,SAAS,EACT,QAAY,EACZ,IAAe,EACf,QAAa,GACd,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAqC9C"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Summary strategy for progressively summarizing conversation history.
3
+ */
4
+ import { render } from "../render";
5
+ import { PromptBuilder } from "./builder";
6
+ import { createScope } from "./strategies";
7
+ /**
8
+ * Default summarizer that uses a ModelProvider.
9
+ * This is used when no custom summarize function is provided.
10
+ */
11
+ async function defaultSummarizer(ctx, provider) {
12
+ const summaryPrompt = await PromptBuilder.create()
13
+ .system("You are a conversation summarizer. Create a concise summary that captures the key points and context needed to continue the conversation. Be brief but preserve essential information.")
14
+ .when(ctx.existingSummary !== null, (p) => p.assistant(`Current summary:\n${ctx.existingSummary}`))
15
+ .merge(ctx.target.children)
16
+ .when(ctx.existingSummary !== null, (p) => p.user("Update the summary based on the previous summary and the conversation above."))
17
+ .when(ctx.existingSummary === null, (p) => p.user("Summarize the conversation above."))
18
+ .build();
19
+ const rendered = await render(summaryPrompt, { provider });
20
+ return provider.completion(rendered);
21
+ }
22
+ /**
23
+ * A scope that summarizes its content when the prompt needs to shrink.
24
+ */
25
+ export function Summary({ id, store, summarize, priority = 0, role = "system", children = [], }) {
26
+ return createScope(children, {
27
+ priority,
28
+ strategy: async (input) => {
29
+ const { target, context } = input;
30
+ const existingEntry = await store.get(id);
31
+ const summarizerContext = {
32
+ target,
33
+ existingSummary: existingEntry?.data.content ?? null,
34
+ ...(context.provider ? { provider: context.provider } : {}),
35
+ };
36
+ let newSummary;
37
+ if (summarize) {
38
+ newSummary = await summarize(summarizerContext);
39
+ }
40
+ else if (context.provider) {
41
+ newSummary = await defaultSummarizer(summarizerContext, context.provider);
42
+ }
43
+ else {
44
+ throw new Error(`Summary "${id}" requires either a 'summarize' function or a provider. Pass a provider to render(), bind one with cria.prompt(provider) or cria.prompt().provider(provider), or wrap the summary in cria.prompt().providerScope(provider, (p) => p.summary(...)).`);
45
+ }
46
+ await store.set(id, {
47
+ content: newSummary,
48
+ });
49
+ const tree = await PromptBuilder.create()
50
+ .message(role, newSummary)
51
+ .build();
52
+ return { ...tree, priority: target.priority };
53
+ },
54
+ });
55
+ }
56
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/dsl/summary.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AASnC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA2B3C;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAC9B,GAAsB,EACtB,QAAgD;IAEhD,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;SAC/C,MAAM,CACL,wLAAwL,CACzL;SACA,IAAI,CAAC,GAAG,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,SAAS,CAAC,qBAAqB,GAAG,CAAC,eAAe,EAAE,CAAC,CACxD;SACA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC1B,IAAI,CAAC,GAAG,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,IAAI,CACJ,8EAA8E,CAC/E,CACF;SACA,IAAI,CAAC,GAAG,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAC5C;SACA,KAAK,EAAE,CAAC;IAEX,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,OAAO,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAoBD;;GAEG;AACH,MAAM,UAAU,OAAO,CAAiC,EACtD,EAAE,EACF,KAAK,EACL,SAAS,EACT,QAAQ,GAAG,CAAC,EACZ,IAAI,GAAG,QAAQ,EACf,QAAQ,GAAG,EAAE,GACS;IACtB,OAAO,WAAW,CAAC,QAAQ,EAAE;QAC3B,QAAQ;QACR,QAAQ,EAAE,KAAK,EAAE,KAAoB,EAAE,EAAE;YACvC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;YAClC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE1C,MAAM,iBAAiB,GAAsB;gBAC3C,MAAM;gBACN,eAAe,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;gBACpD,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D,CAAC;YAEF,IAAI,UAAkB,CAAC;YACvB,IAAI,SAAS,EAAE,CAAC;gBACd,UAAU,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5B,UAAU,GAAG,MAAM,iBAAiB,CAClC,iBAAiB,EACjB,OAAO,CAAC,QAAQ,CACjB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,YAAY,EAAE,oPAAoP,CACnQ,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;gBAClB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;iBACtC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC;iBACzB,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChD,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Template literal utilities for building prompt content.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import type { PromptPart, ProviderToolIO } from "../types";
7
+ /**
8
+ * Text input types for message builders.
9
+ * These accept raw text and pre-built PromptParts, so tool parts can pass through
10
+ * without conversion while keeping provider-bound tool IO types intact.
11
+ */
12
+ export type TextValue<TToolIO extends ProviderToolIO = ProviderToolIO> = PromptPart<TToolIO> | boolean | number | string | null | undefined;
13
+ export type TextInput<TToolIO extends ProviderToolIO = ProviderToolIO> = TextValue<TToolIO> | readonly TextInput<TToolIO>[];
14
+ /**
15
+ * Tagged template literal function for building prompt children with automatic indentation normalization.
16
+ *
17
+ * Interpolates values into template strings and normalizes indentation by stripping
18
+ * common leading whitespace. Useful for writing multi-line prompt content with clean formatting.
19
+ *
20
+ * @param strings - Template string segments
21
+ * @param values - Interpolated values (strings, numbers, booleans, PromptParts, arrays, etc.)
22
+ * @returns Array of message parts
23
+ *
24
+ * This function allows you to use prompt parts naturally inside template strings.
25
+ */
26
+ export declare function c(strings: TemplateStringsArray, ...values: readonly TextInput[]): readonly PromptPart[];
27
+ export declare function c<TToolIO extends ProviderToolIO>(strings: TemplateStringsArray, ...values: readonly TextInput<TToolIO>[]): readonly PromptPart<TToolIO>[];
28
+ export declare function textPart<TToolIO extends ProviderToolIO = ProviderToolIO>(value: string): PromptPart<TToolIO>;
29
+ export declare function isPromptPart<TToolIO extends ProviderToolIO = ProviderToolIO>(value: unknown): value is PromptPart<TToolIO>;
30
+ export declare function normalizeTextInput<TToolIO extends ProviderToolIO>(content?: TextInput<TToolIO>): PromptPart<TToolIO>[];
31
+ //# sourceMappingURL=templating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templating.d.ts","sourceRoot":"","sources":["../../src/dsl/templating.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IACjE,UAAU,CAAC,OAAO,CAAC,GACnB,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,SAAS,CAAC;AACd,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IACjE,SAAS,CAAC,OAAO,CAAC,GAClB,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AAIlC;;;;;;;;;;;GAWG;AACH,wBAAgB,CAAC,CACf,OAAO,EAAE,oBAAoB,EAC7B,GAAG,MAAM,EAAE,SAAS,SAAS,EAAE,GAC9B,SAAS,UAAU,EAAE,CAAC;AACzB,wBAAgB,CAAC,CAAC,OAAO,SAAS,cAAc,EAC9C,OAAO,EAAE,oBAAoB,EAC7B,GAAG,MAAM,EAAE,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,GACvC,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;AAyBlC,wBAAgB,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EACtE,KAAK,EAAE,MAAM,GACZ,UAAU,CAAC,OAAO,CAAC,CAErB;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC1E,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAE9B;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,cAAc,EAC/D,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,GAC3B,UAAU,CAAC,OAAO,CAAC,EAAE,CA0BvB"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Template literal utilities for building prompt content.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ const TEMPLATE_INDENT_RE = /^[ \t]*/;
7
+ export function c(strings, ...values) {
8
+ const normalizedStrings = normalizeTemplateStrings(strings);
9
+ const children = [];
10
+ for (let index = 0; index < normalizedStrings.length; index += 1) {
11
+ const segment = normalizedStrings[index];
12
+ if (segment !== undefined && segment.length > 0) {
13
+ children.push({ type: "text", text: segment });
14
+ }
15
+ if (index < values.length) {
16
+ const normalized = normalizeTextInput(values[index]);
17
+ if (normalized.length > 0) {
18
+ children.push(...normalized);
19
+ }
20
+ }
21
+ }
22
+ return children;
23
+ }
24
+ export function textPart(value) {
25
+ return { type: "text", text: value };
26
+ }
27
+ export function isPromptPart(value) {
28
+ return typeof value === "object" && value !== null && "type" in value;
29
+ }
30
+ // Normalize text-like inputs into prompt parts while preserving existing parts.
31
+ export function normalizeTextInput(content) {
32
+ if (content === null || content === undefined) {
33
+ return [];
34
+ }
35
+ if (Array.isArray(content)) {
36
+ const flattened = [];
37
+ for (const item of content) {
38
+ flattened.push(...normalizeTextInput(item));
39
+ }
40
+ return flattened;
41
+ }
42
+ if (typeof content === "string") {
43
+ return [textPart(content)];
44
+ }
45
+ if (typeof content === "number" || typeof content === "boolean") {
46
+ return [textPart(String(content))];
47
+ }
48
+ if (isPromptPart(content)) {
49
+ return [content];
50
+ }
51
+ throw new Error("Message content must be text or message parts.");
52
+ }
53
+ function normalizeTemplateStrings(strings) {
54
+ if (strings.length === 0) {
55
+ return strings;
56
+ }
57
+ const normalized = [...strings];
58
+ if (normalized[0]?.startsWith("\n")) {
59
+ normalized[0] = normalized[0].slice(1);
60
+ }
61
+ const lastIndex = normalized.length - 1;
62
+ if (normalized[lastIndex]?.endsWith("\n")) {
63
+ normalized[lastIndex] = normalized[lastIndex].slice(0, -1);
64
+ }
65
+ const lines = normalized.flatMap((segment) => segment.split("\n"));
66
+ const indents = lines
67
+ .filter((line) => line.trim().length > 0)
68
+ .map((line) => line.match(TEMPLATE_INDENT_RE)?.[0].length ?? 0);
69
+ const minIndent = indents.length > 0 ? Math.min(...indents) : 0;
70
+ if (minIndent === 0) {
71
+ return normalized;
72
+ }
73
+ return normalized.map((segment) => segment
74
+ .split("\n")
75
+ .map((line) => {
76
+ if (line.trim().length === 0) {
77
+ return "";
78
+ }
79
+ return line.slice(Math.min(minIndent, line.length));
80
+ })
81
+ .join("\n"));
82
+ }
83
+ //# sourceMappingURL=templating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templating.js","sourceRoot":"","sources":["../../src/dsl/templating.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
+ /**
2
+ * VectorSearch async component for RAG-style retrieval.
3
+ */
1
4
  import type { VectorMemory, VectorSearchResult } from "../memory";
2
- import type { PromptChildren, PromptElement } from "../types";
5
+ import type { PromptPart, PromptRole, PromptScope, ProviderToolIO } from "../types";
3
6
  /** Simple message shape for query extraction. */
4
7
  interface Message {
5
8
  role: string;
@@ -12,7 +15,7 @@ interface Message {
12
15
  */
13
16
  export type ResultFormatter<T = unknown> = (results: VectorSearchResult<T>[]) => string;
14
17
  type QueryExtractor = (messages: Message[]) => string | null | undefined;
15
- interface VectorSearchProps<T = unknown> {
18
+ interface VectorSearchProps<T = unknown, TToolIO extends ProviderToolIO = ProviderToolIO> {
16
19
  /** Vector memory store to search */
17
20
  store: VectorMemory<T>;
18
21
  /**
@@ -32,44 +35,18 @@ interface VectorSearchProps<T = unknown> {
32
35
  threshold?: number;
33
36
  /** Custom formatter for search results. Default: numbered list format */
34
37
  formatResults?: ResultFormatter<T>;
35
- /** Priority for this region (higher number = reduced first). Default: 0 */
38
+ /** Priority for this scope (higher number = reduced first). Default: 0 */
36
39
  priority?: number;
37
40
  /** Stable identifier for caching/debugging */
38
41
  id?: string;
42
+ /** Role for the emitted message. Default: "user" */
43
+ role?: PromptRole;
39
44
  /** Query text provided as children (preferred over `query` when present). */
40
- children?: PromptChildren;
45
+ children?: readonly PromptPart<TToolIO>[];
41
46
  }
42
47
  /**
43
- * Renders vector search results into the prompt.
44
- *
45
- * The query is resolved at render time. No pre-fetching needed. Query sources, in
46
- * order of precedence:
47
- * 1) Children text: `<VectorSearch store={store}>find docs about RAG</VectorSearch>`
48
- * 2) `query` prop: `<VectorSearch store={store} query="find docs about RAG" />`
49
- * 3) Messages: `<VectorSearch store={store} messages={messages} />`
50
- * - Defaults to the last user message, or use `extractQuery` to customize.
51
- *
52
- * @example
53
- * ```tsx
54
- * <VectorSearch store={store} limit={5}>
55
- * my query: {topic}
56
- * </VectorSearch>
57
- * ```
58
- *
59
- * @example Using messages as the query source
60
- * ```tsx
61
- * <VectorSearch store={store} messages={messages} />
62
- * ```
63
- *
64
- * @example Custom extractor
65
- * ```tsx
66
- * <VectorSearch
67
- * store={store}
68
- * messages={messages}
69
- * extractQuery={(msgs) => msgs.at(-1)?.content}
70
- * />
71
- * ```
48
+ * Renders vector search results into a scoped message.
72
49
  */
73
- export declare function VectorSearch<T = unknown>({ store, query, messages, extractQuery, limit, threshold, formatResults, priority, id, children, }: VectorSearchProps<T>): Promise<PromptElement>;
50
+ export declare function VectorSearch<T = unknown, TToolIO extends ProviderToolIO = ProviderToolIO>({ store, query, messages, extractQuery, limit, threshold, formatResults, priority, id, role, children, }: VectorSearchProps<T, TToolIO>): Promise<PromptScope<TToolIO>>;
74
51
  export {};
75
52
  //# sourceMappingURL=vector-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-search.d.ts","sourceRoot":"","sources":["../../src/dsl/vector-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EAEZ,kBAAkB,EACnB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACf,MAAM,UAAU,CAAC;AAGlB,iDAAiD;AACjD,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IAAI,CACzC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAC7B,MAAM,CAAC;AAsBZ,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEzE,UAAU,iBAAiB,CACzB,CAAC,GAAG,OAAO,EACX,OAAO,SAAS,cAAc,GAAG,cAAc;IAE/C,oCAAoC;IACpC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,iFAAiF;IACjF,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,aAAa,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACnC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3C;AA4DD;;GAEG;AACH,wBAAsB,YAAY,CAChC,CAAC,GAAG,OAAO,EACX,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,EACA,KAAK,EACL,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,KAAS,EACT,SAAS,EACT,aAAgC,EAChC,QAAY,EACZ,EAAE,EACF,IAAa,EACb,QAAQ,GACT,EAAE,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CA8B/D"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * VectorSearch async component for RAG-style retrieval.
3
+ */
4
+ import { PromptBuilder } from "./builder";
1
5
  /**
2
6
  * Default formatter that renders results as a numbered list.
3
7
  * Returns a placeholder string when no results are found so prompts can degrade gracefully.
@@ -21,10 +25,10 @@ function queryFromChildren(children) {
21
25
  }
22
26
  let buffer = "";
23
27
  for (const child of children) {
24
- if (typeof child !== "string") {
25
- throw new Error("VectorSearch children must be plain text. Wrap complex content in a formatter before passing it as a query.");
28
+ if (child.type !== "text") {
29
+ throw new Error("VectorSearch children must be text parts. Use a formatter to build complex queries.");
26
30
  }
27
- buffer += child;
31
+ buffer += child.text;
28
32
  }
29
33
  const trimmed = buffer.trim();
30
34
  return trimmed === "" ? null : trimmed;
@@ -55,37 +59,9 @@ function deriveQuery(props) {
55
59
  return null;
56
60
  }
57
61
  /**
58
- * Renders vector search results into the prompt.
59
- *
60
- * The query is resolved at render time. No pre-fetching needed. Query sources, in
61
- * order of precedence:
62
- * 1) Children text: `<VectorSearch store={store}>find docs about RAG</VectorSearch>`
63
- * 2) `query` prop: `<VectorSearch store={store} query="find docs about RAG" />`
64
- * 3) Messages: `<VectorSearch store={store} messages={messages} />`
65
- * - Defaults to the last user message, or use `extractQuery` to customize.
66
- *
67
- * @example
68
- * ```tsx
69
- * <VectorSearch store={store} limit={5}>
70
- * my query: {topic}
71
- * </VectorSearch>
72
- * ```
73
- *
74
- * @example Using messages as the query source
75
- * ```tsx
76
- * <VectorSearch store={store} messages={messages} />
77
- * ```
78
- *
79
- * @example Custom extractor
80
- * ```tsx
81
- * <VectorSearch
82
- * store={store}
83
- * messages={messages}
84
- * extractQuery={(msgs) => msgs.at(-1)?.content}
85
- * />
86
- * ```
62
+ * Renders vector search results into a scoped message.
87
63
  */
88
- export async function VectorSearch({ store, query, messages, extractQuery, limit = 5, threshold, formatResults = defaultFormatter, priority = 0, id, children, }) {
64
+ export async function VectorSearch({ store, query, messages, extractQuery, limit = 5, threshold, formatResults = defaultFormatter, priority = 0, id, role = "user", children, }) {
89
65
  const finalQuery = deriveQuery({
90
66
  query,
91
67
  messages,
@@ -101,9 +77,11 @@ export async function VectorSearch({ store, query, messages, extractQuery, limit
101
77
  };
102
78
  const results = await store.search(finalQuery, searchOptions);
103
79
  const content = formatResults(results);
80
+ // Use the DSL to build the result scope
81
+ const tree = await PromptBuilder.create().message(role, content).build();
104
82
  return {
83
+ ...tree,
105
84
  priority,
106
- children: [content],
107
85
  ...(id && { id }),
108
86
  };
109
87
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-search.js","sourceRoot":"","sources":["../../src/dsl/vector-search.ts"],"names":[],"mappings":"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"}
@@ -31,8 +31,22 @@ export type { EvalResult, Judge, JudgeConfig, Judgment } from "./judge";
31
31
  export { createJudge } from "./judge";
32
32
  export declare const cria: {
33
33
  readonly judge: typeof createJudge;
34
- readonly prompt: () => import("..").PromptBuilder;
34
+ readonly prompt: {
35
+ (): import("..").PromptBuilder<unknown>;
36
+ <TProvider extends import("..").ModelProvider<unknown, import("..").ProviderToolIO>>(provider: TProvider): import("..").PromptBuilder<TProvider>;
37
+ };
35
38
  readonly c: typeof import("..").c;
36
- readonly merge: (...builders: import("..").PromptBuilder[]) => import("..").PromptBuilder;
39
+ readonly merge: (...builders: import("..").PromptBuilder[]) => import("..").PromptBuilder<unknown>;
40
+ readonly message: <TToolIO extends import("..").ProviderToolIO>(role: import("..").PromptRole, content: import("..").TextInput<TToolIO>) => import("..").PromptMessageNode<TToolIO>;
41
+ readonly scope: <TToolIO extends import("..").ProviderToolIO>(children: import("..").ScopeChildren<TToolIO>, opts?: {
42
+ priority?: number;
43
+ id?: string;
44
+ }) => import("..").PromptScope<TToolIO>;
45
+ readonly user: (content: import("..").TextInput) => import("..").PromptMessageNode<import("..").ProviderToolIO>;
46
+ readonly system: (content: import("..").TextInput) => import("..").PromptMessageNode<import("..").ProviderToolIO>;
47
+ readonly developer: (content: import("..").TextInput) => import("..").PromptMessageNode<import("..").ProviderToolIO>;
48
+ readonly assistant: (content: import("..").TextInput) => import("..").PromptMessageNode<import("..").ProviderToolIO>;
49
+ readonly input: typeof import("..").input;
50
+ readonly inputLayout: typeof import("..").inputLayout;
37
51
  };
38
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,eAAO,MAAM,IAAI;;;;;CAA+C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,eAAO,MAAM,IAAI;;;;;;;;;;gBAC2d,CAAC;UAAY,CAAC;;;;;;;;CAD1b,CAAC"}