@deepagents/text2sql 0.24.0 → 0.26.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.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +149 -241
- package/dist/index.js.map +4 -4
- package/dist/lib/adapters/adapter.d.ts +6 -0
- package/dist/lib/adapters/adapter.d.ts.map +1 -1
- package/dist/lib/adapters/bigquery/index.js +30 -8
- package/dist/lib/adapters/bigquery/index.js.map +2 -2
- package/dist/lib/adapters/bigquery/view.bigquery.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/index.js +2 -0
- package/dist/lib/adapters/groundings/index.js.map +2 -2
- package/dist/lib/adapters/groundings/view.grounding.d.ts +3 -0
- package/dist/lib/adapters/groundings/view.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/mysql/index.js +29 -7
- package/dist/lib/adapters/mysql/index.js.map +2 -2
- package/dist/lib/adapters/mysql/view.mysql.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/postgres/index.js +29 -7
- package/dist/lib/adapters/postgres/index.js.map +2 -2
- package/dist/lib/adapters/postgres/view.postgres.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/spreadsheet/index.js +16 -0
- package/dist/lib/adapters/spreadsheet/index.js.map +2 -2
- package/dist/lib/adapters/sqlite/index.js +26 -4
- package/dist/lib/adapters/sqlite/index.js.map +2 -2
- package/dist/lib/adapters/sqlite/view.sqlite.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts +2 -4
- package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts +0 -9
- package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlserver/index.js +107 -11
- package/dist/lib/adapters/sqlserver/index.js.map +3 -3
- package/dist/lib/adapters/sqlserver/view.sqlserver.grounding.d.ts.map +1 -1
- package/dist/lib/agents/result-tools.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/lib/agents/developer.agent.d.ts +0 -41
- package/dist/lib/agents/developer.agent.d.ts.map +0 -1
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import type { Adapter } from '../adapter.ts';
|
|
2
2
|
import { type Column, ColumnValuesGrounding, type ColumnValuesGroundingConfig } from '../groundings/column-values.grounding.ts';
|
|
3
|
-
/**
|
|
4
|
-
* SQL Server implementation of ColumnValuesGrounding.
|
|
5
|
-
*
|
|
6
|
-
* Supports:
|
|
7
|
-
* - CHECK constraints with IN clauses (inherited from base)
|
|
8
|
-
* - Low cardinality data scan
|
|
9
|
-
*
|
|
10
|
-
* Note: SQL Server does not have native ENUM types.
|
|
11
|
-
*/
|
|
12
3
|
export declare class SqlServerColumnValuesGrounding extends ColumnValuesGrounding {
|
|
13
4
|
#private;
|
|
14
5
|
constructor(adapter: Adapter, config?: ColumnValuesGroundingConfig);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-values.sqlserver.grounding.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/sqlserver/column-values.sqlserver.grounding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,KAAK,MAAM,EACX,qBAAqB,EACrB,KAAK,2BAA2B,EACjC,MAAM,0CAA0C,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"column-values.sqlserver.grounding.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/sqlserver/column-values.sqlserver.grounding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,KAAK,MAAM,EACX,qBAAqB,EACrB,KAAK,2BAA2B,EACjC,MAAM,0CAA0C,CAAC;AAElD,qBAAa,8BAA+B,SAAQ,qBAAqB;;gBAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,2BAAgC;cA2B7C,qBAAqB,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CAgCjC"}
|
|
@@ -121,6 +121,22 @@ var Adapter = class {
|
|
|
121
121
|
}
|
|
122
122
|
return this.#toSchemaFragments(ctx);
|
|
123
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Resolve the allowed entity names (tables + views) from grounding config.
|
|
126
|
+
* Runs all configured groundings and returns the resolved set of names.
|
|
127
|
+
* Results are NOT cached — call once and store the result.
|
|
128
|
+
*/
|
|
129
|
+
async resolveAllowedEntities() {
|
|
130
|
+
const ctx = createGroundingContext();
|
|
131
|
+
for (const fn of this.grounding) {
|
|
132
|
+
const grounding = fn(this);
|
|
133
|
+
await grounding.execute(ctx);
|
|
134
|
+
}
|
|
135
|
+
return [
|
|
136
|
+
...ctx.tables.map((t) => t.name),
|
|
137
|
+
...ctx.views.map((v) => v.name)
|
|
138
|
+
];
|
|
139
|
+
}
|
|
124
140
|
/**
|
|
125
141
|
* Convert complete grounding context to schema fragments.
|
|
126
142
|
* Called after all groundings have populated ctx with data.
|
|
@@ -811,12 +827,61 @@ var TableGrounding = class extends AbstractGrounding {
|
|
|
811
827
|
// packages/text2sql/src/lib/adapters/sqlserver/column-stats.sqlserver.grounding.ts
|
|
812
828
|
var SqlServerColumnStatsGrounding = class extends ColumnStatsGrounding {
|
|
813
829
|
#adapter;
|
|
830
|
+
#nDistinctCache = /* @__PURE__ */ new Map();
|
|
814
831
|
constructor(adapter, config = {}) {
|
|
815
832
|
super(config);
|
|
816
833
|
this.#adapter = adapter;
|
|
817
834
|
}
|
|
835
|
+
async execute(ctx) {
|
|
836
|
+
await this.#fetchNDistinct(ctx);
|
|
837
|
+
await super.execute(ctx);
|
|
838
|
+
}
|
|
839
|
+
async #fetchNDistinct(ctx) {
|
|
840
|
+
if (ctx.tables.length === 0) return;
|
|
841
|
+
const objectIds = ctx.tables.map((t) => {
|
|
842
|
+
const { schema, table: table2 } = this.#adapter.parseTableName(t.name);
|
|
843
|
+
return `OBJECT_ID('[${this.#adapter.escape(schema)}].[${this.#adapter.escape(table2)}]')`;
|
|
844
|
+
});
|
|
845
|
+
try {
|
|
846
|
+
const rows = await this.#adapter.runQuery(`
|
|
847
|
+
SELECT
|
|
848
|
+
OBJECT_SCHEMA_NAME(s.object_id) AS schema_name,
|
|
849
|
+
OBJECT_NAME(s.object_id) AS table_name,
|
|
850
|
+
COL_NAME(sc.object_id, sc.column_id) AS column_name,
|
|
851
|
+
(
|
|
852
|
+
SELECT ISNULL(SUM(h.distinct_range_rows), 0) + COUNT(*)
|
|
853
|
+
FROM sys.dm_db_stats_histogram(s.object_id, s.stats_id) h
|
|
854
|
+
) AS approx_n_distinct
|
|
855
|
+
FROM sys.stats s
|
|
856
|
+
INNER JOIN sys.stats_columns sc
|
|
857
|
+
ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id
|
|
858
|
+
CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) sp
|
|
859
|
+
WHERE sc.stats_column_id = 1
|
|
860
|
+
AND sp.rows > 0
|
|
861
|
+
AND s.object_id IN (${objectIds.join(", ")})
|
|
862
|
+
`);
|
|
863
|
+
for (const row of rows) {
|
|
864
|
+
const tableName = ctx.tables.find((t) => {
|
|
865
|
+
const { schema, table: table2 } = this.#adapter.parseTableName(t.name);
|
|
866
|
+
return schema === row.schema_name && table2 === row.table_name;
|
|
867
|
+
})?.name;
|
|
868
|
+
if (!tableName) continue;
|
|
869
|
+
let map = this.#nDistinctCache.get(tableName);
|
|
870
|
+
if (!map) {
|
|
871
|
+
map = /* @__PURE__ */ new Map();
|
|
872
|
+
this.#nDistinctCache.set(tableName, map);
|
|
873
|
+
}
|
|
874
|
+
map.set(row.column_name, row.approx_n_distinct);
|
|
875
|
+
}
|
|
876
|
+
} catch {
|
|
877
|
+
}
|
|
878
|
+
}
|
|
818
879
|
async collectStats(tableName, column2) {
|
|
880
|
+
const cachedNDistinct = this.#nDistinctCache.get(tableName)?.get(column2.name);
|
|
819
881
|
if (!this.#shouldCollectStats(column2.type)) {
|
|
882
|
+
if (cachedNDistinct != null) {
|
|
883
|
+
return { nDistinct: cachedNDistinct };
|
|
884
|
+
}
|
|
820
885
|
return void 0;
|
|
821
886
|
}
|
|
822
887
|
const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
|
|
@@ -831,18 +896,22 @@ var SqlServerColumnStatsGrounding = class extends ColumnStatsGrounding {
|
|
|
831
896
|
`;
|
|
832
897
|
const rows = await this.#adapter.runQuery(sql);
|
|
833
898
|
if (!rows.length) {
|
|
899
|
+
if (cachedNDistinct != null) {
|
|
900
|
+
return { nDistinct: cachedNDistinct };
|
|
901
|
+
}
|
|
834
902
|
return void 0;
|
|
835
903
|
}
|
|
836
904
|
const min = rows[0]?.min_value;
|
|
837
905
|
const max = rows[0]?.max_value;
|
|
838
906
|
const nullFraction = this.#adapter.toNumber(rows[0]?.null_fraction);
|
|
839
|
-
if (min == null && max == null && nullFraction == null) {
|
|
907
|
+
if (min == null && max == null && nullFraction == null && cachedNDistinct == null) {
|
|
840
908
|
return void 0;
|
|
841
909
|
}
|
|
842
910
|
return {
|
|
843
911
|
min: min ?? void 0,
|
|
844
912
|
max: max ?? void 0,
|
|
845
|
-
nullFraction: nullFraction != null && Number.isFinite(nullFraction) ? Math.max(0, Math.min(1, nullFraction)) : void 0
|
|
913
|
+
nullFraction: nullFraction != null && Number.isFinite(nullFraction) ? Math.max(0, Math.min(1, nullFraction)) : void 0,
|
|
914
|
+
...cachedNDistinct != null && { nDistinct: cachedNDistinct }
|
|
846
915
|
};
|
|
847
916
|
}
|
|
848
917
|
#shouldCollectStats(type) {
|
|
@@ -1092,7 +1161,28 @@ var SqlServerColumnValuesGrounding = class extends ColumnValuesGrounding {
|
|
|
1092
1161
|
super(config);
|
|
1093
1162
|
this.#adapter = adapter;
|
|
1094
1163
|
}
|
|
1164
|
+
#isHighCardinality(column2) {
|
|
1165
|
+
const nDistinct = column2.stats?.nDistinct;
|
|
1166
|
+
if (nDistinct != null) {
|
|
1167
|
+
if (nDistinct > 0) return nDistinct > this.lowCardinalityLimit;
|
|
1168
|
+
return true;
|
|
1169
|
+
}
|
|
1170
|
+
const type = column2.type.toLowerCase();
|
|
1171
|
+
if (/nvarchar\s*\(\s*max\s*\)|varchar\s*\(\s*max\s*\)|text|ntext|xml|image|varbinary\s*\(\s*max\s*\)|uniqueidentifier/.test(
|
|
1172
|
+
type
|
|
1173
|
+
)) {
|
|
1174
|
+
return true;
|
|
1175
|
+
}
|
|
1176
|
+
const varcharMatch = type.match(/n?varchar\s*\(\s*(\d+)\s*\)/);
|
|
1177
|
+
if (varcharMatch && parseInt(varcharMatch[1]) > 255) {
|
|
1178
|
+
return true;
|
|
1179
|
+
}
|
|
1180
|
+
return false;
|
|
1181
|
+
}
|
|
1095
1182
|
async collectLowCardinality(tableName, column2) {
|
|
1183
|
+
if (this.#isHighCardinality(column2)) {
|
|
1184
|
+
return void 0;
|
|
1185
|
+
}
|
|
1096
1186
|
const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
|
|
1097
1187
|
const tableIdentifier = `[${this.#adapter.escape(schema)}].[${this.#adapter.escape(table2)}]`;
|
|
1098
1188
|
const columnIdentifier = `[${this.#adapter.escape(column2.name)}]`;
|
|
@@ -1745,9 +1835,11 @@ var SqlServerTableGrounding = class extends TableGrounding {
|
|
|
1745
1835
|
// packages/text2sql/src/lib/adapters/groundings/view.grounding.ts
|
|
1746
1836
|
var ViewGrounding = class extends AbstractGrounding {
|
|
1747
1837
|
#filter;
|
|
1838
|
+
includeDefinition;
|
|
1748
1839
|
constructor(config = {}) {
|
|
1749
1840
|
super("view");
|
|
1750
1841
|
this.#filter = config.filter;
|
|
1842
|
+
this.includeDefinition = config.includeDefinition ?? true;
|
|
1751
1843
|
}
|
|
1752
1844
|
/**
|
|
1753
1845
|
* Execute the grounding process.
|
|
@@ -1801,14 +1893,18 @@ var SqlServerViewGrounding = class extends ViewGrounding {
|
|
|
1801
1893
|
}
|
|
1802
1894
|
async getView(viewName) {
|
|
1803
1895
|
const { schema, table: view2 } = this.#adapter.parseTableName(viewName);
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1896
|
+
let definition;
|
|
1897
|
+
if (this.includeDefinition) {
|
|
1898
|
+
const defRows = await this.#adapter.runQuery(`
|
|
1899
|
+
SELECT m.definition
|
|
1900
|
+
FROM sys.views v
|
|
1901
|
+
JOIN sys.schemas s ON v.schema_id = s.schema_id
|
|
1902
|
+
JOIN sys.sql_modules m ON v.object_id = m.object_id
|
|
1903
|
+
WHERE s.name = '${this.#adapter.escapeString(schema)}'
|
|
1904
|
+
AND v.name = '${this.#adapter.escapeString(view2)}'
|
|
1905
|
+
`);
|
|
1906
|
+
definition = defRows[0]?.definition ?? void 0;
|
|
1907
|
+
}
|
|
1812
1908
|
const columns = await this.#adapter.runQuery(`
|
|
1813
1909
|
SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type
|
|
1814
1910
|
FROM INFORMATION_SCHEMA.COLUMNS
|
|
@@ -1820,7 +1916,7 @@ var SqlServerViewGrounding = class extends ViewGrounding {
|
|
|
1820
1916
|
name: viewName,
|
|
1821
1917
|
schema,
|
|
1822
1918
|
rawName: view2,
|
|
1823
|
-
definition
|
|
1919
|
+
definition,
|
|
1824
1920
|
columns: columns.map((col) => ({
|
|
1825
1921
|
name: col.column_name ?? "unknown",
|
|
1826
1922
|
type: col.data_type ?? "unknown"
|