@deepagents/text2sql 0.23.0 → 0.25.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 +4 -4
- package/dist/index.js.map +2 -2
- package/dist/lib/adapters/bigquery/index.js +14 -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/column-values.grounding.d.ts +4 -0
- package/dist/lib/adapters/groundings/column-values.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/index.js +10 -3
- 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 +21 -10
- 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 +21 -10
- 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 +8 -3
- package/dist/lib/adapters/spreadsheet/index.js.map +2 -2
- package/dist/lib/adapters/sqlite/index.js +18 -7
- 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 +99 -14
- 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/developer.agent.d.ts +1 -1
- package/dist/lib/agents/result-tools.d.ts.map +1 -1
- package/dist/lib/sql.d.ts +3 -1
- package/dist/lib/sql.d.ts.map +1 -1
- package/package.json +6 -5
|
@@ -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"}
|
|
@@ -431,9 +431,11 @@ var InfoGrounding = class extends AbstractGrounding {
|
|
|
431
431
|
// packages/text2sql/src/lib/adapters/groundings/column-values.grounding.ts
|
|
432
432
|
var ColumnValuesGrounding = class extends AbstractGrounding {
|
|
433
433
|
lowCardinalityLimit;
|
|
434
|
+
maxValueLength;
|
|
434
435
|
constructor(config = {}) {
|
|
435
436
|
super("columnValues");
|
|
436
437
|
this.lowCardinalityLimit = config.lowCardinalityLimit ?? 20;
|
|
438
|
+
this.maxValueLength = config.maxValueLength ?? 100;
|
|
437
439
|
}
|
|
438
440
|
/**
|
|
439
441
|
* Get values for native ENUM type columns.
|
|
@@ -538,24 +540,27 @@ var ColumnValuesGrounding = class extends AbstractGrounding {
|
|
|
538
540
|
}
|
|
539
541
|
}
|
|
540
542
|
}
|
|
543
|
+
exceedsMaxValueLength(values) {
|
|
544
|
+
return values.some((v) => v.length > this.maxValueLength);
|
|
545
|
+
}
|
|
541
546
|
/**
|
|
542
547
|
* Resolve column values from all sources in priority order.
|
|
543
548
|
*/
|
|
544
549
|
async resolveColumnValues(tableName, column2, constraints2) {
|
|
545
550
|
const enumValues = await this.collectEnumValues(tableName, column2);
|
|
546
|
-
if (enumValues?.length) {
|
|
551
|
+
if (enumValues?.length && !this.exceedsMaxValueLength(enumValues)) {
|
|
547
552
|
return { kind: "Enum", values: enumValues };
|
|
548
553
|
}
|
|
549
554
|
if (constraints2) {
|
|
550
555
|
for (const constraint2 of constraints2) {
|
|
551
556
|
const checkValues = this.parseCheckConstraint(constraint2, column2.name);
|
|
552
|
-
if (checkValues?.length) {
|
|
557
|
+
if (checkValues?.length && !this.exceedsMaxValueLength(checkValues)) {
|
|
553
558
|
return { kind: "Enum", values: checkValues };
|
|
554
559
|
}
|
|
555
560
|
}
|
|
556
561
|
}
|
|
557
562
|
const lowCardValues = await this.collectLowCardinality(tableName, column2);
|
|
558
|
-
if (lowCardValues?.length) {
|
|
563
|
+
if (lowCardValues?.length && !this.exceedsMaxValueLength(lowCardValues)) {
|
|
559
564
|
return { kind: "LowCardinality", values: lowCardValues };
|
|
560
565
|
}
|
|
561
566
|
return void 0;
|
|
@@ -806,12 +811,61 @@ var TableGrounding = class extends AbstractGrounding {
|
|
|
806
811
|
// packages/text2sql/src/lib/adapters/sqlserver/column-stats.sqlserver.grounding.ts
|
|
807
812
|
var SqlServerColumnStatsGrounding = class extends ColumnStatsGrounding {
|
|
808
813
|
#adapter;
|
|
814
|
+
#nDistinctCache = /* @__PURE__ */ new Map();
|
|
809
815
|
constructor(adapter, config = {}) {
|
|
810
816
|
super(config);
|
|
811
817
|
this.#adapter = adapter;
|
|
812
818
|
}
|
|
819
|
+
async execute(ctx) {
|
|
820
|
+
await this.#fetchNDistinct(ctx);
|
|
821
|
+
await super.execute(ctx);
|
|
822
|
+
}
|
|
823
|
+
async #fetchNDistinct(ctx) {
|
|
824
|
+
if (ctx.tables.length === 0) return;
|
|
825
|
+
const objectIds = ctx.tables.map((t) => {
|
|
826
|
+
const { schema, table: table2 } = this.#adapter.parseTableName(t.name);
|
|
827
|
+
return `OBJECT_ID('[${this.#adapter.escape(schema)}].[${this.#adapter.escape(table2)}]')`;
|
|
828
|
+
});
|
|
829
|
+
try {
|
|
830
|
+
const rows = await this.#adapter.runQuery(`
|
|
831
|
+
SELECT
|
|
832
|
+
OBJECT_SCHEMA_NAME(s.object_id) AS schema_name,
|
|
833
|
+
OBJECT_NAME(s.object_id) AS table_name,
|
|
834
|
+
COL_NAME(sc.object_id, sc.column_id) AS column_name,
|
|
835
|
+
(
|
|
836
|
+
SELECT ISNULL(SUM(h.distinct_range_rows), 0) + COUNT(*)
|
|
837
|
+
FROM sys.dm_db_stats_histogram(s.object_id, s.stats_id) h
|
|
838
|
+
) AS approx_n_distinct
|
|
839
|
+
FROM sys.stats s
|
|
840
|
+
INNER JOIN sys.stats_columns sc
|
|
841
|
+
ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id
|
|
842
|
+
CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) sp
|
|
843
|
+
WHERE sc.stats_column_id = 1
|
|
844
|
+
AND sp.rows > 0
|
|
845
|
+
AND s.object_id IN (${objectIds.join(", ")})
|
|
846
|
+
`);
|
|
847
|
+
for (const row of rows) {
|
|
848
|
+
const tableName = ctx.tables.find((t) => {
|
|
849
|
+
const { schema, table: table2 } = this.#adapter.parseTableName(t.name);
|
|
850
|
+
return schema === row.schema_name && table2 === row.table_name;
|
|
851
|
+
})?.name;
|
|
852
|
+
if (!tableName) continue;
|
|
853
|
+
let map = this.#nDistinctCache.get(tableName);
|
|
854
|
+
if (!map) {
|
|
855
|
+
map = /* @__PURE__ */ new Map();
|
|
856
|
+
this.#nDistinctCache.set(tableName, map);
|
|
857
|
+
}
|
|
858
|
+
map.set(row.column_name, row.approx_n_distinct);
|
|
859
|
+
}
|
|
860
|
+
} catch {
|
|
861
|
+
}
|
|
862
|
+
}
|
|
813
863
|
async collectStats(tableName, column2) {
|
|
864
|
+
const cachedNDistinct = this.#nDistinctCache.get(tableName)?.get(column2.name);
|
|
814
865
|
if (!this.#shouldCollectStats(column2.type)) {
|
|
866
|
+
if (cachedNDistinct != null) {
|
|
867
|
+
return { nDistinct: cachedNDistinct };
|
|
868
|
+
}
|
|
815
869
|
return void 0;
|
|
816
870
|
}
|
|
817
871
|
const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
|
|
@@ -826,18 +880,22 @@ var SqlServerColumnStatsGrounding = class extends ColumnStatsGrounding {
|
|
|
826
880
|
`;
|
|
827
881
|
const rows = await this.#adapter.runQuery(sql);
|
|
828
882
|
if (!rows.length) {
|
|
883
|
+
if (cachedNDistinct != null) {
|
|
884
|
+
return { nDistinct: cachedNDistinct };
|
|
885
|
+
}
|
|
829
886
|
return void 0;
|
|
830
887
|
}
|
|
831
888
|
const min = rows[0]?.min_value;
|
|
832
889
|
const max = rows[0]?.max_value;
|
|
833
890
|
const nullFraction = this.#adapter.toNumber(rows[0]?.null_fraction);
|
|
834
|
-
if (min == null && max == null && nullFraction == null) {
|
|
891
|
+
if (min == null && max == null && nullFraction == null && cachedNDistinct == null) {
|
|
835
892
|
return void 0;
|
|
836
893
|
}
|
|
837
894
|
return {
|
|
838
895
|
min: min ?? void 0,
|
|
839
896
|
max: max ?? void 0,
|
|
840
|
-
nullFraction: nullFraction != null && Number.isFinite(nullFraction) ? Math.max(0, Math.min(1, nullFraction)) : void 0
|
|
897
|
+
nullFraction: nullFraction != null && Number.isFinite(nullFraction) ? Math.max(0, Math.min(1, nullFraction)) : void 0,
|
|
898
|
+
...cachedNDistinct != null && { nDistinct: cachedNDistinct }
|
|
841
899
|
};
|
|
842
900
|
}
|
|
843
901
|
#shouldCollectStats(type) {
|
|
@@ -1087,7 +1145,28 @@ var SqlServerColumnValuesGrounding = class extends ColumnValuesGrounding {
|
|
|
1087
1145
|
super(config);
|
|
1088
1146
|
this.#adapter = adapter;
|
|
1089
1147
|
}
|
|
1148
|
+
#isHighCardinality(column2) {
|
|
1149
|
+
const nDistinct = column2.stats?.nDistinct;
|
|
1150
|
+
if (nDistinct != null) {
|
|
1151
|
+
if (nDistinct > 0) return nDistinct > this.lowCardinalityLimit;
|
|
1152
|
+
return true;
|
|
1153
|
+
}
|
|
1154
|
+
const type = column2.type.toLowerCase();
|
|
1155
|
+
if (/nvarchar\s*\(\s*max\s*\)|varchar\s*\(\s*max\s*\)|text|ntext|xml|image|varbinary\s*\(\s*max\s*\)|uniqueidentifier/.test(
|
|
1156
|
+
type
|
|
1157
|
+
)) {
|
|
1158
|
+
return true;
|
|
1159
|
+
}
|
|
1160
|
+
const varcharMatch = type.match(/n?varchar\s*\(\s*(\d+)\s*\)/);
|
|
1161
|
+
if (varcharMatch && parseInt(varcharMatch[1]) > 255) {
|
|
1162
|
+
return true;
|
|
1163
|
+
}
|
|
1164
|
+
return false;
|
|
1165
|
+
}
|
|
1090
1166
|
async collectLowCardinality(tableName, column2) {
|
|
1167
|
+
if (this.#isHighCardinality(column2)) {
|
|
1168
|
+
return void 0;
|
|
1169
|
+
}
|
|
1091
1170
|
const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
|
|
1092
1171
|
const tableIdentifier = `[${this.#adapter.escape(schema)}].[${this.#adapter.escape(table2)}]`;
|
|
1093
1172
|
const columnIdentifier = `[${this.#adapter.escape(column2.name)}]`;
|
|
@@ -1740,9 +1819,11 @@ var SqlServerTableGrounding = class extends TableGrounding {
|
|
|
1740
1819
|
// packages/text2sql/src/lib/adapters/groundings/view.grounding.ts
|
|
1741
1820
|
var ViewGrounding = class extends AbstractGrounding {
|
|
1742
1821
|
#filter;
|
|
1822
|
+
includeDefinition;
|
|
1743
1823
|
constructor(config = {}) {
|
|
1744
1824
|
super("view");
|
|
1745
1825
|
this.#filter = config.filter;
|
|
1826
|
+
this.includeDefinition = config.includeDefinition ?? true;
|
|
1746
1827
|
}
|
|
1747
1828
|
/**
|
|
1748
1829
|
* Execute the grounding process.
|
|
@@ -1796,14 +1877,18 @@ var SqlServerViewGrounding = class extends ViewGrounding {
|
|
|
1796
1877
|
}
|
|
1797
1878
|
async getView(viewName) {
|
|
1798
1879
|
const { schema, table: view2 } = this.#adapter.parseTableName(viewName);
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1880
|
+
let definition;
|
|
1881
|
+
if (this.includeDefinition) {
|
|
1882
|
+
const defRows = await this.#adapter.runQuery(`
|
|
1883
|
+
SELECT m.definition
|
|
1884
|
+
FROM sys.views v
|
|
1885
|
+
JOIN sys.schemas s ON v.schema_id = s.schema_id
|
|
1886
|
+
JOIN sys.sql_modules m ON v.object_id = m.object_id
|
|
1887
|
+
WHERE s.name = '${this.#adapter.escapeString(schema)}'
|
|
1888
|
+
AND v.name = '${this.#adapter.escapeString(view2)}'
|
|
1889
|
+
`);
|
|
1890
|
+
definition = defRows[0]?.definition ?? void 0;
|
|
1891
|
+
}
|
|
1807
1892
|
const columns = await this.#adapter.runQuery(`
|
|
1808
1893
|
SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type
|
|
1809
1894
|
FROM INFORMATION_SCHEMA.COLUMNS
|
|
@@ -1815,7 +1900,7 @@ var SqlServerViewGrounding = class extends ViewGrounding {
|
|
|
1815
1900
|
name: viewName,
|
|
1816
1901
|
schema,
|
|
1817
1902
|
rawName: view2,
|
|
1818
|
-
definition
|
|
1903
|
+
definition,
|
|
1819
1904
|
columns: columns.map((col) => ({
|
|
1820
1905
|
name: col.column_name ?? "unknown",
|
|
1821
1906
|
type: col.data_type ?? "unknown"
|