@orquentra/codebuddy 2.6.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE_CODEX.md +6 -4
- package/WORKFLOW.md +5 -5
- package/dist/{chunk-U4HAJLIB.js → chunk-3QGW53GD.js} +16 -3
- package/dist/chunk-3QGW53GD.js.map +1 -0
- package/dist/{chunk-L5AYZC3F.js → chunk-5EDGAZQN.js} +438 -68
- package/dist/chunk-5EDGAZQN.js.map +1 -0
- package/dist/chunk-5UH3BEQR.js +32 -0
- package/dist/chunk-5UH3BEQR.js.map +1 -0
- package/dist/{chunk-JFDRBPYF.js → chunk-6JCKMIQY.js} +2 -2
- package/dist/{chunk-UN57FKQX.js → chunk-AK2UAE32.js} +152 -862
- package/dist/chunk-AK2UAE32.js.map +1 -0
- package/dist/{chunk-GDJH7XJC.js → chunk-AL6VBTNA.js} +77 -3
- package/dist/chunk-AL6VBTNA.js.map +1 -0
- package/dist/{chunk-WHZSVY2L.js → chunk-AQHPEJR6.js} +94 -23
- package/dist/chunk-AQHPEJR6.js.map +1 -0
- package/dist/{chunk-PCE4STAY.js → chunk-BQM7FJ7D.js} +6 -6
- package/dist/chunk-BQM7FJ7D.js.map +1 -0
- package/dist/{chunk-XBJQKCLU.js → chunk-CAEPHLHC.js} +13 -9
- package/dist/chunk-CAEPHLHC.js.map +1 -0
- package/dist/chunk-CG5B3LYG.js +66 -0
- package/dist/chunk-CG5B3LYG.js.map +1 -0
- package/dist/chunk-CSRD5OQA.js +79 -0
- package/dist/chunk-CSRD5OQA.js.map +1 -0
- package/dist/{chunk-IHQM2ZDV.js → chunk-DFV2SK6C.js} +1 -1
- package/dist/{chunk-IHQM2ZDV.js.map → chunk-DFV2SK6C.js.map} +1 -1
- package/dist/chunk-EEUFU7KV.js +1634 -0
- package/dist/chunk-EEUFU7KV.js.map +1 -0
- package/dist/{chunk-UFZD3JAA.js → chunk-ESZXCZIN.js} +3 -3
- package/dist/{chunk-PYLH4MH5.js → chunk-FJOTP632.js} +1 -1
- package/dist/{chunk-SYWJG5NA.js → chunk-GKNYMNFM.js} +17 -7
- package/dist/{chunk-SYWJG5NA.js.map → chunk-GKNYMNFM.js.map} +1 -1
- package/dist/{chunk-JPHJBCZB.js → chunk-HPOR6YXA.js} +3 -2
- package/dist/chunk-HPOR6YXA.js.map +1 -0
- package/dist/chunk-JUAFCLRB.js +1014 -0
- package/dist/chunk-JUAFCLRB.js.map +1 -0
- package/dist/{chunk-776EQXDV.js → chunk-KNR2P2UY.js} +110 -83
- package/dist/chunk-KNR2P2UY.js.map +1 -0
- package/dist/{chunk-N34XHWBA.js → chunk-LCSBL5TT.js} +24 -11
- package/dist/chunk-LCSBL5TT.js.map +1 -0
- package/dist/{chunk-QDBDYCM2.js → chunk-MSUAVR3R.js} +76 -11
- package/dist/chunk-MSUAVR3R.js.map +1 -0
- package/dist/{chunk-6MKEIDX5.js → chunk-SFMIMLXR.js} +2 -2
- package/dist/chunk-TGFTKWOR.js +16 -0
- package/dist/chunk-TGFTKWOR.js.map +1 -0
- package/dist/chunk-TUR6YKEE.js +55 -0
- package/dist/chunk-TUR6YKEE.js.map +1 -0
- package/dist/chunk-Y7D7PUBE.js +321 -0
- package/dist/chunk-Y7D7PUBE.js.map +1 -0
- package/dist/{chunk-VAKBJV26.js → chunk-YJIA2MFL.js} +918 -2238
- package/dist/chunk-YJIA2MFL.js.map +1 -0
- package/dist/cli/index.js +14 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/{cloud-7WM3YLI4.js → cloud-LXZUR3U2.js} +3 -3
- package/dist/{codebuddy-DM-i0Fu5.d.ts → codebuddy-DO7ZhoWn.d.ts} +37 -3
- package/dist/config-GEZFLXK6.js +12 -0
- package/dist/docker-autostart-KDME7TVC.js +12 -0
- package/dist/index.d.ts +48 -3
- package/dist/index.js +32 -25
- package/dist/langgraph/index.d.ts +1 -1
- package/dist/lean-command-CWJAVQ5G.js +18 -0
- package/dist/local-ST4WMRCG.js +17 -0
- package/dist/{main-HFHLGID4.js → main-AHNGHC4L.js} +327 -329
- package/dist/main-AHNGHC4L.js.map +1 -0
- package/dist/{memory-4RGVLPKG.js → memory-TGHVTBME.js} +9 -8
- package/dist/memory-TGHVTBME.js.map +1 -0
- package/dist/operations-7BTAAUHF.js +26 -0
- package/dist/postgres-docker-QQZQ2ABK.js +16 -0
- package/dist/pretool-command-3SXQSMAO.js +13 -0
- package/dist/{rerank-3P3C2UHN.js → rerank-IQAEWLQR.js} +6 -5
- package/dist/rerank-IQAEWLQR.js.map +1 -0
- package/dist/runtime-E7JQZ2BZ.js +46 -0
- package/dist/runtime-E7JQZ2BZ.js.map +1 -0
- package/dist/stdio-HOV4P3DQ.js +12 -0
- package/dist/stdio-HOV4P3DQ.js.map +1 -0
- package/dist/summaries-XV3JGGCC.js +20 -0
- package/dist/summaries-XV3JGGCC.js.map +1 -0
- package/dist/{zvec-MAPSJQSR.js → zvec-KP4KNB7Y.js} +10 -3
- package/dist/zvec-KP4KNB7Y.js.map +1 -0
- package/package.json +7 -10
- package/src/db/migrations/0006_fact_idempotency_key.sql +2 -0
- package/src/db/migrations/meta/0006_snapshot.json +1258 -0
- package/src/db/migrations/meta/_journal.json +7 -0
- package/dist/chunk-776EQXDV.js.map +0 -1
- package/dist/chunk-GDJH7XJC.js.map +0 -1
- package/dist/chunk-JPHJBCZB.js.map +0 -1
- package/dist/chunk-L5AYZC3F.js.map +0 -1
- package/dist/chunk-N34XHWBA.js.map +0 -1
- package/dist/chunk-PCE4STAY.js.map +0 -1
- package/dist/chunk-PQK3GKZH.js +0 -98
- package/dist/chunk-PQK3GKZH.js.map +0 -1
- package/dist/chunk-QDBDYCM2.js.map +0 -1
- package/dist/chunk-U4HAJLIB.js.map +0 -1
- package/dist/chunk-UN57FKQX.js.map +0 -1
- package/dist/chunk-VAKBJV26.js.map +0 -1
- package/dist/chunk-WHZSVY2L.js.map +0 -1
- package/dist/chunk-XBJQKCLU.js.map +0 -1
- package/dist/config-KFEHLV6W.js +0 -11
- package/dist/lean-command-C5YPFKHP.js +0 -15
- package/dist/local-OTOY56B4.js +0 -13
- package/dist/main-HFHLGID4.js.map +0 -1
- package/dist/memory-4RGVLPKG.js.map +0 -1
- package/dist/operations-LOBAQRLO.js +0 -24
- package/dist/pretool-command-MQQ2UNQM.js +0 -10
- package/dist/rerank-3P3C2UHN.js.map +0 -1
- package/dist/summaries-ZBV5IN7Y.js +0 -18
- /package/dist/{chunk-JFDRBPYF.js.map → chunk-6JCKMIQY.js.map} +0 -0
- /package/dist/{chunk-UFZD3JAA.js.map → chunk-ESZXCZIN.js.map} +0 -0
- /package/dist/{chunk-PYLH4MH5.js.map → chunk-FJOTP632.js.map} +0 -0
- /package/dist/{chunk-6MKEIDX5.js.map → chunk-SFMIMLXR.js.map} +0 -0
- /package/dist/{cloud-7WM3YLI4.js.map → cloud-LXZUR3U2.js.map} +0 -0
- /package/dist/{config-KFEHLV6W.js.map → config-GEZFLXK6.js.map} +0 -0
- /package/dist/{lean-command-C5YPFKHP.js.map → docker-autostart-KDME7TVC.js.map} +0 -0
- /package/dist/{local-OTOY56B4.js.map → lean-command-CWJAVQ5G.js.map} +0 -0
- /package/dist/{operations-LOBAQRLO.js.map → local-ST4WMRCG.js.map} +0 -0
- /package/dist/{pretool-command-MQQ2UNQM.js.map → operations-7BTAAUHF.js.map} +0 -0
- /package/dist/{summaries-ZBV5IN7Y.js.map → postgres-docker-QQZQ2ABK.js.map} +0 -0
- /package/dist/{zvec-MAPSJQSR.js.map → pretool-command-3SXQSMAO.js.map} +0 -0
package/CLAUDE_CODEX.md
CHANGED
|
@@ -266,8 +266,8 @@ Create `.mcp.json`:
|
|
|
266
266
|
"args": ["serve"],
|
|
267
267
|
"env": {
|
|
268
268
|
"DATABASE_URL": "postgres://codebuddy:codebuddy@localhost:5432/codebuddy",
|
|
269
|
-
"
|
|
270
|
-
"
|
|
269
|
+
"CODEBUDDY_NAMESPACE": "your-project",
|
|
270
|
+
"CODEBUDDY_PROJECT_ROOT": "/absolute/path/to/your-project"
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
}
|
|
@@ -338,7 +338,7 @@ args = ["serve"]
|
|
|
338
338
|
[mcp_servers."codebuddy-your-project".env]
|
|
339
339
|
CODEBUDDY_NAMESPACE = "your-project"
|
|
340
340
|
DATABASE_URL = "postgres://codebuddy:codebuddy@localhost:5432/codebuddy"
|
|
341
|
-
|
|
341
|
+
CODEBUDDY_PROJECT_ROOT = "/absolute/path/to/your-project"
|
|
342
342
|
```
|
|
343
343
|
|
|
344
344
|
Restart Codex after installing or changing an MCP entry.
|
|
@@ -413,7 +413,9 @@ codebuddy migrate
|
|
|
413
413
|
If Claude Code does not show CodeBuddy tools:
|
|
414
414
|
|
|
415
415
|
- confirm `.mcp.json` is in the project root
|
|
416
|
-
- confirm `
|
|
416
|
+
- confirm `DATABASE_URL`, `CODEBUDDY_NAMESPACE`, and that the server starts in (or
|
|
417
|
+
`CODEBUDDY_PROJECT_ROOT` points to) a folder with `.codebuddy/config.json`.
|
|
418
|
+
`HF_TOKEN` is needed only for `provider.type: "huggingface"`.
|
|
417
419
|
- restart Claude Code
|
|
418
420
|
|
|
419
421
|
If Codex does not show CodeBuddy tools:
|
package/WORKFLOW.md
CHANGED
|
@@ -12,7 +12,7 @@ CodeBuddy is a shared notebook for AI agents.
|
|
|
12
12
|
- Embeddings are prepared in the background so related memories can be found later.
|
|
13
13
|
- When an agent asks a question, CodeBuddy picks the most useful memories that fit inside the token budget.
|
|
14
14
|
- Agents can share facts with other agents through namespaces.
|
|
15
|
-
- The CLI helps you see whether the database,
|
|
15
|
+
- The CLI helps you see whether the database, the embedding model (local by default), and memory index are healthy (`codebuddy doctor`, `codebuddy models`).
|
|
16
16
|
|
|
17
17
|
## Graphical Flow
|
|
18
18
|
|
|
@@ -38,7 +38,7 @@ CodeBuddy Core
|
|
|
38
38
|
|
|
|
39
39
|
+--> In-process embedding worker
|
|
40
40
|
| |
|
|
41
|
-
| +--> Hugging Face
|
|
41
|
+
| +--> embedding provider (local model by default; Hugging Face or OpenRouter optional)
|
|
42
42
|
| | |
|
|
43
43
|
| | +--> retry/backoff
|
|
44
44
|
| | +--> cold-start wait
|
|
@@ -71,7 +71,7 @@ Planner packs best items under token budget
|
|
|
71
71
|
5. In one transaction, it writes the memory row and creates an embedding row with `status=pending`.
|
|
72
72
|
6. For facts and summaries, it also writes a Markdown file.
|
|
73
73
|
7. If the same content or idempotency key already exists, it returns the original ID with `deduplicated: true`.
|
|
74
|
-
8. After the transaction, the in-process worker asks
|
|
74
|
+
8. After the transaction, the in-process worker asks the embedding provider (the local model by default) for embeddings.
|
|
75
75
|
9. The embedding row becomes `ready` or `failed`.
|
|
76
76
|
|
|
77
77
|
## Migration And Recovery Flow
|
|
@@ -130,7 +130,7 @@ source delete ---> B remains
|
|
|
130
130
|
- database connection
|
|
131
131
|
- `pgvector` extension
|
|
132
132
|
- vector index health
|
|
133
|
-
-
|
|
133
|
+
- embedding model readiness (`codebuddy models`)
|
|
134
134
|
- gated model errors
|
|
135
135
|
- cold vs warm model state
|
|
136
136
|
- rate-limit pressure
|
|
@@ -140,7 +140,7 @@ source delete ---> B remains
|
|
|
140
140
|
|
|
141
141
|
## Why Async Embeddings Matter
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
A hosted embedding API can be cold or rate-limited, and the local model downloads once on first use. CodeBuddy should not block a memory write just because a model needs time to wake up. It stores the memory first, marks the embedding as pending, and lets recall use recency until vectors are ready.
|
|
144
144
|
|
|
145
145
|
## What The User Sees
|
|
146
146
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LOCAL_EMBEDDING_MODEL
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HPOR6YXA.js";
|
|
4
4
|
|
|
5
5
|
// src/providers/local.ts
|
|
6
6
|
import { homedir } from "os";
|
|
@@ -11,8 +11,19 @@ var extractor = null;
|
|
|
11
11
|
function modelCacheDir() {
|
|
12
12
|
return process.env.CODEBUDDY_MODEL_CACHE ?? join(homedir(), ".cache", "codebuddy", "models");
|
|
13
13
|
}
|
|
14
|
+
var MISSING_RUNTIME = "Local models need the optional package @huggingface/transformers, which is not installed; dense recall is off and keyword recall still works. Install it with: npm i -g @huggingface/transformers (or reinstall CodeBuddy without --omit=optional).";
|
|
15
|
+
function localRuntimeInstalled() {
|
|
16
|
+
try {
|
|
17
|
+
import.meta.resolve("@huggingface/transformers");
|
|
18
|
+
return true;
|
|
19
|
+
} catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
14
23
|
function loadTransformers() {
|
|
15
|
-
transformers ??= import("@huggingface/transformers").
|
|
24
|
+
transformers ??= import("@huggingface/transformers").catch((error) => {
|
|
25
|
+
throw error.code === "ERR_MODULE_NOT_FOUND" ? new Error(MISSING_RUNTIME) : error;
|
|
26
|
+
}).then((module) => {
|
|
16
27
|
module.env.cacheDir = modelCacheDir();
|
|
17
28
|
module.env.logLevel = module.LogLevel.ERROR;
|
|
18
29
|
return module;
|
|
@@ -85,7 +96,9 @@ async function rerankLocally(model, query, documents) {
|
|
|
85
96
|
|
|
86
97
|
export {
|
|
87
98
|
modelCacheDir,
|
|
99
|
+
MISSING_RUNTIME,
|
|
100
|
+
localRuntimeInstalled,
|
|
88
101
|
LocalModelProvider,
|
|
89
102
|
rerankLocally
|
|
90
103
|
};
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
104
|
+
//# sourceMappingURL=chunk-3QGW53GD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/local.ts"],"sourcesContent":["import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type {\n EmbeddingRequest,\n EmbeddingResponse,\n ModelProvider,\n TextGenerationResponse,\n} from \"./adapter.js\";\nimport type { EmbeddingSpace } from \"./embedding-space.js\";\nimport { LOCAL_EMBEDDING_MODEL } from \"./models.js\";\n\n/**\n * Local Hugging Face models through transformers.js (ONNX Runtime, CPU). The\n * weights download once into `~/.cache/codebuddy/models` (override with\n * `CODEBUDDY_MODEL_CACHE`); afterwards nothing leaves the machine and no token\n * is needed. `@huggingface/transformers` is an optional dependency, loaded on\n * first use, so a missing install only disables semantic ranking.\n */\n\ntype Transformers = typeof import(\"@huggingface/transformers\");\n/** The slice of transformers.js' FeatureExtractionPipeline used here. */\ntype Extractor = (\n texts: string[],\n options: { pooling: \"cls\"; normalize: boolean },\n) => Promise<{ tolist(): number[][] }>;\n\n/** Hard cap on a single input; ModernBERT reads 8k tokens, memories are far shorter. */\nconst MAX_INPUT_CHARS = 8_000;\n\nlet transformers: Promise<Transformers> | null = null;\nlet extractor: Promise<Extractor> | null = null;\n\nexport function modelCacheDir(): string {\n return process.env.CODEBUDDY_MODEL_CACHE ?? join(homedir(), \".cache\", \"codebuddy\", \"models\");\n}\n\n/** Shown when the optional runtime was not installed (`npm i --omit=optional`, a failed native build). */\nexport const MISSING_RUNTIME =\n \"Local models need the optional package @huggingface/transformers, which is not installed; \" +\n \"dense recall is off and keyword recall still works. Install it with: npm i -g @huggingface/transformers \" +\n \"(or reinstall CodeBuddy without --omit=optional).\";\n\n/** Whether the optional local-model runtime can be loaded, without loading it. */\nexport function localRuntimeInstalled(): boolean {\n try {\n import.meta.resolve(\"@huggingface/transformers\");\n return true;\n } catch {\n return false;\n }\n}\n\nfunction loadTransformers(): Promise<Transformers> {\n transformers ??= import(\"@huggingface/transformers\")\n .catch((error: NodeJS.ErrnoException) => {\n throw error.code === \"ERR_MODULE_NOT_FOUND\" ? new Error(MISSING_RUNTIME) : error;\n })\n .then((module) => {\n module.env.cacheDir = modelCacheDir();\n // Info/debug logs go to console.log, i.e. stdout: the MCP JSON-RPC channel\n // under `codebuddy serve`. Errors only (they use stderr), here and in ONNX Runtime.\n module.env.logLevel = module.LogLevel.ERROR;\n return module;\n });\n // A failed import (optional dependency missing) is retried on the next call.\n transformers.catch(() => {\n transformers = null;\n });\n return transformers;\n}\n\nexport class LocalModelProvider implements ModelProvider {\n readonly space: EmbeddingSpace = {\n model: LOCAL_EMBEDDING_MODEL.id,\n revision: LOCAL_EMBEDDING_MODEL.revision,\n schema: LOCAL_EMBEDDING_MODEL.schema,\n dimensions: LOCAL_EMBEDDING_MODEL.dimensions,\n };\n\n /** `request.model` is ignored: one provider is one embedding space. */\n async embed(request: EmbeddingRequest): Promise<EmbeddingResponse> {\n const inputs = (typeof request.input === \"string\" ? [request.input] : request.input).map(\n (text) => text.slice(0, MAX_INPUT_CHARS),\n );\n extractor ??= loadTransformers().then(\n async (module) =>\n (await module.pipeline(\"feature-extraction\", this.space.model, {\n revision: this.space.revision,\n dtype: \"q8\",\n })) as unknown as Extractor,\n );\n // A failed load (no network on first use) is retried on the next call.\n extractor.catch(() => {\n extractor = null;\n });\n const extract = await extractor;\n // Granite r2 is trained with CLS pooling; L2-normalized so cosine = dot.\n const output = await extract(inputs, { pooling: \"cls\", normalize: true });\n return { ...this.space, vectors: output.tolist() };\n }\n\n async generateText(): Promise<TextGenerationResponse> {\n throw new Error(\"The local provider only embeds; text generation uses the BYOK LLM layer.\");\n }\n}\n\ntype Reranker = {\n tokenizer: (\n texts: string[],\n options: { text_pair: string[]; padding: boolean; truncation: boolean },\n ) => unknown;\n model: (inputs: unknown) => Promise<{ logits: { tolist(): number[][] } }>;\n};\nconst rerankers = new Map<string, Promise<Reranker>>();\n\n/**\n * Local cross-encoder logits for (query, document) pairs, in input order.\n * Higher is more relevant; values order documents for one query and are not\n * calibrated across queries, so callers order by them and never threshold.\n */\nexport async function rerankLocally(\n model: { id: string; revision?: string },\n query: string,\n documents: string[],\n): Promise<number[]> {\n if (documents.length === 0) return [];\n let pending = rerankers.get(model.id);\n if (!pending) {\n pending = loadTransformers().then(async (module) => {\n const options = model.revision ? { revision: model.revision } : {};\n const [tokenizer, classifier] = await Promise.all([\n module.AutoTokenizer.from_pretrained(model.id, options),\n module.AutoModelForSequenceClassification.from_pretrained(model.id, {\n ...options,\n dtype: \"q8\",\n }),\n ]);\n return { tokenizer, model: classifier } as unknown as Reranker;\n });\n rerankers.set(model.id, pending);\n pending.catch(() => rerankers.delete(model.id));\n }\n const { tokenizer, model: classifier } = await pending;\n const inputs = tokenizer(\n documents.map(() => query.slice(0, MAX_INPUT_CHARS)),\n {\n text_pair: documents.map((document) => document.slice(0, MAX_INPUT_CHARS)),\n padding: true,\n truncation: true,\n },\n );\n const { logits } = await classifier(inputs);\n return logits.tolist().map((row) => row[0] ?? Number.NEGATIVE_INFINITY);\n}\n"],"mappings":";;;;;AAAA,SAAS,eAAe;AACxB,SAAS,YAAY;AA0BrB,IAAM,kBAAkB;AAExB,IAAI,eAA6C;AACjD,IAAI,YAAuC;AAEpC,SAAS,gBAAwB;AACtC,SAAO,QAAQ,IAAI,yBAAyB,KAAK,QAAQ,GAAG,UAAU,aAAa,QAAQ;AAC7F;AAGO,IAAM,kBACX;AAKK,SAAS,wBAAiC;AAC/C,MAAI;AACF,gBAAY,QAAQ,2BAA2B;AAC/C,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,mBAA0C;AACjD,mBAAiB,OAAO,2BAA2B,EAChD,MAAM,CAAC,UAAiC;AACvC,UAAM,MAAM,SAAS,yBAAyB,IAAI,MAAM,eAAe,IAAI;AAAA,EAC7E,CAAC,EACA,KAAK,CAAC,WAAW;AAChB,WAAO,IAAI,WAAW,cAAc;AAGpC,WAAO,IAAI,WAAW,OAAO,SAAS;AACtC,WAAO;AAAA,EACT,CAAC;AAEH,eAAa,MAAM,MAAM;AACvB,mBAAe;AAAA,EACjB,CAAC;AACD,SAAO;AACT;AAEO,IAAM,qBAAN,MAAkD;AAAA,EAC9C,QAAwB;AAAA,IAC/B,OAAO,sBAAsB;AAAA,IAC7B,UAAU,sBAAsB;AAAA,IAChC,QAAQ,sBAAsB;AAAA,IAC9B,YAAY,sBAAsB;AAAA,EACpC;AAAA;AAAA,EAGA,MAAM,MAAM,SAAuD;AACjE,UAAM,UAAU,OAAO,QAAQ,UAAU,WAAW,CAAC,QAAQ,KAAK,IAAI,QAAQ,OAAO;AAAA,MACnF,CAAC,SAAS,KAAK,MAAM,GAAG,eAAe;AAAA,IACzC;AACA,kBAAc,iBAAiB,EAAE;AAAA,MAC/B,OAAO,WACJ,MAAM,OAAO,SAAS,sBAAsB,KAAK,MAAM,OAAO;AAAA,QAC7D,UAAU,KAAK,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAAA,IACL;AAEA,cAAU,MAAM,MAAM;AACpB,kBAAY;AAAA,IACd,CAAC;AACD,UAAM,UAAU,MAAM;AAEtB,UAAM,SAAS,MAAM,QAAQ,QAAQ,EAAE,SAAS,OAAO,WAAW,KAAK,CAAC;AACxE,WAAO,EAAE,GAAG,KAAK,OAAO,SAAS,OAAO,OAAO,EAAE;AAAA,EACnD;AAAA,EAEA,MAAM,eAAgD;AACpD,UAAM,IAAI,MAAM,0EAA0E;AAAA,EAC5F;AACF;AASA,IAAM,YAAY,oBAAI,IAA+B;AAOrD,eAAsB,cACpB,OACA,OACA,WACmB;AACnB,MAAI,UAAU,WAAW,EAAG,QAAO,CAAC;AACpC,MAAI,UAAU,UAAU,IAAI,MAAM,EAAE;AACpC,MAAI,CAAC,SAAS;AACZ,cAAU,iBAAiB,EAAE,KAAK,OAAO,WAAW;AAClD,YAAM,UAAU,MAAM,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;AACjE,YAAM,CAACA,YAAWC,WAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,QAChD,OAAO,cAAc,gBAAgB,MAAM,IAAI,OAAO;AAAA,QACtD,OAAO,mCAAmC,gBAAgB,MAAM,IAAI;AAAA,UAClE,GAAG;AAAA,UACH,OAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC;AACD,aAAO,EAAE,WAAAD,YAAW,OAAOC,YAAW;AAAA,IACxC,CAAC;AACD,cAAU,IAAI,MAAM,IAAI,OAAO;AAC/B,YAAQ,MAAM,MAAM,UAAU,OAAO,MAAM,EAAE,CAAC;AAAA,EAChD;AACA,QAAM,EAAE,WAAW,OAAO,WAAW,IAAI,MAAM;AAC/C,QAAM,SAAS;AAAA,IACb,UAAU,IAAI,MAAM,MAAM,MAAM,GAAG,eAAe,CAAC;AAAA,IACnD;AAAA,MACE,WAAW,UAAU,IAAI,CAAC,aAAa,SAAS,MAAM,GAAG,eAAe,CAAC;AAAA,MACzE,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,EACF;AACA,QAAM,EAAE,OAAO,IAAI,MAAM,WAAW,MAAM;AAC1C,SAAO,OAAO,OAAO,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,OAAO,iBAAiB;AACxE;","names":["tokenizer","classifier"]}
|