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.
- tabulaflow-0.1.0/LICENSE +29 -0
- tabulaflow-0.1.0/PKG-INFO +496 -0
- tabulaflow-0.1.0/README.md +427 -0
- tabulaflow-0.1.0/pyproject.toml +203 -0
- tabulaflow-0.1.0/setup.cfg +4 -0
- tabulaflow-0.1.0/tabulaflow/__init__.py +3 -0
- tabulaflow-0.1.0/tabulaflow/_paths.py +5 -0
- tabulaflow-0.1.0/tabulaflow/agents/__init__.py +42 -0
- tabulaflow-0.1.0/tabulaflow/agents/_cache.py +73 -0
- tabulaflow-0.1.0/tabulaflow/agents/chat/__init__.py +80 -0
- tabulaflow-0.1.0/tabulaflow/agents/chat/compaction.py +323 -0
- tabulaflow-0.1.0/tabulaflow/agents/chat/events.py +161 -0
- tabulaflow-0.1.0/tabulaflow/agents/chat/input.py +30 -0
- tabulaflow-0.1.0/tabulaflow/agents/chat/session.py +926 -0
- tabulaflow-0.1.0/tabulaflow/agents/chat/system_prompt.md +254 -0
- tabulaflow-0.1.0/tabulaflow/agents/chat/tools.py +57 -0
- tabulaflow-0.1.0/tabulaflow/agents/chat/turn.py +325 -0
- tabulaflow-0.1.0/tabulaflow/agents/config.py +48 -0
- tabulaflow-0.1.0/tabulaflow/agents/enrichment.py +411 -0
- tabulaflow-0.1.0/tabulaflow/agents/extraction/__init__.py +26 -0
- tabulaflow-0.1.0/tabulaflow/agents/extraction/extractor.py +237 -0
- tabulaflow-0.1.0/tabulaflow/agents/extraction/markdown.py +439 -0
- tabulaflow-0.1.0/tabulaflow/agents/llm.py +326 -0
- tabulaflow-0.1.0/tabulaflow/agents/media.py +258 -0
- tabulaflow-0.1.0/tabulaflow/agents/message_store.py +254 -0
- tabulaflow-0.1.0/tabulaflow/agents/runtime.py +146 -0
- tabulaflow-0.1.0/tabulaflow/agents/summarization.py +157 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/__init__.py +151 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/_sql.py +158 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/add_canonical_name.py +915 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/browser/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/browser/aria.py +1312 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/browser/manager.py +154 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/browser/tool.py +1438 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/connect_data_source.py +102 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/create_parameterized_source.py +375 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/extract_rows_from_documents.py +387 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/access.py +95 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/edit.py +173 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/patch.py +174 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/patch_engine.py +526 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/filesystem/view.py +297 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/get_column_json_schema.py +253 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/get_table_schema.py +204 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/protocols.py +120 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/registry/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/registry/get_column_json_schema.py +104 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/registry/get_data_source_document.py +176 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/registry/get_schema.py +118 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/registry/get_table_schema.py +125 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/registry/run_query.py +174 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/registry/write_result_table.py +112 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/render_chart.py +402 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/render_graph.py +137 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/render_map.py +145 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/run_query.py +406 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/run_subagent_for_each_row.py +583 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/shell/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/shell/guard.py +61 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/shell/tool.py +442 -0
- tabulaflow-0.1.0/tabulaflow/agents/tools/show_artifacts.py +88 -0
- tabulaflow-0.1.0/tabulaflow/agents/trace.py +321 -0
- tabulaflow-0.1.0/tabulaflow/app/__init__.py +0 -0
- tabulaflow-0.1.0/tabulaflow/app/assets/__init__.py +0 -0
- tabulaflow-0.1.0/tabulaflow/app/assets/samples/__init__.py +0 -0
- tabulaflow-0.1.0/tabulaflow/app/assets/samples/sample.sqlite +0 -0
- tabulaflow-0.1.0/tabulaflow/app/config.py +331 -0
- tabulaflow-0.1.0/tabulaflow/app/main.py +80 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/__init__.py +5 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/fonts/figtree/Figtree-Variable.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/fonts/figtree/OFL.txt +93 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/contract.d.ts +180 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/index.html +40 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/pane.css +911 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/pane.js +1567 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/chart.js +201 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/code.js +35 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/color-domains.js +27 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/graph.js +756 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/map.js +1100 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/markdown.js +95 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/query.js +15 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/shared.js +258 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/ui/render/table.js +411 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/LICENSE-cytoscape-dagre.txt +21 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/LICENSE-cytoscape.txt +19 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/LICENSE-dagre.txt +19 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/cytoscape-dagre.min.js +397 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/cytoscape.min.js +32 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/cytoscape/dagre.min.js +3809 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/LICENSE.txt +21 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Bold.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Italic.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-Italic.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Script-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/katex.min.css +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/katex/katex.min.js +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/LICENSE.txt +116 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/airport-labels.geojson +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/continent-labels.geojson +12 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/maplibre-gl.css +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/maplibre-gl.js +59 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/natural-earth-admin0-boundaries.geojson +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/natural-earth-admin1-boundaries.geojson +1 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/natural-earth-airports-source.txt +8 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/natural-earth-boundaries-source.txt +10 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/ocean-labels.geojson +10 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite-source.txt +26 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite.json +709 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite.png +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite@2x.json +709 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/osm-bright-sprite@2x.png +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/shortbread-light.json +2535 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-airport-icon-draft.svg +36 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-interstate-shield-draft.svg +88 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite-source.txt +20 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite.json +30 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite.png +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite@2x.json +30 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/maplibre/tf-route-sprite@2x.png +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it/LICENSE.txt +22 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it/markdown-it.min.js +3 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it-texmath/LICENSE.txt +21 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it-texmath/texmath.css +19 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/markdown-it-texmath/texmath.js +368 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/tabulator/LICENSE.txt +21 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/tabulator/__init__.py +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/tabulator/tabulator.min.css +2 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/tabulator/tabulator.min.js +3 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/LICENSE-vega-embed.txt +27 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/LICENSE-vega-lite.txt +27 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/LICENSE-vega.txt +27 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/__init__.py +0 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/vega-embed.min.js +7 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/vega-lite.min.js +2 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/assets/vendor/vega/vega.min.js +2 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/cards.py +301 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/charts.py +179 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/contract.py +237 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/graphs.py +91 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/maps.py +215 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/server.py +661 -0
- tabulaflow-0.1.0/tabulaflow/app/pane/tables.py +293 -0
- tabulaflow-0.1.0/tabulaflow/app/runtime_paths.py +109 -0
- tabulaflow-0.1.0/tabulaflow/app/sample_data.py +104 -0
- tabulaflow-0.1.0/tabulaflow/app/session.py +289 -0
- tabulaflow-0.1.0/tabulaflow/app/theme.py +87 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/__init__.py +5 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/app.py +1362 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/banner.py +185 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/cells.py +60 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/clipboard.py +30 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/commands.py +367 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/rendering.py +447 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/screens/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/screens/config.py +346 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/screens/results.py +827 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/screens/schema.py +839 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/spinner.py +15 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/theme.py +215 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/tui.tcss +140 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/chat.py +120 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/chat_log.py +27 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/choice.py +176 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/input.py +596 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/markdown.py +372 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/progress.py +760 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/result.py +908 -0
- tabulaflow-0.1.0/tabulaflow/app/tui/widgets/suggestions.py +143 -0
- tabulaflow-0.1.0/tabulaflow/app/turn.py +22 -0
- tabulaflow-0.1.0/tabulaflow/cli.py +95 -0
- tabulaflow-0.1.0/tabulaflow/core/__init__.py +111 -0
- tabulaflow-0.1.0/tabulaflow/core/_cache.py +65 -0
- tabulaflow-0.1.0/tabulaflow/core/dataframe.py +487 -0
- tabulaflow-0.1.0/tabulaflow/core/media.py +156 -0
- tabulaflow-0.1.0/tabulaflow/core/registry.py +34 -0
- tabulaflow-0.1.0/tabulaflow/core/results.py +78 -0
- tabulaflow-0.1.0/tabulaflow/core/schema.py +318 -0
- tabulaflow-0.1.0/tabulaflow/core/serialization.py +44 -0
- tabulaflow-0.1.0/tabulaflow/data/__init__.py +70 -0
- tabulaflow-0.1.0/tabulaflow/data/_cache.py +66 -0
- tabulaflow-0.1.0/tabulaflow/data/catalog.py +72 -0
- tabulaflow-0.1.0/tabulaflow/data/config.py +109 -0
- tabulaflow-0.1.0/tabulaflow/data/connect.py +420 -0
- tabulaflow-0.1.0/tabulaflow/data/json_schema.py +160 -0
- tabulaflow-0.1.0/tabulaflow/data/loaders/__init__.py +53 -0
- tabulaflow-0.1.0/tabulaflow/data/loaders/_runner.py +75 -0
- tabulaflow-0.1.0/tabulaflow/data/loaders/files.py +254 -0
- tabulaflow-0.1.0/tabulaflow/data/loaders/huggingface.py +781 -0
- tabulaflow-0.1.0/tabulaflow/data/neo4j.py +647 -0
- tabulaflow-0.1.0/tabulaflow/data/protocols.py +87 -0
- tabulaflow-0.1.0/tabulaflow/data/registry.py +104 -0
- tabulaflow-0.1.0/tabulaflow/data/sparql.py +452 -0
- tabulaflow-0.1.0/tabulaflow/data/sql.py +2896 -0
- tabulaflow-0.1.0/tabulaflow/examples/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/examples/ambiguity_aware_queries.py +65 -0
- tabulaflow-0.1.0/tabulaflow/examples/chat_sessions.py +75 -0
- tabulaflow-0.1.0/tabulaflow/examples/cli.py +58 -0
- tabulaflow-0.1.0/tabulaflow/examples/compare_research_agents.py +64 -0
- tabulaflow-0.1.0/tabulaflow/examples/custom_agents.py +80 -0
- tabulaflow-0.1.0/tabulaflow/examples/data_enrichment.py +62 -0
- tabulaflow-0.1.0/tabulaflow/examples/document_extraction.py +41 -0
- tabulaflow-0.1.0/tabulaflow/examples/quick_start.py +70 -0
- tabulaflow-0.1.0/tabulaflow/examples/research_quick_start.py +46 -0
- tabulaflow-0.1.0/tabulaflow/examples/structured_outputs.py +116 -0
- tabulaflow-0.1.0/tabulaflow/examples/support/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/examples/support/dock-guide.pdf +0 -0
- tabulaflow-0.1.0/tabulaflow/examples/support/faq.txt +16 -0
- tabulaflow-0.1.0/tabulaflow/examples/support/travel_guide.txt +116 -0
- tabulaflow-0.1.0/tabulaflow/examples/table_linking_agent.py +116 -0
- tabulaflow-0.1.0/tabulaflow/examples/working_with_data.py +70 -0
- tabulaflow-0.1.0/tabulaflow/output/__init__.py +14 -0
- tabulaflow-0.1.0/tabulaflow/output/charts.py +167 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/__init__.py +77 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/_core.py +369 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/_sql.py +124 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/_table_grouping.py +242 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/cypher.py +82 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/resolution.py +60 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/schema.py +54 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/sparql.py +20 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/sql_compact.py +191 -0
- tabulaflow-0.1.0/tabulaflow/output/formatting/sql_ddl.py +288 -0
- tabulaflow-0.1.0/tabulaflow/output/graphs.py +446 -0
- tabulaflow-0.1.0/tabulaflow/output/maps.py +465 -0
- tabulaflow-0.1.0/tabulaflow/output/resolver.py +316 -0
- tabulaflow-0.1.0/tabulaflow/output/specs.py +291 -0
- tabulaflow-0.1.0/tabulaflow/output/store.py +523 -0
- tabulaflow-0.1.0/tabulaflow/research/__init__.py +1 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/__init__.py +33 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ambig_flat.py +340 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ambig_simple.py +123 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ambig_structured.py +369 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/dbt.py +262 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/direct_prompt.py +91 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/__init__.py +11 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/agent.py +283 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/dbt.py +214 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/llm.py +211 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/majority.py +74 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/ensemblers/utils.py +31 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/full_schema.py +117 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/registry.py +71 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/schema_discovery.py +143 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/schema_linking.py +515 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/user_simulator.py +274 -0
- tabulaflow-0.1.0/tabulaflow/research/agents/utils.py +119 -0
- tabulaflow-0.1.0/tabulaflow/research/ambiguity.py +65 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/__init__.py +56 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/ambrosia_s.py +284 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/arcs.py +246 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/beaver.py +239 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/bird_sql.py +357 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/cypherbench.py +322 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/installation.py +218 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/registry.py +146 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/runtime.py +110 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/spider2_dbt.py +376 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/spider2_lite.py +507 -0
- tabulaflow-0.1.0/tabulaflow/research/benchmarks/spider2_snow.py +348 -0
- tabulaflow-0.1.0/tabulaflow/research/cli.py +123 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/__init__.py +59 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/aggregators.py +250 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/ambig_point_stats.py +398 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/bird_sql_ex.py +31 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/bird_sql_ex_soft.py +64 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/cypherbench_ex.py +181 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/executable.py +19 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/found_one.py +65 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/gold_ambig_point_stats.py +29 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/gold_executable.py +16 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/gold_result_not_empty.py +17 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/pred_success.py +15 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/psjs.py +183 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/raw_pred_bird_sql_ex.py +19 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/raw_pred_simple_ex.py +23 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/registry.py +28 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/schema_linking_stats.py +66 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/simple_ex.py +136 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/spider2_duckdb_match.py +106 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/spider2_ex.py +123 -0
- tabulaflow-0.1.0/tabulaflow/research/metrics/utils.py +84 -0
- tabulaflow-0.1.0/tabulaflow/research/observability.py +96 -0
- tabulaflow-0.1.0/tabulaflow/research/pipelines/__init__.py +42 -0
- tabulaflow-0.1.0/tabulaflow/research/pipelines/ensemble.py +290 -0
- tabulaflow-0.1.0/tabulaflow/research/pipelines/evaluate.py +149 -0
- tabulaflow-0.1.0/tabulaflow/research/pipelines/execute.py +89 -0
- tabulaflow-0.1.0/tabulaflow/research/pipelines/predict.py +387 -0
- tabulaflow-0.1.0/tabulaflow/research/pipelines/preprocess.py +106 -0
- tabulaflow-0.1.0/tabulaflow/research/pipelines/utils.py +75 -0
- tabulaflow-0.1.0/tabulaflow/research/preprocessing/__init__.py +25 -0
- tabulaflow-0.1.0/tabulaflow/research/preprocessing/column_profiler.py +76 -0
- tabulaflow-0.1.0/tabulaflow/research/preprocessing/erd.py +322 -0
- tabulaflow-0.1.0/tabulaflow/research/preprocessing/fk_predictor.py +98 -0
- tabulaflow-0.1.0/tabulaflow/research/preprocessing/question_embedding.py +162 -0
- tabulaflow-0.1.0/tabulaflow/research/preprocessing/registry.py +53 -0
- tabulaflow-0.1.0/tabulaflow/research/preprocessing/schema.py +83 -0
- tabulaflow-0.1.0/tabulaflow/research/query_analysis.py +59 -0
- tabulaflow-0.1.0/tabulaflow/research/query_execution.py +71 -0
- tabulaflow-0.1.0/tabulaflow/research/reporting.py +374 -0
- tabulaflow-0.1.0/tabulaflow/research/tools/__init__.py +34 -0
- tabulaflow-0.1.0/tabulaflow/research/tools/ask_user.py +43 -0
- tabulaflow-0.1.0/tabulaflow/research/tools/finish.py +52 -0
- tabulaflow-0.1.0/tabulaflow/research/tools/get_column_description.py +60 -0
- tabulaflow-0.1.0/tabulaflow/research/tools/get_schema.py +45 -0
- tabulaflow-0.1.0/tabulaflow/research/tools/run_dbt.py +176 -0
- tabulaflow-0.1.0/tabulaflow/research/tools/search_keywords.py +90 -0
- tabulaflow-0.1.0/tabulaflow/research/types.py +737 -0
- tabulaflow-0.1.0/tabulaflow.egg-info/PKG-INFO +496 -0
- tabulaflow-0.1.0/tabulaflow.egg-info/SOURCES.txt +379 -0
- tabulaflow-0.1.0/tabulaflow.egg-info/dependency_links.txt +1 -0
- tabulaflow-0.1.0/tabulaflow.egg-info/entry_points.txt +2 -0
- tabulaflow-0.1.0/tabulaflow.egg-info/requires.txt +44 -0
- tabulaflow-0.1.0/tabulaflow.egg-info/top_level.txt +1 -0
- tabulaflow-0.1.0/tests/test_cli.py +172 -0
- tabulaflow-0.1.0/tests/test_docs_examples.py +118 -0
- tabulaflow-0.1.0/tests/test_docs_library_guides.py +543 -0
- tabulaflow-0.1.0/tests/test_docs_research_guides.py +186 -0
- tabulaflow-0.1.0/tests/test_lazy_imports.py +74 -0
- tabulaflow-0.1.0/tests/test_tool_error_convention.py +44 -0
tabulaflow-0.1.0/LICENSE
ADDED
|
@@ -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>
|