dao-ai 0.0.21__tar.gz → 0.0.23__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 (353) hide show
  1. {dao_ai-0.0.21 → dao_ai-0.0.23}/PKG-INFO +28 -5
  2. {dao_ai-0.0.21 → dao_ai-0.0.23}/README.md +24 -2
  3. dao_ai-0.0.23/config/examples/mcp_with_uc_connection.yaml +109 -0
  4. dao_ai-0.0.23/config/examples/slack.yaml +69 -0
  5. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/hardware_store/supervisor_postgres.yaml +21 -20
  6. {dao_ai-0.0.21 → dao_ai-0.0.23}/databricks.yaml +10 -3
  7. {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/01_ingest_and_transform.py +33 -2
  8. {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/02_provision_vector_search.py +31 -3
  9. dao_ai-0.0.23/notebooks/03_provision_lakebase.py +85 -0
  10. {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/04_unity_catalog_tools.py +31 -2
  11. dao_ai-0.0.21/notebooks/03_generate_evaluation_data.py → dao_ai-0.0.23/notebooks/06_generate_evaluation_data.py +31 -2
  12. dao_ai-0.0.21/notebooks/06_run_evaluation.py → dao_ai-0.0.23/notebooks/07_run_evaluation.py +31 -5
  13. {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/09_evaluate_inferences.py +34 -3
  14. {dao_ai-0.0.21 → dao_ai-0.0.23}/pyproject.toml +4 -3
  15. {dao_ai-0.0.21 → dao_ai-0.0.23}/requirements.txt +3 -2
  16. {dao_ai-0.0.21 → dao_ai-0.0.23}/schemas/model_config_schema.json +74 -3
  17. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/config.py +98 -11
  18. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/graph.py +3 -0
  19. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/memory/core.py +10 -6
  20. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/memory/postgres.py +71 -30
  21. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/providers/databricks.py +280 -0
  22. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/__init__.py +2 -0
  23. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/genie.py +1 -1
  24. dao_ai-0.0.23/src/dao_ai/tools/mcp.py +164 -0
  25. dao_ai-0.0.23/src/dao_ai/tools/slack.py +136 -0
  26. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/utils.py +8 -0
  27. dao_ai-0.0.23/tests/dao_ai/test_databricks.py +1004 -0
  28. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_function_parsing.py +2 -1
  29. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_genie_databricks_integration.py +1 -1
  30. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_mcp.py +63 -1
  31. dao_ai-0.0.21/src/dao_ai/tools/mcp.py +0 -117
  32. dao_ai-0.0.21/tests/dao_ai/test_databricks.py +0 -308
  33. {dao_ai-0.0.21 → dao_ai-0.0.23}/.gitignore +0 -0
  34. {dao_ai-0.0.21 → dao_ai-0.0.23}/.python-version +0 -0
  35. {dao_ai-0.0.21 → dao_ai-0.0.23}/CHANGELOG.md +0 -0
  36. {dao_ai-0.0.21 → dao_ai-0.0.23}/CONTRIBUTING.md +0 -0
  37. {dao_ai-0.0.21 → dao_ai-0.0.23}/LICENSE +0 -0
  38. {dao_ai-0.0.21 → dao_ai-0.0.23}/Makefile +0 -0
  39. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/Makefile +0 -0
  40. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
  41. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
  42. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  43. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  44. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  45. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  46. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/development_workflows.md +0 -0
  47. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/.gitkeep +0 -0
  48. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/Makefile +0 -0
  49. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
  50. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
  51. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
  52. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
  53. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
  54. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
  55. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
  56. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
  57. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
  58. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
  59. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
  60. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
  61. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
  62. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
  63. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/architecture.png +0 -0
  64. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
  65. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
  66. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
  67. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
  68. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
  69. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
  70. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
  71. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
  72. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/index.md +0 -0
  73. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
  74. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
  75. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
  76. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
  77. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
  78. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
  79. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
  80. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
  81. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/load-env.sh +0 -0
  82. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
  83. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
  84. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
  85. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
  86. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
  87. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
  88. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
  89. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
  90. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
  91. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
  92. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
  93. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
  94. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
  95. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
  96. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
  97. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
  98. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
  99. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
  100. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
  101. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
  102. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
  103. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
  104. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
  105. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
  106. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
  107. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
  108. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
  109. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
  110. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
  111. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
  112. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
  113. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
  114. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
  115. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
  116. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
  117. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
  118. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
  119. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
  120. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
  121. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
  122. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
  123. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
  124. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
  125. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
  126. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
  127. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
  128. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
  129. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
  130. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
  131. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  132. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
  133. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  134. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  135. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  136. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
  137. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
  138. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
  139. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
  140. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
  141. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
  142. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
  143. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
  144. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
  145. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
  146. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
  147. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
  148. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
  149. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
  150. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
  151. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
  152. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
  153. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
  154. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
  155. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
  156. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
  157. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
  158. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
  159. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
  160. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
  161. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
  162. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
  163. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
  164. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
  165. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
  166. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
  167. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
  168. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
  169. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
  170. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
  171. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
  172. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
  173. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
  174. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
  175. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
  176. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
  177. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
  178. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
  179. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
  180. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
  181. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
  182. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
  183. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
  184. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
  185. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
  186. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
  187. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
  188. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
  189. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
  190. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
  191. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
  192. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
  193. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
  194. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/.gitkeep +0 -0
  195. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/README.md +0 -0
  196. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
  197. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
  198. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
  199. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
  200. {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
  201. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/dais2025/model_config_dais.yaml +0 -0
  202. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/deep_research.yaml +0 -0
  203. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/executive_assistant.yaml +0 -0
  204. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/genie.yaml +0 -0
  205. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/genie_and_vector_search.yaml +0 -0
  206. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/genie_with_conversion_id.yaml +0 -0
  207. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/human_in_the_loop.yaml +0 -0
  208. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/jira.yaml +0 -0
  209. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/mcp.yaml +0 -0
  210. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/minimal.yaml +0 -0
  211. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/reservations.yaml +0 -0
  212. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/hardware_store/supervisor.yaml +0 -0
  213. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/hardware_store/swarm.yaml +0 -0
  214. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/quick_serve_restaurant/.gitkeep +0 -0
  215. {dao_ai-0.0.21 → dao_ai-0.0.23}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +0 -0
  216. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/appointments.sql +0 -0
  217. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/appointments_data.sql +0 -0
  218. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/brand_rep_demo_data.sql +0 -0
  219. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/brand_rep_demo_queries.sql +0 -0
  220. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/brand_rep_demo_tables.sql +0 -0
  221. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/brand_rep_demo_validation.sql +0 -0
  222. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/customers.sql +0 -0
  223. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/customers_data.sql +0 -0
  224. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/dim_stores.sql +0 -0
  225. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/dim_stores_data.sql +0 -0
  226. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/employee_performance.sql +0 -0
  227. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/employee_performance_data.sql +0 -0
  228. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/employee_tasks.sql +0 -0
  229. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/employee_tasks_data.sql +0 -0
  230. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/inventory.sql +0 -0
  231. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/inventory_data.sql +0 -0
  232. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/managers.sql +0 -0
  233. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/managers_data.sql +0 -0
  234. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/product_data.sql +0 -0
  235. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/products.sql +0 -0
  236. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/task_assignments.sql +0 -0
  237. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/hardware_store/inventory.snappy.parquet +0 -0
  238. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/hardware_store/inventory.sql +0 -0
  239. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/hardware_store/products.snappy.parquet +0 -0
  240. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/hardware_store/products.sql +0 -0
  241. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/.gitkeep +0 -0
  242. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
  243. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/items_description.csv +0 -0
  244. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/items_description.sql +0 -0
  245. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/items_raw.csv +0 -0
  246. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/items_raw.sql +0 -0
  247. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/orders_raw.csv +0 -0
  248. {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/orders_raw.sql +0 -0
  249. {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/genie.png +0 -0
  250. {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/hardware_store/README.md +0 -0
  251. {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/hardware_store/retail_supervisor.png +0 -0
  252. {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/hardware_store/retail_swarm.png +0 -0
  253. {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/quick_serve_restaurant/.gitkeep +0 -0
  254. {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
  255. {dao_ai-0.0.21 → dao_ai-0.0.23}/environment.yaml +0 -0
  256. {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/dais2025/examples.yaml +0 -0
  257. {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/deep_research/examples.yaml +0 -0
  258. {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/executive_assistant/examples.yaml +0 -0
  259. {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/hardware_store/examples.yaml +0 -0
  260. {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/quick_serve_restaurant/.gitkeep +0 -0
  261. {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/quick_serve_restaurant/examples.yaml +0 -0
  262. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/extract_store_numbers.sql +0 -0
  263. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_inventory_by_sku.sql +0 -0
  264. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_inventory_by_upc.sql +0 -0
  265. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_product_by_sku.sql +0 -0
  266. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_product_by_upc.sql +0 -0
  267. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_store_by_number.sql +0 -0
  268. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
  269. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
  270. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
  271. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
  272. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_product_by_sku.sql +0 -0
  273. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_product_by_upc.sql +0 -0
  274. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
  275. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
  276. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/.gitkeep +0 -0
  277. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
  278. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
  279. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
  280. {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
  281. /dao_ai-0.0.21/notebooks/05_agent_as_code_driver.py → /dao_ai-0.0.23/notebooks/05_deploy_agent.py +0 -0
  282. {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/08_run_examples.py +0 -0
  283. {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/99_scratchpad.py +0 -0
  284. {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/INVESTech.py +0 -0
  285. {dao_ai-0.0.21 → dao_ai-0.0.23}/schemas/bundle_config_schema.json +0 -0
  286. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/__init__.py +0 -0
  287. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/models.py +0 -0
  288. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/__init__.py +0 -0
  289. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/customer.py +0 -0
  290. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/employee.py +0 -0
  291. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/executive.py +0 -0
  292. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/genie.py +0 -0
  293. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/inventory.py +0 -0
  294. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/models.py +0 -0
  295. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/store.py +0 -0
  296. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/__init__.py +0 -0
  297. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/agent_as_code.py +0 -0
  298. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/catalog.py +0 -0
  299. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/chat_models.py +0 -0
  300. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/cli.py +0 -0
  301. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/guardrails.py +0 -0
  302. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/hooks/__init__.py +0 -0
  303. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/hooks/core.py +0 -0
  304. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/memory/__init__.py +0 -0
  305. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/memory/base.py +0 -0
  306. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/messages.py +0 -0
  307. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/models.py +0 -0
  308. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/nodes.py +0 -0
  309. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/prompts.py +0 -0
  310. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/providers/__init__.py +0 -0
  311. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/providers/base.py +0 -0
  312. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/state.py +0 -0
  313. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/agent.py +0 -0
  314. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/core.py +0 -0
  315. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/human_in_the_loop.py +0 -0
  316. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/python.py +0 -0
  317. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/time.py +0 -0
  318. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/unity_catalog.py +0 -0
  319. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/vector_search.py +0 -0
  320. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/types.py +0 -0
  321. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/vector_search.py +0 -0
  322. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/hardware_store/__init__.py +0 -0
  323. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/hardware_store/hooks.py +0 -0
  324. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/hardware_store/tools.py +0 -0
  325. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/quick_serve_restaurant/.gitkeep +0 -0
  326. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/quick_serve_restaurant/__init__.py +0 -0
  327. {dao_ai-0.0.21 → dao_ai-0.0.23}/src/quick_serve_restaurant/tools.py +0 -0
  328. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/config/test_model_config.yaml +0 -0
  329. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/conftest.py +0 -0
  330. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_catalog.py +0 -0
  331. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_chat_history.py +0 -0
  332. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_config.py +0 -0
  333. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_genie.py +0 -0
  334. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
  335. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_hooks.py +0 -0
  336. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_inference.py +0 -0
  337. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_inference_integration.py +0 -0
  338. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_messages.py +0 -0
  339. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_models.py +0 -0
  340. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_postgres_integration.py +0 -0
  341. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_state.py +0 -0
  342. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_summarization_inference.py +0 -0
  343. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_tools.py +0 -0
  344. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_types.py +0 -0
  345. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_unity_catalog.py +0 -0
  346. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_utils.py +0 -0
  347. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_vector_search.py +0 -0
  348. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/weather_server_mcp.py +0 -0
  349. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/hardware_store/.gitkeep +0 -0
  350. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/hardware_store/test_graph.py +0 -0
  351. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/images/doritos_upc.png +0 -0
  352. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/images/lays_upc.png +0 -0
  353. {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/quick_serve_restaurant/.gitkeep +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dao-ai
3
- Version: 0.0.21
3
+ Version: 0.0.23
4
4
  Summary: DAO AI: A modular, multi-agent orchestration framework for complex AI workflows. Supports agent handoff, tool integration, and dynamic configuration via YAML.
5
5
  Project-URL: Homepage, https://github.com/natefleming/dao-ai
6
6
  Project-URL: Documentation, https://natefleming.github.io/dao-ai
@@ -24,9 +24,10 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
24
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
25
  Classifier: Topic :: System :: Distributed Computing
26
26
  Requires-Python: >=3.12
27
- Requires-Dist: databricks-agents>=1.6.0
27
+ Requires-Dist: databricks-agents>=1.6.1
28
28
  Requires-Dist: databricks-langchain>=0.8.0
29
- Requires-Dist: databricks-sdk[openai]>=0.66.0
29
+ Requires-Dist: databricks-mcp>=0.3.0
30
+ Requires-Dist: databricks-sdk[openai]>=0.67.0
30
31
  Requires-Dist: duckduckgo-search>=8.0.2
31
32
  Requires-Dist: grandalf>=0.8
32
33
  Requires-Dist: langchain-mcp-adapters>=0.1.10
@@ -653,7 +654,7 @@ test:
653
654
  #### 4. MCP (Model Context Protocol) Tools (`type: mcp`)
654
655
  MCP tools allow interaction with external services that implement the Model Context Protocol, supporting both HTTP and stdio transports.
655
656
 
656
- **Configuration Example:**
657
+ **Configuration Example (Direct URL):**
657
658
  ```yaml
658
659
  tools:
659
660
  weather_tool_mcp:
@@ -664,8 +665,30 @@ test:
664
665
  transport: streamable_http
665
666
  url: http://localhost:8000/mcp
666
667
  ```
668
+
669
+ **Configuration Example (Unity Catalog Connection):**
670
+ MCP tools can also use Unity Catalog Connections for secure, governed access with on-behalf-of-user capabilities. The connection provides OAuth authentication, while the URL specifies the endpoint:
671
+ ```yaml
672
+ resources:
673
+ connections:
674
+ github_connection:
675
+ name: github_u2m_connection # UC Connection name
676
+
677
+ tools:
678
+ github_mcp:
679
+ name: github_mcp
680
+ function:
681
+ type: mcp
682
+ name: github_mcp
683
+ transport: streamable_http
684
+ url: https://workspace.databricks.com/api/2.0/mcp/external/github_u2m_connection # MCP endpoint URL
685
+ connection: *github_connection # UC Connection provides OAuth authentication
686
+ ```
687
+
667
688
  **Development:**
668
- Ensure the MCP service is running and accessible at the specified URL or command. The framework will handle the MCP protocol communication automatically.
689
+ - **For direct URL connections**: Ensure the MCP service is running and accessible at the specified URL or command. Provide OAuth credentials (client_id, client_secret) or PAT for authentication.
690
+ - **For UC Connection**: URL is required to specify the endpoint. The connection provides OAuth authentication via the workspace client. Ensure the connection is configured in Unity Catalog with appropriate MCP scopes (`mcp.genie`, `mcp.functions`, `mcp.vectorsearch`, `mcp.external`).
691
+ - The framework will handle the MCP protocol communication automatically, including session management and authentication.
669
692
 
670
693
  ### Configuring New Agents
671
694
 
@@ -581,7 +581,7 @@ test:
581
581
  #### 4. MCP (Model Context Protocol) Tools (`type: mcp`)
582
582
  MCP tools allow interaction with external services that implement the Model Context Protocol, supporting both HTTP and stdio transports.
583
583
 
584
- **Configuration Example:**
584
+ **Configuration Example (Direct URL):**
585
585
  ```yaml
586
586
  tools:
587
587
  weather_tool_mcp:
@@ -592,8 +592,30 @@ test:
592
592
  transport: streamable_http
593
593
  url: http://localhost:8000/mcp
594
594
  ```
595
+
596
+ **Configuration Example (Unity Catalog Connection):**
597
+ MCP tools can also use Unity Catalog Connections for secure, governed access with on-behalf-of-user capabilities. The connection provides OAuth authentication, while the URL specifies the endpoint:
598
+ ```yaml
599
+ resources:
600
+ connections:
601
+ github_connection:
602
+ name: github_u2m_connection # UC Connection name
603
+
604
+ tools:
605
+ github_mcp:
606
+ name: github_mcp
607
+ function:
608
+ type: mcp
609
+ name: github_mcp
610
+ transport: streamable_http
611
+ url: https://workspace.databricks.com/api/2.0/mcp/external/github_u2m_connection # MCP endpoint URL
612
+ connection: *github_connection # UC Connection provides OAuth authentication
613
+ ```
614
+
595
615
  **Development:**
596
- Ensure the MCP service is running and accessible at the specified URL or command. The framework will handle the MCP protocol communication automatically.
616
+ - **For direct URL connections**: Ensure the MCP service is running and accessible at the specified URL or command. Provide OAuth credentials (client_id, client_secret) or PAT for authentication.
617
+ - **For UC Connection**: URL is required to specify the endpoint. The connection provides OAuth authentication via the workspace client. Ensure the connection is configured in Unity Catalog with appropriate MCP scopes (`mcp.genie`, `mcp.functions`, `mcp.vectorsearch`, `mcp.external`).
618
+ - The framework will handle the MCP protocol communication automatically, including session management and authentication.
597
619
 
598
620
  ### Configuring New Agents
599
621
 
@@ -0,0 +1,109 @@
1
+ # yaml-language-server: $schema=../../schemas/model_config_schema.json
2
+
3
+ variables:
4
+ client_id: &client_id # Service principal client ID
5
+ options:
6
+ - env: RETAIL_AI_DATABRICKS_CLIENT_ID
7
+ - scope: retail_ai
8
+ secret: RETAIL_AI_DATABRICKS_CLIENT_ID
9
+ client_secret: &client_secret # Service principal secret
10
+ options:
11
+ - env: RETAIL_AI_DATABRICKS_CLIENT_SECRET
12
+ - scope: retail_ai
13
+ secret: RETAIL_AI_DATABRICKS_CLIENT_SECRET
14
+ workspace_host: &workspace_host # Databricks workspace URL
15
+ options:
16
+ - env: RETAIL_AI_DATABRICKS_HOST
17
+ - scope: retail_ai
18
+ secret: RETAIL_AI_DATABRICKS_HOST
19
+
20
+ schemas:
21
+ retail_schema: &retail_schema # Unity Catalog schema configuration
22
+ catalog_name: nfleming # Unity Catalog name
23
+ schema_name: retail_ai # Schema within the catalog
24
+
25
+ resources:
26
+ llms:
27
+ default_llm: &default_llm # Default LLM configuration
28
+ name: databricks-claude-3-7-sonnet # Databricks serving endpoint name
29
+
30
+ connections:
31
+ github_connection: &github_connection # UC Connection for GitHub
32
+ name: github_u2m_connection # UC Connection name
33
+
34
+ tools:
35
+ # Example using UC Connection for GitHub MCP
36
+ github_mcp_uc: &github_mcp_uc
37
+ name: github_mcp # Tool name for agent reference
38
+ function:
39
+ type: mcp # Tool type: MCP server
40
+ name: github_mcp # MCP function name
41
+ transport: streamable_http # Transport protocol
42
+ url: https://adb-984752964297111.11.azuredatabricks.net/api/2.0/mcp/external/github_u2m_connection # MCP endpoint URL
43
+ connection: *github_connection # Reference to UC Connection (provides OAuth auth)
44
+
45
+ # Example using direct URL (existing approach)
46
+ weather_tool_mcp: &weather_tool_mcp
47
+ name: weather # Tool name for agent reference
48
+ function:
49
+ type: mcp # Tool type: MCP server
50
+ name: weather # MCP function name
51
+ transport: streamable_http # Transport protocol
52
+ url: http://localhost:8000/mcp # MCP server URL
53
+
54
+ vector_search_mcp: &vector_search_mcp # Vector search MCP tool configuration
55
+ name: vector_search_mcp
56
+ function:
57
+ type: mcp # MCP function type
58
+ name: vector_search_mcp
59
+ url: https://adb-984752964297111.11.azuredatabricks.net/api/2.0/mcp/vector-search/nfleming/retail_ai
60
+ client_id: *client_id
61
+ client_secret: *client_secret
62
+ workspace_host: *workspace_host
63
+
64
+ unity_catalog_mcp: &unity_catalog_mcp # Unity Catalog MCP tool configuration
65
+ name: unity_catalog_mcp
66
+ function:
67
+ type: mcp # MCP function type
68
+ name: unity_catalog_mcp
69
+ url: https://adb-984752964297111.11.azuredatabricks.net/api/2.0/mcp/functions/nfleming/retail_ai
70
+ client_id: *client_id
71
+ client_secret: *client_secret
72
+ workspace_host: *workspace_host
73
+
74
+ genie_mcp: &genie_mcp # Genie MCP tool configuration
75
+ name: genie_mcp
76
+ function:
77
+ type: mcp # MCP function type
78
+ name: genie_mcp
79
+ url: https://adb-984752964297111.11.azuredatabricks.net/api/2.0/mcp/genie/01f01c91f1f414d59daaefd2b7ec82ea
80
+ client_id: *client_id
81
+ client_secret: *client_secret
82
+ workspace_host: *workspace_host
83
+
84
+ agents:
85
+ mcp_agent: &mcp_agent # MCP agent configuration
86
+ name: mcp_agent # Agent identifier
87
+ model: *default_llm # Reference to LLM configuration
88
+ tools: # Tools available to this agent
89
+ - *github_mcp_uc
90
+ - *vector_search_mcp
91
+ - *unity_catalog_mcp
92
+ - *genie_mcp
93
+ prompt: | # System prompt defining agent behavior
94
+ You are a multi-purpose agent that can perform vector search, interact with Unity Catalog,
95
+ interact with Genie rooms, and interact with GitHub. Use the tools provided to answer
96
+ questions and perform tasks. You many need to use the tools in combination to achieve
97
+ complex tasks.
98
+
99
+ app:
100
+ name: mcp_agent # Application name
101
+ log_level: DEBUG # Logging level for the application
102
+ registered_model: # MLflow registered model configuration
103
+ schema: *retail_schema # Schema where model will be registered
104
+ name: mcp_agent # Model name in MLflow registry
105
+ agents: # List of agents included in the system
106
+ - *mcp_agent # MCP agent
107
+ orchestration: # Agent orchestration configuration
108
+ swarm: # Supervisor orchestration pattern
109
+ model: *default_llm # LLM for routing decisions
@@ -0,0 +1,69 @@
1
+ # yaml-language-server: $schema=../../schemas/model_config_schema.json
2
+
3
+ schemas:
4
+ default_schema: &default_schema # Unity Catalog schema configuration
5
+ catalog_name: main # Unity Catalog name
6
+ schema_name: default # Schema within the catalog
7
+
8
+ resources:
9
+ llms:
10
+ # Primary LLM for Slack agent
11
+ default_llm: &default_llm
12
+ name: databricks-meta-llama-3-3-70b-instruct # Databricks serving endpoint name
13
+ temperature: 0.7 # Temperature for more natural responses
14
+ max_tokens: 4096 # Maximum tokens per response
15
+ on_behalf_of_user: false
16
+
17
+ connections:
18
+ # Unity Catalog HTTP connection to Slack
19
+ slack_connection: &slack_connection
20
+ name: slack_bot_connection # UC Connection name
21
+ on_behalf_of_user: false # Use service principal auth
22
+
23
+ tools:
24
+ # Slack messaging tool using factory function
25
+ slack_tool: &slack_tool
26
+ name: send_slack_message # Tool name for agent reference
27
+ function:
28
+ type: factory # Tool type: factory function
29
+ name: dao_ai.tools.create_send_slack_message_tool # Factory function path
30
+ args: # Arguments passed to factory
31
+ connection: *slack_connection # Reference to Slack UC connection
32
+ channel_name: "general" # Slack channel name (can also use channel_id)
33
+ name: send_slack_message
34
+ description: Send a message to the #general Slack channel
35
+
36
+ agents:
37
+ # Slack notification agent
38
+ slack_agent: &slack_agent
39
+ name: slack_agent # Agent identifier
40
+ description: "Agent that can send notifications to Slack"
41
+ model: *default_llm # Reference to LLM configuration
42
+ tools: # Tools available to this agent
43
+ - *slack_tool
44
+ prompt: | # System prompt defining agent behavior
45
+ You are a helpful assistant that can send notifications to Slack.
46
+ When asked to notify someone or send a message, use the send_slack_message tool
47
+ to post to the #general channel. Keep messages concise and professional.
48
+
49
+ app:
50
+ name: slack_agent_example # Application name
51
+ description: "Agent system that can send notifications to Slack"
52
+ log_level: INFO # Logging level for the application
53
+ registered_model: # MLflow registered model configuration
54
+ schema: *default_schema # Schema where model will be registered
55
+ name: slack_notification_agent # Model name in MLflow registry
56
+ endpoint_name: slack_notification_agent # Model serving endpoint name
57
+ tags: # Tags for resource organization
58
+ integration: slack # Integration type
59
+ notification: true # Indicates notification capabilities
60
+ permissions: # Model serving permissions
61
+ - principals: [users] # Grant access to all users
62
+ entitlements:
63
+ - CAN_QUERY # Query permissions
64
+ agents: # List of agents included in the system
65
+ - *slack_agent # Slack notification agent
66
+ orchestration: # Agent orchestration configuration
67
+ swarm: # Swarm orchestration pattern
68
+ model: *default_llm # LLM for routing decisions
69
+
@@ -194,29 +194,30 @@ resources:
194
194
  databases:
195
195
  # PostgreSQL database for agent memory and checkpoints
196
196
  retail_database: &retail_database
197
- name: "retail-consumer-goods"
197
+ name: "Retail and Consumer Goods Database"
198
+ instance_name: "retail-consumer-goods"
198
199
  description: "Database for agent memory and checkpoints"
199
200
 
200
201
  # Database connection parameters
201
202
  # These can be set via environment variables or Databricks secrets
202
- host:
203
- default_value: localhost
204
- options:
205
- - env: PGHOST # Environment variable
206
- - scope: retail_ai # Databricks secret scope
207
- secret: PGHOST # Secret name
208
- port:
209
- default_value: 5432
210
- options:
211
- - env: PGPORT
212
- - scope: retail_ai
213
- secret: PGPORT
214
- database:
215
- default_value: databricks_postgres # Default database name
216
- options:
217
- - env: PGDATABASE
218
- - scope: retail_ai
219
- secret: PGDATABASE
203
+ # host:
204
+ # default_value: localhost
205
+ # options:
206
+ # - env: PGHOST # Environment variable
207
+ # - scope: retail_ai # Databricks secret scope
208
+ # secret: PGHOST # Secret name
209
+ # port:
210
+ # default_value: 5432
211
+ # options:
212
+ # - env: PGPORT
213
+ # - scope: retail_ai
214
+ # secret: PGPORT
215
+ # database:
216
+ # default_value: databricks_postgres # Default database name
217
+ # options:
218
+ # - env: PGDATABASE
219
+ # - scope: retail_ai
220
+ # secret: PGDATABASE
220
221
 
221
222
 
222
223
  # Traditional PostgreSQL authentication (commented out)
@@ -959,7 +960,7 @@ app:
959
960
  content: Can you recommend a lamp to match my oak side tables?
960
961
  custom_inputs:
961
962
  configurable:
962
- thread_id: "1"
963
+ #thread_id: "1"
963
964
  user_id: my_user_id
964
965
  store_num: 87887
965
966
  #chat_history:
@@ -50,17 +50,24 @@ resources:
50
50
  base_parameters:
51
51
  config-path: ${var.config_path}
52
52
  environment_key: dao-ai-env
53
+ - task_key: provision-lakebase
54
+ notebook_task:
55
+ notebook_path: ./notebooks/03_provision_lakebase.py
56
+ base_parameters:
57
+ config-path: ${var.config_path}
58
+ environment_key: dao-ai-env
53
59
  - task_key: generate-evaluation-data
54
60
  depends_on:
55
61
  - task_key: provision-vector-search
56
62
  notebook_task:
57
- notebook_path: ./notebooks/03_generate_evaluation_data.py
63
+ notebook_path: ./notebooks/06_generate_evaluation_data.py
58
64
  base_parameters:
59
65
  config-path: ${var.config_path}
60
66
  environment_key: dao-ai-env
61
67
  - task_key: unity-catalog-tools
62
68
  depends_on:
63
69
  - task_key: provision-vector-search
70
+ - task_key: provision-lakebase
64
71
  notebook_task:
65
72
  notebook_path: ./notebooks/04_unity_catalog_tools.py
66
73
  base_parameters:
@@ -70,7 +77,7 @@ resources:
70
77
  depends_on:
71
78
  - task_key: unity-catalog-tools
72
79
  notebook_task:
73
- notebook_path: ./notebooks/05_agent_as_code_driver.py
80
+ notebook_path: ./notebooks/05_deploy_agent.py
74
81
  base_parameters:
75
82
  config-path: ${var.config_path}
76
83
  environment_key: dao-ai-env
@@ -79,7 +86,7 @@ resources:
79
86
  - task_key: deploy-agents
80
87
  - task_key: generate-evaluation-data
81
88
  notebook_task:
82
- notebook_path: ./notebooks/06_run_evaluation.py
89
+ notebook_path: ./notebooks/07_run_evaluation.py
83
90
  base_parameters:
84
91
  config-path: ${var.config_path}
85
92
  environment_key: dao-ai-env
@@ -1,11 +1,42 @@
1
1
  # Databricks notebook source
2
2
  # MAGIC %pip install --quiet --upgrade -r ../requirements.txt
3
+ # MAGIC %pip uninstall --quiet -y databricks-connect pyspark pyspark-connect
4
+ # MAGIC %pip install --quiet databricks-connect
3
5
  # MAGIC %restart_python
4
6
 
5
7
  # COMMAND ----------
6
8
 
7
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
8
- config_path: str = dbutils.widgets.get("config-path")
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
9
40
  print(config_path)
10
41
 
11
42
  # COMMAND ----------
@@ -6,10 +6,38 @@
6
6
 
7
7
  # COMMAND ----------
8
8
 
9
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
10
- config_path: str = dbutils.widgets.get("config-path")
11
- print(config_path)
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
12
31
 
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
40
+ print(config_path)
13
41
  # COMMAND ----------
14
42
 
15
43
  import sys
@@ -0,0 +1,85 @@
1
+ # Databricks notebook source
2
+ # MAGIC %pip install --quiet --upgrade -r ../requirements.txt
3
+ # MAGIC %pip uninstall --quiet -y databricks-connect pyspark pyspark-connect
4
+ # MAGIC %pip install --quiet databricks-connect
5
+ # MAGIC %restart_python
6
+
7
+ # COMMAND ----------
8
+
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
40
+ print(config_path)
41
+
42
+ # COMMAND ----------
43
+
44
+ import sys
45
+ from typing import Sequence
46
+ from importlib.metadata import version
47
+
48
+ sys.path.insert(0, "../src")
49
+
50
+ pip_requirements: Sequence[str] = (
51
+ f"databricks-sdk=={version('databricks-sdk')}",
52
+ f"mlflow=={version('mlflow')}",
53
+ )
54
+ print("\n".join(pip_requirements))
55
+
56
+ # COMMAND ----------
57
+
58
+ # MAGIC %load_ext autoreload
59
+ # MAGIC %autoreload 2
60
+
61
+ # COMMAND ----------
62
+
63
+ from dotenv import find_dotenv, load_dotenv
64
+
65
+ _ = load_dotenv(find_dotenv())
66
+
67
+ # COMMAND ----------
68
+
69
+ from dao_ai.config import AppConfig
70
+
71
+ config: AppConfig = AppConfig.from_file(path=config_path)
72
+
73
+ # COMMAND ----------
74
+
75
+ from dao_ai.config import DatabaseModel
76
+
77
+ databases: dict[str, DatabaseModel] = config.resources.databases
78
+
79
+ for _, database in databases.items():
80
+ database: DatabaseModel
81
+
82
+ print(f"database: {database}")
83
+ database.create()
84
+
85
+
@@ -6,8 +6,37 @@
6
6
 
7
7
  # COMMAND ----------
8
8
 
9
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
10
- config_path: str = dbutils.widgets.get("config-path")
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
11
40
  print(config_path)
12
41
 
13
42
  # COMMAND ----------
@@ -6,8 +6,37 @@
6
6
 
7
7
  # COMMAND ----------
8
8
 
9
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
10
- config_path: str = dbutils.widgets.get("config-path")
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
11
40
  print(config_path)
12
41
 
13
42
  # COMMAND ----------