tabulaflow 0.1.0__tar.gz

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 (381) hide show
  1. tabulaflow-0.1.0/LICENSE +29 -0
  2. tabulaflow-0.1.0/PKG-INFO +496 -0
  3. tabulaflow-0.1.0/README.md +427 -0
  4. tabulaflow-0.1.0/pyproject.toml +203 -0
  5. tabulaflow-0.1.0/setup.cfg +4 -0
  6. tabulaflow-0.1.0/tabulaflow/__init__.py +3 -0
  7. tabulaflow-0.1.0/tabulaflow/_paths.py +5 -0
  8. tabulaflow-0.1.0/tabulaflow/agents/__init__.py +42 -0
  9. tabulaflow-0.1.0/tabulaflow/agents/_cache.py +73 -0
  10. tabulaflow-0.1.0/tabulaflow/agents/chat/__init__.py +80 -0
  11. tabulaflow-0.1.0/tabulaflow/agents/chat/compaction.py +323 -0
  12. tabulaflow-0.1.0/tabulaflow/agents/chat/events.py +161 -0
  13. tabulaflow-0.1.0/tabulaflow/agents/chat/input.py +30 -0
  14. tabulaflow-0.1.0/tabulaflow/agents/chat/session.py +926 -0
  15. tabulaflow-0.1.0/tabulaflow/agents/chat/system_prompt.md +254 -0
  16. tabulaflow-0.1.0/tabulaflow/agents/chat/tools.py +57 -0
  17. tabulaflow-0.1.0/tabulaflow/agents/chat/turn.py +325 -0
  18. tabulaflow-0.1.0/tabulaflow/agents/config.py +48 -0
  19. tabulaflow-0.1.0/tabulaflow/agents/enrichment.py +411 -0
  20. tabulaflow-0.1.0/tabulaflow/agents/extraction/__init__.py +26 -0
  21. tabulaflow-0.1.0/tabulaflow/agents/extraction/extractor.py +237 -0
  22. tabulaflow-0.1.0/tabulaflow/agents/extraction/markdown.py +439 -0
  23. tabulaflow-0.1.0/tabulaflow/agents/llm.py +326 -0
  24. tabulaflow-0.1.0/tabulaflow/agents/media.py +258 -0
  25. tabulaflow-0.1.0/tabulaflow/agents/message_store.py +254 -0
  26. tabulaflow-0.1.0/tabulaflow/agents/runtime.py +146 -0
  27. tabulaflow-0.1.0/tabulaflow/agents/summarization.py +157 -0
  28. tabulaflow-0.1.0/tabulaflow/agents/tools/__init__.py +151 -0
  29. tabulaflow-0.1.0/tabulaflow/agents/tools/_sql.py +158 -0
  30. tabulaflow-0.1.0/tabulaflow/agents/tools/add_canonical_name.py +915 -0
  31. tabulaflow-0.1.0/tabulaflow/agents/tools/browser/__init__.py +1 -0
  32. tabulaflow-0.1.0/tabulaflow/agents/tools/browser/aria.py +1312 -0
  33. tabulaflow-0.1.0/tabulaflow/agents/tools/browser/manager.py +154 -0
  34. tabulaflow-0.1.0/tabulaflow/agents/tools/browser/tool.py +1438 -0
  35. tabulaflow-0.1.0/tabulaflow/agents/tools/connect_data_source.py +102 -0
  36. tabulaflow-0.1.0/tabulaflow/agents/tools/create_parameterized_source.py +375 -0
  37. tabulaflow-0.1.0/tabulaflow/agents/tools/extract_rows_from_documents.py +387 -0
  38. tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/__init__.py +1 -0
  39. tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/access.py +95 -0
  40. tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/edit.py +173 -0
  41. tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/patch.py +174 -0
  42. tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/patch_engine.py +526 -0
  43. tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/view.py +297 -0
  44. tabulaflow-0.1.0/tabulaflow/agents/tools/get_column_json_schema.py +253 -0
  45. tabulaflow-0.1.0/tabulaflow/agents/tools/get_table_schema.py +204 -0
  46. tabulaflow-0.1.0/tabulaflow/agents/tools/protocols.py +120 -0
  47. tabulaflow-0.1.0/tabulaflow/agents/tools/registry/__init__.py +1 -0
  48. tabulaflow-0.1.0/tabulaflow/agents/tools/registry/get_column_json_schema.py +104 -0
  49. tabulaflow-0.1.0/tabulaflow/agents/tools/registry/get_data_source_document.py +176 -0
  50. tabulaflow-0.1.0/tabulaflow/agents/tools/registry/get_schema.py +118 -0
  51. tabulaflow-0.1.0/tabulaflow/agents/tools/registry/get_table_schema.py +125 -0
  52. tabulaflow-0.1.0/tabulaflow/agents/tools/registry/run_query.py +174 -0
  53. tabulaflow-0.1.0/tabulaflow/agents/tools/registry/write_result_table.py +112 -0
  54. tabulaflow-0.1.0/tabulaflow/agents/tools/render_chart.py +402 -0
  55. tabulaflow-0.1.0/tabulaflow/agents/tools/render_graph.py +137 -0
  56. tabulaflow-0.1.0/tabulaflow/agents/tools/render_map.py +145 -0
  57. tabulaflow-0.1.0/tabulaflow/agents/tools/run_query.py +406 -0
  58. tabulaflow-0.1.0/tabulaflow/agents/tools/run_subagent_for_each_row.py +583 -0
  59. tabulaflow-0.1.0/tabulaflow/agents/tools/shell/__init__.py +1 -0
  60. tabulaflow-0.1.0/tabulaflow/agents/tools/shell/guard.py +61 -0
  61. tabulaflow-0.1.0/tabulaflow/agents/tools/shell/tool.py +442 -0
  62. tabulaflow-0.1.0/tabulaflow/agents/tools/show_artifacts.py +88 -0
  63. tabulaflow-0.1.0/tabulaflow/agents/trace.py +321 -0
  64. tabulaflow-0.1.0/tabulaflow/app/__init__.py +0 -0
  65. tabulaflow-0.1.0/tabulaflow/app/assets/__init__.py +0 -0
  66. tabulaflow-0.1.0/tabulaflow/app/assets/samples/__init__.py +0 -0
  67. tabulaflow-0.1.0/tabulaflow/app/assets/samples/sample.sqlite +0 -0
  68. tabulaflow-0.1.0/tabulaflow/app/config.py +331 -0
  69. tabulaflow-0.1.0/tabulaflow/app/main.py +80 -0
  70. tabulaflow-0.1.0/tabulaflow/app/pane/__init__.py +5 -0
  71. tabulaflow-0.1.0/tabulaflow/app/pane/assets/__init__.py +1 -0
  72. tabulaflow-0.1.0/tabulaflow/app/pane/assets/fonts/figtree/Figtree-Variable.woff2 +0 -0
  73. tabulaflow-0.1.0/tabulaflow/app/pane/assets/fonts/figtree/OFL.txt +93 -0
  74. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/__init__.py +1 -0
  75. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/contract.d.ts +180 -0
  76. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/index.html +40 -0
  77. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/pane.css +911 -0
  78. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/pane.js +1567 -0
  79. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/chart.js +201 -0
  80. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/code.js +35 -0
  81. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/color-domains.js +27 -0
  82. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/graph.js +756 -0
  83. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/map.js +1100 -0
  84. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/markdown.js +95 -0
  85. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/query.js +15 -0
  86. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/shared.js +258 -0
  87. tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/table.js +411 -0
  88. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/LICENSE-cytoscape-dagre.txt +21 -0
  89. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/LICENSE-cytoscape.txt +19 -0
  90. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/LICENSE-dagre.txt +19 -0
  91. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/cytoscape-dagre.min.js +397 -0
  92. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/cytoscape.min.js +32 -0
  93. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/dagre.min.js +3809 -0
  94. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/LICENSE.txt +21 -0
  95. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
  96. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
  97. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  98. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  99. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  100. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  101. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  102. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  103. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  104. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  105. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  106. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  107. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  108. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  109. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  110. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
  111. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Bold.woff +0 -0
  112. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  113. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  114. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  115. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  116. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
  117. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Italic.woff +0 -0
  118. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  119. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
  120. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Regular.woff +0 -0
  121. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  122. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  123. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  124. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  125. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
  126. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-Italic.woff +0 -0
  127. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  128. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  129. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  130. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  131. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  132. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  133. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  134. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  135. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  136. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  137. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
  138. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Script-Regular.woff +0 -0
  139. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  140. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
  141. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
  142. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  143. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
  144. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
  145. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  146. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
  147. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
  148. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  149. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
  150. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
  151. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  152. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  153. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  154. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  155. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/katex.min.css +1 -0
  156. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/katex.min.js +1 -0
  157. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/LICENSE.txt +116 -0
  158. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/__init__.py +1 -0
  159. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/airport-labels.geojson +1 -0
  160. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/continent-labels.geojson +12 -0
  161. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/maplibre-gl.css +1 -0
  162. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/maplibre-gl.js +59 -0
  163. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/natural-earth-admin0-boundaries.geojson +1 -0
  164. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/natural-earth-admin1-boundaries.geojson +1 -0
  165. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/natural-earth-airports-source.txt +8 -0
  166. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/natural-earth-boundaries-source.txt +10 -0
  167. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/ocean-labels.geojson +10 -0
  168. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite-source.txt +26 -0
  169. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite.json +709 -0
  170. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite.png +0 -0
  171. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite@2x.json +709 -0
  172. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite@2x.png +0 -0
  173. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/shortbread-light.json +2535 -0
  174. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-airport-icon-draft.svg +36 -0
  175. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-interstate-shield-draft.svg +88 -0
  176. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite-source.txt +20 -0
  177. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite.json +30 -0
  178. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite.png +0 -0
  179. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite@2x.json +30 -0
  180. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite@2x.png +0 -0
  181. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it/LICENSE.txt +22 -0
  182. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it/markdown-it.min.js +3 -0
  183. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it-texmath/LICENSE.txt +21 -0
  184. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it-texmath/texmath.css +19 -0
  185. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it-texmath/texmath.js +368 -0
  186. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/tabulator/LICENSE.txt +21 -0
  187. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/tabulator/__init__.py +0 -0
  188. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/tabulator/tabulator.min.css +2 -0
  189. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/tabulator/tabulator.min.js +3 -0
  190. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/LICENSE-vega-embed.txt +27 -0
  191. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/LICENSE-vega-lite.txt +27 -0
  192. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/LICENSE-vega.txt +27 -0
  193. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/__init__.py +0 -0
  194. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/vega-embed.min.js +7 -0
  195. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/vega-lite.min.js +2 -0
  196. tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/vega.min.js +2 -0
  197. tabulaflow-0.1.0/tabulaflow/app/pane/cards.py +301 -0
  198. tabulaflow-0.1.0/tabulaflow/app/pane/charts.py +179 -0
  199. tabulaflow-0.1.0/tabulaflow/app/pane/contract.py +237 -0
  200. tabulaflow-0.1.0/tabulaflow/app/pane/graphs.py +91 -0
  201. tabulaflow-0.1.0/tabulaflow/app/pane/maps.py +215 -0
  202. tabulaflow-0.1.0/tabulaflow/app/pane/server.py +661 -0
  203. tabulaflow-0.1.0/tabulaflow/app/pane/tables.py +293 -0
  204. tabulaflow-0.1.0/tabulaflow/app/runtime_paths.py +109 -0
  205. tabulaflow-0.1.0/tabulaflow/app/sample_data.py +104 -0
  206. tabulaflow-0.1.0/tabulaflow/app/session.py +289 -0
  207. tabulaflow-0.1.0/tabulaflow/app/theme.py +87 -0
  208. tabulaflow-0.1.0/tabulaflow/app/tui/__init__.py +5 -0
  209. tabulaflow-0.1.0/tabulaflow/app/tui/app.py +1362 -0
  210. tabulaflow-0.1.0/tabulaflow/app/tui/banner.py +185 -0
  211. tabulaflow-0.1.0/tabulaflow/app/tui/cells.py +60 -0
  212. tabulaflow-0.1.0/tabulaflow/app/tui/clipboard.py +30 -0
  213. tabulaflow-0.1.0/tabulaflow/app/tui/commands.py +367 -0
  214. tabulaflow-0.1.0/tabulaflow/app/tui/rendering.py +447 -0
  215. tabulaflow-0.1.0/tabulaflow/app/tui/screens/__init__.py +1 -0
  216. tabulaflow-0.1.0/tabulaflow/app/tui/screens/config.py +346 -0
  217. tabulaflow-0.1.0/tabulaflow/app/tui/screens/results.py +827 -0
  218. tabulaflow-0.1.0/tabulaflow/app/tui/screens/schema.py +839 -0
  219. tabulaflow-0.1.0/tabulaflow/app/tui/spinner.py +15 -0
  220. tabulaflow-0.1.0/tabulaflow/app/tui/theme.py +215 -0
  221. tabulaflow-0.1.0/tabulaflow/app/tui/tui.tcss +140 -0
  222. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/__init__.py +1 -0
  223. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/chat.py +120 -0
  224. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/chat_log.py +27 -0
  225. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/choice.py +176 -0
  226. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/input.py +596 -0
  227. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/markdown.py +372 -0
  228. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/progress.py +760 -0
  229. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/result.py +908 -0
  230. tabulaflow-0.1.0/tabulaflow/app/tui/widgets/suggestions.py +143 -0
  231. tabulaflow-0.1.0/tabulaflow/app/turn.py +22 -0
  232. tabulaflow-0.1.0/tabulaflow/cli.py +95 -0
  233. tabulaflow-0.1.0/tabulaflow/core/__init__.py +111 -0
  234. tabulaflow-0.1.0/tabulaflow/core/_cache.py +65 -0
  235. tabulaflow-0.1.0/tabulaflow/core/dataframe.py +487 -0
  236. tabulaflow-0.1.0/tabulaflow/core/media.py +156 -0
  237. tabulaflow-0.1.0/tabulaflow/core/registry.py +34 -0
  238. tabulaflow-0.1.0/tabulaflow/core/results.py +78 -0
  239. tabulaflow-0.1.0/tabulaflow/core/schema.py +318 -0
  240. tabulaflow-0.1.0/tabulaflow/core/serialization.py +44 -0
  241. tabulaflow-0.1.0/tabulaflow/data/__init__.py +70 -0
  242. tabulaflow-0.1.0/tabulaflow/data/_cache.py +66 -0
  243. tabulaflow-0.1.0/tabulaflow/data/catalog.py +72 -0
  244. tabulaflow-0.1.0/tabulaflow/data/config.py +109 -0
  245. tabulaflow-0.1.0/tabulaflow/data/connect.py +420 -0
  246. tabulaflow-0.1.0/tabulaflow/data/json_schema.py +160 -0
  247. tabulaflow-0.1.0/tabulaflow/data/loaders/__init__.py +53 -0
  248. tabulaflow-0.1.0/tabulaflow/data/loaders/_runner.py +75 -0
  249. tabulaflow-0.1.0/tabulaflow/data/loaders/files.py +254 -0
  250. tabulaflow-0.1.0/tabulaflow/data/loaders/huggingface.py +781 -0
  251. tabulaflow-0.1.0/tabulaflow/data/neo4j.py +647 -0
  252. tabulaflow-0.1.0/tabulaflow/data/protocols.py +87 -0
  253. tabulaflow-0.1.0/tabulaflow/data/registry.py +104 -0
  254. tabulaflow-0.1.0/tabulaflow/data/sparql.py +452 -0
  255. tabulaflow-0.1.0/tabulaflow/data/sql.py +2896 -0
  256. tabulaflow-0.1.0/tabulaflow/examples/__init__.py +1 -0
  257. tabulaflow-0.1.0/tabulaflow/examples/ambiguity_aware_queries.py +65 -0
  258. tabulaflow-0.1.0/tabulaflow/examples/chat_sessions.py +75 -0
  259. tabulaflow-0.1.0/tabulaflow/examples/cli.py +58 -0
  260. tabulaflow-0.1.0/tabulaflow/examples/compare_research_agents.py +64 -0
  261. tabulaflow-0.1.0/tabulaflow/examples/custom_agents.py +80 -0
  262. tabulaflow-0.1.0/tabulaflow/examples/data_enrichment.py +62 -0
  263. tabulaflow-0.1.0/tabulaflow/examples/document_extraction.py +41 -0
  264. tabulaflow-0.1.0/tabulaflow/examples/quick_start.py +70 -0
  265. tabulaflow-0.1.0/tabulaflow/examples/research_quick_start.py +46 -0
  266. tabulaflow-0.1.0/tabulaflow/examples/structured_outputs.py +116 -0
  267. tabulaflow-0.1.0/tabulaflow/examples/support/__init__.py +1 -0
  268. tabulaflow-0.1.0/tabulaflow/examples/support/dock-guide.pdf +0 -0
  269. tabulaflow-0.1.0/tabulaflow/examples/support/faq.txt +16 -0
  270. tabulaflow-0.1.0/tabulaflow/examples/support/travel_guide.txt +116 -0
  271. tabulaflow-0.1.0/tabulaflow/examples/table_linking_agent.py +116 -0
  272. tabulaflow-0.1.0/tabulaflow/examples/working_with_data.py +70 -0
  273. tabulaflow-0.1.0/tabulaflow/output/__init__.py +14 -0
  274. tabulaflow-0.1.0/tabulaflow/output/charts.py +167 -0
  275. tabulaflow-0.1.0/tabulaflow/output/formatting/__init__.py +77 -0
  276. tabulaflow-0.1.0/tabulaflow/output/formatting/_core.py +369 -0
  277. tabulaflow-0.1.0/tabulaflow/output/formatting/_sql.py +124 -0
  278. tabulaflow-0.1.0/tabulaflow/output/formatting/_table_grouping.py +242 -0
  279. tabulaflow-0.1.0/tabulaflow/output/formatting/cypher.py +82 -0
  280. tabulaflow-0.1.0/tabulaflow/output/formatting/resolution.py +60 -0
  281. tabulaflow-0.1.0/tabulaflow/output/formatting/schema.py +54 -0
  282. tabulaflow-0.1.0/tabulaflow/output/formatting/sparql.py +20 -0
  283. tabulaflow-0.1.0/tabulaflow/output/formatting/sql_compact.py +191 -0
  284. tabulaflow-0.1.0/tabulaflow/output/formatting/sql_ddl.py +288 -0
  285. tabulaflow-0.1.0/tabulaflow/output/graphs.py +446 -0
  286. tabulaflow-0.1.0/tabulaflow/output/maps.py +465 -0
  287. tabulaflow-0.1.0/tabulaflow/output/resolver.py +316 -0
  288. tabulaflow-0.1.0/tabulaflow/output/specs.py +291 -0
  289. tabulaflow-0.1.0/tabulaflow/output/store.py +523 -0
  290. tabulaflow-0.1.0/tabulaflow/research/__init__.py +1 -0
  291. tabulaflow-0.1.0/tabulaflow/research/agents/__init__.py +33 -0
  292. tabulaflow-0.1.0/tabulaflow/research/agents/ambig_flat.py +340 -0
  293. tabulaflow-0.1.0/tabulaflow/research/agents/ambig_simple.py +123 -0
  294. tabulaflow-0.1.0/tabulaflow/research/agents/ambig_structured.py +369 -0
  295. tabulaflow-0.1.0/tabulaflow/research/agents/dbt.py +262 -0
  296. tabulaflow-0.1.0/tabulaflow/research/agents/direct_prompt.py +91 -0
  297. tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/__init__.py +11 -0
  298. tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/agent.py +283 -0
  299. tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/dbt.py +214 -0
  300. tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/llm.py +211 -0
  301. tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/majority.py +74 -0
  302. tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/utils.py +31 -0
  303. tabulaflow-0.1.0/tabulaflow/research/agents/full_schema.py +117 -0
  304. tabulaflow-0.1.0/tabulaflow/research/agents/registry.py +71 -0
  305. tabulaflow-0.1.0/tabulaflow/research/agents/schema_discovery.py +143 -0
  306. tabulaflow-0.1.0/tabulaflow/research/agents/schema_linking.py +515 -0
  307. tabulaflow-0.1.0/tabulaflow/research/agents/user_simulator.py +274 -0
  308. tabulaflow-0.1.0/tabulaflow/research/agents/utils.py +119 -0
  309. tabulaflow-0.1.0/tabulaflow/research/ambiguity.py +65 -0
  310. tabulaflow-0.1.0/tabulaflow/research/benchmarks/__init__.py +56 -0
  311. tabulaflow-0.1.0/tabulaflow/research/benchmarks/ambrosia_s.py +284 -0
  312. tabulaflow-0.1.0/tabulaflow/research/benchmarks/arcs.py +246 -0
  313. tabulaflow-0.1.0/tabulaflow/research/benchmarks/beaver.py +239 -0
  314. tabulaflow-0.1.0/tabulaflow/research/benchmarks/bird_sql.py +357 -0
  315. tabulaflow-0.1.0/tabulaflow/research/benchmarks/cypherbench.py +322 -0
  316. tabulaflow-0.1.0/tabulaflow/research/benchmarks/installation.py +218 -0
  317. tabulaflow-0.1.0/tabulaflow/research/benchmarks/registry.py +146 -0
  318. tabulaflow-0.1.0/tabulaflow/research/benchmarks/runtime.py +110 -0
  319. tabulaflow-0.1.0/tabulaflow/research/benchmarks/spider2_dbt.py +376 -0
  320. tabulaflow-0.1.0/tabulaflow/research/benchmarks/spider2_lite.py +507 -0
  321. tabulaflow-0.1.0/tabulaflow/research/benchmarks/spider2_snow.py +348 -0
  322. tabulaflow-0.1.0/tabulaflow/research/cli.py +123 -0
  323. tabulaflow-0.1.0/tabulaflow/research/metrics/__init__.py +59 -0
  324. tabulaflow-0.1.0/tabulaflow/research/metrics/aggregators.py +250 -0
  325. tabulaflow-0.1.0/tabulaflow/research/metrics/ambig_point_stats.py +398 -0
  326. tabulaflow-0.1.0/tabulaflow/research/metrics/bird_sql_ex.py +31 -0
  327. tabulaflow-0.1.0/tabulaflow/research/metrics/bird_sql_ex_soft.py +64 -0
  328. tabulaflow-0.1.0/tabulaflow/research/metrics/cypherbench_ex.py +181 -0
  329. tabulaflow-0.1.0/tabulaflow/research/metrics/executable.py +19 -0
  330. tabulaflow-0.1.0/tabulaflow/research/metrics/found_one.py +65 -0
  331. tabulaflow-0.1.0/tabulaflow/research/metrics/gold_ambig_point_stats.py +29 -0
  332. tabulaflow-0.1.0/tabulaflow/research/metrics/gold_executable.py +16 -0
  333. tabulaflow-0.1.0/tabulaflow/research/metrics/gold_result_not_empty.py +17 -0
  334. tabulaflow-0.1.0/tabulaflow/research/metrics/pred_success.py +15 -0
  335. tabulaflow-0.1.0/tabulaflow/research/metrics/psjs.py +183 -0
  336. tabulaflow-0.1.0/tabulaflow/research/metrics/raw_pred_bird_sql_ex.py +19 -0
  337. tabulaflow-0.1.0/tabulaflow/research/metrics/raw_pred_simple_ex.py +23 -0
  338. tabulaflow-0.1.0/tabulaflow/research/metrics/registry.py +28 -0
  339. tabulaflow-0.1.0/tabulaflow/research/metrics/schema_linking_stats.py +66 -0
  340. tabulaflow-0.1.0/tabulaflow/research/metrics/simple_ex.py +136 -0
  341. tabulaflow-0.1.0/tabulaflow/research/metrics/spider2_duckdb_match.py +106 -0
  342. tabulaflow-0.1.0/tabulaflow/research/metrics/spider2_ex.py +123 -0
  343. tabulaflow-0.1.0/tabulaflow/research/metrics/utils.py +84 -0
  344. tabulaflow-0.1.0/tabulaflow/research/observability.py +96 -0
  345. tabulaflow-0.1.0/tabulaflow/research/pipelines/__init__.py +42 -0
  346. tabulaflow-0.1.0/tabulaflow/research/pipelines/ensemble.py +290 -0
  347. tabulaflow-0.1.0/tabulaflow/research/pipelines/evaluate.py +149 -0
  348. tabulaflow-0.1.0/tabulaflow/research/pipelines/execute.py +89 -0
  349. tabulaflow-0.1.0/tabulaflow/research/pipelines/predict.py +387 -0
  350. tabulaflow-0.1.0/tabulaflow/research/pipelines/preprocess.py +106 -0
  351. tabulaflow-0.1.0/tabulaflow/research/pipelines/utils.py +75 -0
  352. tabulaflow-0.1.0/tabulaflow/research/preprocessing/__init__.py +25 -0
  353. tabulaflow-0.1.0/tabulaflow/research/preprocessing/column_profiler.py +76 -0
  354. tabulaflow-0.1.0/tabulaflow/research/preprocessing/erd.py +322 -0
  355. tabulaflow-0.1.0/tabulaflow/research/preprocessing/fk_predictor.py +98 -0
  356. tabulaflow-0.1.0/tabulaflow/research/preprocessing/question_embedding.py +162 -0
  357. tabulaflow-0.1.0/tabulaflow/research/preprocessing/registry.py +53 -0
  358. tabulaflow-0.1.0/tabulaflow/research/preprocessing/schema.py +83 -0
  359. tabulaflow-0.1.0/tabulaflow/research/query_analysis.py +59 -0
  360. tabulaflow-0.1.0/tabulaflow/research/query_execution.py +71 -0
  361. tabulaflow-0.1.0/tabulaflow/research/reporting.py +374 -0
  362. tabulaflow-0.1.0/tabulaflow/research/tools/__init__.py +34 -0
  363. tabulaflow-0.1.0/tabulaflow/research/tools/ask_user.py +43 -0
  364. tabulaflow-0.1.0/tabulaflow/research/tools/finish.py +52 -0
  365. tabulaflow-0.1.0/tabulaflow/research/tools/get_column_description.py +60 -0
  366. tabulaflow-0.1.0/tabulaflow/research/tools/get_schema.py +45 -0
  367. tabulaflow-0.1.0/tabulaflow/research/tools/run_dbt.py +176 -0
  368. tabulaflow-0.1.0/tabulaflow/research/tools/search_keywords.py +90 -0
  369. tabulaflow-0.1.0/tabulaflow/research/types.py +737 -0
  370. tabulaflow-0.1.0/tabulaflow.egg-info/PKG-INFO +496 -0
  371. tabulaflow-0.1.0/tabulaflow.egg-info/SOURCES.txt +379 -0
  372. tabulaflow-0.1.0/tabulaflow.egg-info/dependency_links.txt +1 -0
  373. tabulaflow-0.1.0/tabulaflow.egg-info/entry_points.txt +2 -0
  374. tabulaflow-0.1.0/tabulaflow.egg-info/requires.txt +44 -0
  375. tabulaflow-0.1.0/tabulaflow.egg-info/top_level.txt +1 -0
  376. tabulaflow-0.1.0/tests/test_cli.py +172 -0
  377. tabulaflow-0.1.0/tests/test_docs_examples.py +118 -0
  378. tabulaflow-0.1.0/tests/test_docs_library_guides.py +543 -0
  379. tabulaflow-0.1.0/tests/test_docs_research_guides.py +186 -0
  380. tabulaflow-0.1.0/tests/test_lazy_imports.py +74 -0
  381. tabulaflow-0.1.0/tests/test_tool_error_convention.py +44 -0
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License (with Attribution / NOTICE Requirement)
2
+ Redistribution and use in source and binary forms, with or without modification, are permitted
3
+ provided that the following conditions are met:
4
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
5
+ and the following disclaimer.
6
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of
7
+ conditions and the following disclaimer in the documentation and/or other materials provided
8
+ with the distribution.
9
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to
10
+ endorse or promote products derived from this software without specific prior written
11
+ permission.
12
+ 4. Attribution / NOTICE Requirement:
13
+ Any distribution of this software or derivative works shall include a clear and readable NOTICE
14
+ file or equivalent attribution statement that:
15
+ (a) identifies Megagon Labs, Inc. as the original source and copyright holder of the software;
16
+ (b) includes a link to the original repository or website as designated by Megagon Labs, Inc.; and
17
+ (c) preserves any additional attribution notices provided by Megagon Labs, Inc.
18
+ The contents of the NOTICE file are for informational and attribution purposes only and do not
19
+ modify this License or create additional obligations.
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
21
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
24
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
26
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
29
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,496 @@
1
+ Metadata-Version: 2.4
2
+ Name: tabulaflow
3
+ Version: 0.1.0
4
+ Summary: An interactive data agent, Python library, and text-to-query research toolkit
5
+ Author: Megagon Labs
6
+ License-Expression: LicenseRef-Megagon-BSD-3-Clause-Attribution
7
+ Project-URL: Homepage, https://github.com/megagonlabs/tabulaflow
8
+ Project-URL: Repository, https://github.com/megagonlabs/tabulaflow
9
+ Project-URL: Issues, https://github.com/megagonlabs/tabulaflow/issues
10
+ Project-URL: Changelog, https://github.com/megagonlabs/tabulaflow/releases
11
+ Keywords: data-agent,database,nl2sql,text-to-query,text-to-sql
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Operating System :: MacOS
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Database
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: aiolimiter>=1.2.1
25
+ Requires-Dist: aiosqlite>=0.21.0
26
+ Requires-Dist: arize-phoenix-otel>=0.10.1
27
+ Requires-Dist: asyncmy>=0.2.11
28
+ Requires-Dist: asyncpg>=0.30.0
29
+ Requires-Dist: datasets>=4.4.2
30
+ Requires-Dist: huggingface-hub>=0.36.0
31
+ Requires-Dist: genai-prices<0.2,>=0.1.4
32
+ Requires-Dist: httpx>=0.28.1
33
+ Requires-Dist: jinja2>=3.1.6
34
+ Requires-Dist: langfuse>=3.0.1
35
+ Requires-Dist: pandas>=2.2.3
36
+ Requires-Dist: pillow>=11.3.0
37
+ Requires-Dist: pyarrow>=21.0.0
38
+ Requires-Dist: pydantic>=2.12
39
+ Requires-Dist: pydantic-ai-slim[anthropic,google,openai,xai]<3,>=2.48.0
40
+ Requires-Dist: pydantic-settings>=2.11.0
41
+ Requires-Dist: pymysql>=1.1.1
42
+ Requires-Dist: snowflake-connector-python>=3.14.1
43
+ Requires-Dist: snowflake-sqlalchemy>=1.7.3
44
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.40
45
+ Requires-Dist: sqlalchemy-bigquery>=1.11.0
46
+ Requires-Dist: sqlglot>=28.6.0
47
+ Requires-Dist: sqlparse>=0.5.3
48
+ Requires-Dist: tabulate>=0.9.0
49
+ Requires-Dist: tqdm>=4.67.1
50
+ Requires-Dist: google-cloud-bigquery-storage>=2.36.2
51
+ Requires-Dist: duckdb>=1.5.5
52
+ Requires-Dist: neo4j>=5.28.0
53
+ Requires-Dist: duckdb-engine>=0.17.0
54
+ Requires-Dist: dbt-duckdb>=1.10.1
55
+ Requires-Dist: typer>=0.15.0
56
+ Requires-Dist: rich>=14.0.0
57
+ Requires-Dist: textual[syntax]>=8.2.8
58
+ Requires-Dist: plotext<6,>=5.3.2
59
+ Requires-Dist: playwright>=1.59.0
60
+ Requires-Dist: webbrowser-open>=0.3.0
61
+ Requires-Dist: pyyaml>=6.0.3
62
+ Requires-Dist: pypdf>=6.12.2
63
+ Requires-Dist: pygments>=2.19.2
64
+ Requires-Dist: markdown-it-py>=4.0.0
65
+ Requires-Dist: tiktoken>=0.12.0
66
+ Requires-Dist: gdown>=6.1.0
67
+ Requires-Dist: filelock>=3.19.1
68
+ Dynamic: license-file
69
+
70
+ <h1>
71
+ <img src="https://raw.githubusercontent.com/megagonlabs/tabulaflow/main/docs/assets/tabulaflow-wordmark.svg" alt="TabulaFlow" width="320">
72
+ </h1>
73
+
74
+ TabulaFlow is an open-source data agent built on a modular Python library.
75
+
76
+ Think of it as Claude Code for data: describe in natural language what you want
77
+ to analyze, visualize, or transform. It works with all kinds of data, from
78
+ databases and files to Hugging Face datasets, Wikidata, and web pages. Like a
79
+ general-purpose coding agent, it can also write code, work with files, run shell
80
+ commands, and browse the web.
81
+
82
+ See the [documentation](https://megagonlabs.github.io/tabulaflow/) for complete
83
+ guides and API references.
84
+
85
+ > **Demo video coming soon**
86
+ >
87
+ > A short walkthrough of TabulaFlow will appear here.
88
+
89
+ ## Get started
90
+
91
+ Install TabulaFlow with [`uv`](https://docs.astral.sh/uv/), set a model provider
92
+ key, and launch it:
93
+
94
+ ```bash
95
+ uv tool install tabulaflow
96
+ export OPENAI_API_KEY="your-api-key"
97
+ tabulaflow
98
+ ```
99
+
100
+ We also recommend installing Chromium to enable agent-driven web browsing:
101
+
102
+ ```bash
103
+ uv tool run --from playwright playwright install chromium
104
+ ```
105
+
106
+ TabulaFlow opens with bundled sample data, so you can start exploring
107
+ immediately.
108
+
109
+ ## TabulaFlow as a Python Library
110
+
111
+ At the core of TabulaFlow is a minimalist, async-native Python library for building
112
+ and researching data agents. It was the first thing we built when we started this project because existing libraries
113
+ lacked the abstractions we needed. Its building blocks allow you to write agent
114
+ logic that runs across different database backends and research benchmarks. The same library
115
+ powers the [TabulaFlow data agent](https://megagonlabs.github.io/tabulaflow/).
116
+
117
+ You can use any of these building blocks to create
118
+ data applications with (e.g. data agents) or without an LLM (e.g., interactive dashboards). Choose the
119
+ building blocks you need:
120
+
121
+ - [Data connectors](https://megagonlabs.github.io/tabulaflow/python-library/data-connectors/): inspect schemas and query SQL
122
+ databases, Neo4j, SPARQL endpoints, files, and datasets through a unified
123
+ async interface.
124
+ - [Extraction and enrichment](https://megagonlabs.github.io/tabulaflow/python-library/extraction-and-enrichment/): turn documents
125
+ into structured records and enrich DataFrames with new fields.
126
+ - [Chat sessions](https://megagonlabs.github.io/tabulaflow/python-library/chat-sessions/): use `ChatSession` to converse
127
+ across multiple data sources, run tools, and stream answers and progress,
128
+ with automatic context compaction for long conversations.
129
+ - [Structured outputs](https://megagonlabs.github.io/tabulaflow/python-library/structured-outputs/): let agents produce tables, charts, maps,
130
+ and graphs as structured artifacts by defining declarative specifications, with optional lazy data resolution for
131
+ parameter-driven interaction.
132
+ - [Custom agents](https://megagonlabs.github.io/tabulaflow/python-library/custom-agents/): combine reusable query, visualization, and
133
+ document tools with your own functions and actions, without adopting `ChatSession`.
134
+ - [Schema and result formatting](https://megagonlabs.github.io/tabulaflow/python-library/api/output/#formatting): turn structured
135
+ schemas and query results into readable text for LLM prompts or human
136
+ inspection.
137
+
138
+ These building blocks are fully typed and organized into four layers:
139
+ `core <- data <- output <- agents`. See the
140
+ [API reference](https://megagonlabs.github.io/tabulaflow/python-library/api-reference/) for how they fit together.
141
+
142
+ ### Quick start
143
+
144
+ Add TabulaFlow to your Python project:
145
+
146
+ ```bash
147
+ uv add tabulaflow
148
+ ```
149
+
150
+ With `OPENAI_API_KEY` set, compare sales and support data from separate
151
+ in-memory databases, then inspect the structured chart and table results:
152
+
153
+ ```python
154
+ import asyncio
155
+
156
+ import pandas as pd
157
+
158
+ from tabulaflow.agents import ChatSession
159
+ from tabulaflow.data import DataConnectorRegistry, SQLConnector
160
+ from tabulaflow.output.specs import ChartArtifactSpec, TableArtifactSpec
161
+
162
+
163
+ async def load_sample_data(sales: SQLConnector, support: SQLConnector) -> None:
164
+ await sales.write_dataframe_async(
165
+ pd.DataFrame(
166
+ columns=["order_id", "region", "revenue_usd"],
167
+ data=[
168
+ (1001, "West", 1200),
169
+ (1002, "West", 800),
170
+ (1003, "East", 900),
171
+ (1004, "East", 600),
172
+ ],
173
+ ),
174
+ "sales",
175
+ )
176
+ await support.write_dataframe_async(
177
+ pd.DataFrame(
178
+ columns=["ticket_id", "subject", "priority", "status"],
179
+ data=[
180
+ (201, "Checkout payment failures", "high", "open"),
181
+ (202, "Invoice downloads unavailable", "high", "open"),
182
+ (203, "Profile image upload issue", "low", "open"),
183
+ (204, "Password reset emails delayed", "high", "resolved"),
184
+ ],
185
+ ),
186
+ "support",
187
+ )
188
+
189
+
190
+ async def main() -> None:
191
+ async with DataConnectorRegistry() as registry:
192
+ sales = await SQLConnector.from_url_async("sqlite+aiosqlite:///:memory:", read_only=False)
193
+ registry.register("sales", sales)
194
+ support = await SQLConnector.from_url_async("sqlite+aiosqlite:///:memory:", read_only=False)
195
+ registry.register("support", support)
196
+ await load_sample_data(sales, support)
197
+
198
+ async with ChatSession(
199
+ registry=registry,
200
+ model="openai:gpt-5-mini",
201
+ reasoning="low",
202
+ ) as session:
203
+ result = await session.run(
204
+ "How does revenue compare across regions, and which high-priority "
205
+ "support tickets are still open? Show revenue as a bar chart "
206
+ "and the tickets in a table."
207
+ )
208
+ print("Answer:", result.text)
209
+
210
+ for artifact in result.output.artifacts:
211
+ if isinstance(artifact, (TableArtifactSpec, ChartArtifactSpec)):
212
+ data = await session.output_store.resolve_artifact_source(artifact.source_id)
213
+ print("Artifact:", artifact.label)
214
+ print("Source:", data.metadata.connector_alias)
215
+ print("SQL:", data.metadata.query)
216
+ print("DataFrame:\n", data.df)
217
+
218
+
219
+ if __name__ == "__main__":
220
+ asyncio.run(main())
221
+ ```
222
+
223
+ `result.text` contains the answer; `result.output` contains structured artifact
224
+ specifications linked to their source data.
225
+
226
+ Query data and inspect its structured schema without an API key. This example
227
+ creates an in-memory inventory database and finds products to restock:
228
+
229
+ ```python
230
+ import asyncio
231
+
232
+ import pandas as pd
233
+
234
+ from tabulaflow.data import SQLConnector
235
+
236
+
237
+ async def main() -> None:
238
+ stock = await SQLConnector.from_url_async("sqlite+aiosqlite:///:memory:", read_only=False)
239
+ async with stock:
240
+ await stock.write_dataframe_async(
241
+ pd.DataFrame(
242
+ columns=["product", "on_hand", "reorder_point"],
243
+ data=[
244
+ ("USB-C dock", 3, 10),
245
+ ("Laptop stand", 18, 8),
246
+ ("HDMI cable", 4, 12),
247
+ ],
248
+ ),
249
+ "inventory",
250
+ )
251
+ table = stock.schema.tables[0]
252
+ print("Table:", table.name)
253
+ print("Columns:", [(column.name, column.dtype) for column in table.columns])
254
+
255
+ result = await stock.run_query_async(
256
+ "SELECT product, reorder_point - on_hand AS units_to_order "
257
+ "FROM inventory WHERE on_hand < reorder_point ORDER BY product"
258
+ )
259
+ if result.error is not None:
260
+ raise RuntimeError(result.error.message)
261
+ print("DataFrame:\n", result.df)
262
+
263
+
264
+ if __name__ == "__main__":
265
+ asyncio.run(main())
266
+ ```
267
+
268
+ [Python library guide](https://megagonlabs.github.io/tabulaflow/python-library/quick-start/)
269
+
270
+ ## TabulaFlow as a Research Toolkit
271
+
272
+ TabulaFlow Research extends the main Python library for AI researchers working
273
+ on text-to-SQL and data agents. Its main building blocks include benchmark
274
+ loaders, agents, evaluation metrics, and experiment pipelines. It is
275
+ designed around principles that enable flexible, rapid, and transparent
276
+ experiments:
277
+
278
+ - **Benchmark-ready.** Run BIRD-SQL, Spider 2.0, Beaver, ARCS, AMBROSIA-S, and
279
+ CypherBench with managed setup and official leaderboard metrics.
280
+ - **Reusable agent logic.** One agent implementation runs on all benchmarks.
281
+ - **Transparent and fully typed.** Work with typed tasks, schemas, and
282
+ predictions rather than black-box dictionaries or schema strings. Write
283
+ Python instead of YAML.
284
+ - **Async-native for large-scale concurrency.** Task inference, LLM calls, and
285
+ database queries are async and parallelizable, with configurable concurrency
286
+ controls that can make full use of provider limits.
287
+ - **Modular and extensible.** Use any building blocks you need, or extend them by
288
+ implementing their public protocols.
289
+ - **Built-in tracking.** Record trajectories, token usage, and latency for
290
+ analysis, with optional Langfuse and Phoenix tracing.
291
+ - **Simple and performant agents.** Simple yet state-of-the-art agent
292
+ implementations provide a performant starting point.
293
+
294
+ ### Quick start
295
+
296
+ With the TabulaFlow tool installed and `OPENAI_API_KEY` set, download BIRD-SQL
297
+ and run the bundled research example:
298
+
299
+ ```bash
300
+ tabulaflow benchmark download bird-sql
301
+ tabulaflow examples run research-quick-start
302
+ ```
303
+
304
+ To adapt the workflow in your own project, add TabulaFlow with `uv add
305
+ tabulaflow`, then run experiments from Python:
306
+
307
+ ```python
308
+ import asyncio
309
+
310
+ from tabulaflow.research.agents import BasicAgentConfig, FullSchemaAgent
311
+ from tabulaflow.research.benchmarks import BirdSQLDatasetLoader
312
+ from tabulaflow.research.metrics import BirdSQLEx
313
+ from tabulaflow.research.pipelines import evaluate_async, execute_async, predict_async
314
+ from tabulaflow.research.types import SimpleNL2QTaskOutput
315
+
316
+
317
+ async def main() -> None:
318
+ dataset = await BirdSQLDatasetLoader().get_split_async(
319
+ "dev",
320
+ databases=["california_schools"],
321
+ subsample_size=3,
322
+ )
323
+
324
+ try:
325
+ result = await predict_async(
326
+ FullSchemaAgent,
327
+ BasicAgentConfig(),
328
+ dataset,
329
+ batch_size=3,
330
+ )
331
+ await execute_async(result, dataset, batch_size=3)
332
+ first = result.tasks[0]
333
+ assert isinstance(first, SimpleNL2QTaskOutput)
334
+ assert first.pred_query is not None
335
+ assert first.pred_query.exec_result is not None
336
+ print("Question:", first.question)
337
+ print("Predicted SQL:", first.pred_query.query)
338
+ print("Query result:")
339
+ print(first.pred_query.exec_result.df)
340
+
341
+ await evaluate_async(result, dataset, metrics=[BirdSQLEx()], batch_size=3)
342
+ print("Execution accuracy:", result.aggregated_eval_metrics["bird_sql_ex"]["avg"])
343
+ finally:
344
+ await asyncio.gather(*(connector.close_async() for connector in dataset.db_connectors.values()))
345
+
346
+
347
+ if __name__ == "__main__":
348
+ asyncio.run(main())
349
+ ```
350
+
351
+ To keep the predictions, scores, and readable reports together, save the result
352
+ after evaluation inside the `try` block:
353
+
354
+ ```python
355
+ result.to_directory("runs/full-schema")
356
+ ```
357
+
358
+ The saved run has this structure:
359
+
360
+ ```text
361
+ runs/full-schema/
362
+ ├── result.json
363
+ ├── result_summary.csv
364
+ └── readable/
365
+ └── <qid>/
366
+ ├── task_readable.md
367
+ └── trajectory/
368
+ └── <trajectory-id>.md
369
+ ```
370
+
371
+ Inspect queries, scores, agent trajectories, token usage, and latency without
372
+ rerunning the agent.
373
+
374
+ [Research toolkit guide](https://megagonlabs.github.io/tabulaflow/research-toolkit/quick-start/)
375
+
376
+ ## Disclosures
377
+
378
+ This software may include, incorporate, or access open source software (OSS) components,
379
+ datasets and other third party components, including those identified below. The license terms
380
+ respectively governing the datasets and third-party components continue to govern those
381
+ portions, and you agree to those license terms may limit any distribution, use, and copying.
382
+ You may use any OSS components under the terms of their respective licenses, which may
383
+ include BSD 3, Apache 2.0, and other licenses. In the event of conflicts between Megagon Labs,
384
+ Inc. (“Megagon”) license conditions and the OSS license conditions, the applicable OSS
385
+ conditions governing the corresponding OSS components shall prevail.
386
+ You agree not to, and are not permitted to, distribute actual datasets used with the OSS
387
+ components listed below. You agree and are limited to distribute only links to datasets from
388
+ known sources by listing them in the datasets overview table below. You agree that any right to
389
+ modify datasets originating from parties other than Megagon are governed by the respective
390
+ third party’s license conditions.
391
+ You agree that Megagon grants no license as to any of its intellectual property and patent rights.
392
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS (INCLUDING
393
+ MEGAGON) “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
394
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
395
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
396
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
397
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
398
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
399
+ AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
400
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
401
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You agree to cease using,
402
+ incorporating, and distributing any part of the provided materials if you do not agree with the
403
+ terms or the lack of any warranty herein.
404
+ While Megagon makes commercially reasonable efforts to ensure that citations in this
405
+ document are complete and accurate, errors may occur. If you see any error or omission, please
406
+ help us improve this document by sending information to contact_oss@megagon.ai.
407
+
408
+ <details>
409
+ <summary><strong>Research benchmark datasets</strong></summary>
410
+
411
+ Benchmark data is downloaded separately unless noted below and remains subject to
412
+ the upstream license and access terms.
413
+
414
+ | Benchmark | Included | Upstream | License / terms |
415
+ |---|---|---|---|
416
+ | BIRD-SQL | No | [BIRD-SQL](https://github.com/AlibabaResearch/DAMO-ConvAI/tree/main/bird) | CC BY-SA 4.0 |
417
+ | AMBROSIA | No | [AMBROSIA](https://github.com/saparina/ambrosia) | CC BY 4.0; upstream asks that the dataset not be uploaded to GitHub or Hugging Face. |
418
+ | Spider 2.0 (Lite, Snow, DBT) | No | [Spider 2.0](https://github.com/xlang-ai/Spider2) | MIT; hosted database access is subject to provider terms. |
419
+ | BEAVER | No | [BEAVER](https://github.com/peterbaile/beaver-may-2025) | MIT; separately hosted database dumps are subject to upstream terms. |
420
+ | CypherBench | No | [CypherBench](https://huggingface.co/datasets/megagonlabs/cypherbench) | Apache-2.0; graph data is derived from Wikidata (CC0). |
421
+
422
+ </details>
423
+
424
+ <details>
425
+ <summary><strong>Open source software components</strong></summary>
426
+
427
+ TabulaFlow uses the unmodified direct runtime dependencies below. Transitive
428
+ Python dependencies and exact resolved versions are recorded in
429
+ [`uv.lock`](uv.lock). License notices for JavaScript components bundled with the
430
+ application are included alongside those files under
431
+ [`tabulaflow/app/pane/assets/vendor`](tabulaflow/app/pane/assets/vendor).
432
+
433
+ | Component | Modified | Upstream | License |
434
+ |---|---:|---|---|
435
+ | aiolimiter | No | [mjpieters/aiolimiter](https://github.com/mjpieters/aiolimiter) | MIT |
436
+ | aiosqlite | No | [omnilib/aiosqlite](https://github.com/omnilib/aiosqlite) | MIT |
437
+ | arize-phoenix-otel | No | [Arize-ai/phoenix](https://github.com/Arize-ai/phoenix) | Apache-2.0 |
438
+ | asyncmy | No | [long2ice/asyncmy](https://github.com/long2ice/asyncmy) | Apache-2.0 |
439
+ | asyncpg | No | [MagicStack/asyncpg](https://github.com/MagicStack/asyncpg) | Apache-2.0 |
440
+ | datasets | No | [huggingface/datasets](https://github.com/huggingface/datasets) | Apache-2.0 |
441
+ | dbt-duckdb | No | [duckdb/dbt-duckdb](https://github.com/duckdb/dbt-duckdb) | Apache-2.0 |
442
+ | duckdb | No | [duckdb/duckdb-python](https://github.com/duckdb/duckdb-python) | MIT |
443
+ | duckdb-engine | No | [Mause/duckdb_engine](https://github.com/Mause/duckdb_engine) | MIT |
444
+ | filelock | No | [tox-dev/filelock](https://github.com/tox-dev/filelock) | Unlicense |
445
+ | gdown | No | [wkentaro/gdown](https://github.com/wkentaro/gdown) | MIT |
446
+ | genai-prices | No | [pydantic/genai-prices](https://github.com/pydantic/genai-prices) | MIT |
447
+ | google-cloud-bigquery-storage | No | [googleapis/python-bigquery-storage](https://github.com/googleapis/python-bigquery-storage) | Apache-2.0 |
448
+ | httpx | No | [encode/httpx](https://github.com/encode/httpx) | BSD-3-Clause |
449
+ | huggingface-hub | No | [huggingface/huggingface_hub](https://github.com/huggingface/huggingface_hub) | Apache-2.0 |
450
+ | Jinja2 | No | [pallets/jinja](https://github.com/pallets/jinja) | BSD-3-Clause |
451
+ | langfuse | No | [langfuse/langfuse-python](https://github.com/langfuse/langfuse-python) | MIT |
452
+ | markdown-it-py | No | [executablebooks/markdown-it-py](https://github.com/executablebooks/markdown-it-py) | MIT |
453
+ | neo4j | No | [neo4j/neo4j-python-driver](https://github.com/neo4j/neo4j-python-driver) | Apache-2.0 and Python-2.0 |
454
+ | pandas | No | [pandas-dev/pandas](https://github.com/pandas-dev/pandas) | BSD-3-Clause |
455
+ | Pillow | No | [python-pillow/Pillow](https://github.com/python-pillow/Pillow) | MIT-CMU |
456
+ | playwright | No | [microsoft/playwright-python](https://github.com/microsoft/playwright-python) | Apache-2.0 |
457
+ | plotext | No | [piccolomo/plotext](https://github.com/piccolomo/plotext) | MIT |
458
+ | pyarrow | No | [apache/arrow](https://github.com/apache/arrow) | Apache-2.0 |
459
+ | pydantic | No | [pydantic/pydantic](https://github.com/pydantic/pydantic) | MIT |
460
+ | pydantic-ai-slim | No | [pydantic/pydantic-ai](https://github.com/pydantic/pydantic-ai) | MIT |
461
+ | pydantic-settings | No | [pydantic/pydantic-settings](https://github.com/pydantic/pydantic-settings) | MIT |
462
+ | Pygments | No | [pygments/pygments](https://github.com/pygments/pygments) | BSD-2-Clause |
463
+ | PyMySQL | No | [PyMySQL/PyMySQL](https://github.com/PyMySQL/PyMySQL) | MIT |
464
+ | pypdf | No | [py-pdf/pypdf](https://github.com/py-pdf/pypdf) | BSD-3-Clause |
465
+ | PyYAML | No | [yaml/pyyaml](https://github.com/yaml/pyyaml) | MIT |
466
+ | rich | No | [Textualize/rich](https://github.com/Textualize/rich) | MIT |
467
+ | snowflake-connector-python | No | [snowflakedb/snowflake-connector-python](https://github.com/snowflakedb/snowflake-connector-python) | Apache-2.0 |
468
+ | snowflake-sqlalchemy | No | [snowflakedb/snowflake-sqlalchemy](https://github.com/snowflakedb/snowflake-sqlalchemy) | Apache-2.0 |
469
+ | SQLAlchemy | No | [sqlalchemy/sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | MIT |
470
+ | sqlalchemy-bigquery | No | [googleapis/python-bigquery-sqlalchemy](https://github.com/googleapis/python-bigquery-sqlalchemy) | Apache-2.0 |
471
+ | SQLGlot | No | [tobymao/sqlglot](https://github.com/tobymao/sqlglot) | MIT |
472
+ | sqlparse | No | [andialbrecht/sqlparse](https://github.com/andialbrecht/sqlparse) | BSD-3-Clause |
473
+ | tabulate | No | [astanin/python-tabulate](https://github.com/astanin/python-tabulate) | MIT |
474
+ | textual | No | [Textualize/textual](https://github.com/Textualize/textual) | MIT |
475
+ | tiktoken | No | [openai/tiktoken](https://github.com/openai/tiktoken) | MIT |
476
+ | tqdm | No | [tqdm/tqdm](https://github.com/tqdm/tqdm) | MPL-2.0 and MIT |
477
+ | typer | No | [fastapi/typer](https://github.com/fastapi/typer) | MIT |
478
+ | webbrowser-open | No | [minrk/webbrowser_open](https://github.com/minrk/webbrowser_open) | BSD-3-Clause |
479
+
480
+ The application also bundles the following unmodified browser-side components:
481
+
482
+ | Component | Modified | Upstream | License |
483
+ |---|---:|---|---|
484
+ | Cytoscape.js | No | [cytoscape/cytoscape.js](https://github.com/cytoscape/cytoscape.js) | MIT |
485
+ | cytoscape-dagre | No | [cytoscape/cytoscape.js-dagre](https://github.com/cytoscape/cytoscape.js-dagre) | MIT |
486
+ | Dagre | No | [dagrejs/dagre](https://github.com/dagrejs/dagre) | MIT |
487
+ | KaTeX | No | [KaTeX/KaTeX](https://github.com/KaTeX/KaTeX) | MIT |
488
+ | MapLibre GL JS | No | [maplibre/maplibre-gl-js](https://github.com/maplibre/maplibre-gl-js) | BSD-3-Clause |
489
+ | markdown-it | No | [markdown-it/markdown-it](https://github.com/markdown-it/markdown-it) | MIT |
490
+ | markdown-it-texmath | No | [goessner/markdown-it-texmath](https://github.com/goessner/markdown-it-texmath) | MIT |
491
+ | Tabulator | No | [olifolkerd/tabulator](https://github.com/olifolkerd/tabulator) | MIT |
492
+ | Vega | No | [vega/vega](https://github.com/vega/vega) | BSD-3-Clause |
493
+ | Vega-Embed | No | [vega/vega-embed](https://github.com/vega/vega-embed) | BSD-3-Clause |
494
+ | Vega-Lite | No | [vega/vega-lite](https://github.com/vega/vega-lite) | BSD-3-Clause |
495
+
496
+ </details>