dao-ai 0.0.34__tar.gz → 0.0.36__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 (373) hide show
  1. dao_ai-0.0.36/PKG-INFO +951 -0
  2. dao_ai-0.0.36/README.md +874 -0
  3. dao_ai-0.0.36/config/examples/genie_with_lru_cache.yaml +137 -0
  4. dao_ai-0.0.36/config/examples/genie_with_semantic_cache.yaml +172 -0
  5. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/hardware_store/supervisor_postgres.yaml +18 -18
  6. dao_ai-0.0.36/config/hardware_store/supervisor_postgres_dao_ai_native.yaml +1065 -0
  7. {dao_ai-0.0.34 → dao_ai-0.0.36}/pyproject.toml +1 -1
  8. {dao_ai-0.0.34 → dao_ai-0.0.36}/schemas/model_config_schema.json +16 -2
  9. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/config.py +38 -4
  10. dao_ai-0.0.36/src/dao_ai/genie/__init__.py +59 -0
  11. dao_ai-0.0.36/src/dao_ai/genie/cache/__init__.py +44 -0
  12. dao_ai-0.0.36/src/dao_ai/genie/cache/base.py +122 -0
  13. dao_ai-0.0.36/src/dao_ai/genie/cache/lru.py +306 -0
  14. dao_ai-0.0.36/src/dao_ai/genie/cache/semantic.py +638 -0
  15. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/providers/databricks.py +14 -7
  16. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/__init__.py +3 -0
  17. dao_ai-0.0.36/src/dao_ai/tools/genie/__init__.py +236 -0
  18. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/genie.py +65 -15
  19. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/unity_catalog.py +5 -2
  20. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/vector_search.py +4 -2
  21. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/utils.py +27 -3
  22. dao_ai-0.0.36/tests/dao_ai/test_genie.py +2870 -0
  23. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_genie_databricks_integration.py +1 -3
  24. dao_ai-0.0.34/PKG-INFO +0 -1169
  25. dao_ai-0.0.34/README.md +0 -1092
  26. dao_ai-0.0.34/tests/dao_ai/test_genie.py +0 -982
  27. {dao_ai-0.0.34 → dao_ai-0.0.36}/.gitignore +0 -0
  28. {dao_ai-0.0.34 → dao_ai-0.0.36}/.python-version +0 -0
  29. {dao_ai-0.0.34 → dao_ai-0.0.36}/CHANGELOG.md +0 -0
  30. {dao_ai-0.0.34 → dao_ai-0.0.36}/CONTRIBUTING.md +0 -0
  31. {dao_ai-0.0.34 → dao_ai-0.0.36}/LICENSE +0 -0
  32. {dao_ai-0.0.34 → dao_ai-0.0.36}/Makefile +0 -0
  33. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/Makefile +0 -0
  34. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
  35. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
  36. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  37. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  38. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  39. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  40. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/development_workflows.md +0 -0
  41. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/.gitkeep +0 -0
  42. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/Makefile +0 -0
  43. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
  44. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
  45. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
  46. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
  47. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
  48. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
  49. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
  50. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
  51. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
  52. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
  53. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
  54. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
  55. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
  56. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
  57. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/architecture.png +0 -0
  58. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
  59. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
  60. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
  61. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
  62. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
  63. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
  64. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
  65. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
  66. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/index.md +0 -0
  67. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
  68. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
  69. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
  70. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
  71. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
  72. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
  73. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
  74. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
  75. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/load-env.sh +0 -0
  76. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
  77. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
  78. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
  79. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
  80. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
  81. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
  82. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
  83. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
  84. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
  85. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
  86. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
  87. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
  88. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
  89. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
  90. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
  91. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
  92. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
  93. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
  94. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
  95. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
  96. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
  97. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
  98. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
  99. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
  100. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
  101. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
  102. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
  103. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
  104. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
  105. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
  106. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
  107. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
  108. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
  109. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
  110. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
  111. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
  112. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
  113. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
  114. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
  115. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
  116. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
  117. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
  118. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
  119. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
  120. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
  121. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
  122. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
  123. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
  124. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
  125. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  126. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
  127. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  128. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  129. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  130. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
  131. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
  132. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
  133. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
  134. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
  135. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
  136. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
  137. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
  138. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
  139. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
  140. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
  141. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
  142. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
  143. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
  144. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
  145. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
  146. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
  147. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
  148. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
  149. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
  150. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
  151. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
  152. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
  153. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
  154. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
  155. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
  156. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
  157. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
  158. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
  159. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
  160. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
  161. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
  162. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
  163. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
  164. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
  165. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
  166. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
  167. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
  168. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
  169. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
  170. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
  171. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
  172. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
  173. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
  174. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
  175. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
  176. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
  177. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
  178. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
  179. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
  180. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
  181. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
  182. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
  183. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
  184. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
  185. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
  186. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
  187. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
  188. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/tests/.gitkeep +0 -0
  189. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/tests/README.md +0 -0
  190. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
  191. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
  192. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
  193. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
  194. {dao_ai-0.0.34 → dao_ai-0.0.36}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
  195. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/dais2025/model_config_dais.yaml +0 -0
  196. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/deep_research.yaml +0 -0
  197. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/executive_assistant.yaml +0 -0
  198. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/genie.yaml +0 -0
  199. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/genie_and_genie_mcp.yaml +0 -0
  200. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/genie_and_vector_search.yaml +0 -0
  201. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/genie_with_conversion_id.yaml +0 -0
  202. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/human_in_the_loop.yaml +0 -0
  203. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/jira.yaml +0 -0
  204. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/mcp.yaml +0 -0
  205. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/mcp_with_uc_connection.yaml +0 -0
  206. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/minimal.yaml +0 -0
  207. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/prompt_optimization.yaml +0 -0
  208. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/prompt_registry.yaml +0 -0
  209. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/reservations.yaml +0 -0
  210. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/slack.yaml +0 -0
  211. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/examples/vector_search_with_reranking.yaml +0 -0
  212. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/hardware_store/supervisor.yaml +0 -0
  213. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/hardware_store/swarm.yaml +0 -0
  214. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/quick_serve_restaurant/.gitkeep +0 -0
  215. {dao_ai-0.0.34 → dao_ai-0.0.36}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +0 -0
  216. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/appointments.sql +0 -0
  217. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/appointments_data.sql +0 -0
  218. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/brand_rep_demo_data.sql +0 -0
  219. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/brand_rep_demo_queries.sql +0 -0
  220. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/brand_rep_demo_tables.sql +0 -0
  221. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/brand_rep_demo_validation.sql +0 -0
  222. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/customers.sql +0 -0
  223. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/customers_data.sql +0 -0
  224. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/dim_stores.sql +0 -0
  225. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/dim_stores_data.sql +0 -0
  226. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/employee_performance.sql +0 -0
  227. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/employee_performance_data.sql +0 -0
  228. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/employee_tasks.sql +0 -0
  229. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/employee_tasks_data.sql +0 -0
  230. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/inventory.sql +0 -0
  231. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/inventory_data.sql +0 -0
  232. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/managers.sql +0 -0
  233. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/managers_data.sql +0 -0
  234. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/product_data.sql +0 -0
  235. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/products.sql +0 -0
  236. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/dais2025/task_assignments.sql +0 -0
  237. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/hardware_store/inventory.snappy.parquet +0 -0
  238. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/hardware_store/inventory.sql +0 -0
  239. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/hardware_store/products.snappy.parquet +0 -0
  240. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/hardware_store/products.sql +0 -0
  241. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/quick_serve_restaurant/.gitkeep +0 -0
  242. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
  243. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/quick_serve_restaurant/items_description.csv +0 -0
  244. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/quick_serve_restaurant/items_description.sql +0 -0
  245. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/quick_serve_restaurant/items_raw.csv +0 -0
  246. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/quick_serve_restaurant/items_raw.sql +0 -0
  247. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/quick_serve_restaurant/orders_raw.csv +0 -0
  248. {dao_ai-0.0.34 → dao_ai-0.0.36}/data/quick_serve_restaurant/orders_raw.sql +0 -0
  249. {dao_ai-0.0.34 → dao_ai-0.0.36}/databricks.yaml.template +0 -0
  250. {dao_ai-0.0.34 → dao_ai-0.0.36}/docs/genie.png +0 -0
  251. {dao_ai-0.0.34 → dao_ai-0.0.36}/docs/hardware_store/README.md +0 -0
  252. {dao_ai-0.0.34 → dao_ai-0.0.36}/docs/hardware_store/retail_supervisor.png +0 -0
  253. {dao_ai-0.0.34 → dao_ai-0.0.36}/docs/hardware_store/retail_swarm.png +0 -0
  254. {dao_ai-0.0.34 → dao_ai-0.0.36}/docs/quick_serve_restaurant/.gitkeep +0 -0
  255. {dao_ai-0.0.34 → dao_ai-0.0.36}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
  256. {dao_ai-0.0.34 → dao_ai-0.0.36}/environment.yaml +0 -0
  257. {dao_ai-0.0.34 → dao_ai-0.0.36}/examples/dais2025/examples.yaml +0 -0
  258. {dao_ai-0.0.34 → dao_ai-0.0.36}/examples/deep_research/examples.yaml +0 -0
  259. {dao_ai-0.0.34 → dao_ai-0.0.36}/examples/executive_assistant/examples.yaml +0 -0
  260. {dao_ai-0.0.34 → dao_ai-0.0.36}/examples/hardware_store/examples.yaml +0 -0
  261. {dao_ai-0.0.34 → dao_ai-0.0.36}/examples/quick_serve_restaurant/.gitkeep +0 -0
  262. {dao_ai-0.0.34 → dao_ai-0.0.36}/examples/quick_serve_restaurant/examples.yaml +0 -0
  263. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/dais2025/extract_store_numbers.sql +0 -0
  264. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/dais2025/find_inventory_by_sku.sql +0 -0
  265. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/dais2025/find_inventory_by_upc.sql +0 -0
  266. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/dais2025/find_product_by_sku.sql +0 -0
  267. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/dais2025/find_product_by_upc.sql +0 -0
  268. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/dais2025/find_store_by_number.sql +0 -0
  269. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
  270. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
  271. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
  272. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
  273. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/hardware_store/find_product_by_sku.sql +0 -0
  274. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/hardware_store/find_product_by_upc.sql +0 -0
  275. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
  276. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
  277. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/quick_serve_restaurant/.gitkeep +0 -0
  278. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
  279. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
  280. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
  281. {dao_ai-0.0.34 → dao_ai-0.0.36}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
  282. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/01_ingest_and_transform.py +0 -0
  283. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/02_provision_vector_search.py +0 -0
  284. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/03_provision_lakebase.py +0 -0
  285. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/04_unity_catalog_tools.py +0 -0
  286. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/05_deploy_agent.py +0 -0
  287. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/06_generate_evaluation_data.py +0 -0
  288. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/07_run_evaluation.py +0 -0
  289. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/08_run_examples.py +0 -0
  290. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/09_evaluate_inferences.py +0 -0
  291. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/10_optimize_prompts.py +0 -0
  292. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/99_scratchpad.py +0 -0
  293. {dao_ai-0.0.34 → dao_ai-0.0.36}/notebooks/INVESTech.py +0 -0
  294. {dao_ai-0.0.34 → dao_ai-0.0.36}/requirements.txt +0 -0
  295. {dao_ai-0.0.34 → dao_ai-0.0.36}/schemas/bundle_config_schema.json +0 -0
  296. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/__init__.py +0 -0
  297. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/models.py +0 -0
  298. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/tools/__init__.py +0 -0
  299. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/tools/customer.py +0 -0
  300. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/tools/employee.py +0 -0
  301. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/tools/executive.py +0 -0
  302. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/tools/genie.py +0 -0
  303. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/tools/inventory.py +0 -0
  304. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/tools/models.py +0 -0
  305. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dais2025/tools/store.py +0 -0
  306. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/__init__.py +0 -0
  307. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/agent_as_code.py +0 -0
  308. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/catalog.py +0 -0
  309. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/chat_models.py +0 -0
  310. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/cli.py +0 -0
  311. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/graph.py +0 -0
  312. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/guardrails.py +0 -0
  313. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/hooks/__init__.py +0 -0
  314. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/hooks/core.py +0 -0
  315. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/memory/__init__.py +0 -0
  316. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/memory/base.py +0 -0
  317. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/memory/core.py +0 -0
  318. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/memory/postgres.py +0 -0
  319. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/messages.py +0 -0
  320. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/models.py +0 -0
  321. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/nodes.py +0 -0
  322. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/prompts.py +0 -0
  323. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/providers/__init__.py +0 -0
  324. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/providers/base.py +0 -0
  325. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/state.py +0 -0
  326. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/agent.py +0 -0
  327. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/core.py +0 -0
  328. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/human_in_the_loop.py +0 -0
  329. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/mcp.py +0 -0
  330. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/python.py +0 -0
  331. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/slack.py +0 -0
  332. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/tools/time.py +0 -0
  333. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/types.py +0 -0
  334. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/dao_ai/vector_search.py +0 -0
  335. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/hardware_store/__init__.py +0 -0
  336. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/hardware_store/hooks.py +0 -0
  337. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/hardware_store/tools.py +0 -0
  338. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/quick_serve_restaurant/.gitkeep +0 -0
  339. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/quick_serve_restaurant/__init__.py +0 -0
  340. {dao_ai-0.0.34 → dao_ai-0.0.36}/src/quick_serve_restaurant/tools.py +0 -0
  341. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/config/test_model_config.yaml +0 -0
  342. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/conftest.py +0 -0
  343. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_catalog.py +0 -0
  344. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_chat_history.py +0 -0
  345. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_config.py +0 -0
  346. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_databricks.py +0 -0
  347. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_function_parsing.py +0 -0
  348. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
  349. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_hooks.py +0 -0
  350. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_inference.py +0 -0
  351. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_inference_integration.py +0 -0
  352. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_mcp.py +0 -0
  353. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_mcp_function_model.py +0 -0
  354. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_messages.py +0 -0
  355. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_models.py +0 -0
  356. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_postgres_integration.py +0 -0
  357. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_prompt_optimizations.py +0 -0
  358. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_prompts.py +0 -0
  359. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_reranking.py +0 -0
  360. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_reranking_integration.py +0 -0
  361. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_state.py +0 -0
  362. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_summarization_inference.py +0 -0
  363. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_tools.py +0 -0
  364. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_types.py +0 -0
  365. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_unity_catalog.py +0 -0
  366. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_utils.py +0 -0
  367. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/test_vector_search.py +0 -0
  368. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/dao_ai/weather_server_mcp.py +0 -0
  369. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/hardware_store/.gitkeep +0 -0
  370. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/hardware_store/test_graph.py +0 -0
  371. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/images/doritos_upc.png +0 -0
  372. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/images/lays_upc.png +0 -0
  373. {dao_ai-0.0.34 → dao_ai-0.0.36}/tests/quick_serve_restaurant/.gitkeep +0 -0
