@fastpaca/cria 0.0.1 → 1.0.1

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 (140) hide show
  1. package/README.md +93 -106
  2. package/dist/ai-sdk/index.d.ts +43 -0
  3. package/dist/ai-sdk/index.d.ts.map +1 -0
  4. package/dist/ai-sdk/index.js +303 -0
  5. package/dist/ai-sdk/index.js.map +1 -0
  6. package/dist/ai-sdk/index.test.d.ts +2 -0
  7. package/dist/ai-sdk/index.test.d.ts.map +1 -0
  8. package/dist/ai-sdk/index.test.js +101 -0
  9. package/dist/ai-sdk/index.test.js.map +1 -0
  10. package/dist/anthropic/index.d.ts +74 -0
  11. package/dist/anthropic/index.d.ts.map +1 -0
  12. package/dist/anthropic/index.js +238 -0
  13. package/dist/anthropic/index.js.map +1 -0
  14. package/dist/anthropic/index.test.d.ts +2 -0
  15. package/dist/anthropic/index.test.d.ts.map +1 -0
  16. package/dist/anthropic/index.test.js +115 -0
  17. package/dist/anthropic/index.test.js.map +1 -0
  18. package/dist/components/additional.test.d.ts +2 -0
  19. package/dist/components/additional.test.d.ts.map +1 -0
  20. package/dist/components/additional.test.js +31 -0
  21. package/dist/components/additional.test.js.map +1 -0
  22. package/dist/components/index.d.ts +148 -0
  23. package/dist/components/index.d.ts.map +1 -0
  24. package/dist/components/index.js +184 -0
  25. package/dist/components/index.js.map +1 -0
  26. package/dist/components/summary.d.ts +91 -0
  27. package/dist/components/summary.d.ts.map +1 -0
  28. package/dist/components/summary.js +118 -0
  29. package/dist/components/summary.js.map +1 -0
  30. package/dist/components/summary.test.d.ts +2 -0
  31. package/dist/components/summary.test.d.ts.map +1 -0
  32. package/dist/components/summary.test.js +101 -0
  33. package/dist/components/summary.test.js.map +1 -0
  34. package/dist/components/vector-search.d.ts +70 -0
  35. package/dist/components/vector-search.d.ts.map +1 -0
  36. package/dist/components/vector-search.js +110 -0
  37. package/dist/components/vector-search.js.map +1 -0
  38. package/dist/components/vector-search.test.d.ts +2 -0
  39. package/dist/components/vector-search.test.d.ts.map +1 -0
  40. package/dist/components/vector-search.test.js +113 -0
  41. package/dist/components/vector-search.test.js.map +1 -0
  42. package/dist/index.d.ts +12 -5
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +9 -5
  45. package/dist/index.js.map +1 -1
  46. package/dist/instrumentation/otel.d.ts +19 -0
  47. package/dist/instrumentation/otel.d.ts.map +1 -0
  48. package/dist/instrumentation/otel.js +102 -0
  49. package/dist/instrumentation/otel.js.map +1 -0
  50. package/dist/instrumentation/otel.test.d.ts +2 -0
  51. package/dist/instrumentation/otel.test.d.ts.map +1 -0
  52. package/dist/instrumentation/otel.test.js +116 -0
  53. package/dist/instrumentation/otel.test.js.map +1 -0
  54. package/dist/jsx-dev-runtime.d.ts +2 -0
  55. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  56. package/dist/jsx-dev-runtime.js +2 -0
  57. package/dist/jsx-dev-runtime.js.map +1 -0
  58. package/dist/jsx-runtime.d.ts +30 -8
  59. package/dist/jsx-runtime.d.ts.map +1 -1
  60. package/dist/jsx-runtime.js +13 -10
  61. package/dist/jsx-runtime.js.map +1 -1
  62. package/dist/memory/chroma/index.d.ts +59 -0
  63. package/dist/memory/chroma/index.d.ts.map +1 -0
  64. package/dist/memory/chroma/index.js +172 -0
  65. package/dist/memory/chroma/index.js.map +1 -0
  66. package/dist/memory/index.d.ts +4 -0
  67. package/dist/memory/index.d.ts.map +1 -0
  68. package/dist/memory/index.js +2 -0
  69. package/dist/memory/index.js.map +1 -0
  70. package/dist/memory/key-value.d.ts +71 -0
  71. package/dist/memory/key-value.d.ts.map +1 -0
  72. package/dist/memory/key-value.js +34 -0
  73. package/dist/memory/key-value.js.map +1 -0
  74. package/dist/memory/postgres.d.ts +71 -0
  75. package/dist/memory/postgres.d.ts.map +1 -0
  76. package/dist/memory/postgres.js +109 -0
  77. package/dist/memory/postgres.js.map +1 -0
  78. package/dist/memory/qdrant/index.d.ts +64 -0
  79. package/dist/memory/qdrant/index.d.ts.map +1 -0
  80. package/dist/memory/qdrant/index.js +136 -0
  81. package/dist/memory/qdrant/index.js.map +1 -0
  82. package/dist/memory/redis.d.ts +70 -0
  83. package/dist/memory/redis.d.ts.map +1 -0
  84. package/dist/memory/redis.js +100 -0
  85. package/dist/memory/redis.js.map +1 -0
  86. package/dist/memory/vector.d.ts +53 -0
  87. package/dist/memory/vector.d.ts.map +1 -0
  88. package/dist/memory/vector.js +2 -0
  89. package/dist/memory/vector.js.map +1 -0
  90. package/dist/openai/index.d.ts +46 -0
  91. package/dist/openai/index.d.ts.map +1 -0
  92. package/dist/openai/index.js +260 -0
  93. package/dist/openai/index.js.map +1 -0
  94. package/dist/openai/index.test.d.ts +2 -0
  95. package/dist/openai/index.test.d.ts.map +1 -0
  96. package/dist/openai/index.test.js +204 -0
  97. package/dist/openai/index.test.js.map +1 -0
  98. package/dist/providers/index.d.ts +2 -0
  99. package/dist/providers/index.d.ts.map +1 -0
  100. package/dist/providers/index.js +2 -0
  101. package/dist/providers/index.js.map +1 -0
  102. package/dist/providers/types.d.ts +2 -0
  103. package/dist/providers/types.d.ts.map +1 -0
  104. package/dist/providers/types.js +2 -0
  105. package/dist/providers/types.js.map +1 -0
  106. package/dist/render.d.ts +44 -40
  107. package/dist/render.d.ts.map +1 -1
  108. package/dist/render.js +162 -148
  109. package/dist/render.js.map +1 -1
  110. package/dist/render.test.js +146 -28
  111. package/dist/render.test.js.map +1 -1
  112. package/dist/renderers/markdown.d.ts +3 -0
  113. package/dist/renderers/markdown.d.ts.map +1 -0
  114. package/dist/renderers/markdown.js +43 -0
  115. package/dist/renderers/markdown.js.map +1 -0
  116. package/dist/renderers/shared.d.ts +82 -0
  117. package/dist/renderers/shared.d.ts.map +1 -0
  118. package/dist/renderers/shared.js +156 -0
  119. package/dist/renderers/shared.js.map +1 -0
  120. package/dist/snapshot.d.ts +47 -0
  121. package/dist/snapshot.d.ts.map +1 -0
  122. package/dist/snapshot.js +140 -0
  123. package/dist/snapshot.js.map +1 -0
  124. package/dist/snapshot.test.d.ts +2 -0
  125. package/dist/snapshot.test.d.ts.map +1 -0
  126. package/dist/snapshot.test.js +68 -0
  127. package/dist/snapshot.test.js.map +1 -0
  128. package/dist/tokenizers.d.ts +14 -0
  129. package/dist/tokenizers.d.ts.map +1 -0
  130. package/dist/tokenizers.js +45 -0
  131. package/dist/tokenizers.js.map +1 -0
  132. package/dist/types.d.ts +212 -84
  133. package/dist/types.d.ts.map +1 -1
  134. package/dist/types.js +109 -0
  135. package/dist/types.js.map +1 -1
  136. package/package.json +88 -3
  137. package/dist/components.d.ts +0 -78
  138. package/dist/components.d.ts.map +0 -1
  139. package/dist/components.js +0 -98
  140. package/dist/components.js.map +0 -1
