@absolutejs/rag 0.17.0 → 0.18.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.
- package/CHANGELOG.md +12 -0
- package/README.md +4 -0
- package/RESEARCH.md +268 -0
- package/changelog.json +262 -235
- package/dist/angular/index.js +174 -2
- package/dist/angular/index.js.map +6 -4
- package/dist/client/index.js +149 -1
- package/dist/client/index.js.map +5 -4
- package/dist/client/research.js +223 -0
- package/dist/client/research.js.map +10 -0
- package/dist/manifest.js +3722 -269
- package/dist/manifest.js.map +29 -3
- package/dist/react/index.js +158 -2
- package/dist/react/index.js.map +6 -4
- package/dist/research/index.js +125286 -0
- package/dist/research/index.js.map +369 -0
- package/dist/src/angular/index.d.ts +1 -0
- package/dist/src/angular/research.service.d.ts +12 -0
- package/dist/src/client/index.d.ts +1 -0
- package/dist/src/client/research.d.ts +30 -0
- package/dist/src/react/index.d.ts +1 -0
- package/dist/src/react/useResearch.d.ts +9 -0
- package/dist/src/research/budget.d.ts +26 -0
- package/dist/src/research/evaluation.d.ts +42 -0
- package/dist/src/research/evidence.d.ts +21 -0
- package/dist/src/research/index.d.ts +9 -0
- package/dist/src/research/manifest.d.ts +18 -0
- package/dist/src/research/plugin.d.ts +230 -0
- package/dist/src/research/runtime.d.ts +2 -0
- package/dist/src/research/schema.d.ts +8 -0
- package/dist/src/research/store.d.ts +29 -0
- package/dist/src/research/types.d.ts +96 -0
- package/dist/src/research/workflows.d.ts +96 -0
- package/dist/src/svelte/createResearch.d.ts +9 -0
- package/dist/src/svelte/index.d.ts +1 -0
- package/dist/src/vue/index.d.ts +1 -0
- package/dist/src/vue/useResearch.d.ts +9 -0
- package/dist/svelte/index.js +164 -2
- package/dist/svelte/index.js.map +6 -4
- package/dist/vue/index.js +164 -2
- package/dist/vue/index.js.map +6 -4
- package/package.json +24 -6
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __name = (target, name) => {
|
|
5
|
+
Object.defineProperty(target, "name", {
|
|
6
|
+
value: name,
|
|
7
|
+
enumerable: false,
|
|
8
|
+
configurable: true
|
|
9
|
+
});
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
12
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
13
|
+
var __typeError = (msg) => {
|
|
14
|
+
throw TypeError(msg);
|
|
15
|
+
};
|
|
16
|
+
var __defNormalProp = (obj, key, value) => (key in obj) ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
17
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
18
|
+
var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
|
|
19
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
20
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
21
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
22
|
+
var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
|
|
23
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
24
|
+
var __expectFn = (fn) => fn !== undefined && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
25
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({
|
|
26
|
+
kind: __decoratorStrings[kind],
|
|
27
|
+
name,
|
|
28
|
+
metadata,
|
|
29
|
+
addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null))
|
|
30
|
+
});
|
|
31
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
32
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
33
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length;i < n; i++)
|
|
34
|
+
flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
35
|
+
return value;
|
|
36
|
+
};
|
|
37
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
38
|
+
var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
|
|
39
|
+
var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
|
|
40
|
+
var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
|
|
41
|
+
var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : {
|
|
42
|
+
get [name]() {
|
|
43
|
+
return __privateGet(this, extra);
|
|
44
|
+
},
|
|
45
|
+
set [name](x) {
|
|
46
|
+
__privateSet(this, extra, x);
|
|
47
|
+
}
|
|
48
|
+
}, name));
|
|
49
|
+
k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
|
|
50
|
+
for (var i = decorators.length - 1;i >= 0; i--) {
|
|
51
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
52
|
+
if (k) {
|
|
53
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => (name in x) };
|
|
54
|
+
if (k ^ 3)
|
|
55
|
+
access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
|
|
56
|
+
if (k > 2)
|
|
57
|
+
access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
|
|
58
|
+
}
|
|
59
|
+
it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? undefined : { get: desc.get, set: desc.set } : target, ctx);
|
|
60
|
+
done._ = 1;
|
|
61
|
+
if (k ^ 4 || it === undefined)
|
|
62
|
+
__expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
|
|
63
|
+
else if (typeof it !== "object" || it === null)
|
|
64
|
+
__typeError("Object expected");
|
|
65
|
+
else
|
|
66
|
+
__expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
|
|
67
|
+
}
|
|
68
|
+
return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// src/client/research.ts
|
|
72
|
+
var createResearchClient = (options = {}) => {
|
|
73
|
+
let state = {
|
|
74
|
+
status: "idle",
|
|
75
|
+
result: null,
|
|
76
|
+
progress: null,
|
|
77
|
+
error: null
|
|
78
|
+
};
|
|
79
|
+
let active;
|
|
80
|
+
let generation = 0;
|
|
81
|
+
const listeners = new Set;
|
|
82
|
+
const publish = (next) => {
|
|
83
|
+
state = next;
|
|
84
|
+
listeners.forEach((listener) => listener());
|
|
85
|
+
};
|
|
86
|
+
const cancel = () => {
|
|
87
|
+
generation++;
|
|
88
|
+
active?.abort();
|
|
89
|
+
active = undefined;
|
|
90
|
+
if (state.status === "running")
|
|
91
|
+
publish({ ...state, status: "cancelled" });
|
|
92
|
+
};
|
|
93
|
+
const run = async (input) => {
|
|
94
|
+
active?.abort();
|
|
95
|
+
const id = ++generation;
|
|
96
|
+
const controller = new AbortController;
|
|
97
|
+
active = controller;
|
|
98
|
+
publish({ status: "running", result: null, progress: null, error: null });
|
|
99
|
+
let reader;
|
|
100
|
+
try {
|
|
101
|
+
const headers = new Headers(options.headers?.());
|
|
102
|
+
headers.set("content-type", "application/json");
|
|
103
|
+
const response = await (options.fetch ?? fetch)(`${options.path ?? "/research"}/stream`, {
|
|
104
|
+
method: "POST",
|
|
105
|
+
body: JSON.stringify(input),
|
|
106
|
+
headers,
|
|
107
|
+
credentials: "same-origin",
|
|
108
|
+
signal: controller.signal
|
|
109
|
+
});
|
|
110
|
+
if (!response.ok || !response.body)
|
|
111
|
+
throw new Error(`Research request failed (${response.status})`);
|
|
112
|
+
reader = response.body.getReader();
|
|
113
|
+
const decoder = new TextDecoder;
|
|
114
|
+
let pending = "";
|
|
115
|
+
let result;
|
|
116
|
+
const processLine = (line) => {
|
|
117
|
+
if (!line.trim())
|
|
118
|
+
return;
|
|
119
|
+
const event = JSON.parse(line);
|
|
120
|
+
if (event.type === "error")
|
|
121
|
+
throw new Error("Research request failed");
|
|
122
|
+
if (event.type === "result") {
|
|
123
|
+
if (!event.result || !["reviewed", "partial", "empty", "unavailable"].includes(event.result.status) || !Array.isArray(event.result.fields) || !Array.isArray(event.result.sources))
|
|
124
|
+
throw new Error("Invalid research result");
|
|
125
|
+
result = event.result;
|
|
126
|
+
}
|
|
127
|
+
if (event.type === "progress" && id === generation)
|
|
128
|
+
publish({ ...state, progress: event.progress });
|
|
129
|
+
};
|
|
130
|
+
while (true) {
|
|
131
|
+
controller.signal.throwIfAborted();
|
|
132
|
+
const chunk = await reader.read();
|
|
133
|
+
pending += decoder.decode(chunk.value, { stream: !chunk.done });
|
|
134
|
+
if (pending.length > 4000000)
|
|
135
|
+
throw new Error("Research response too large");
|
|
136
|
+
let newline;
|
|
137
|
+
while ((newline = pending.indexOf(`
|
|
138
|
+
`)) >= 0) {
|
|
139
|
+
processLine(pending.slice(0, newline));
|
|
140
|
+
pending = pending.slice(newline + 1);
|
|
141
|
+
}
|
|
142
|
+
if (chunk.done)
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
if (pending)
|
|
146
|
+
processLine(pending);
|
|
147
|
+
controller.signal.throwIfAborted();
|
|
148
|
+
if (!result)
|
|
149
|
+
throw new Error("Research stream ended without a result");
|
|
150
|
+
if (id === generation)
|
|
151
|
+
publish({ ...state, status: "complete", result });
|
|
152
|
+
return result;
|
|
153
|
+
} catch (error) {
|
|
154
|
+
if (id === generation)
|
|
155
|
+
publish({
|
|
156
|
+
...state,
|
|
157
|
+
status: controller.signal.aborted ? "cancelled" : "error",
|
|
158
|
+
error: controller.signal.aborted ? null : error instanceof Error ? error.message : "Research request failed"
|
|
159
|
+
});
|
|
160
|
+
throw error;
|
|
161
|
+
} finally {
|
|
162
|
+
await reader?.cancel().catch(() => {
|
|
163
|
+
return;
|
|
164
|
+
});
|
|
165
|
+
reader?.releaseLock();
|
|
166
|
+
if (id === generation)
|
|
167
|
+
active = undefined;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
return {
|
|
171
|
+
run,
|
|
172
|
+
cancel,
|
|
173
|
+
getSnapshot: () => state,
|
|
174
|
+
subscribe: (listener) => {
|
|
175
|
+
listeners.add(listener);
|
|
176
|
+
return () => {
|
|
177
|
+
listeners.delete(listener);
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
reset: () => {
|
|
181
|
+
cancel();
|
|
182
|
+
publish({ status: "idle", result: null, progress: null, error: null });
|
|
183
|
+
},
|
|
184
|
+
dispose: () => {
|
|
185
|
+
cancel();
|
|
186
|
+
listeners.clear();
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
var bindResearchForm = (form, output, options = {}) => {
|
|
191
|
+
const client = createResearchClient(options);
|
|
192
|
+
const unsubscribe = client.subscribe(() => {
|
|
193
|
+
const state = client.getSnapshot();
|
|
194
|
+
output.setAttribute("aria-busy", String(state.status === "running"));
|
|
195
|
+
output.textContent = state.result ? JSON.stringify(state.result, null, 2) : state.error ?? state.status;
|
|
196
|
+
});
|
|
197
|
+
const submit = (event) => {
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
const data = new FormData(form);
|
|
200
|
+
client.run({
|
|
201
|
+
query: String(data.get("query") ?? ""),
|
|
202
|
+
...data.get("task") ? { task: String(data.get("task")) } : {}
|
|
203
|
+
}).catch(() => {
|
|
204
|
+
return;
|
|
205
|
+
});
|
|
206
|
+
};
|
|
207
|
+
form.addEventListener("submit", submit);
|
|
208
|
+
return {
|
|
209
|
+
...client,
|
|
210
|
+
dispose: () => {
|
|
211
|
+
form.removeEventListener("submit", submit);
|
|
212
|
+
unsubscribe();
|
|
213
|
+
client.dispose();
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
export {
|
|
218
|
+
bindResearchForm,
|
|
219
|
+
createResearchClient
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
//# debugId=50A87DE12CA1839A64756E2164756E21
|
|
223
|
+
//# sourceMappingURL=research.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/client/research.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n ResearchInput,\n ResearchResult,\n ResearchProgress,\n} from \"../research/types\";\nexport type ResearchRequest = Pick<\n ResearchInput,\n \"query\" | \"task\" | \"freshness\"\n>;\nexport type ResearchState = {\n status: \"idle\" | \"running\" | \"complete\" | \"cancelled\" | \"error\";\n result: ResearchResult | null;\n progress: ResearchProgress | null;\n error: string | null;\n};\nexport type ResearchClientOptions = {\n path?: string;\n fetch?: typeof fetch;\n headers?: () => HeadersInit;\n};\nexport const createResearchClient = (options: ResearchClientOptions = {}) => {\n let state: ResearchState = {\n status: \"idle\",\n result: null,\n progress: null,\n error: null,\n };\n let active: AbortController | undefined;\n let generation = 0;\n const listeners = new Set<() => void>();\n const publish = (next: ResearchState) => {\n state = next;\n listeners.forEach((listener) => listener());\n };\n const cancel = () => {\n generation++;\n active?.abort();\n active = undefined;\n if (state.status === \"running\") publish({ ...state, status: \"cancelled\" });\n };\n const run = async (input: ResearchRequest): Promise<ResearchResult> => {\n active?.abort();\n const id = ++generation;\n const controller = new AbortController();\n active = controller;\n publish({ status: \"running\", result: null, progress: null, error: null });\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n try {\n const headers = new Headers(options.headers?.());\n headers.set(\"content-type\", \"application/json\");\n const response = await (options.fetch ?? fetch)(\n `${options.path ?? \"/research\"}/stream`,\n {\n method: \"POST\",\n body: JSON.stringify(input),\n headers,\n credentials: \"same-origin\",\n signal: controller.signal,\n },\n );\n if (!response.ok || !response.body)\n throw new Error(`Research request failed (${response.status})`);\n reader = response.body.getReader();\n const decoder = new TextDecoder();\n let pending = \"\";\n let result: ResearchResult | undefined;\n const processLine = (line: string) => {\n if (!line.trim()) return;\n const event = JSON.parse(line);\n if (event.type === \"error\") throw new Error(\"Research request failed\");\n if (event.type === \"result\") {\n if (\n !event.result ||\n ![\"reviewed\", \"partial\", \"empty\", \"unavailable\"].includes(\n event.result.status,\n ) ||\n !Array.isArray(event.result.fields) ||\n !Array.isArray(event.result.sources)\n )\n throw new Error(\"Invalid research result\");\n result = event.result;\n }\n if (event.type === \"progress\" && id === generation)\n publish({ ...state, progress: event.progress });\n };\n while (true) {\n controller.signal.throwIfAborted();\n const chunk = await reader.read();\n pending += decoder.decode(chunk.value, { stream: !chunk.done });\n if (pending.length > 4_000_000)\n throw new Error(\"Research response too large\");\n let newline: number;\n while ((newline = pending.indexOf(\"\\n\")) >= 0) {\n processLine(pending.slice(0, newline));\n pending = pending.slice(newline + 1);\n }\n if (chunk.done) break;\n }\n if (pending) processLine(pending);\n controller.signal.throwIfAborted();\n if (!result) throw new Error(\"Research stream ended without a result\");\n if (id === generation) publish({ ...state, status: \"complete\", result });\n return result;\n } catch (error) {\n if (id === generation)\n publish({\n ...state,\n status: controller.signal.aborted ? \"cancelled\" : \"error\",\n error: controller.signal.aborted\n ? null\n : error instanceof Error\n ? error.message\n : \"Research request failed\",\n });\n throw error;\n } finally {\n await reader?.cancel().catch(() => undefined);\n reader?.releaseLock();\n if (id === generation) active = undefined;\n }\n };\n return {\n run,\n cancel,\n getSnapshot: () => state,\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n reset: () => {\n cancel();\n publish({ status: \"idle\", result: null, progress: null, error: null });\n },\n dispose: () => {\n cancel();\n listeners.clear();\n },\n };\n};\n\n/** HTML binding uses textContent, never model-produced HTML. Returns cleanup. */\nexport const bindResearchForm = (\n form: HTMLFormElement,\n output: HTMLElement,\n options: ResearchClientOptions = {},\n) => {\n const client = createResearchClient(options);\n const unsubscribe = client.subscribe(() => {\n const state = client.getSnapshot();\n output.setAttribute(\"aria-busy\", String(state.status === \"running\"));\n output.textContent = state.result\n ? JSON.stringify(state.result, null, 2)\n : (state.error ?? state.status);\n });\n const submit = (event: SubmitEvent) => {\n event.preventDefault();\n const data = new FormData(form);\n void client\n .run({\n query: String(data.get(\"query\") ?? \"\"),\n ...(data.get(\"task\") ? { task: String(data.get(\"task\")) } : {}),\n })\n .catch(() => undefined);\n };\n form.addEventListener(\"submit\", submit);\n return {\n ...client,\n dispose: () => {\n form.removeEventListener(\"submit\", submit);\n unsubscribe();\n client.dispose();\n },\n };\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "50A87DE12CA1839A64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|