@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.
Files changed (34) hide show
  1. package/dist/index.js +4 -4
  2. package/dist/index.js.map +2 -2
  3. package/dist/lib/adapters/bigquery/index.js +14 -8
  4. package/dist/lib/adapters/bigquery/index.js.map +2 -2
  5. package/dist/lib/adapters/bigquery/view.bigquery.grounding.d.ts.map +1 -1
  6. package/dist/lib/adapters/groundings/column-values.grounding.d.ts +4 -0
  7. package/dist/lib/adapters/groundings/column-values.grounding.d.ts.map +1 -1
  8. package/dist/lib/adapters/groundings/index.js +10 -3
  9. package/dist/lib/adapters/groundings/index.js.map +2 -2
  10. package/dist/lib/adapters/groundings/view.grounding.d.ts +3 -0
  11. package/dist/lib/adapters/groundings/view.grounding.d.ts.map +1 -1
  12. package/dist/lib/adapters/mysql/index.js +21 -10
  13. package/dist/lib/adapters/mysql/index.js.map +2 -2
  14. package/dist/lib/adapters/mysql/view.mysql.grounding.d.ts.map +1 -1
  15. package/dist/lib/adapters/postgres/index.js +21 -10
  16. package/dist/lib/adapters/postgres/index.js.map +2 -2
  17. package/dist/lib/adapters/postgres/view.postgres.grounding.d.ts.map +1 -1
  18. package/dist/lib/adapters/spreadsheet/index.js +8 -3
  19. package/dist/lib/adapters/spreadsheet/index.js.map +2 -2
  20. package/dist/lib/adapters/sqlite/index.js +18 -7
  21. package/dist/lib/adapters/sqlite/index.js.map +2 -2
  22. package/dist/lib/adapters/sqlite/view.sqlite.grounding.d.ts.map +1 -1
  23. package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts +2 -4
  24. package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts.map +1 -1
  25. package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts +0 -9
  26. package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts.map +1 -1
  27. package/dist/lib/adapters/sqlserver/index.js +99 -14
  28. package/dist/lib/adapters/sqlserver/index.js.map +3 -3
  29. package/dist/lib/adapters/sqlserver/view.sqlserver.grounding.d.ts.map +1 -1
  30. package/dist/lib/agents/developer.agent.d.ts +1 -1
  31. package/dist/lib/agents/result-tools.d.ts.map +1 -1
  32. package/dist/lib/sql.d.ts +3 -1
  33. package/dist/lib/sql.d.ts.map +1 -1
  34. 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;;;;;;;;GAQG;AACH,qBAAa,8BAA+B,SAAQ,qBAAqB;;gBAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,2BAAgC;cAK7C,qBAAqB,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CA4BjC"}
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
- const defRows = await this.#adapter.runQuery(`
1800
- SELECT m.definition
1801
- FROM sys.views v
1802
- JOIN sys.schemas s ON v.schema_id = s.schema_id
1803
- JOIN sys.sql_modules m ON v.object_id = m.object_id
1804
- WHERE s.name = '${this.#adapter.escapeString(schema)}'
1805
- AND v.name = '${this.#adapter.escapeString(view2)}'
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: defRows[0]?.definition ?? void 0,
1903
+ definition,
1819
1904
  columns: columns.map((col) => ({
1820
1905
  name: col.column_name ?? "unknown",
1821
1906
  type: col.data_type ?? "unknown"