@deepagents/text2sql 0.12.1 → 0.13.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/dist/index.js +128 -69
- package/dist/index.js.map +3 -3
- package/dist/lib/adapters/groundings/index.js +65 -6
- package/dist/lib/adapters/groundings/index.js.map +3 -3
- package/dist/lib/adapters/mysql/index.js +65 -6
- package/dist/lib/adapters/mysql/index.js.map +3 -3
- package/dist/lib/adapters/postgres/index.js +65 -6
- package/dist/lib/adapters/postgres/index.js.map +3 -3
- package/dist/lib/adapters/spreadsheet/index.js +1 -0
- package/dist/lib/adapters/spreadsheet/index.js.map +3 -3
- package/dist/lib/adapters/sqlite/index.js +65 -6
- package/dist/lib/adapters/sqlite/index.js.map +3 -3
- package/dist/lib/adapters/sqlserver/index.js +65 -6
- package/dist/lib/adapters/sqlserver/index.js.map +3 -3
- package/dist/lib/agents/result-tools.d.ts +9 -3
- package/dist/lib/agents/result-tools.d.ts.map +1 -1
- package/dist/lib/instructions.d.ts.map +1 -1
- package/dist/lib/sql.d.ts +4 -15
- package/dist/lib/sql.d.ts.map +1 -1
- package/dist/lib/synthesis/index.js +65 -6
- package/dist/lib/synthesis/index.js.map +3 -3
- package/package.json +4 -4
|
@@ -19,9 +19,15 @@ export interface ResultToolsOptions {
|
|
|
19
19
|
* The agent sees only one tool: `bash`
|
|
20
20
|
* SQL is executed via: sql run "SELECT ..."
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
* - `/results/` → `./artifacts/{chatId}/{messageId}/results/` (current turn,
|
|
24
|
-
* - `/artifacts/` → `./artifacts/{chatId}/` (
|
|
22
|
+
* Artifact storage:
|
|
23
|
+
* - `/results/` → `./artifacts/{chatId}/{messageId}/results/` (current turn, isolated)
|
|
24
|
+
* - `/artifacts/` → `./artifacts/{chatId}/` (shared across turns)
|
|
25
|
+
*
|
|
26
|
+
* SQL results are written to both locations:
|
|
27
|
+
* 1. Isolated: `/results/{uuid}.json` for per-turn organization
|
|
28
|
+
* 2. Shared: `/artifacts/{uuid}.json` for cross-turn access
|
|
29
|
+
*
|
|
30
|
+
* The returned path is `/artifacts/{uuid}.json` which works in any turn.
|
|
25
31
|
*
|
|
26
32
|
* @param options - Configuration options
|
|
27
33
|
* @param options.adapter - Database adapter for SQL execution
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-tools.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/result-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"result-tools.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/result-tools.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAsKtD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB;;;;;GA0DlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/lib/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAarB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/lib/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAarB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;CACzB;AAgJD,wBAAgB,UAAU,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,EAAE,CA+R5E"}
|
package/dist/lib/sql.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type UIMessage } from 'ai';
|
|
2
2
|
import { type AgentModel } from '@deepagents/agent';
|
|
3
|
-
import {
|
|
3
|
+
import { ContextEngine, type ContextFragment } from '@deepagents/context';
|
|
4
4
|
import type { Adapter } from './adapters/adapter.ts';
|
|
5
5
|
import { type RenderingTools } from './agents/text2sql.agent.ts';
|
|
6
6
|
import { type TeachingsOptions } from './instructions.ts';
|
|
@@ -9,10 +9,9 @@ export declare class Text2Sql {
|
|
|
9
9
|
#private;
|
|
10
10
|
constructor(config: {
|
|
11
11
|
adapter: Adapter;
|
|
12
|
-
|
|
12
|
+
context: (...fragments: ContextFragment[]) => ContextEngine;
|
|
13
13
|
version: string;
|
|
14
14
|
tools?: RenderingTools;
|
|
15
|
-
instructions?: ContextFragment[];
|
|
16
15
|
model: AgentModel;
|
|
17
16
|
/**
|
|
18
17
|
* Configure teachings behavior
|
|
@@ -46,17 +45,7 @@ export declare class Text2Sql {
|
|
|
46
45
|
* );
|
|
47
46
|
*/
|
|
48
47
|
toPairs<T extends PairProducer>(factory: (adapter: Adapter) => T): Promise<ExtractedPair[]>;
|
|
49
|
-
chat(messages: UIMessage[],
|
|
50
|
-
|
|
51
|
-
userId: string;
|
|
52
|
-
}): Promise<import("ai").AsyncIterableStream<import("ai").InferUIMessageChunk<UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>>>>;
|
|
53
|
-
/**
|
|
54
|
-
* Developer chat interface - power-user mode for SQL generation.
|
|
55
|
-
* Uses db_query tool for direct SQL execution (LLM writes SQL).
|
|
56
|
-
*/
|
|
57
|
-
developer(messages: UIMessage[], params: {
|
|
58
|
-
chatId: string;
|
|
59
|
-
userId: string;
|
|
60
|
-
}): Promise<import("ai").AsyncIterableStream<import("ai").InferUIMessageChunk<UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>>>>;
|
|
48
|
+
chat(messages: UIMessage[]): Promise<import("ai").AsyncIterableStream<import("ai").InferUIMessageChunk<UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>>>>;
|
|
49
|
+
developer(messages: UIMessage[]): Promise<import("ai").AsyncIterableStream<import("ai").InferUIMessageChunk<UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>>>>;
|
|
61
50
|
}
|
|
62
51
|
//# sourceMappingURL=sql.d.ts.map
|
package/dist/lib/sql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/lib/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EAEf,MAAM,IAAI,CAAC;AAEZ,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/lib/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EAEf,MAAM,IAAI,CAAC;AAEZ,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,aAAa,EACb,KAAK,eAAe,EAOrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,KAAK,gBAAgB,EAAc,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE7E,qBAAa,QAAQ;;gBAUP,MAAM,EAAE;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,eAAe,EAAE,KAAK,aAAa,CAAC;QAC5D,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,KAAK,EAAE,UAAU,CAAC;QAClB;;;WAGG;QACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;KACrC;IAaY,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYlD;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAUhD;;;;;;;;;;;;;;;;;;OAkBG;IACU,OAAO,CAAC,CAAC,SAAS,YAAY,EACzC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,GAC/B,OAAO,CAAC,aAAa,EAAE,CAAC;IA6Bd,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE;IAwD1B,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE;CAqD7C"}
|
|
@@ -175,6 +175,7 @@ import dedent from "dedent";
|
|
|
175
175
|
import z from "zod";
|
|
176
176
|
|
|
177
177
|
// packages/context/dist/index.js
|
|
178
|
+
import { mergeWith } from "lodash-es";
|
|
178
179
|
import { encode } from "gpt-tokenizer";
|
|
179
180
|
import { generateId } from "ai";
|
|
180
181
|
import pluralize from "pluralize";
|
|
@@ -738,6 +739,8 @@ var ContextEngine = class {
|
|
|
738
739
|
#branch = null;
|
|
739
740
|
#chatData = null;
|
|
740
741
|
#initialized = false;
|
|
742
|
+
/** Initial metadata to merge on first initialization */
|
|
743
|
+
#initialMetadata;
|
|
741
744
|
constructor(options) {
|
|
742
745
|
if (!options.chatId) {
|
|
743
746
|
throw new Error("chatId is required");
|
|
@@ -749,6 +752,7 @@ var ContextEngine = class {
|
|
|
749
752
|
this.#chatId = options.chatId;
|
|
750
753
|
this.#userId = options.userId;
|
|
751
754
|
this.#branchName = "main";
|
|
755
|
+
this.#initialMetadata = options.metadata;
|
|
752
756
|
}
|
|
753
757
|
/**
|
|
754
758
|
* Initialize the chat and branch if they don't exist.
|
|
@@ -761,6 +765,15 @@ var ContextEngine = class {
|
|
|
761
765
|
id: this.#chatId,
|
|
762
766
|
userId: this.#userId
|
|
763
767
|
});
|
|
768
|
+
if (this.#initialMetadata) {
|
|
769
|
+
this.#chatData = await this.#store.updateChat(this.#chatId, {
|
|
770
|
+
metadata: {
|
|
771
|
+
...this.#chatData.metadata,
|
|
772
|
+
...this.#initialMetadata
|
|
773
|
+
}
|
|
774
|
+
});
|
|
775
|
+
this.#initialMetadata = void 0;
|
|
776
|
+
}
|
|
764
777
|
this.#branch = await this.#store.getActiveBranch(this.#chatId);
|
|
765
778
|
this.#initialized = true;
|
|
766
779
|
}
|
|
@@ -1234,6 +1247,36 @@ var ContextEngine = class {
|
|
|
1234
1247
|
}
|
|
1235
1248
|
this.#chatData = await this.#store.updateChat(this.#chatId, storeUpdates);
|
|
1236
1249
|
}
|
|
1250
|
+
/**
|
|
1251
|
+
* Track token usage for the current chat.
|
|
1252
|
+
* Accumulates usage metrics in chat.metadata.usage.
|
|
1253
|
+
*
|
|
1254
|
+
* @param usage - Token usage from AI SDK (LanguageModelUsage)
|
|
1255
|
+
*
|
|
1256
|
+
* @example
|
|
1257
|
+
* ```ts
|
|
1258
|
+
* // In onFinish callback
|
|
1259
|
+
* const usage = await result.totalUsage;
|
|
1260
|
+
* await context.trackUsage(usage);
|
|
1261
|
+
* ```
|
|
1262
|
+
*/
|
|
1263
|
+
async trackUsage(usage) {
|
|
1264
|
+
await this.#ensureInitialized();
|
|
1265
|
+
const freshChatData = await this.#store.getChat(this.#chatId);
|
|
1266
|
+
const currentUsage = freshChatData?.metadata?.usage ?? {};
|
|
1267
|
+
const updatedUsage = mergeWith(
|
|
1268
|
+
{},
|
|
1269
|
+
currentUsage,
|
|
1270
|
+
usage,
|
|
1271
|
+
(a, b) => typeof a === "number" || typeof b === "number" ? (a ?? 0) + (b ?? 0) : void 0
|
|
1272
|
+
);
|
|
1273
|
+
this.#chatData = await this.#store.updateChat(this.#chatId, {
|
|
1274
|
+
metadata: {
|
|
1275
|
+
...freshChatData?.metadata,
|
|
1276
|
+
usage: updatedUsage
|
|
1277
|
+
}
|
|
1278
|
+
});
|
|
1279
|
+
}
|
|
1237
1280
|
/**
|
|
1238
1281
|
* Consolidate context fragments (no-op for now).
|
|
1239
1282
|
*
|
|
@@ -1609,12 +1652,20 @@ var SqliteContextStore = class extends ContextStore {
|
|
|
1609
1652
|
}
|
|
1610
1653
|
async listChats(options) {
|
|
1611
1654
|
const params = [];
|
|
1612
|
-
|
|
1655
|
+
const whereClauses = [];
|
|
1613
1656
|
let limitClause = "";
|
|
1614
1657
|
if (options?.userId) {
|
|
1615
|
-
|
|
1658
|
+
whereClauses.push("c.userId = ?");
|
|
1616
1659
|
params.push(options.userId);
|
|
1617
1660
|
}
|
|
1661
|
+
if (options?.metadata) {
|
|
1662
|
+
whereClauses.push(`json_extract(c.metadata, '$.' || ?) = ?`);
|
|
1663
|
+
params.push(options.metadata.key);
|
|
1664
|
+
params.push(
|
|
1665
|
+
typeof options.metadata.value === "boolean" ? options.metadata.value ? 1 : 0 : options.metadata.value
|
|
1666
|
+
);
|
|
1667
|
+
}
|
|
1668
|
+
const whereClause = whereClauses.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : "";
|
|
1618
1669
|
if (options?.limit !== void 0) {
|
|
1619
1670
|
limitClause = " LIMIT ?";
|
|
1620
1671
|
params.push(options.limit);
|
|
@@ -1628,6 +1679,7 @@ var SqliteContextStore = class extends ContextStore {
|
|
|
1628
1679
|
c.id,
|
|
1629
1680
|
c.userId,
|
|
1630
1681
|
c.title,
|
|
1682
|
+
c.metadata,
|
|
1631
1683
|
c.createdAt,
|
|
1632
1684
|
c.updatedAt,
|
|
1633
1685
|
COUNT(DISTINCT m.id) as messageCount,
|
|
@@ -1643,6 +1695,7 @@ var SqliteContextStore = class extends ContextStore {
|
|
|
1643
1695
|
id: row.id,
|
|
1644
1696
|
userId: row.userId,
|
|
1645
1697
|
title: row.title ?? void 0,
|
|
1698
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : void 0,
|
|
1646
1699
|
messageCount: row.messageCount,
|
|
1647
1700
|
branchCount: row.branchCount,
|
|
1648
1701
|
createdAt: row.createdAt,
|
|
@@ -1672,11 +1725,17 @@ var SqliteContextStore = class extends ContextStore {
|
|
|
1672
1725
|
// Message Operations (Graph Nodes)
|
|
1673
1726
|
// ==========================================================================
|
|
1674
1727
|
async addMessage(message2) {
|
|
1675
|
-
const existingParent = message2.parentId === message2.id ? this.#db.prepare("SELECT parentId FROM messages WHERE id = ?").get(message2.id) : void 0;
|
|
1676
|
-
const parentId = message2.parentId === message2.id ? existingParent?.parentId ?? null : message2.parentId;
|
|
1677
1728
|
this.#db.prepare(
|
|
1678
1729
|
`INSERT INTO messages (id, chatId, parentId, name, type, data, createdAt)
|
|
1679
|
-
VALUES (
|
|
1730
|
+
VALUES (
|
|
1731
|
+
?1,
|
|
1732
|
+
?2,
|
|
1733
|
+
CASE WHEN ?3 = ?1 THEN (SELECT parentId FROM messages WHERE id = ?1) ELSE ?3 END,
|
|
1734
|
+
?4,
|
|
1735
|
+
?5,
|
|
1736
|
+
?6,
|
|
1737
|
+
?7
|
|
1738
|
+
)
|
|
1680
1739
|
ON CONFLICT(id) DO UPDATE SET
|
|
1681
1740
|
name = excluded.name,
|
|
1682
1741
|
type = excluded.type,
|
|
@@ -1684,7 +1743,7 @@ var SqliteContextStore = class extends ContextStore {
|
|
|
1684
1743
|
).run(
|
|
1685
1744
|
message2.id,
|
|
1686
1745
|
message2.chatId,
|
|
1687
|
-
parentId,
|
|
1746
|
+
message2.parentId,
|
|
1688
1747
|
message2.name,
|
|
1689
1748
|
message2.type ?? null,
|
|
1690
1749
|
JSON.stringify(message2.data),
|