dao-ai 0.0.17__tar.gz → 0.0.18__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 (343) hide show
  1. {dao_ai-0.0.17 → dao_ai-0.0.18}/PKG-INFO +1 -1
  2. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/executive_assistant.yaml +43 -43
  3. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/hardware_store/supervisor.yaml +2 -2
  4. {dao_ai-0.0.17 → dao_ai-0.0.18}/pyproject.toml +1 -1
  5. {dao_ai-0.0.17 → dao_ai-0.0.18}/schemas/model_config_schema.json +48 -16
  6. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/agent_as_code.py +2 -2
  7. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/config.py +172 -39
  8. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/messages.py +7 -0
  9. dao_ai-0.0.18/src/dao_ai/models.py +715 -0
  10. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/providers/databricks.py +8 -4
  11. dao_ai-0.0.18/tests/dao_ai/test_databricks.py +308 -0
  12. dao_ai-0.0.18/tests/dao_ai/test_inference.py +309 -0
  13. dao_ai-0.0.17/src/dao_ai/models.py +0 -407
  14. dao_ai-0.0.17/tests/dao_ai/test_databricks.py +0 -17
  15. dao_ai-0.0.17/tests/dao_ai/test_inference.py +0 -51
  16. {dao_ai-0.0.17 → dao_ai-0.0.18}/.gitignore +0 -0
  17. {dao_ai-0.0.17 → dao_ai-0.0.18}/.python-version +0 -0
  18. {dao_ai-0.0.17 → dao_ai-0.0.18}/CHANGELOG.md +0 -0
  19. {dao_ai-0.0.17 → dao_ai-0.0.18}/CONTRIBUTING.md +0 -0
  20. {dao_ai-0.0.17 → dao_ai-0.0.18}/LICENSE +0 -0
  21. {dao_ai-0.0.17 → dao_ai-0.0.18}/Makefile +0 -0
  22. {dao_ai-0.0.17 → dao_ai-0.0.18}/README.md +0 -0
  23. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/Makefile +0 -0
  24. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
  25. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
  26. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  27. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  28. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  29. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  30. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/development_workflows.md +0 -0
  31. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/.gitkeep +0 -0
  32. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/Makefile +0 -0
  33. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
  34. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
  35. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
  36. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
  37. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
  38. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
  39. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
  40. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
  41. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
  42. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
  43. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
  44. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
  45. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
  46. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
  47. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/architecture.png +0 -0
  48. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
  49. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
  50. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
  51. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
  52. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
  53. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
  54. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
  55. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
  56. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/index.md +0 -0
  57. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
  58. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
  59. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
  60. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
  61. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
  62. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
  63. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
  64. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
  65. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/load-env.sh +0 -0
  66. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
  67. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
  68. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
  69. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
  70. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
  71. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
  72. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
  73. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
  74. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
  75. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
  76. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
  77. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
  78. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
  79. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
  80. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
  81. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
  82. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
  83. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
  84. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
  85. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
  86. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
  87. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
  88. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
  89. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
  90. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
  91. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
  92. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
  93. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
  94. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
  95. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
  96. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
  97. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
  98. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
  99. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
  100. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
  101. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
  102. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
  103. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
  104. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
  105. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
  106. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
  107. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
  108. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
  109. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
  110. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
  111. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
  112. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
  113. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
  114. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
  115. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  116. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
  117. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  118. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  119. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  120. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
  121. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
  122. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
  123. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
  124. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
  125. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
  126. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
  127. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
  128. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
  129. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
  130. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
  131. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
  132. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
  133. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
  134. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
  135. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
  136. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
  137. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
  138. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
  139. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
  140. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
  141. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
  142. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
  143. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
  144. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
  145. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
  146. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
  147. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
  148. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
  149. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
  150. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
  151. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
  152. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
  153. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
  154. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
  155. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
  156. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
  157. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
  158. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
  159. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
  160. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
  161. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
  162. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
  163. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
  164. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
  165. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
  166. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
  167. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
  168. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
  169. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
  170. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
  171. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
  172. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
  173. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
  174. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
  175. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
  176. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
  177. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
  178. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/.gitkeep +0 -0
  179. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/README.md +0 -0
  180. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
  181. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
  182. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
  183. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
  184. {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
  185. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/dais2025/model_config_dais.yaml +0 -0
  186. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/deep_research.yaml +0 -0
  187. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/genie.yaml +0 -0
  188. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/genie_and_vector_search.yaml +0 -0
  189. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/human_in_the_loop.yaml +0 -0
  190. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/jira.yaml +0 -0
  191. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/mcp.yaml +0 -0
  192. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/minimal.yaml +0 -0
  193. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/reservations.yaml +0 -0
  194. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/hardware_store/supervisor_postgres.yaml +0 -0
  195. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/hardware_store/swarm.yaml +0 -0
  196. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/quick_serve_restaurant/.gitkeep +0 -0
  197. {dao_ai-0.0.17 → dao_ai-0.0.18}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +0 -0
  198. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/appointments.sql +0 -0
  199. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/appointments_data.sql +0 -0
  200. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/brand_rep_demo_data.sql +0 -0
  201. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/brand_rep_demo_queries.sql +0 -0
  202. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/brand_rep_demo_tables.sql +0 -0
  203. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/brand_rep_demo_validation.sql +0 -0
  204. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/customers.sql +0 -0
  205. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/customers_data.sql +0 -0
  206. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/dim_stores.sql +0 -0
  207. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/dim_stores_data.sql +0 -0
  208. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/employee_performance.sql +0 -0
  209. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/employee_performance_data.sql +0 -0
  210. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/employee_tasks.sql +0 -0
  211. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/employee_tasks_data.sql +0 -0
  212. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/inventory.sql +0 -0
  213. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/inventory_data.sql +0 -0
  214. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/managers.sql +0 -0
  215. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/managers_data.sql +0 -0
  216. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/product_data.sql +0 -0
  217. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/products.sql +0 -0
  218. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/task_assignments.sql +0 -0
  219. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/hardware_store/inventory.snappy.parquet +0 -0
  220. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/hardware_store/inventory.sql +0 -0
  221. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/hardware_store/products.snappy.parquet +0 -0
  222. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/hardware_store/products.sql +0 -0
  223. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/.gitkeep +0 -0
  224. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
  225. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/items_description.csv +0 -0
  226. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/items_description.sql +0 -0
  227. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/items_raw.csv +0 -0
  228. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/items_raw.sql +0 -0
  229. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/orders_raw.csv +0 -0
  230. {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/orders_raw.sql +0 -0
  231. {dao_ai-0.0.17 → dao_ai-0.0.18}/databricks.yaml +0 -0
  232. {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/genie.png +0 -0
  233. {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/hardware_store/README.md +0 -0
  234. {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/hardware_store/retail_supervisor.png +0 -0
  235. {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/hardware_store/retail_swarm.png +0 -0
  236. {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/quick_serve_restaurant/.gitkeep +0 -0
  237. {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
  238. {dao_ai-0.0.17 → dao_ai-0.0.18}/environment.yaml +0 -0
  239. {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/dais2025/examples.yaml +0 -0
  240. {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/deep_research/examples.yaml +0 -0
  241. {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/executive_assistant/examples.yaml +0 -0
  242. {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/hardware_store/examples.yaml +0 -0
  243. {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/quick_serve_restaurant/.gitkeep +0 -0
  244. {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/quick_serve_restaurant/examples.yaml +0 -0
  245. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/extract_store_numbers.sql +0 -0
  246. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_inventory_by_sku.sql +0 -0
  247. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_inventory_by_upc.sql +0 -0
  248. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_product_by_sku.sql +0 -0
  249. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_product_by_upc.sql +0 -0
  250. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_store_by_number.sql +0 -0
  251. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
  252. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
  253. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
  254. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
  255. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_product_by_sku.sql +0 -0
  256. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_product_by_upc.sql +0 -0
  257. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
  258. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
  259. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/.gitkeep +0 -0
  260. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
  261. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
  262. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
  263. {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
  264. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/01_ingest_and_transform.py +0 -0
  265. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/02_provision_vector_search.py +0 -0
  266. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/03_generate_evaluation_data.py +0 -0
  267. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/04_unity_catalog_tools.py +0 -0
  268. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/05_agent_as_code_driver.py +0 -0
  269. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/06_run_evaluation.py +0 -0
  270. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/08_run_examples.py +0 -0
  271. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/09_evaluate_inferences.py +0 -0
  272. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/99_scratchpad.py +0 -0
  273. {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/INVESTech.py +0 -0
  274. {dao_ai-0.0.17 → dao_ai-0.0.18}/requirements.txt +0 -0
  275. {dao_ai-0.0.17 → dao_ai-0.0.18}/schemas/bundle_config_schema.json +0 -0
  276. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/__init__.py +0 -0
  277. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/models.py +0 -0
  278. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/__init__.py +0 -0
  279. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/customer.py +0 -0
  280. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/employee.py +0 -0
  281. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/executive.py +0 -0
  282. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/genie.py +0 -0
  283. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/inventory.py +0 -0
  284. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/models.py +0 -0
  285. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/store.py +0 -0
  286. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/__init__.py +0 -0
  287. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/catalog.py +0 -0
  288. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/chat_models.py +0 -0
  289. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/cli.py +0 -0
  290. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/graph.py +0 -0
  291. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/guardrails.py +0 -0
  292. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/hooks/__init__.py +0 -0
  293. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/hooks/core.py +0 -0
  294. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/memory/__init__.py +0 -0
  295. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/memory/base.py +0 -0
  296. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/memory/core.py +0 -0
  297. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/memory/postgres.py +0 -0
  298. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/nodes.py +0 -0
  299. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/prompts.py +0 -0
  300. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/providers/__init__.py +0 -0
  301. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/providers/base.py +0 -0
  302. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/state.py +0 -0
  303. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/__init__.py +0 -0
  304. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/agent.py +0 -0
  305. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/core.py +0 -0
  306. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/genie.py +0 -0
  307. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/human_in_the_loop.py +0 -0
  308. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/mcp.py +0 -0
  309. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/python.py +0 -0
  310. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/time.py +0 -0
  311. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/unity_catalog.py +0 -0
  312. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/vector_search.py +0 -0
  313. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/types.py +0 -0
  314. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/utils.py +0 -0
  315. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/vector_search.py +0 -0
  316. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/hardware_store/__init__.py +0 -0
  317. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/hardware_store/hooks.py +0 -0
  318. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/hardware_store/tools.py +0 -0
  319. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/quick_serve_restaurant/.gitkeep +0 -0
  320. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/quick_serve_restaurant/__init__.py +0 -0
  321. {dao_ai-0.0.17 → dao_ai-0.0.18}/src/quick_serve_restaurant/tools.py +0 -0
  322. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/config/test_model_config.yaml +0 -0
  323. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/conftest.py +0 -0
  324. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_catalog.py +0 -0
  325. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_chat_history.py +0 -0
  326. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_config.py +0 -0
  327. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_function_parsing.py +0 -0
  328. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_hooks.py +0 -0
  329. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_mcp.py +0 -0
  330. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_messages.py +0 -0
  331. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_models.py +0 -0
  332. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_state.py +0 -0
  333. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_summarization_inference.py +0 -0
  334. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_tools.py +0 -0
  335. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_types.py +0 -0
  336. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_utils.py +0 -0
  337. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_vector_search.py +0 -0
  338. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/weather_server_mcp.py +0 -0
  339. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/hardware_store/.gitkeep +0 -0
  340. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/hardware_store/test_graph.py +0 -0
  341. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/images/doritos_upc.png +0 -0
  342. {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/images/lays_upc.png +0 -0
  343. {dao_ai-0.0.17 → dao_ai-0.0.18}/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.17
3
+ Version: 0.0.18
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
@@ -50,68 +50,68 @@ resources:
50
50
 
51
51
 
52
52
  tables:
53
- employee_performance:
53
+ all_tables:
54
54
  schema: *executive_assistant_schema
55
- name: employee_performance
55
+ # name: employee_performance
56
56
 
57
- products:
58
- schema: *executive_assistant_schema
59
- name: products
57
+ # products:
58
+ # schema: *executive_assistant_schema
59
+ # name: products
60
60
 
61
- inventory:
62
- schema: *executive_assistant_schema
63
- name: inventory
61
+ # inventory:
62
+ # schema: *executive_assistant_schema
63
+ # name: inventory
64
64
 
65
- customers:
66
- schema: *executive_assistant_schema
67
- name: customers
65
+ # customers:
66
+ # schema: *executive_assistant_schema
67
+ # name: customers
68
68
 
69
- managers:
70
- schema: *executive_assistant_schema
71
- name: managers
69
+ # managers:
70
+ # schema: *executive_assistant_schema
71
+ # name: managers
72
72
 
73
- employee_tasks:
74
- schema: *executive_assistant_schema
75
- name: employee_tasks
73
+ # employee_tasks:
74
+ # schema: *executive_assistant_schema
75
+ # name: employee_tasks
76
76
 
77
- appointments:
78
- schema: *executive_assistant_schema
79
- name: appointments
77
+ # appointments:
78
+ # schema: *executive_assistant_schema
79
+ # name: appointments
80
80
 
81
- evaluation:
82
- schema: *executive_assistant_schema
83
- name: evaluation
81
+ # evaluation:
82
+ # schema: *executive_assistant_schema
83
+ # name: evaluation
84
84
 
85
85
 
86
86
  functions:
87
87
 
88
- find_inventory_by_sku: &find_inventory_by_sku
88
+ all_functions:
89
89
  schema: *executive_assistant_schema
90
- name: find_inventory_by_sku
90
+ # name: find_inventory_by_sku
91
91
 
92
- find_inventory_by_upc: &find_inventory_by_upc
93
- schema: *executive_assistant_schema
94
- name: find_inventory_by_upc
92
+ # find_inventory_by_upc: &find_inventory_by_upc
93
+ # schema: *executive_assistant_schema
94
+ # name: find_inventory_by_upc
95
95
 
96
- find_product_by_sku: &find_product_by_sku
97
- schema: *executive_assistant_schema
98
- name: find_product_by_sku
96
+ # find_product_by_sku: &find_product_by_sku
97
+ # schema: *executive_assistant_schema
98
+ # name: find_product_by_sku
99
99
 
100
- find_product_by_upc: &find_product_by_upc
101
- schema: *executive_assistant_schema
102
- name: find_product_by_upc
100
+ # find_product_by_upc: &find_product_by_upc
101
+ # schema: *executive_assistant_schema
102
+ # name: find_product_by_upc
103
103
 
104
- find_store_by_number: &find_store_by_number
105
- schema: *executive_assistant_schema
106
- name: find_store_by_number
104
+ # find_store_by_number: &find_store_by_number
105
+ # schema: *executive_assistant_schema
106
+ # name: find_store_by_number
107
107
 
108
- find_store_inventory_by_sku: &find_store_inventory_by_sku
109
- schema: *executive_assistant_schema
110
- name: find_store_inventory_by_sku
108
+ # find_store_inventory_by_sku: &find_store_inventory_by_sku
109
+ # schema: *executive_assistant_schema
110
+ # name: find_store_inventory_by_sku
111
111
 
112
- find_store_inventory_by_upc: &find_store_inventory_by_upc
113
- schema: *executive_assistant_schema
114
- name: find_store_inventory_by_upc
112
+ # find_store_inventory_by_upc: &find_store_inventory_by_upc
113
+ # schema: *executive_assistant_schema
114
+ # name: find_store_inventory_by_upc
115
115
 
116
116
  genie_rooms:
117
117
  executive_assistant_genie_room: &executive_assistant_genie_room
@@ -898,7 +898,7 @@ agents:
898
898
  app:
899
899
  name: hardware_store_supervisor # Application name
900
900
  description: "Multi-agent system for retail customer service and product assistance"
901
- log_level: INFO # Logging level for the application
901
+ log_level: DEBUG # Logging level for the application
902
902
  registered_model: # MLflow registered model configuration
903
903
  schema: *retail_schema # Schema where model will be registered
904
904
  name: hardware_store_supervisor # Model name in MLflow registry
@@ -926,7 +926,7 @@ app:
926
926
  - dao_ai.hooks.null_hook
927
927
  - hardware_store.hooks.require_store_num_hook
928
928
  input_example:
929
- messages:
929
+ input:
930
930
  - role: user
931
931
  content: Can you recommend a lamp to match my oak side tables?
932
932
  custom_inputs:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "dao-ai"
7
- version = "0.0.17"
7
+ version = "0.0.18"
8
8
  description = "DAO AI: A modular, multi-agent orchestration framework for complex AI workflows. Supports agent handoff, tool integration, and dynamic configuration via YAML."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -480,12 +480,35 @@
480
480
  "ChatPayload": {
481
481
  "additionalProperties": false,
482
482
  "properties": {
483
+ "input": {
484
+ "anyOf": [
485
+ {
486
+ "items": {
487
+ "$ref": "#/$defs/Message"
488
+ },
489
+ "type": "array"
490
+ },
491
+ {
492
+ "type": "null"
493
+ }
494
+ ],
495
+ "default": null,
496
+ "title": "Input"
497
+ },
483
498
  "messages": {
484
- "items": {
485
- "$ref": "#/$defs/Message"
486
- },
487
- "title": "Messages",
488
- "type": "array"
499
+ "anyOf": [
500
+ {
501
+ "items": {
502
+ "$ref": "#/$defs/Message"
503
+ },
504
+ "type": "array"
505
+ },
506
+ {
507
+ "type": "null"
508
+ }
509
+ ],
510
+ "default": null,
511
+ "title": "Messages"
489
512
  },
490
513
  "custom_inputs": {
491
514
  "additionalProperties": true,
@@ -494,7 +517,6 @@
494
517
  }
495
518
  },
496
519
  "required": [
497
- "messages",
498
520
  "custom_inputs"
499
521
  ],
500
522
  "title": "ChatPayload",
@@ -1200,13 +1222,18 @@
1200
1222
  "default": null
1201
1223
  },
1202
1224
  "name": {
1203
- "title": "Name",
1204
- "type": "string"
1225
+ "anyOf": [
1226
+ {
1227
+ "type": "string"
1228
+ },
1229
+ {
1230
+ "type": "null"
1231
+ }
1232
+ ],
1233
+ "default": null,
1234
+ "title": "Name"
1205
1235
  }
1206
1236
  },
1207
- "required": [
1208
- "name"
1209
- ],
1210
1237
  "title": "FunctionModel",
1211
1238
  "type": "object"
1212
1239
  },
@@ -2339,13 +2366,18 @@
2339
2366
  "default": null
2340
2367
  },
2341
2368
  "name": {
2342
- "title": "Name",
2343
- "type": "string"
2369
+ "anyOf": [
2370
+ {
2371
+ "type": "string"
2372
+ },
2373
+ {
2374
+ "type": "null"
2375
+ }
2376
+ ],
2377
+ "default": null,
2378
+ "title": "Name"
2344
2379
  }
2345
2380
  },
2346
- "required": [
2347
- "name"
2348
- ],
2349
2381
  "title": "TableModel",
2350
2382
  "type": "object"
2351
2383
  },
@@ -3,7 +3,7 @@ import sys
3
3
  import mlflow
4
4
  from loguru import logger
5
5
  from mlflow.models import ModelConfig
6
- from mlflow.pyfunc import ChatModel
6
+ from mlflow.pyfunc import ResponsesAgent
7
7
 
8
8
  from dao_ai.config import AppConfig
9
9
 
@@ -17,6 +17,6 @@ log_level: str = config.app.log_level
17
17
  logger.remove()
18
18
  logger.add(sys.stderr, level=log_level)
19
19
 
20
- app: ChatModel = config.as_chat_model()
20
+ app: ResponsesAgent = config.as_responses_agent()
21
21
 
22
22
  mlflow.models.set_model(app)
@@ -9,6 +9,7 @@ from pathlib import Path
9
9
  from typing import (
10
10
  Any,
11
11
  Callable,
12
+ Iterator,
12
13
  Literal,
13
14
  Optional,
14
15
  Sequence,
@@ -21,6 +22,7 @@ from databricks.sdk.credentials_provider import (
21
22
  CredentialsStrategy,
22
23
  ModelServingUserCredentials,
23
24
  )
25
+ from databricks.sdk.service.catalog import FunctionInfo, TableInfo
24
26
  from databricks.vector_search.client import VectorSearchClient
25
27
  from databricks.vector_search.index import VectorSearchIndex
26
28
  from databricks_langchain import (
@@ -44,8 +46,14 @@ from mlflow.models.resources import (
44
46
  DatabricksUCConnection,
45
47
  DatabricksVectorSearchIndex,
46
48
  )
47
- from mlflow.pyfunc import ChatModel
48
- from pydantic import BaseModel, ConfigDict, Field, field_serializer, model_validator
49
+ from mlflow.pyfunc import ChatModel, ResponsesAgent
50
+ from pydantic import (
51
+ BaseModel,
52
+ ConfigDict,
53
+ Field,
54
+ field_serializer,
55
+ model_validator,
56
+ )
49
57
 
50
58
 
51
59
  class HasValue(ABC):
@@ -69,7 +77,7 @@ class IsDatabricksResource(ABC):
69
77
  on_behalf_of_user: Optional[bool] = False
70
78
 
71
79
  @abstractmethod
72
- def as_resource(self) -> DatabricksResource: ...
80
+ def as_resources(self) -> Sequence[DatabricksResource]: ...
73
81
 
74
82
  @property
75
83
  @abstractmethod
@@ -235,22 +243,68 @@ class SchemaModel(BaseModel, HasFullName):
235
243
  class TableModel(BaseModel, HasFullName, IsDatabricksResource):
236
244
  model_config = ConfigDict(use_enum_values=True, extra="forbid")
237
245
  schema_model: Optional[SchemaModel] = Field(default=None, alias="schema")
238
- name: str
246
+ name: Optional[str] = None
247
+
248
+ @model_validator(mode="after")
249
+ def validate_name_or_schema_required(self) -> "TableModel":
250
+ if not self.name and not self.schema_model:
251
+ raise ValueError(
252
+ "Either 'name' or 'schema_model' must be provided for TableModel"
253
+ )
254
+ return self
239
255
 
240
256
  @property
241
257
  def full_name(self) -> str:
242
258
  if self.schema_model:
243
- return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}.{self.name}"
259
+ name: str = ""
260
+ if self.name:
261
+ name = f".{self.name}"
262
+ return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}{name}"
244
263
  return self.name
245
264
 
246
265
  @property
247
266
  def api_scopes(self) -> Sequence[str]:
248
267
  return []
249
268
 
250
- def as_resource(self) -> DatabricksResource:
251
- return DatabricksTable(
252
- table_name=self.full_name, on_behalf_of_user=self.on_behalf_of_user
253
- )
269
+ def as_resources(self) -> Sequence[DatabricksResource]:
270
+ resources: list[DatabricksResource] = []
271
+
272
+ excluded_suffixes: Sequence[str] = [
273
+ "_payload",
274
+ "_assessment_logs",
275
+ "_request_logs",
276
+ ]
277
+
278
+ excluded_prefixes: Sequence[str] = [
279
+ "trace_logs_"
280
+ ]
281
+
282
+ if self.name:
283
+ resources.append(
284
+ DatabricksTable(
285
+ table_name=self.full_name, on_behalf_of_user=self.on_behalf_of_user
286
+ )
287
+ )
288
+ else:
289
+ w: WorkspaceClient = self.workspace_client
290
+ schema_full_name: str = self.schema_model.full_name
291
+ tables: Iterator[TableInfo] = w.tables.list(
292
+ catalog_name=self.schema_model.catalog_name,
293
+ schema_name=self.schema_model.schema_name,
294
+ )
295
+ resources.extend(
296
+ [
297
+ DatabricksTable(
298
+ table_name=f"{schema_full_name}.{table.name}",
299
+ on_behalf_of_user=self.on_behalf_of_user,
300
+ )
301
+ for table in tables
302
+ if not any(table.name.endswith(suffix) for suffix in excluded_suffixes)
303
+ and not any(table.name.startswith(prefix) for prefix in excluded_prefixes)
304
+ ]
305
+ )
306
+
307
+ return resources
254
308
 
255
309
 
256
310
  class LLMModel(BaseModel, IsDatabricksResource):
@@ -266,10 +320,12 @@ class LLMModel(BaseModel, IsDatabricksResource):
266
320
  "serving.serving-endpoints",
267
321
  ]
268
322
 
269
- def as_resource(self) -> DatabricksResource:
270
- return DatabricksServingEndpoint(
271
- endpoint_name=self.name, on_behalf_of_user=self.on_behalf_of_user
272
- )
323
+ def as_resources(self) -> Sequence[DatabricksResource]:
324
+ return [
325
+ DatabricksServingEndpoint(
326
+ endpoint_name=self.name, on_behalf_of_user=self.on_behalf_of_user
327
+ )
328
+ ]
273
329
 
274
330
  def as_chat_model(self) -> LanguageModelLike:
275
331
  # Retrieve langchain chat client from workspace client to enable OBO
@@ -345,10 +401,12 @@ class IndexModel(BaseModel, HasFullName, IsDatabricksResource):
345
401
  return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}.{self.name}"
346
402
  return self.name
347
403
 
348
- def as_resource(self) -> DatabricksResource:
349
- return DatabricksVectorSearchIndex(
350
- index_name=self.full_name, on_behalf_of_user=self.on_behalf_of_user
351
- )
404
+ def as_resources(self) -> Sequence[DatabricksResource]:
405
+ return [
406
+ DatabricksVectorSearchIndex(
407
+ index_name=self.full_name, on_behalf_of_user=self.on_behalf_of_user
408
+ )
409
+ ]
352
410
 
353
411
 
354
412
  class GenieRoomModel(BaseModel, IsDatabricksResource):
@@ -363,10 +421,12 @@ class GenieRoomModel(BaseModel, IsDatabricksResource):
363
421
  "dashboards.genie",
364
422
  ]
365
423
 
366
- def as_resource(self) -> DatabricksResource:
367
- return DatabricksGenieSpace(
368
- genie_space_id=self.space_id, on_behalf_of_user=self.on_behalf_of_user
369
- )
424
+ def as_resources(self) -> Sequence[DatabricksResource]:
425
+ return [
426
+ DatabricksGenieSpace(
427
+ genie_space_id=self.space_id, on_behalf_of_user=self.on_behalf_of_user
428
+ )
429
+ ]
370
430
 
371
431
 
372
432
  class VolumeModel(BaseModel, HasFullName):
@@ -394,7 +454,7 @@ class VolumePathModel(BaseModel, HasFullName):
394
454
  path: Optional[str] = None
395
455
 
396
456
  @model_validator(mode="after")
397
- def validate_path_or_volume(self):
457
+ def validate_path_or_volume(self) -> "VolumePathModel":
398
458
  if not self.volume and not self.path:
399
459
  raise ValueError("Either 'volume' or 'path' must be provided")
400
460
  return self
@@ -502,8 +562,8 @@ class VectorStoreModel(BaseModel, IsDatabricksResource):
502
562
  "serving.serving-endpoints",
503
563
  ] + self.index.api_scopes
504
564
 
505
- def as_resource(self) -> DatabricksResource:
506
- return self.index.as_resource()
565
+ def as_resources(self) -> Sequence[DatabricksResource]:
566
+ return self.index.as_resources()
507
567
 
508
568
  def as_index(self, vsc: VectorSearchClient | None = None) -> VectorSearchIndex:
509
569
  from dao_ai.providers.base import ServiceProvider
@@ -524,18 +584,52 @@ class VectorStoreModel(BaseModel, IsDatabricksResource):
524
584
  class FunctionModel(BaseModel, HasFullName, IsDatabricksResource):
525
585
  model_config = ConfigDict()
526
586
  schema_model: Optional[SchemaModel] = Field(default=None, alias="schema")
527
- name: str
587
+ name: Optional[str] = None
588
+
589
+ @model_validator(mode="after")
590
+ def validate_name_or_schema_required(self) -> "FunctionModel":
591
+ if not self.name and not self.schema_model:
592
+ raise ValueError(
593
+ "Either 'name' or 'schema_model' must be provided for FunctionModel"
594
+ )
595
+ return self
528
596
 
529
597
  @property
530
598
  def full_name(self) -> str:
531
599
  if self.schema_model:
532
- return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}.{self.name}"
600
+ name: str = ""
601
+ if self.name:
602
+ name = f".{self.name}"
603
+ return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}{name}"
533
604
  return self.name
534
605
 
535
- def as_resource(self) -> DatabricksResource:
536
- return DatabricksFunction(
537
- function_name=self.full_name, on_behalf_of_user=self.on_behalf_of_user
538
- )
606
+ def as_resources(self) -> Sequence[DatabricksResource]:
607
+ resources: list[DatabricksResource] = []
608
+ if self.name:
609
+ resources.append(
610
+ DatabricksFunction(
611
+ function_name=self.full_name,
612
+ on_behalf_of_user=self.on_behalf_of_user,
613
+ )
614
+ )
615
+ else:
616
+ w: WorkspaceClient = self.workspace_client
617
+ schema_full_name: str = self.schema_model.full_name
618
+ functions: Iterator[FunctionInfo] = w.functions.list(
619
+ catalog_name=self.schema_model.catalog_name,
620
+ schema_name=self.schema_model.schema_name,
621
+ )
622
+ resources.extend(
623
+ [
624
+ DatabricksFunction(
625
+ function_name=f"{schema_full_name}.{function.name}",
626
+ on_behalf_of_user=self.on_behalf_of_user,
627
+ )
628
+ for function in functions
629
+ ]
630
+ )
631
+
632
+ return resources
539
633
 
540
634
  @property
541
635
  def api_scopes(self) -> Sequence[str]:
@@ -556,10 +650,12 @@ class ConnectionModel(BaseModel, HasFullName, IsDatabricksResource):
556
650
  "catalog.connections",
557
651
  ]
558
652
 
559
- def as_resource(self) -> DatabricksResource:
560
- return DatabricksUCConnection(
561
- connection_name=self.name, on_behalf_of_user=self.on_behalf_of_user
562
- )
653
+ def as_resources(self) -> Sequence[DatabricksResource]:
654
+ return [
655
+ DatabricksUCConnection(
656
+ connection_name=self.name, on_behalf_of_user=self.on_behalf_of_user
657
+ )
658
+ ]
563
659
 
564
660
 
565
661
  class WarehouseModel(BaseModel, IsDatabricksResource):
@@ -575,10 +671,12 @@ class WarehouseModel(BaseModel, IsDatabricksResource):
575
671
  "sql.statement-execution",
576
672
  ]
577
673
 
578
- def as_resource(self) -> DatabricksResource:
579
- return DatabricksSQLWarehouse(
580
- warehouse_id=self.warehouse_id, on_behalf_of_user=self.on_behalf_of_user
581
- )
674
+ def as_resources(self) -> Sequence[DatabricksResource]:
675
+ return [
676
+ DatabricksSQLWarehouse(
677
+ warehouse_id=self.warehouse_id, on_behalf_of_user=self.on_behalf_of_user
678
+ )
679
+ ]
582
680
 
583
681
 
584
682
  class DatabaseModel(BaseModel):
@@ -1034,9 +1132,37 @@ class Message(BaseModel):
1034
1132
 
1035
1133
  class ChatPayload(BaseModel):
1036
1134
  model_config = ConfigDict(use_enum_values=True, extra="forbid")
1037
- messages: list[Message]
1135
+ input: Optional[list[Message]] = None
1136
+ messages: Optional[list[Message]] = None
1038
1137
  custom_inputs: dict
1039
1138
 
1139
+ @model_validator(mode="after")
1140
+ def validate_mutual_exclusion_and_alias(self) -> "ChatPayload":
1141
+ """Handle dual field support with automatic aliasing."""
1142
+ # If both fields are provided and they're the same, that's okay (redundant but valid)
1143
+ if self.input is not None and self.messages is not None:
1144
+ # Allow if they're identical (redundant specification)
1145
+ if self.input == self.messages:
1146
+ return self
1147
+ # If they're different, prefer input and copy to messages
1148
+ else:
1149
+ self.messages = self.input
1150
+ return self
1151
+
1152
+ # If neither field is provided, that's an error
1153
+ if self.input is None and self.messages is None:
1154
+ raise ValueError("Must specify either 'input' or 'messages' field.")
1155
+
1156
+ # Create alias: copy messages to input if input is None
1157
+ if self.input is None and self.messages is not None:
1158
+ self.input = self.messages
1159
+
1160
+ # Create alias: copy input to messages if messages is None
1161
+ elif self.messages is None and self.input is not None:
1162
+ self.messages = self.input
1163
+
1164
+ return self
1165
+
1040
1166
 
1041
1167
  class ChatHistoryModel(BaseModel):
1042
1168
  model_config = ConfigDict(use_enum_values=True, extra="forbid")
@@ -1374,3 +1500,10 @@ class AppConfig(BaseModel):
1374
1500
  graph: CompiledStateGraph = self.as_graph()
1375
1501
  app: ChatModel = create_agent(graph)
1376
1502
  return app
1503
+
1504
+ def as_responses_agent(self) -> ResponsesAgent:
1505
+ from dao_ai.models import create_responses_agent
1506
+
1507
+ graph: CompiledStateGraph = self.as_graph()
1508
+ app: ResponsesAgent = create_responses_agent(graph)
1509
+ return app
@@ -11,6 +11,9 @@ from langchain_core.messages import (
11
11
  )
12
12
  from langchain_core.messages.modifier import RemoveMessage
13
13
  from mlflow.types.llm import ChatMessage
14
+ from mlflow.types.responses import (
15
+ ResponsesAgentRequest,
16
+ )
14
17
 
15
18
 
16
19
  def remove_messages(
@@ -96,6 +99,10 @@ def has_mlflow_messages(messages: ChatMessage | Sequence[ChatMessage]) -> bool:
96
99
  return any(isinstance(m, ChatMessage) for m in messages)
97
100
 
98
101
 
102
+ def has_mlflow_responses_messages(messages: ResponsesAgentRequest) -> bool:
103
+ return isinstance(messages, ResponsesAgentRequest)
104
+
105
+
99
106
  def has_image(messages: BaseMessage | Sequence[BaseMessage]) -> bool:
100
107
  """
101
108
  Check if a message contains an image.