nedb-engine-client 2.8.0 → 2.8.2
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/README.md +65 -1
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +55 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -60,9 +60,13 @@ npm install nedb-engine # or: pip install nedb-engine
|
|
|
60
60
|
# v2 DAG engine (recommended — instant cold start, tamper-evident)
|
|
61
61
|
NEDBD_DAG=1 nedbd --data ./data
|
|
62
62
|
|
|
63
|
+
# With natural-language planning (see `cast` below)
|
|
64
|
+
# needs a build with --features cast, plus model.cast in the data dir
|
|
65
|
+
NEDBD_DAG=1 NEDBD_CAST=1 nedbd --data ./data
|
|
66
|
+
|
|
63
67
|
# Check health
|
|
64
68
|
curl http://127.0.0.1:7070/health
|
|
65
|
-
# {"ok":true,"version":"2.0
|
|
69
|
+
# {"ok":true,"version":"2.8.0","service":"nedbd","encrypted":true}
|
|
66
70
|
```
|
|
67
71
|
|
|
68
72
|
---
|
|
@@ -126,6 +130,65 @@ FROM <collection>
|
|
|
126
130
|
[SEARCH "text"] full-text search
|
|
127
131
|
```
|
|
128
132
|
|
|
133
|
+
### Cast — natural language into NQL
|
|
134
|
+
|
|
135
|
+
| Method | Description |
|
|
136
|
+
|--------|-------------|
|
|
137
|
+
| `db.cast(prompt, opts?)` | English → `CastResult` (the plan). `opts.execute` defaults to `false` |
|
|
138
|
+
| `db.castNql(prompt)` | English → just the NQL string |
|
|
139
|
+
|
|
140
|
+
Requires a daemon built with `--features cast` and started with `--cast`. A **3.33M-parameter** model ([nedb-cast-slm](https://github.com/aiassistsecure/nedb-cast-slm)) runs server-side on CPU — no API key, no per-token bill.
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
const plan = await db.cast("orders over 100");
|
|
144
|
+
// {
|
|
145
|
+
// nql: 'FROM orders WHERE total > 100',
|
|
146
|
+
// valid: true,
|
|
147
|
+
// collection: 'orders',
|
|
148
|
+
// collection_known: true,
|
|
149
|
+
// collections: ['orders'],
|
|
150
|
+
// executed: false,
|
|
151
|
+
// seq: 3, head: '262fd9…'
|
|
152
|
+
// }
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**`execute` defaults to `false` on purpose.** You get a plan to look at, not a query that already ran:
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
if (plan.valid && plan.collection_known) {
|
|
159
|
+
const rows = await db.query(plan.nql); // review, then run
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const run = await db.cast("orders over 100", { execute: true });
|
|
163
|
+
run.count; // 2
|
|
164
|
+
run.rows; // [...]
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
That default matters. A real miss from a real run:
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
prompt "paid orders over 100"
|
|
171
|
+
nql FROM orders WHERE status = "paid" LIMIT 100 ← wrong
|
|
172
|
+
correct FROM orders WHERE status = "paid" AND total > 100
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
It read *"over 100"* as `LIMIT 100`. The count still came back correct **by coincidence** — both paid orders exceeded 100. Multi-predicate `WHERE` is the model's weakest clause (85.1% eval / 61.2% holdout). Show the plan to a human when you can.
|
|
176
|
+
|
|
177
|
+
**Errors are explicit, never empty results.** The server checks the plan against the collections this database actually has:
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
try {
|
|
181
|
+
await db.cast("show me all stylists");
|
|
182
|
+
} catch (e) {
|
|
183
|
+
if (e instanceof NedbError) {
|
|
184
|
+
e.status; // 422
|
|
185
|
+
e.message; // collection "stylists" does not exist in "shop" (generated: "FROM stylists")
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Zero rows would read as *"no matching data"* — a lie, when the truth is the collection was imagined. Status **501** means the daemon was built without the feature, so you can detect the capability rather than guess at it.
|
|
191
|
+
|
|
129
192
|
### Integrity
|
|
130
193
|
|
|
131
194
|
| Method | Description |
|
|
@@ -184,6 +247,7 @@ One HTTP request, multiple ops — best throughput for bulk ingestion.
|
|
|
184
247
|
|
|
185
248
|
- **Engine:** [pip install nedb-engine](https://pypi.org/project/nedb-engine/) · [npm install nedb-engine](https://www.npmjs.com/package/nedb-engine)
|
|
186
249
|
- **Python client:** [pip install nedb-engine-client](https://pypi.org/project/nedb-engine-client/)
|
|
250
|
+
- **Cast model:** [nedb-cast-slm](https://github.com/aiassistsecure/nedb-cast-slm) — the 3.3M-param planner behind `db.cast()`
|
|
187
251
|
- **Source:** [github.com/Eth-Interchained/nedb](https://github.com/Eth-Interchained/nedb)
|
|
188
252
|
- **Studio:** [studio.interchained.org](https://studio.interchained.org)
|
|
189
253
|
|
package/dist/index.d.ts
CHANGED
|
@@ -67,6 +67,43 @@ export interface QueryResult {
|
|
|
67
67
|
seq: number;
|
|
68
68
|
head: string;
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Result of a natural-language cast. The interesting part is the PLAN, not the
|
|
72
|
+
* rows — `rows`/`count` appear only when `execute: true` was requested.
|
|
73
|
+
*/
|
|
74
|
+
export interface CastResult {
|
|
75
|
+
prompt: string;
|
|
76
|
+
/** The generated NQL. Present even on a 422, so you can see what it got wrong. */
|
|
77
|
+
nql: string;
|
|
78
|
+
/** Whether the generated NQL parses — checked by the same parser that executes it. */
|
|
79
|
+
valid: boolean;
|
|
80
|
+
/** The collection named after FROM, if one could be read off the output. */
|
|
81
|
+
collection: string | null;
|
|
82
|
+
/** Whether that collection exists in this database. */
|
|
83
|
+
collection_known: boolean;
|
|
84
|
+
/** Every collection this database actually has — what the plan was checked against. */
|
|
85
|
+
collections: string[];
|
|
86
|
+
executed: boolean;
|
|
87
|
+
seq: number;
|
|
88
|
+
head: string;
|
|
89
|
+
rows?: Record<string, unknown>[];
|
|
90
|
+
count?: number;
|
|
91
|
+
error?: string;
|
|
92
|
+
/**
|
|
93
|
+
* Present when the plan contains a quoted literal that is NOT in the prompt —
|
|
94
|
+
* the model substituted a memorised value instead of copying yours.
|
|
95
|
+
*
|
|
96
|
+
* ```
|
|
97
|
+
* "memories about pricing" -> FROM memories SEARCH "handoff"
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* The query is valid, the collection exists, rows come back — and it answers
|
|
101
|
+
* a different question. `valid` and `collection_known` cannot catch this, so
|
|
102
|
+
* **check `drift` before acting on results unattended.** Advisory only: the
|
|
103
|
+
* plan may still be what you wanted.
|
|
104
|
+
*/
|
|
105
|
+
drift?: string;
|
|
106
|
+
}
|
|
70
107
|
export interface VerifyResult {
|
|
71
108
|
ok: boolean;
|
|
72
109
|
seq: number;
|
|
@@ -156,6 +193,40 @@ export declare class NedbClient {
|
|
|
156
193
|
* Like {@link query} but returns the full response including `seq` and `head`.
|
|
157
194
|
*/
|
|
158
195
|
queryFull(nql: string): Promise<QueryResult>;
|
|
196
|
+
/**
|
|
197
|
+
* Turn a short English prompt into NQL, server-side.
|
|
198
|
+
*
|
|
199
|
+
* Requires a daemon built with `--features cast` and started with `--cast`.
|
|
200
|
+
* Returns the full {@link CastResult} rather than rows, because the plan is
|
|
201
|
+
* the point.
|
|
202
|
+
*
|
|
203
|
+
* `execute` defaults to `false` deliberately: the endpoint hands back a plan
|
|
204
|
+
* for review. A planner that silently runs a wrong guess is worse than one
|
|
205
|
+
* that admits uncertainty. Pass `{ execute: true }` to get `rows` and `count`
|
|
206
|
+
* as well.
|
|
207
|
+
*
|
|
208
|
+
* Throws {@link NedbError} when the daemon lacks the feature (501), when the
|
|
209
|
+
* model emits unparseable NQL (422), or when it names a collection this
|
|
210
|
+
* database does not have (422). That last case is the model's known failure
|
|
211
|
+
* mode on an unfamiliar schema, and it is reported explicitly rather than as
|
|
212
|
+
* an empty result set — which would read as "no matching rows" and be a lie.
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```ts
|
|
216
|
+
* const plan = await db.cast("orders over 100");
|
|
217
|
+
* // { nql: 'FROM orders WHERE total > 100', valid: true,
|
|
218
|
+
* // collection_known: true, executed: false, ... }
|
|
219
|
+
*
|
|
220
|
+
* if (plan.valid && plan.collection_known) {
|
|
221
|
+
* const rows = await db.query(plan.nql); // run it yourself, after looking
|
|
222
|
+
* }
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
cast(prompt: string, opts?: {
|
|
226
|
+
execute?: boolean;
|
|
227
|
+
}): Promise<CastResult>;
|
|
228
|
+
/** Just the NQL string. Convenience wrapper over {@link cast}. */
|
|
229
|
+
castNql(prompt: string): Promise<string>;
|
|
159
230
|
/**
|
|
160
231
|
* Run a batch of put/del operations in a single HTTP round-trip.
|
|
161
232
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.esm.js
CHANGED
|
@@ -157,6 +157,61 @@ class NedbClient {
|
|
|
157
157
|
await this.raise(resp);
|
|
158
158
|
return resp.json();
|
|
159
159
|
}
|
|
160
|
+
// ── Cast — natural language into NQL ──────────────────────────────────────
|
|
161
|
+
/**
|
|
162
|
+
* Turn a short English prompt into NQL, server-side.
|
|
163
|
+
*
|
|
164
|
+
* Requires a daemon built with `--features cast` and started with `--cast`.
|
|
165
|
+
* Returns the full {@link CastResult} rather than rows, because the plan is
|
|
166
|
+
* the point.
|
|
167
|
+
*
|
|
168
|
+
* `execute` defaults to `false` deliberately: the endpoint hands back a plan
|
|
169
|
+
* for review. A planner that silently runs a wrong guess is worse than one
|
|
170
|
+
* that admits uncertainty. Pass `{ execute: true }` to get `rows` and `count`
|
|
171
|
+
* as well.
|
|
172
|
+
*
|
|
173
|
+
* Throws {@link NedbError} when the daemon lacks the feature (501), when the
|
|
174
|
+
* model emits unparseable NQL (422), or when it names a collection this
|
|
175
|
+
* database does not have (422). That last case is the model's known failure
|
|
176
|
+
* mode on an unfamiliar schema, and it is reported explicitly rather than as
|
|
177
|
+
* an empty result set — which would read as "no matching rows" and be a lie.
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```ts
|
|
181
|
+
* const plan = await db.cast("orders over 100");
|
|
182
|
+
* // { nql: 'FROM orders WHERE total > 100', valid: true,
|
|
183
|
+
* // collection_known: true, executed: false, ... }
|
|
184
|
+
*
|
|
185
|
+
* if (plan.valid && plan.collection_known) {
|
|
186
|
+
* const rows = await db.query(plan.nql); // run it yourself, after looking
|
|
187
|
+
* }
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
async cast(prompt, opts = {}) {
|
|
191
|
+
const resp = await this.fetch("POST", `/v1/databases/${this.db}/cast`, {
|
|
192
|
+
prompt,
|
|
193
|
+
execute: opts.execute ?? false,
|
|
194
|
+
});
|
|
195
|
+
if (!resp.ok) {
|
|
196
|
+
// Append the offending NQL to the message. Debugging a cast failure
|
|
197
|
+
// without seeing what the model generated is guesswork.
|
|
198
|
+
let msg = resp.statusText;
|
|
199
|
+
try {
|
|
200
|
+
const body = await resp.json();
|
|
201
|
+
if (body.error)
|
|
202
|
+
msg = body.error;
|
|
203
|
+
if (body.nql)
|
|
204
|
+
msg = `${msg} (generated: ${JSON.stringify(body.nql)})`;
|
|
205
|
+
}
|
|
206
|
+
catch { /* ignore */ }
|
|
207
|
+
throw new NedbError(resp.status, msg);
|
|
208
|
+
}
|
|
209
|
+
return resp.json();
|
|
210
|
+
}
|
|
211
|
+
/** Just the NQL string. Convenience wrapper over {@link cast}. */
|
|
212
|
+
async castNql(prompt) {
|
|
213
|
+
return (await this.cast(prompt)).nql;
|
|
214
|
+
}
|
|
160
215
|
// ── Batch ─────────────────────────────────────────────────────────────────
|
|
161
216
|
/**
|
|
162
217
|
* Run a batch of put/del operations in a single HTTP round-trip.
|
package/dist/index.js
CHANGED
|
@@ -157,6 +157,61 @@ class NedbClient {
|
|
|
157
157
|
await this.raise(resp);
|
|
158
158
|
return resp.json();
|
|
159
159
|
}
|
|
160
|
+
// ── Cast — natural language into NQL ──────────────────────────────────────
|
|
161
|
+
/**
|
|
162
|
+
* Turn a short English prompt into NQL, server-side.
|
|
163
|
+
*
|
|
164
|
+
* Requires a daemon built with `--features cast` and started with `--cast`.
|
|
165
|
+
* Returns the full {@link CastResult} rather than rows, because the plan is
|
|
166
|
+
* the point.
|
|
167
|
+
*
|
|
168
|
+
* `execute` defaults to `false` deliberately: the endpoint hands back a plan
|
|
169
|
+
* for review. A planner that silently runs a wrong guess is worse than one
|
|
170
|
+
* that admits uncertainty. Pass `{ execute: true }` to get `rows` and `count`
|
|
171
|
+
* as well.
|
|
172
|
+
*
|
|
173
|
+
* Throws {@link NedbError} when the daemon lacks the feature (501), when the
|
|
174
|
+
* model emits unparseable NQL (422), or when it names a collection this
|
|
175
|
+
* database does not have (422). That last case is the model's known failure
|
|
176
|
+
* mode on an unfamiliar schema, and it is reported explicitly rather than as
|
|
177
|
+
* an empty result set — which would read as "no matching rows" and be a lie.
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```ts
|
|
181
|
+
* const plan = await db.cast("orders over 100");
|
|
182
|
+
* // { nql: 'FROM orders WHERE total > 100', valid: true,
|
|
183
|
+
* // collection_known: true, executed: false, ... }
|
|
184
|
+
*
|
|
185
|
+
* if (plan.valid && plan.collection_known) {
|
|
186
|
+
* const rows = await db.query(plan.nql); // run it yourself, after looking
|
|
187
|
+
* }
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
async cast(prompt, opts = {}) {
|
|
191
|
+
const resp = await this.fetch("POST", `/v1/databases/${this.db}/cast`, {
|
|
192
|
+
prompt,
|
|
193
|
+
execute: opts.execute ?? false,
|
|
194
|
+
});
|
|
195
|
+
if (!resp.ok) {
|
|
196
|
+
// Append the offending NQL to the message. Debugging a cast failure
|
|
197
|
+
// without seeing what the model generated is guesswork.
|
|
198
|
+
let msg = resp.statusText;
|
|
199
|
+
try {
|
|
200
|
+
const body = await resp.json();
|
|
201
|
+
if (body.error)
|
|
202
|
+
msg = body.error;
|
|
203
|
+
if (body.nql)
|
|
204
|
+
msg = `${msg} (generated: ${JSON.stringify(body.nql)})`;
|
|
205
|
+
}
|
|
206
|
+
catch { /* ignore */ }
|
|
207
|
+
throw new NedbError(resp.status, msg);
|
|
208
|
+
}
|
|
209
|
+
return resp.json();
|
|
210
|
+
}
|
|
211
|
+
/** Just the NQL string. Convenience wrapper over {@link cast}. */
|
|
212
|
+
async castNql(prompt) {
|
|
213
|
+
return (await this.cast(prompt)).nql;
|
|
214
|
+
}
|
|
160
215
|
// ── Batch ─────────────────────────────────────────────────────────────────
|
|
161
216
|
/**
|
|
162
217
|
* Run a batch of put/del operations in a single HTTP round-trip.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|