dao_ai-0.0.36/PKG-INFO ADDED
@@ -0,0 +1,951 @@
1
+ Metadata-Version: 2.4
2
+ Name: dao-ai
3
+ Version: 0.0.36
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
+ Project-URL: Homepage, https://github.com/natefleming/dao-ai
6
+ Project-URL: Documentation, https://natefleming.github.io/dao-ai
7
+ Project-URL: Repository, https://github.com/natefleming/dao-ai
8
+ Project-URL: Issues, https://github.com/natefleming/dao-ai/issues
9
+ Project-URL: Changelog, https://github.com/natefleming/dao-ai/blob/main/CHANGELOG.md
10
+ Author-email: Nate Fleming <nate.fleming@databricks.com>, Nate Fleming <nate.fleming@gmail.com>
11
+ Maintainer-email: Nate Fleming <nate.fleming@databricks.com>
12
+ License: MIT
13
+ License-File: LICENSE
14
+ Keywords: agents,ai,databricks,langchain,langgraph,llm,multi-agent,orchestration,vector-search,workflow
15
+ Classifier: Development Status :: 3 - Alpha
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Intended Audience :: Science/Research
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
+ Classifier: Topic :: System :: Distributed Computing
27
+ Requires-Python: >=3.11
28
+ Requires-Dist: databricks-agents>=1.8.2
29
+ Requires-Dist: databricks-langchain>=0.11.0
30
+ Requires-Dist: databricks-mcp>=0.3.0
31
+ Requires-Dist: databricks-sdk[openai]>=0.67.0
32
+ Requires-Dist: ddgs>=9.9.3
33
+ Requires-Dist: flashrank>=0.2.8
34
+ Requires-Dist: gepa>=0.0.17
35
+ Requires-Dist: grandalf>=0.8
36
+ Requires-Dist: langchain-mcp-adapters>=0.2.1
37
+ Requires-Dist: langchain-tavily>=0.2.11
38
+ Requires-Dist: langchain>=1.1.3
39
+ Requires-Dist: langgraph-checkpoint-postgres>=3.0.2
40
+ Requires-Dist: langgraph-supervisor>=0.0.31
41
+ Requires-Dist: langgraph-swarm>=0.1.0
42
+ Requires-Dist: langgraph>=1.0.4
43
+ Requires-Dist: langmem>=0.0.30
44
+ Requires-Dist: loguru>=0.7.3
45
+ Requires-Dist: mcp>=1.23.3
46
+ Requires-Dist: mlflow>=3.7.0
47
+ Requires-Dist: nest-asyncio>=1.6.0
48
+ Requires-Dist: openevals>=0.0.19
49
+ Requires-Dist: openpyxl>=3.1.5
50
+ Requires-Dist: psycopg[binary,pool]>=3.3.2
51
+ Requires-Dist: pydantic>=2.12.0
52
+ Requires-Dist: python-dotenv>=1.1.0
53
+ Requires-Dist: pyyaml>=6.0.2
54
+ Requires-Dist: rich>=14.0.0
55
+ Requires-Dist: scipy<=1.15
56
+ Requires-Dist: sqlparse>=0.5.3
57
+ Requires-Dist: tomli>=2.3.0
58
+ Requires-Dist: unitycatalog-ai[databricks]>=0.3.2
59
+ Provides-Extra: databricks
60
+ Requires-Dist: databricks-connect>=15.0.0; extra == 'databricks'
61
+ Requires-Dist: databricks-vectorsearch>=0.63; extra == 'databricks'
62
+ Requires-Dist: pyspark>=3.5.0; extra == 'databricks'
63
+ Provides-Extra: dev
64
+ Requires-Dist: mypy>=1.0.0; extra == 'dev'
65
+ Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
66
+ Requires-Dist: pytest>=8.3.5; extra == 'dev'
67
+ Requires-Dist: ruff>=0.11.11; extra == 'dev'
68
+ Provides-Extra: docs
69
+ Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
70
+ Requires-Dist: mkdocs>=1.5.0; extra == 'docs'
71
+ Requires-Dist: mkdocstrings[python]>=0.24.0; extra == 'docs'
72
+ Provides-Extra: test
73
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
74
+ Requires-Dist: pytest-mock>=3.10.0; extra == 'test'
75
+ Requires-Dist: pytest>=8.3.5; extra == 'test'
76
+ Description-Content-Type: text/markdown
77
+
78
+ # DAO: Declarative Agent Orchestration
79
+
80
+ **Production-grade AI agents defined in YAML, powered by LangGraph, deployed on Databricks.**
81
+
82
+ DAO is an **infrastructure-as-code framework** for building, deploying, and managing multi-agent AI systems. Instead of writing boilerplate Python code to wire up agents, tools, and orchestration, you define everything declaratively in YAML configuration files.
83
+
84
+ ```yaml
85
+ # Define an agent in 10 lines of YAML
86
+ agents:
87
+ product_expert:
88
+ name: product_expert
89
+ model: *claude_sonnet
90
+ tools:
91
+ - *vector_search_tool
92
+ - *genie_tool
93
+ prompt: |
94
+ You are a product expert. Answer questions about inventory and pricing.
95
+ ```
96
+
97
+ ---
98
+
99
+ ## Why DAO?
100
+
101
+ ### For Newcomers to AI Agents
102
+
103
+ **What is an AI Agent?**
104
+ An AI agent is more than a chatbot. While a chatbot just responds to messages, an *agent* can:
105
+ - **Reason** about what steps to take
106
+ - **Use tools** (databases, APIs, search) to gather information
107
+ - **Make decisions** about which actions to perform
108
+ - **Coordinate** with other agents on complex tasks
109
+
110
+ **What is Databricks?**
111
+ Databricks is a unified data and AI platform that provides:
112
+ - **Unity Catalog**: Governed data access and permissions
113
+ - **Model Serving**: Deploy ML models as APIs
114
+ - **Vector Search**: Semantic similarity search for RAG
115
+ - **Genie**: Natural language to SQL for business users
116
+ - **MLflow**: Model tracking, versioning, and deployment
117
+
118
+ DAO brings these capabilities together into a cohesive agent framework.
119
+
120
+ ---
121
+
122
+ ## DAO vs. Databricks Agent Bricks
123
+
124
+ Databricks offers two approaches to building AI agents. Understanding when to use each is crucial:
125
+
126
+ | Aspect | **DAO** (This Framework) | **Databricks Agent Bricks** |
127
+ |--------|--------------------------|----------------------------|
128
+ | **Configuration** | YAML files (infrastructure-as-code) | GUI-based AI Playground |
129
+ | **Target Users** | ML Engineers, Platform Teams | Citizen Developers, Analysts |
130
+ | **Customization** | Full control over every component | Guided templates and wizards |
131
+ | **Version Control** | Git-native, full CI/CD support | Limited versioning |
132
+ | **Orchestration** | Multiple patterns (Supervisor, Swarm) | Single-agent or simple routing |
133
+ | **Tool Types** | Python, Factory, UC, MCP, Custom | Unity Catalog functions |
134
+ | **Caching** | LRU + Semantic (pg_vector) | None built-in |
135
+ | **Memory** | PostgreSQL, In-Memory, Custom | Basic checkpointing |
136
+ | **Deployment** | Databricks Asset Bundles, MLflow | One-click deployment |
137
+ | **Best For** | Production multi-agent systems | Rapid prototyping, POCs |
138
+
139
+ ### When to Use DAO
140
+
141
+ ✅ You need **multiple specialized agents** working together
142
+ ✅ You want **version-controlled, reviewable** agent configurations
143
+ ✅ You require **custom tools** beyond Unity Catalog functions
144
+ ✅ You need **advanced caching** for cost optimization
145
+ ✅ You're building a **production system** with CI/CD
146
+ ✅ You need **human-in-the-loop** approval workflows
147
+
148
+ ### When to Use Agent Bricks
149
+
150
+ ✅ You're **prototyping** a new agent idea quickly
151
+ ✅ You prefer a **no-code/low-code** approach
152
+ ✅ Your use case fits **standard templates** (extraction, Q&A)
153
+ ✅ You want **automated optimization** without manual tuning
154
+ ✅ You have a **single agent** with simple tool needs
155
+
156
+ ---
157
+
158
+ ## Architecture
159
+
160
+ ### High-Level Overview
161
+
162
+ ```
163
+ ┌─────────────────────────────────────────────────────────────────────────────┐
164
+ │ YAML Configuration │
165
+ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │
166
+ │ │ Schemas │ │ Resources│ │ Tools │ │ Agents │ │ Orchestration │ │
167
+ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────────────┘ │
168
+ └─────────────────────────────────────────────────────────────────────────────┘
169
+
170
+
171
+ ┌─────────────────────────────────────────────────────────────────────────────┐
172
+ │ DAO Framework (Python) │
173
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
174
+ │ │ Config │ │ Graph │ │ Nodes │ │ Tool Factory │ │
175
+ │ │ Loader │ │ Builder │ │ Factory │ │ │ │
176
+ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────────┘ │
177
+ └─────────────────────────────────────────────────────────────────────────────┘
178
+
179
+
180
+ ┌─────────────────────────────────────────────────────────────────────────────┐
181
+ │ LangGraph Runtime │
182
+ │ ┌─────────────────────────────────────────────────────────────────────┐ │
183
+ │ │ Compiled State Graph │ │
184
+ │ │ ┌─────────┐ ┌─────────────┐ ┌─────────────────────────┐ │ │
185
+ │ │ │ Message │───▶│ Supervisor/ │───▶│ Specialized Agents │ │ │
186
+ │ │ │ Hook │ │ Swarm │ │ (Product, Orders, DIY) │ │ │
187
+ │ │ └─────────┘ └─────────────┘ └─────────────────────────┘ │ │
188
+ │ └─────────────────────────────────────────────────────────────────────┘ │
189
+ └─────────────────────────────────────────────────────────────────────────────┘
190
+
191
+
192
+ ┌─────────────────────────────────────────────────────────────────────────────┐
193
+ │ Databricks Platform │
194
+ │ ┌─────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────┐ ┌─────────┐ │
195
+ │ │ Model │ │ Unity │ │ Vector │ │ Genie │ │ MLflow │ │
196
+ │ │ Serving │ │ Catalog │ │ Search │ │ Spaces │ │ │ │
197
+ │ └─────────┘ └─────────────┘ └─────────────┘ └──────────┘ └─────────┘ │
198
+ └─────────────────────────────────────────────────────────────────────────────┘
199
+ ```
200
+
201
+ ### Orchestration Patterns
202
+
203
+ DAO supports two orchestration patterns for multi-agent coordination:
204
+
205
+ #### 1. Supervisor Pattern
206
+ A central supervisor agent routes queries to specialized agents based on the request content.
207
+
208
+ ```yaml
209
+ orchestration:
210
+ supervisor:
211
+ model: *router_llm
212
+ prompt: |
213
+ Route queries to the appropriate specialist agent.
214
+ ```
215
+
216
+ ```
217
+ ┌─────────────┐
218
+ │ Supervisor │
219
+ └──────┬──────┘
220
+ ┌───────────────┼───────────────┐
221
+ ▼ ▼ ▼
222
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
223
+ │ Product │ │ Orders │ │ DIY │
224
+ │ Agent │ │ Agent │ │ Agent │
225
+ └─────────────┘ └─────────────┘ └─────────────┘
226
+ ```
227
+
228
+ #### 2. Swarm Pattern
229
+ Agents can hand off to each other directly, enabling more fluid multi-step workflows.
230
+
231
+ ```yaml
232
+ orchestration:
233
+ swarm:
234
+ model: *default_llm
235
+ default_agent: *general_agent
236
+ handoffs:
237
+ product_agent: [orders_agent, diy_agent]
238
+ orders_agent: [product_agent]
239
+ ```
240
+
241
+ ```
242
+ ┌─────────────┐ handoff ┌─────────────┐
243
+ │ Product │◄───────────────▶│ Orders │
244
+ │ Agent │ │ Agent │
245
+ └──────┬──────┘ └──────┬──────┘
246
+ │ handoff │
247
+ └──────────────┬────────────────┘
248
+
249
+ ┌─────────────┐
250
+ │ DIY │
251
+ │ Agent │
252
+ └─────────────┘
253
+ ```
254
+
255
+ ---
256
+
257
+ ## Key Capabilities
258
+
259
+ ### 1. Multi-Tool Support
260
+
261
+ DAO supports five types of tools, each suited for different use cases:
262
+
263
+ | Tool Type | Use Case | Example |
264
+ |-----------|----------|---------|
265
+ | **Python** | Custom business logic | `dao_ai.tools.current_time_tool` |
266
+ | **Factory** | Complex initialization with config | `create_vector_search_tool(retriever=...)` |
267
+ | **Unity Catalog** | Governed SQL functions | `catalog.schema.find_product_by_sku` |
268
+ | **MCP** | External services via Model Context Protocol | GitHub, Slack, custom APIs |
269
+ | **Agent Endpoint** | Call other deployed agents as tools | Chaining agent systems |
270
+
271
+ ```yaml
272
+ tools:
273
+ # Python function - direct import
274
+ time_tool:
275
+ function:
276
+ type: python
277
+ name: dao_ai.tools.current_time_tool
278
+
279
+ # Factory - initialized with config
280
+ search_tool:
281
+ function:
282
+ type: factory
283
+ name: dao_ai.tools.create_vector_search_tool
284
+ args:
285
+ retriever: *products_retriever
286
+
287
+ # Unity Catalog - governed SQL function
288
+ sku_lookup:
289
+ function:
290
+ type: unity_catalog
291
+ name: find_product_by_sku
292
+ schema: *retail_schema
293
+
294
+ # MCP - external service integration
295
+ github_mcp:
296
+ function:
297
+ type: mcp
298
+ transport: streamable_http
299
+ connection: *github_connection
300
+ ```
301
+
302
+ ### 2. Advanced Caching (Genie Queries)
303
+
304
+ DAO provides **two-tier caching** for Genie natural language queries, dramatically reducing costs and latency. Unlike simple response caching, DAO caches the **generated SQL** and re-executes it against your warehouse—ensuring you always get **fresh data** while avoiding the cost of repeated Genie API calls.
305
+
306
+ ```yaml
307
+ genie_tool:
308
+ function:
309
+ type: factory
310
+ name: dao_ai.tools.create_genie_tool
311
+ args:
312
+ genie_room: *retail_genie_room
313
+
314
+ # L1: Fast O(1) exact match lookup
315
+ lru_cache_parameters:
316
+ warehouse: *warehouse
317
+ capacity: 100 # Max cached queries
318
+ time_to_live_seconds: 86400 # 1 day (use -1 for never expire)
319
+
320
+ # L2: Semantic similarity search via pg_vector
321
+ semantic_cache_parameters:
322
+ database: *postgres_db
323
+ warehouse: *warehouse
324
+ embedding_model: *embedding_model
325
+ similarity_threshold: 0.85 # 0.0-1.0, higher = stricter matching
326
+ time_to_live_seconds: 86400 # 1 day (use -1 for never expire)
327
+ ```
328
+
329
+ #### Cache Architecture
330
+
331
+ ```
332
+ ┌─────────────────────────────────────────────────────────────────────────────┐
333
+ │ Two-Tier Cache Flow │
334
+ ├─────────────────────────────────────────────────────────────────────────────┤
335
+ │ │
336
+ │ Question: "What products are low on stock?" │
337
+ │ │ │
338
+ │ ▼ │
339
+ │ ┌──────────────────────────────────────┐ │
340
+ │ │ L1: LRU Cache (In-Memory) │ ◄── O(1) exact string match │
341
+ │ │ • Capacity: 100 entries │ Fastest lookup │
342
+ │ │ • Hash-based lookup │ │
343
+ │ └──────────────────────────────────────┘ │
344
+ │ │ Miss │
345
+ │ ▼ │
346
+ │ ┌──────────────────────────────────────┐ │
347
+ │ │ L2: Semantic Cache (PostgreSQL) │ ◄── Vector similarity search │
348
+ │ │ • pg_vector embeddings │ Catches rephrased questions │
349
+ │ │ • L2 distance similarity │ │
350
+ │ │ • Partitioned by Genie space ID │ │
351
+ │ └──────────────────────────────────────┘ │
352
+ │ │ Miss │
353
+ │ ▼ │
354
+ │ ┌──────────────────────────────────────┐ │
355
+ │ │ Genie API │ ◄── Natural language to SQL │
356
+ │ │ (Expensive call) │ │
357
+ │ └──────────────────────────────────────┘ │
358
+ │ │ │
359
+ │ ▼ │
360
+ │ ┌──────────────────────────────────────┐ │
361
+ │ │ Execute SQL via Warehouse │ ◄── Always fresh data! │
362
+ │ └──────────────────────────────────────┘ │
363
+ │ │
364
+ └─────────────────────────────────────────────────────────────────────────────┘
365
+ ```
366
+
367
+ #### LRU Cache (L1)
368
+
369
+ The **LRU (Least Recently Used) Cache** provides instant lookups for exact question matches:
370
+
371
+ | Parameter | Default | Description |
372
+ |-----------|---------|-------------|
373
+ | `capacity` | 100 | Maximum number of cached queries |
374
+ | `time_to_live_seconds` | 86400 | Cache entry lifetime (-1 = never expire) |
375
+ | `warehouse` | Required | Databricks warehouse for SQL execution |
376
+
377
+ **Best for:** Repeated exact queries, chatbot interactions, dashboard refreshes
378
+
379
+ #### Semantic Cache (L2)
380
+
381
+ The **Semantic Cache** uses PostgreSQL with pg_vector to find similar questions even when worded differently:
382
+
383
+ | Parameter | Default | Description |
384
+ |-----------|---------|-------------|
385
+ | `similarity_threshold` | 0.85 | Minimum similarity for cache hit (0.0-1.0) |
386
+ | `time_to_live_seconds` | 86400 | Cache entry lifetime (-1 = never expire) |
387
+ | `embedding_model` | Required | Model for generating question embeddings |
388
+ | `database` | Required | PostgreSQL with pg_vector extension |
389
+ | `table_name` | `genie_semantic_cache` | Table name for cache storage |
390
+
391
+ **Best for:** Catching rephrased questions like:
392
+ - "What's our inventory status?" ≈ "Show me stock levels"
393
+ - "Top selling products this month" ≈ "Best sellers in December"
394
+
395
+ #### Cache Behavior
396
+
397
+ 1. **SQL Caching, Not Results**: The cache stores the *generated SQL query*, not the query results. On a cache hit, the SQL is re-executed against your warehouse, ensuring **data freshness**.
398
+
399
+ 2. **Refresh on Hit**: When a semantic cache entry is found but expired:
400
+ - The expired entry is deleted
401
+ - A cache miss is returned
402
+ - Genie generates fresh SQL
403
+ - The new SQL is cached
404
+
405
+ 3. **Multi-Instance Aware**: Each LRU cache is per-instance (in Model Serving, each replica has its own). The semantic cache is shared across all instances via PostgreSQL.
406
+
407
+ 4. **Space ID Partitioning**: Cache entries are isolated per Genie space, preventing cross-space cache pollution.
408
+
409
+ ### 3. Vector Search Reranking
410
+
411
+ DAO supports **two-stage retrieval** with FlashRank reranking to improve search relevance without external API calls:
412
+
413
+ ```yaml
414
+ retrievers:
415
+ products_retriever: &products_retriever
416
+ vector_store: *products_vector_store
417
+ columns: [product_id, name, description, price]
418
+ search_parameters:
419
+ num_results: 50 # Retrieve more candidates
420
+ query_type: ANN
421
+ rerank:
422
+ model: ms-marco-MiniLM-L-12-v2 # Local cross-encoder model
423
+ top_n: 5 # Return top 5 after reranking
424
+ ```
425
+
426
+ #### How It Works
427
+
428
+ ```
429
+ ┌─────────────────────────────────────────────────────────────────────────────┐
430
+ │ Two-Stage Retrieval Flow │
431
+ ├─────────────────────────────────────────────────────────────────────────────┤
432
+ │ │
433
+ │ Query: "heavy duty outdoor extension cord" │
434
+ │ │ │
435
+ │ ▼ │
436
+ │ ┌──────────────────────────────────────┐ │
437
+ │ │ Stage 1: Vector Similarity Search │ ◄── Fast, approximate matching │
438
+ │ │ • Returns 50 candidates │ Uses embedding similarity │
439
+ │ │ • Milliseconds latency │ │
440
+ │ └──────────────────────────────────────┘ │
441
+ │ │ │
442
+ │ ▼ 50 documents │
443
+ │ ┌──────────────────────────────────────┐ │
444
+ │ │ Stage 2: Cross-Encoder Rerank │ ◄── Precise relevance scoring │
445
+ │ │ • FlashRank (local, no API) │ Query-document interaction │
446
+ │ │ • Returns top 5 most relevant │ │
447
+ │ └──────────────────────────────────────┘ │
448
+ │ │ │
449
+ │ ▼ 5 documents (reordered by relevance) │
450
+ │ │
451
+ └─────────────────────────────────────────────────────────────────────────────┘
452
+ ```
453
+
454
+ #### Why Reranking?
455
+
456
+ | Approach | Pros | Cons |
457
+ |----------|------|------|
458
+ | **Vector Search Only** | Fast, scalable | Embedding similarity ≠ relevance |
459
+ | **Reranking** | More accurate relevance | Slightly higher latency |
460
+ | **Both (Two-Stage)** | Best of both worlds | Optimal quality/speed tradeoff |
461
+
462
+ Vector embeddings capture semantic similarity but may rank loosely related documents highly. Cross-encoder reranking evaluates query-document pairs directly, dramatically improving result quality for the final user.
463
+
464
+ #### Available Models
465
+
466
+ | Model | Speed | Quality | Use Case |
467
+ |-------|-------|---------|----------|
468
+ | `ms-marco-TinyBERT-L-2-v2` | ⚡⚡⚡ Fastest | Good | High-throughput, latency-sensitive |
469
+ | `ms-marco-MiniLM-L-6-v2` | ⚡⚡ Fast | Better | Balanced performance |
470
+ | `ms-marco-MiniLM-L-12-v2` | ⚡ Moderate | Best | Default, recommended |
471
+ | `rank-T5-flan` | Slower | Excellent | Maximum accuracy |
472
+
473
+ #### Configuration Options
474
+
475
+ ```yaml
476
+ rerank:
477
+ model: ms-marco-MiniLM-L-12-v2 # FlashRank model name
478
+ top_n: 10 # Documents to return (default: all)
479
+ cache_dir: /tmp/flashrank_cache # Model weights cache location
480
+ columns: [description, name] # Columns for Databricks Reranker (optional)
481
+ ```
482
+
483
+ **Note:** Model weights are downloaded automatically on first use (~20MB for MiniLM-L-12-v2).
484
+
485
+ ### 4. Human-in-the-Loop Approvals
486
+
487
+ Add approval gates to sensitive tool calls without changing tool code:
488
+
489
+ ```yaml
490
+ tools:
491
+ dangerous_operation:
492
+ function:
493
+ type: python
494
+ name: my_package.dangerous_function
495
+ human_in_the_loop:
496
+ review_prompt: "This operation will modify production data. Approve?"
497
+ ```
498
+
499
+ ### 5. Memory & State Persistence
500
+
501
+ Configure conversation memory with in-memory or PostgreSQL backends:
502
+
503
+ ```yaml
504
+ memory:
505
+ checkpointer:
506
+ name: conversation_checkpointer
507
+ type: postgres
508
+ database: *postgres_db
509
+
510
+ store:
511
+ name: user_preferences_store
512
+ type: postgres
513
+ database: *postgres_db
514
+ embedding_model: *embedding_model
515
+ ```
516
+
517
+ ### 6. Hook System
518
+
519
+ Inject custom logic at key points in the agent lifecycle:
520
+
521
+ ```yaml
522
+ app:
523
+ # Run on startup
524
+ initialization_hooks:
525
+ - my_package.hooks.setup_connections
526
+ - my_package.hooks.warmup_caches
527
+
528
+ # Run on every message
529
+ message_hooks:
530
+ - dao_ai.hooks.require_user_id_hook
531
+ - my_package.hooks.log_request
532
+
533
+ # Run on shutdown
534
+ shutdown_hooks:
535
+ - my_package.hooks.cleanup_resources
536
+
537
+ agents:
538
+ my_agent:
539
+ # Run before/after agent execution
540
+ pre_agent_hook: my_package.hooks.enrich_context
541
+ post_agent_hook: my_package.hooks.collect_metrics
542
+ ```
543
+
544
+ ### 7. MLflow Prompt Registry Integration
545
+
546
+ Store and version prompts externally, enabling prompt engineers to iterate without code changes:
547
+
548
+ ```yaml
549
+ prompts:
550
+ product_expert_prompt:
551
+ schema: *retail_schema
552
+ name: product_expert_prompt
553
+ alias: production # or version: 3
554
+ default_template: |
555
+ You are a product expert...
556
+ tags:
557
+ team: retail
558
+ environment: production
559
+
560
+ agents:
561
+ product_expert:
562
+ prompt: *product_expert_prompt # Loaded from MLflow registry
563
+ ```
564
+
565
+ ### 8. Automated Prompt Optimization
566
+
567
+ Use DSPy-style optimization to automatically improve prompts:
568
+
569
+ ```yaml
570
+ optimizations:
571
+ prompt_optimizations:
572
+ optimize_diy_prompt:
573
+ prompt: *diy_prompt
574
+ agent: *diy_agent
575
+ dataset: *training_dataset
576
+ reflection_model: "openai:/gpt-4"
577
+ num_candidates: 5
578
+ ```
579
+
580
+ ---
581
+
582
+ ## Quick Start
583
+
584
+ ### Prerequisites
585
+
586
+ - Python 3.12+
587
+ - Databricks workspace with:
588
+ - Unity Catalog access
589
+ - Model Serving enabled
590
+ - (Optional) Vector Search, Genie
591
+
592
+ ### Installation
593
+
594
+ ```bash
595
+ # Clone and setup
596
+ git clone <repo-url>
597
+ cd dao-ai
598
+
599
+ # Create virtual environment
600
+ uv venv
601
+ source .venv/bin/activate
602
+
603
+ # Install
604
+ make install
605
+ ```
606
+
607
+ ### Your First Agent
608
+
609
+ 1. **Create a minimal configuration** (`config/my_agent.yaml`):
610
+
611
+ ```yaml
612
+ schemas:
613
+ my_schema: &my_schema
614
+ catalog_name: my_catalog
615
+ schema_name: my_schema
616
+
617
+ resources:
618
+ llms:
619
+ default_llm: &default_llm
620
+ name: databricks-meta-llama-3-3-70b-instruct
621
+
622
+ agents:
623
+ assistant: &assistant
624
+ name: assistant
625
+ model: *default_llm
626
+ prompt: |
627
+ You are a helpful assistant.
628
+
629
+ app:
630
+ name: my_first_agent
631
+ registered_model:
632
+ schema: *my_schema
633
+ name: my_first_agent
634
+ agents:
635
+ - *assistant
636
+ orchestration:
637
+ swarm:
638
+ model: *default_llm
639
+ ```
640
+
641
+ 2. **Validate your configuration**:
642
+
643
+ ```bash
644
+ dao-ai validate -c config/my_agent.yaml
645
+ ```
646
+
647
+ 3. **Visualize the agent graph**:
648
+
649
+ ```bash
650
+ dao-ai graph -c config/my_agent.yaml -o my_agent.png
651
+ ```
652
+
653
+ 4. **Deploy to Databricks**:
654
+
655
+ ```python
656
+ from dao_ai.config import AppConfig
657
+
658
+ config = AppConfig.from_file("config/my_agent.yaml")
659
+ config.create_agent() # Package as MLflow model
660
+ config.deploy_agent() # Deploy to serving endpoint
661
+ ```
662
+
663
+ Or via CLI:
664
+ ```bash
665
+ dao-ai bundle --deploy --run -c config/my_agent.yaml
666
+ ```
667
+
668
+ ### Interact with Your Agent
669
+
670
+ ```python
671
+ from mlflow.deployments import get_deploy_client
672
+
673
+ client = get_deploy_client("databricks")
674
+ response = client.predict(
675
+ endpoint="my_first_agent",
676
+ inputs={
677
+ "messages": [{"role": "user", "content": "Hello!"}],
678
+ "configurable": {"thread_id": "1", "user_id": "demo_user"}
679
+ }
680
+ )
681
+ print(response["message"]["content"])
682
+ ```
683
+
684
+ ---
685
+
686
+ ## Configuration Reference
687
+
688
+ ### Full Configuration Structure
689
+
690
+ ```yaml
691
+ # Schema definitions for Unity Catalog
692
+ schemas:
693
+ my_schema: &my_schema
694
+ catalog_name: string
695
+ schema_name: string
696
+
697
+ # Reusable variables (secrets, env vars)
698
+ variables:
699
+ api_key: &api_key
700
+ options:
701
+ - env: MY_API_KEY
702
+ - scope: my_scope
703
+ secret: api_key
704
+
705
+ # Infrastructure resources
706
+ resources:
707
+ llms:
708
+ model_name: &model_name
709
+ name: string # Databricks endpoint name
710
+ temperature: float # 0.0 - 2.0
711
+ max_tokens: int
712
+ fallbacks: [string] # Fallback model names
713
+ on_behalf_of_user: bool # Use caller's permissions
714
+
715
+ vector_stores:
716
+ store_name: &store_name
717
+ endpoint:
718
+ name: string
719
+ type: STANDARD | OPTIMIZED_STORAGE
720
+ index:
721
+ schema: *my_schema
722
+ name: string
723
+ source_table:
724
+ schema: *my_schema
725
+ name: string
726
+ embedding_model: *embedding_model
727
+ embedding_source_column: string
728
+ columns: [string]
729
+
730
+ databases:
731
+ postgres_db: &postgres_db
732
+ instance_name: string
733
+ client_id: *api_key # OAuth credentials
734
+ client_secret: *secret
735
+ workspace_host: string
736
+
737
+ warehouses:
738
+ warehouse: &warehouse
739
+ warehouse_id: string
740
+ on_behalf_of_user: bool
741
+
742
+ genie_rooms:
743
+ genie: &genie
744
+ space_id: string
745
+
746
+ # Retriever configurations
747
+ retrievers:
748
+ retriever_name: &retriever_name
749
+ vector_store: *store_name
750
+ columns: [string]
751
+ search_parameters:
752
+ num_results: int
753
+ query_type: ANN | HYBRID
754
+
755
+ # Tool definitions
756
+ tools:
757
+ tool_name: &tool_name
758
+ name: string
759
+ function:
760
+ type: python | factory | unity_catalog | mcp
761
+ name: string # Import path or UC function name
762
+ args: {} # For factory tools
763
+ schema: *my_schema # For UC tools
764
+ human_in_the_loop: # Optional approval gate
765
+ review_prompt: string
766
+
767
+ # Agent definitions
768
+ agents:
769
+ agent_name: &agent_name
770
+ name: string
771
+ description: string
772
+ model: *model_name
773
+ tools: [*tool_name]
774
+ prompt: string | *prompt_ref
775
+ handoff_prompt: string # For swarm routing
776
+ pre_agent_hook: string # Python function path
777
+ post_agent_hook: string
778
+
779
+ # Prompt definitions (MLflow registry)
780
+ prompts:
781
+ prompt_name: &prompt_name
782
+ schema: *my_schema
783
+ name: string
784
+ alias: string | null # e.g., "production"
785
+ version: int | null
786
+ default_template: string
787
+ tags: {}
788
+
789
+ # Memory configuration
790
+ memory: &memory
791
+ checkpointer:
792
+ name: string
793
+ type: memory | postgres
794
+ database: *postgres_db
795
+ store:
796
+ name: string
797
+ type: memory | postgres
798
+ database: *postgres_db
799
+ embedding_model: *embedding_model
800
+
801
+ # Application configuration
802
+ app:
803
+ name: string
804
+ description: string
805
+ log_level: DEBUG | INFO | WARNING | ERROR
806
+
807
+ registered_model:
808
+ schema: *my_schema
809
+ name: string
810
+
811
+ endpoint_name: string
812
+
813
+ agents: [*agent_name]
814
+
815
+ orchestration:
816
+ supervisor: # OR swarm, not both
817
+ model: *model_name
818
+ prompt: string
819
+ swarm:
820
+ model: *model_name
821
+ default_agent: *agent_name
822
+ handoffs:
823
+ agent_a: [agent_b, agent_c]
824
+ memory: *memory
825
+
826
+ initialization_hooks: [string]
827
+ message_hooks: [string]
828
+ shutdown_hooks: [string]
829
+
830
+ permissions:
831
+ - principals: [users]
832
+ entitlements: [CAN_QUERY]
833
+
834
+ environment_vars:
835
+ KEY: "{{secrets/scope/secret}}"
836
+ ```
837
+
838
+ ---
839
+
840
+ ## Example Configurations
841
+
842
+ The `config/examples/` directory contains ready-to-use configurations:
843
+
844
+ | Example | Description |
845
+ |---------|-------------|
846
+ | `minimal.yaml` | Simplest possible agent configuration |
847
+ | `genie.yaml` | Natural language to SQL with Genie |
848
+ | `genie_with_lru_cache.yaml` | Genie with LRU caching |
849
+ | `genie_with_semantic_cache.yaml` | Genie with two-tier caching |
850
+ | `human_in_the_loop.yaml` | Tool approval workflows |
851
+ | `mcp.yaml` | External service integration via MCP |
852
+ | `prompt_optimization.yaml` | Automated prompt tuning |
853
+ | `vector_search_with_reranking.yaml` | RAG with reranking |
854
+ | `deep_research.yaml` | Multi-step research agent |
855
+ | `slack.yaml` | Slack integration |
856
+
857
+ ---
858
+
859
+ ## CLI Reference
860
+
861
+ ```bash
862
+ # Validate configuration
863
+ dao-ai validate -c config/my_config.yaml
864
+
865
+ # Generate JSON schema for IDE support
866
+ dao-ai schema > schemas/model_config_schema.json
867
+
868
+ # Visualize agent workflow
869
+ dao-ai graph -c config/my_config.yaml -o workflow.png
870
+
871
+ # Deploy with Databricks Asset Bundles
872
+ dao-ai bundle --deploy --run -c config/my_config.yaml --profile DEFAULT
873
+
874
+ # Verbose output (-v through -vvvv)
875
+ dao-ai -vvvv validate -c config/my_config.yaml
876
+ ```
877
+
878
+ ---
879
+
880
+ ## Python API
881
+
882
+ ```python
883
+ from dao_ai.config import AppConfig
884
+
885
+ # Load configuration
886
+ config = AppConfig.from_file("config/my_config.yaml")
887
+
888
+ # Access components
889
+ agents = config.find_agents()
890
+ tools = config.find_tools()
891
+ vector_stores = config.resources.vector_stores
892
+
893
+ # Create infrastructure
894
+ for name, vs in vector_stores.items():
895
+ vs.create()
896
+
897
+ # Package and deploy
898
+ config.create_agent(
899
+ additional_pip_reqs=["custom-package==1.0.0"],
900
+ additional_code_paths=["./my_modules"]
901
+ )
902
+ config.deploy_agent()
903
+
904
+ # Visualize
905
+ config.display_graph()
906
+ config.save_image("docs/architecture.png")
907
+ ```
908
+
909
+ ---
910
+
911
+ ## Project Structure
912
+
913
+ ```
914
+ dao-ai/
915
+ ├── src/dao_ai/
916
+ │ ├── config.py # Pydantic configuration models
917
+ │ ├── graph.py # LangGraph workflow builder
918
+ │ ├── nodes.py # Agent node factories
919
+ │ ├── state.py # State management
920
+ │ ├── tools/ # Tool implementations
921
+ │ │ ├── genie.py # Genie tool with caching
922
+ │ │ ├── mcp.py # MCP integrations
923
+ │ │ ├── vector_search.py
924
+ │ │ └── ...
925
+ │ ├── genie/
926
+ │ │ └── cache/ # LRU and Semantic cache
927
+ │ ├── memory/ # Checkpointer and store
928
+ │ └── hooks/ # Lifecycle hooks
929
+ ├── config/
930
+ │ ├── examples/ # Example configurations
931
+ │ └── hardware_store/ # Reference implementation
932
+ ├── tests/ # Test suite
933
+ └── schemas/ # JSON schemas for validation
934
+ ```
935
+
936
+ ---
937
+
938
+ ## Contributing
939
+
940
+ 1. Fork the repository
941
+ 2. Create a feature branch
942
+ 3. Make your changes
943
+ 4. Run tests: `make test`
944
+ 5. Format code: `make format`
945
+ 6. Submit a pull request
946
+
947
+ ---
948
+
949
+ ## License
950
+
951
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.