Metadata-Version: 2.3
Name: vdash
Version: 0.1.0
Summary: Add your description here
Author: Tran Nhat Minh
Author-email: Tran Nhat Minh <trannhatminh.dev@gmail.com>
Requires-Dist: alembic>=1.17.2
Requires-Dist: cryptography>=46.0.5
Requires-Dist: fastapi>=0.129.0
Requires-Dist: jsonschema>=4.23.0
Requires-Dist: langchain-openai>=1.1.7
Requires-Dist: langgraph>=1.0.6
Requires-Dist: langgraph-checkpoint-sqlite>=3.0.3
Requires-Dist: langmem>=0.0.30
Requires-Dist: openai>=2.14.0
Requires-Dist: pydantic>=2.12.5
Requires-Dist: sqlalchemy>=2.0.45
Requires-Dist: typer>=0.12.3
Requires-Dist: uuid6>=2025.0.1
Requires-Python: >=3.12
Description-Content-Type: text/markdown

# Create a new migration

uv run alembic revision --autogenerate -m "initial schema"

{'user_input': 'T muốn xem doanh thu', 'database_schemas': '{"alembic_version": {"columns": [{"name": "version_num", "type": "VARCHAR(32)", "nullable": false, "default": null}], "primary_key": ["version_num"], "foreign_keys": [], "sample_data": [{"version_num": "ssssssasaas"}, {"version_num": "2"}, {"version_num": "3\\n3"}, {"version_num": "4"}, {"version_num": "444"}]}, "conversations": {"columns": [{"name": "id", "type": "INTEGER", "nullable": false, "default": null}, {"name": "uuid", "type": "VARCHAR(36)", "nullable": false, "default": null}, {"name": "title", "type": "VARCHAR(500)", "nullable": true, "default": null}, {"name": "thread_id", "type": "VARCHAR(64)", "nullable": true, "default": null}, {"name": "created_at", "type": "DATETIME", "nullable": false, "default": null}, {"name": "updated_at", "type": "DATETIME", "nullable": false, "default": null}], "primary_key": ["id"], "foreign_keys": [], "sample_data": []}, "daily_kpi": {"columns": [{"name": "id", "type": "INTEGER", "nullable": true, "default": null}, {"name": "kpi_date", "type": "TEXT", "nullable": false, "default": null}, {"name": "dow", "type": "TEXT", "nullable": false, "default": null}, {"name": "region", "type": "TEXT", "nullable": false, "default": null}, {"name": "product", "type": "TEXT", "nullable": false, "default": null}, {"name": "sales", "type": "INTEGER", "nullable": false, "default": null}, {"name": "profit", "type": "INTEGER", "nullable": false, "default": null}, {"name": "orders", "type": "INTEGER", "nullable": false, "default": null}, {"name": "created_at", "type": "TEXT", "nullable": false, "default": null}], "primary_key": ["id"], "foreign_keys": [], "sample_data": [{"id": 1, "kpi_date": "2026-01-12", "dow": "Mon", "region": "APAC", "product": "Basic", "sales": 150, "profit": 35, "orders": 12, "created_at": "2026-01-21T05:49:55.917899"}, {"id": 2, "kpi_date": "2026-01-12", "dow": "Mon", "region": "APAC", "product": "Pro", "sales": 210, "profit": 55, "orders": 10, "created_at": "2026-01-21T05:49:55.918092"}, {"id": 3, "kpi_date": "2026-01-12", "dow": "Mon", "region": "APAC", "product": "Enterprise", "sales": 320, "profit": 90, "orders": 4, "created_at": "2026-01-21T05:49:55.918097"}, {"id": 4, "kpi_date": "2026-01-12", "dow": "Mon", "region": "EMEA", "product": "Basic", "sales": 120, "profit": 28, "orders": 11, "created_at": "2026-01-21T05:49:55.918099"}, {"id": 5, "kpi_date": "2026-01-12", "dow": "Mon", "region": "EMEA", "product": "Pro", "sales": 180, "profit": 45, "orders": 9, "created_at": "2026-01-21T05:49:55.918102"}]}}', 'dialect': 'sqlite', 'query_sql': 'SELECT SUM(d.sales) AS total_revenue FROM daily_kpi d;', 'query_error': None, 'query_result': [{'total_revenue': 17584}], 'history_messages': [HumanMessage(content='T muốn xem doanh thu', additional_kwargs={}, response_metadata={}, id='4f34f7d7-0c20-4762-8fe1-8da07a8a12be'), AIMessage(content='{"intent":"ambiguous_sql","message_to_user":"Bạn muốn xem doanh thu, nhưng chưa cho biết khoảng thời gian hoặc các chiều cần xem (ví dụ: theo ngày/tháng/quý, theo khu vực, theo sản phẩm). Bạn muốn xem ở mức độ nào và trong khoảng thời gian nào?","analysis":"Người dùng chỉ đề cập đến metric \'doanh thu\' mà thiếu thời gian và các dimension/dimensions, nên thuộc loại AMBIGUOUS_SQL.","clarification":{"ambiguity_reason":"Thiếu khung thời gian (Timeframe) và các dimension/filters để xác định truy vấn SQL.","suggestions":["Xem doanh thu theo ngày hôm nay","Xem doanh thu theo tháng này","Xem doanh thu theo khu vực và/hoặc sản phẩm","Xem tổng doanh thu trong một khoảng thời gian được chỉ định"]}}', additional_kwargs={}, response_metadata={}, id='2179c2a7-1187-40f4-827f-038b8a72c6e3', tool_calls=[], invalid_tool_calls=[])], 'metadata': MetadataState(node='sql_correction_node', status=<MetadataStatus.SUCCESS: 'success'>, error=None), 'intent_classification': IntentClassificationState(intent=<IntentEnum.DIRECT_SQL: 'direct_sql'>, message_to_user=None, analysis='User corrected the input', clarification=None)}

cd ../vdash-demo
uv run uvicorn main:app --reload --port 4000