@@ -0,0 +1,116 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@fastpaca/cria/jsx-runtime";
2
+ import { describe, expect, test } from "vitest";
3
+ import { Omit, Region, render } from "../index";
4
+ import { createOtelRenderHooks } from "./otel";
5
+ class StubSpan {
6
+ name;
7
+ attributes = {};
8
+ ended = false;
9
+ status = null;
10
+ exceptions = [];
11
+ constructor(name) {
12
+ this.name = name;
13
+ }
14
+ spanContext() {
15
+ return { traceId: "trace", spanId: "span", traceFlags: 1 };
16
+ }
17
+ setAttribute(key, value) {
18
+ this.attributes[key] = value;
19
+ return this;
20
+ }
21
+ setAttributes(attrs) {
22
+ Object.assign(this.attributes, attrs);
23
+ return this;
24
+ }
25
+ addEvent() {
26
+ return this;
27
+ }
28
+ addLink() {
29
+ return this;
30
+ }
31
+ addLinks() {
32
+ return this;
33
+ }
34
+ setStatus(status) {
35
+ this.status = status;
36
+ return this;
37
+ }
38
+ updateName() {
39
+ return this;
40
+ }
41
+ end() {
42
+ this.ended = true;
43
+ }
44
+ isRecording() {
45
+ return true;
46
+ }
47
+ recordException(exception) {
48
+ this.exceptions.push(exception);
49
+ return this;
50
+ }
51
+ }
52
+ class StubTracer {
53
+ spans = [];
54
+ startSpan(name) {
55
+ const span = new StubSpan(name);
56
+ this.spans.push(span);
57
+ return span;
58
+ }
59
+ startActiveSpan(name, fn) {
60
+ const span = this.startSpan(name);
61
+ try {
62
+ return fn(span);
63
+ }
64
+ finally {
65
+ span.end();
66
+ }
67
+ }
68
+ }
69
+ const tokenizer = (text) => text.length;
70
+ const FIT_ERROR = /Cannot fit prompt/;
71
+ describe("createOtelRenderHooks", () => {
72
+ test("emits spans for fit lifecycle", async () => {
73
+ const tracer = new StubTracer();
74
+ const hooks = createOtelRenderHooks({ tracer });
75
+ const element = (_jsxs(Region, { priority: 0, children: ["A", _jsx(Omit, { priority: 1, children: "BBBB" })] }));
76
+ await render(element, { tokenizer, budget: 1, hooks });
77
+ const names = tracer.spans.map((span) => span.name);
78
+ expect(names).toEqual([
79
+ "cria.fit",
80
+ "cria.fit.iteration",
81
+ "cria.fit.strategy",
82
+ ]);
83
+ const rootSpan = tracer.spans[0];
84
+ expect(rootSpan).toBeDefined();
85
+ expect(rootSpan?.attributes["cria.budget"]).toBe(1);
86
+ expect(typeof rootSpan?.attributes["cria.total_tokens"]).toBe("number");
87
+ });
88
+ test("records errors on fit failure", async () => {
89
+ const tracer = new StubTracer();
90
+ const hooks = createOtelRenderHooks({ tracer });
91
+ const element = _jsx(Region, { priority: 0, children: "Too long" });
92
+ await expect(render(element, {
93
+ tokenizer,
94
+ budget: 1,
95
+ hooks,
96
+ })).rejects.toThrow(FIT_ERROR);
97
+ const errorSpan = tracer.spans.at(-1);
98
+ expect(errorSpan.status?.code).toBeDefined();
99
+ expect(errorSpan.exceptions).toHaveLength(1);
100
+ });
101
+ test("propagates tracer errors", async () => {
102
+ const tracer = {
103
+ startSpan: () => {
104
+ throw new Error("boom");
105
+ },
106
+ };
107
+ const hooks = createOtelRenderHooks({ tracer });
108
+ const element = _jsx(Region, { priority: 0, children: "Hello" });
109
+ await expect(render(element, {
110
+ tokenizer,
111
+ budget: 1,
112
+ hooks,
113
+ })).rejects.toThrow("boom");
114
+ });
115
+ });
116
+ //# sourceMappingURL=otel.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel.test.js","sourceRoot":"","sources":["../../src/instrumentation/otel.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { Fragment, type JSX, jsx, jsx as jsxDEV, jsxs } from "./jsx-runtime";
2
+ //# sourceMappingURL=jsx-dev-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-dev-runtime.d.ts","sourceRoot":"","sources":["../src/jsx-dev-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Fragment, jsx, jsx as jsxDEV, jsxs } from "./jsx-runtime";
2
+ //# sourceMappingURL=jsx-dev-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-dev-runtime.js","sourceRoot":"","sources":["../src/jsx-dev-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAY,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC"}
@@ -1,15 +1,37 @@
1
- import type { PromptElement } from "./types";
2
- type ComponentFn = (props: Props) => PromptElement;
3
- type Child = PromptElement | string | number | boolean | null | undefined | Child[];
1
+ import type { MaybePromise, PromptChildren, PromptElement } from "./types";
2
+ type ComponentFn = (props: Props) => MaybePromise<PromptElement>;
3
+ /**
4
+ * JSX child input type (pre-normalization).
5
+ *
6
+ * Why this exists:
7
+ * - `PromptElement.children` (the IR) is always stored as canonical `PromptChildren`
8
+ * (`PromptElement | string` flattened into an array).
9
+ * - But JSX syntax allows much more: numbers, booleans, null/undefined, and nested arrays.
10
+ * TypeScript will type-check those against the component prop type.
11
+ *
12
+ * This type represents what JSX can pass in; `normalizeChildren()` is the only place
13
+ * we flatten/filter/coerce into the canonical IR representation.
14
+ *
15
+ * Keep this type local to the JSX runtime to avoid leaking JSX-specific concerns
16
+ * into core IR and renderer types.
17
+ */
18
+ export type Child = PromptElement | Promise<PromptElement> | string | number | boolean | null | undefined | readonly Child[];
4
19
  type Props = Record<string, unknown> & {
5
- children?: Child | Child[];
20
+ children?: Child;
6
21
  };
7
22
  export declare const Fragment: unique symbol;
8
- export declare function jsx(type: ComponentFn | typeof Fragment, props: Props): PromptElement;
9
- export declare function jsxs(type: ComponentFn | typeof Fragment, props: Props): PromptElement;
23
+ export declare function jsx(type: ComponentFn | typeof Fragment, props: Props): Promise<PromptElement>;
24
+ export declare function jsxs(type: ComponentFn | typeof Fragment, props: Props): Promise<PromptElement>;
10
25
  export declare namespace JSX {
11
- type Element = PromptElement;
12
- type IntrinsicElements = {};
26
+ type Element = MaybePromise<PromptElement>;
27
+ type LibraryManagedAttributes<_C, P> = P extends {
28
+ children?: PromptChildren;
29
+ } ? Omit<P, "children"> & {
30
+ children?: Child;
31
+ } : P;
32
+ interface IntrinsicElements {
33
+ [key: string]: never;
34
+ }
13
35
  interface ElementChildrenAttribute {
14
36
  children: unknown;
15
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,aAAa,CAAC;AACnD,KAAK,KAAK,GACN,aAAa,GACb,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,KAAK,EAAE,CAAC;AACZ,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,CAAA;CAAE,CAAC;AAgCtE,eAAO,MAAM,QAAQ,eAA8B,CAAC;AAGpD,wBAAgB,GAAG,CACjB,IAAI,EAAE,WAAW,GAAG,OAAO,QAAQ,EACnC,KAAK,EAAE,KAAK,GACX,aAAa,CASf;AAGD,wBAAgB,IAAI,CAClB,IAAI,EAAE,WAAW,GAAG,OAAO,QAAQ,EACnC,KAAK,EAAE,KAAK,GACX,aAAa,CAEf;AAGD,yBAAiB,GAAG,CAAC;IACnB,KAAY,OAAO,GAAG,aAAa,CAAC;IAEpC,KAAY,iBAAiB,GAAG,EAAE,CAAC;IACnC,UAAiB,wBAAwB;QACvC,QAAQ,EAAE,OAAO,CAAC;KACnB;CACF"}
1
+ {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3E,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,YAAY,CAAC,aAAa,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,KAAK,GACb,aAAa,GACb,OAAO,CAAC,aAAa,CAAC,GACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,KAAK,EAAE,CAAC;AAErB,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAoC5D,eAAO,MAAM,QAAQ,eAA8B,CAAC;AAGpD,wBAAsB,GAAG,CACvB,IAAI,EAAE,WAAW,GAAG,OAAO,QAAQ,EACnC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,aAAa,CAAC,CASxB;AAGD,wBAAsB,IAAI,CACxB,IAAI,EAAE,WAAW,GAAG,OAAO,QAAQ,EACnC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,aAAa,CAAC,CAExB;AAED,yBAAiB,GAAG,CAAC;IACnB,KAAY,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAElD,KAAY,wBAAwB,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS;QACtD,QAAQ,CAAC,EAAE,cAAc,CAAC;KAC3B,GACG,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;KAAE,GAC1C,CAAC,CAAC;IACN,UAAiB,iBAAiB;QAChC,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;KACtB;IACD,UAAiB,wBAAwB;QACvC,QAAQ,EAAE,OAAO,CAAC;KACnB;CACF"}
@@ -1,5 +1,5 @@
1
1
  // Normalize children: flatten arrays, filter nullish, coerce numbers to strings
2
- function normalizeChildren(children) {
2
+ async function normalizeChildren(children) {
3
3
  if (children === undefined || children === null) {
4
4
  return [];
5
5
  }
@@ -12,29 +12,32 @@ function normalizeChildren(children) {
12
12
  if (typeof children === "number") {
13
13
  return [String(children)];
14
14
  }
15
- if (Array.isArray(children)) {
15
+ if (isChildrenArray(children)) {
16
16
  const result = [];
17
17
  for (const child of children) {
18
- result.push(...normalizeChildren(child));
18
+ result.push(...(await normalizeChildren(child)));
19
19
  }
20
20
  return result;
21
21
  }
22
- // It's a PromptElement
23
- return [children];
22
+ // It's a PromptElement (or a promise for one)
23
+ return [await children];
24
+ }
25
+ function isChildrenArray(value) {
26
+ return Array.isArray(value);
24
27
  }
25
28
  // Fragment: just returns children (inlined into parent)
26
29
  export const Fragment = Symbol.for("cria.fragment");
27
30
  // jsx: called by TypeScript for single child
28
- export function jsx(type, props) {
29
- const children = normalizeChildren(props.children);
31
+ export async function jsx(type, props) {
32
+ const children = await normalizeChildren(props.children);
30
33
  if (type === Fragment) {
31
34
  // Fragment returns a wrapper element that just holds children
32
35
  return { priority: 0, children };
33
36
  }
34
- return type({ ...props, children });
37
+ return await type({ ...props, children });
35
38
  }
36
39
  // jsxs: called by TypeScript for multiple children (same behavior)
37
- export function jsxs(type, props) {
38
- return jsx(type, props);
40
+ export async function jsxs(type, props) {
41
+ return await jsx(type, props);
39
42
  }
40
43
  //# sourceMappingURL=jsx-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"AAaA,gFAAgF;AAChF,SAAS,iBAAiB,CACxB,QAAqC;IAErC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,UAAU,GAAG,CACjB,IAAmC,EACnC,KAAY;IAEZ,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,8DAA8D;QAC9D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,IAAI,CAClB,IAAmC,EACnC,KAAY;IAEZ,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"AA+BA,gFAAgF;AAChF,KAAK,UAAU,iBAAiB,CAC9B,QAA2B;IAE3B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,KAAY;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,IAAmC,EACnC,KAAY;IAEZ,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEzD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,8DAA8D;QAC9D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,IAAmC,EACnC,KAAY;IAEZ,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { type Collection } from "chromadb";
2
+ import type { MemoryEntry } from "../key-value";
3
+ import type { VectorMemory, VectorSearchOptions, VectorSearchResult } from "../vector";
4
+ /**
5
+ * Function to generate embeddings for text.
6
+ */
7
+ export type EmbeddingFunction = (text: string) => Promise<number[]>;
8
+ /**
9
+ * Options for creating a ChromaStore.
10
+ */
11
+ export interface ChromaStoreOptions {
12
+ /** The Chroma collection to use */
13
+ collection: Collection;
14
+ /** Function to generate embeddings from text */
15
+ embed: EmbeddingFunction;
16
+ }
17
+ /**
18
+ * VectorMemory implementation backed by ChromaDB.
19
+ *
20
+ * This adapter wraps a Chroma collection and implements the VectorMemory interface,
21
+ * allowing you to use ChromaDB for RAG workflows with Cria's VectorSearch component.
22
+ *
23
+ * @template T - The type of data stored in the collection
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { ChromaClient } from "chromadb";
28
+ * import { ChromaStore } from "@fastpaca/cria/memory/chroma";
29
+ * import { VectorSearch } from "@fastpaca/cria";
30
+ *
31
+ * const client = new ChromaClient({ path: "http://localhost:8000" });
32
+ * const collection = await client.getOrCreateCollection({ name: "my-docs" });
33
+ *
34
+ * const store = new ChromaStore({
35
+ * collection,
36
+ * embed: async (text) => {
37
+ * // Use your embedding model (OpenAI, Cohere, etc.)
38
+ * return await getEmbedding(text);
39
+ * },
40
+ * });
41
+ *
42
+ * // Use with VectorSearch
43
+ * <VectorSearch store={store} limit={5}>
44
+ * What is RAG?
45
+ * </VectorSearch>
46
+ * ```
47
+ */
48
+ export declare class ChromaStore<T = unknown> implements VectorMemory<T> {
49
+ private readonly collection;
50
+ private readonly embedFn;
51
+ constructor(options: ChromaStoreOptions);
52
+ private embed;
53
+ get(key: string): Promise<MemoryEntry<T> | null>;
54
+ set(key: string, data: T, metadata?: Record<string, unknown>): Promise<void>;
55
+ delete(key: string): Promise<boolean>;
56
+ search(query: string, options?: VectorSearchOptions): Promise<VectorSearchResult<T>[]>;
57
+ private buildSearchResults;
58
+ }
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAA8B,MAAM,UAAU,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gDAAgD;IAChD,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;gBAEhC,OAAO,EAAE,kBAAkB;YAKzB,KAAK;IAUb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAqBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IA8BnC,OAAO,CAAC,kBAAkB;CAsC3B"}
@@ -0,0 +1,172 @@
1
+ import { IncludeEnum } from "chromadb";
2
+ /**
3
+ * Parse a document string. Tries JSON.parse first, returns raw string on failure.
4
+ * Throws if document is missing.
5
+ */
6
+ function parseDocument(document) {
7
+ if (!document) {
8
+ throw new Error("ChromaStore: document is missing from entry");
9
+ }
10
+ try {
11
+ return JSON.parse(document);
12
+ }
13
+ catch {
14
+ // Document was stored as a raw string (T is string)
15
+ return document;
16
+ }
17
+ }
18
+ /**
19
+ * Convert L2 distance to a similarity score (0-1).
20
+ * Lower distance = higher similarity.
21
+ */
22
+ function distanceToScore(distance) {
23
+ return 1 / (1 + distance);
24
+ }
25
+ /**
26
+ * Extract timestamp from Chroma metadata field.
27
+ */
28
+ function extractTimestamp(metadata, field) {
29
+ const value = metadata?.[field];
30
+ return typeof value === "number" ? value : 0;
31
+ }
32
+ /**
33
+ * VectorMemory implementation backed by ChromaDB.
34
+ *
35
+ * This adapter wraps a Chroma collection and implements the VectorMemory interface,
36
+ * allowing you to use ChromaDB for RAG workflows with Cria's VectorSearch component.
37
+ *
38
+ * @template T - The type of data stored in the collection
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * import { ChromaClient } from "chromadb";
43
+ * import { ChromaStore } from "@fastpaca/cria/memory/chroma";
44
+ * import { VectorSearch } from "@fastpaca/cria";
45
+ *
46
+ * const client = new ChromaClient({ path: "http://localhost:8000" });
47
+ * const collection = await client.getOrCreateCollection({ name: "my-docs" });
48
+ *
49
+ * const store = new ChromaStore({
50
+ * collection,
51
+ * embed: async (text) => {
52
+ * // Use your embedding model (OpenAI, Cohere, etc.)
53
+ * return await getEmbedding(text);
54
+ * },
55
+ * });
56
+ *
57
+ * // Use with VectorSearch
58
+ * <VectorSearch store={store} limit={5}>
59
+ * What is RAG?
60
+ * </VectorSearch>
61
+ * ```
62
+ */
63
+ export class ChromaStore {
64
+ collection;
65
+ embedFn;
66
+ constructor(options) {
67
+ this.collection = options.collection;
68
+ this.embedFn = options.embed;
69
+ }
70
+ async embed(text, context) {
71
+ try {
72
+ return await this.embedFn(text);
73
+ }
74
+ catch (error) {
75
+ throw new Error(`ChromaStore: embedding failed during ${context}`, {
76
+ cause: error,
77
+ });
78
+ }
79
+ }
80
+ async get(key) {
81
+ const response = await this.collection.get({
82
+ ids: [key],
83
+ include: [IncludeEnum.Documents, IncludeEnum.Metadatas],
84
+ });
85
+ if (!response.ids.length) {
86
+ return null;
87
+ }
88
+ const document = response.documents?.[0];
89
+ const metadata = response.metadatas?.[0];
90
+ return {
91
+ data: parseDocument(document),
92
+ createdAt: extractTimestamp(metadata, "_createdAt"),
93
+ updatedAt: extractTimestamp(metadata, "_updatedAt"),
94
+ ...(metadata && { metadata: metadata }),
95
+ };
96
+ }
97
+ async set(key, data, metadata) {
98
+ const now = Date.now();
99
+ // Check if entry exists to preserve createdAt
100
+ const existing = await this.get(key);
101
+ const createdAt = existing?.createdAt ?? now;
102
+ // Convert data to text for embedding and storage
103
+ const document = typeof data === "string" ? data : JSON.stringify(data);
104
+ const vector = await this.embed(document, `set("${key}")`);
105
+ // Merge user metadata with timestamps
106
+ const chromaMetadata = {
107
+ ...metadata,
108
+ _createdAt: createdAt,
109
+ _updatedAt: now,
110
+ };
111
+ await this.collection.upsert({
112
+ ids: [key],
113
+ embeddings: [vector],
114
+ documents: [document],
115
+ metadatas: [chromaMetadata],
116
+ });
117
+ }
118
+ async delete(key) {
119
+ const existing = await this.get(key);
120
+ if (!existing) {
121
+ return false;
122
+ }
123
+ await this.collection.delete({ ids: [key] });
124
+ return true;
125
+ }
126
+ async search(query, options) {
127
+ const limit = options?.limit ?? 10;
128
+ const threshold = options?.threshold;
129
+ const queryVector = await this.embed(query, "search");
130
+ const response = await this.collection.query({
131
+ queryEmbeddings: [queryVector],
132
+ nResults: limit,
133
+ include: [
134
+ IncludeEnum.Documents,
135
+ IncludeEnum.Metadatas,
136
+ IncludeEnum.Distances,
137
+ ],
138
+ });
139
+ const ids = response.ids[0] ?? [];
140
+ const documents = response.documents?.[0] ?? [];
141
+ const metadatas = response.metadatas?.[0] ?? [];
142
+ const distances = response.distances?.[0] ?? [];
143
+ return this.buildSearchResults(ids, documents, metadatas, distances, threshold);
144
+ }
145
+ buildSearchResults(ids, documents, metadatas, distances, threshold) {
146
+ const results = [];
147
+ for (let i = 0; i < ids.length; i++) {
148
+ const id = ids[i];
149
+ if (id === undefined) {
150
+ continue;
151
+ }
152
+ const distance = distances[i] ?? 0;
153
+ const score = distanceToScore(distance);
154
+ if (threshold !== undefined && score < threshold) {
155
+ continue;
156
+ }
157
+ const metadata = metadatas[i];
158
+ results.push({
159
+ key: id,
160
+ score,
161
+ entry: {
162
+ data: parseDocument(documents[i]),
163
+ createdAt: extractTimestamp(metadata, "_createdAt"),
164
+ updatedAt: extractTimestamp(metadata, "_updatedAt"),
165
+ ...(metadata && { metadata: metadata }),
166
+ },
167
+ });
168
+ }
169
+ return results;
170
+ }
171
+ }
172
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { KVMemory, MemoryEntry } from "./key-value";
2
+ export { InMemoryStore } from "./key-value";
3
+ export type { VectorMemory, VectorSearchOptions, VectorSearchResult, } from "./vector";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { InMemoryStore } from "./key-value";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { MaybePromise } from "../types";
2
+ /**
3
+ * A stored memory entry with metadata.
4
+ *
5
+ * @template T - The type of data stored in the entry
6
+ */
7
+ export interface MemoryEntry<T = unknown> {
8
+ /** The stored data */
9
+ data: T;
10
+ /** When the entry was created (epoch ms) */
11
+ createdAt: number;
12
+ /** When the entry was last updated (epoch ms) */
13
+ updatedAt: number;
14
+ /** Optional metadata for the entry */
15
+ metadata?: Record<string, unknown>;
16
+ }
17
+ /**
18
+ * Key-value memory interface for LLM-related storage.
19
+ *
20
+ * @template T - The type of data stored in the memory
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { InMemoryStore } from "@fastpaca/cria";
25
+ *
26
+ * const store = new InMemoryStore<{ content: string }>();
27
+ *
28
+ * await store.set("key-1", { content: "Hello" });
29
+ * const entry = await store.get("key-1");
30
+ * ```
31
+ */
32
+ export interface KVMemory<T = unknown> {
33
+ /**
34
+ * Retrieve an entry by its key.
35
+ * @returns The entry if found, null otherwise
36
+ */
37
+ get(key: string): MaybePromise<MemoryEntry<T> | null>;
38
+ /**
39
+ * Store or update an entry.
40
+ * @param key - The unique key for this entry
41
+ * @param data - The data to store
42
+ * @param metadata - Optional metadata to attach
43
+ */
44
+ set(key: string, data: T, metadata?: Record<string, unknown>): MaybePromise<void>;
45
+ /**
46
+ * Delete an entry by its key.
47
+ * @returns true if the entry existed and was deleted, false otherwise
48
+ */
49
+ delete(key: string): MaybePromise<boolean>;
50
+ }
51
+ /**
52
+ * In-memory implementation of KVMemory.
53
+ *
54
+ * @template T - The type of data to store
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * import { InMemoryStore, Summary, type StoredSummary } from "@fastpaca/cria";
59
+ *
60
+ * const store = new InMemoryStore<StoredSummary>();
61
+ *
62
+ * <Summary store={store} ... />
63
+ * ```
64
+ */
65
+ export declare class InMemoryStore<T = unknown> implements KVMemory<T> {
66
+ private readonly store;
67
+ get(key: string): MemoryEntry<T> | null;
68
+ set(key: string, data: T, metadata?: Record<string, unknown>): void;
69
+ delete(key: string): boolean;
70
+ }
71
+ //# sourceMappingURL=key-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-value.d.ts","sourceRoot":"","sources":["../../src/memory/key-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,sBAAsB;IACtB,IAAI,EAAE,CAAC,CAAC;IACR,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEtD;;;;;OAKG;IACH,GAAG,CACD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAE3D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAYnE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAG7B"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * In-memory implementation of KVMemory.
3
+ *
4
+ * @template T - The type of data to store
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { InMemoryStore, Summary, type StoredSummary } from "@fastpaca/cria";
9
+ *
10
+ * const store = new InMemoryStore<StoredSummary>();
11
+ *
12
+ * <Summary store={store} ... />
13
+ * ```
14
+ */
15
+ export class InMemoryStore {
16
+ store = new Map();
17
+ get(key) {
18
+ return this.store.get(key) ?? null;
19
+ }
20
+ set(key, data, metadata) {
21
+ const now = Date.now();
22
+ const existing = this.store.get(key);
23
+ this.store.set(key, {
24
+ data,
25
+ createdAt: existing?.createdAt ?? now,
26
+ updatedAt: now,
27
+ ...(metadata && { metadata }),
28
+ });
29
+ }
30
+ delete(key) {
31
+ return this.store.delete(key);
32
+ }
33
+ }
34
+ //# sourceMappingURL=key-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-value.js","sourceRoot":"","sources":["../../src/memory/key-value.ts"],"names":[],"mappings":"AA2DA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,aAAa;IACP,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAE3D,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,IAAO,EAAE,QAAkC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,IAAI;YACJ,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;YACrC,SAAS,EAAE,GAAG;YACd,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;CACF"}