dao-ai 0.0.21__tar.gz → 0.0.22__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 (349) hide show
  1. {dao_ai-0.0.21 → dao_ai-0.0.22}/PKG-INFO +3 -3
  2. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/hardware_store/supervisor_postgres.yaml +21 -20
  3. {dao_ai-0.0.21 → dao_ai-0.0.22}/databricks.yaml +10 -3
  4. {dao_ai-0.0.21 → dao_ai-0.0.22}/notebooks/01_ingest_and_transform.py +33 -2
  5. {dao_ai-0.0.21 → dao_ai-0.0.22}/notebooks/02_provision_vector_search.py +31 -3
  6. dao_ai-0.0.22/notebooks/03_provision_lakebase.py +85 -0
  7. {dao_ai-0.0.21 → dao_ai-0.0.22}/notebooks/04_unity_catalog_tools.py +31 -2
  8. dao_ai-0.0.21/notebooks/03_generate_evaluation_data.py → dao_ai-0.0.22/notebooks/06_generate_evaluation_data.py +31 -2
  9. dao_ai-0.0.21/notebooks/06_run_evaluation.py → dao_ai-0.0.22/notebooks/07_run_evaluation.py +31 -5
  10. {dao_ai-0.0.21 → dao_ai-0.0.22}/notebooks/09_evaluate_inferences.py +34 -3
  11. {dao_ai-0.0.21 → dao_ai-0.0.22}/pyproject.toml +3 -3
  12. {dao_ai-0.0.21 → dao_ai-0.0.22}/requirements.txt +2 -2
  13. {dao_ai-0.0.21 → dao_ai-0.0.22}/schemas/model_config_schema.json +63 -3
  14. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/config.py +93 -11
  15. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/graph.py +3 -0
  16. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/memory/core.py +10 -6
  17. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/memory/postgres.py +71 -30
  18. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/providers/databricks.py +280 -0
  19. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/genie.py +1 -1
  20. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/utils.py +4 -0
  21. dao_ai-0.0.22/tests/dao_ai/test_databricks.py +1004 -0
  22. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_genie_databricks_integration.py +1 -1
  23. dao_ai-0.0.21/tests/dao_ai/test_databricks.py +0 -308
  24. {dao_ai-0.0.21 → dao_ai-0.0.22}/.gitignore +0 -0
  25. {dao_ai-0.0.21 → dao_ai-0.0.22}/.python-version +0 -0
  26. {dao_ai-0.0.21 → dao_ai-0.0.22}/CHANGELOG.md +0 -0
  27. {dao_ai-0.0.21 → dao_ai-0.0.22}/CONTRIBUTING.md +0 -0
  28. {dao_ai-0.0.21 → dao_ai-0.0.22}/LICENSE +0 -0
  29. {dao_ai-0.0.21 → dao_ai-0.0.22}/Makefile +0 -0
  30. {dao_ai-0.0.21 → dao_ai-0.0.22}/README.md +0 -0
  31. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/Makefile +0 -0
  32. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
  33. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
  34. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  35. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  36. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  37. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  38. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/development_workflows.md +0 -0
  39. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/.gitkeep +0 -0
  40. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/Makefile +0 -0
  41. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
  42. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
  43. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
  44. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
  45. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
  46. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
  47. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
  48. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
  49. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
  50. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
  51. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
  52. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
  53. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
  54. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
  55. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/architecture.png +0 -0
  56. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
  57. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
  58. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
  59. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
  60. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
  61. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
  62. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
  63. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
  64. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/index.md +0 -0
  65. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
  66. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
  67. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
  68. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
  69. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
  70. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
  71. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
  72. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
  73. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/load-env.sh +0 -0
  74. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
  75. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
  76. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
  77. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
  78. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
  79. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
  80. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
  81. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
  82. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
  83. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
  84. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
  85. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
  86. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
  87. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
  88. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
  89. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
  90. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
  91. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
  92. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
  93. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
  94. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
  95. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
  96. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
  97. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
  98. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
  99. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
  100. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
  101. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
  102. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
  103. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
  104. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
  105. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
  106. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
  107. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
  108. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
  109. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
  110. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
  111. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
  112. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
  113. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
  114. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
  115. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
  116. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
  117. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
  118. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
  119. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
  120. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
  121. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
  122. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
  123. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  124. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
  125. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  126. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  127. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  128. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
  129. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
  130. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
  131. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
  132. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
  133. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
  134. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
  135. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
  136. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
  137. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
  138. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
  139. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
  140. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
  141. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
  142. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
  143. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
  144. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
  145. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
  146. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
  147. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
  148. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
  149. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
  150. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
  151. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
  152. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
  153. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
  154. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
  155. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
  156. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
  157. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
  158. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
  159. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
  160. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
  161. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
  162. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
  163. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
  164. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
  165. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
  166. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
  167. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
  168. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
  169. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
  170. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
  171. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
  172. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
  173. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
  174. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
  175. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
  176. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
  177. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
  178. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
  179. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
  180. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
  181. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
  182. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
  183. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
  184. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
  185. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
  186. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/tests/.gitkeep +0 -0
  187. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/tests/README.md +0 -0
  188. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
  189. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
  190. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
  191. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
  192. {dao_ai-0.0.21 → dao_ai-0.0.22}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
  193. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/dais2025/model_config_dais.yaml +0 -0
  194. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/deep_research.yaml +0 -0
  195. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/executive_assistant.yaml +0 -0
  196. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/genie.yaml +0 -0
  197. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/genie_and_vector_search.yaml +0 -0
  198. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/genie_with_conversion_id.yaml +0 -0
  199. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/human_in_the_loop.yaml +0 -0
  200. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/jira.yaml +0 -0
  201. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/mcp.yaml +0 -0
  202. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/minimal.yaml +0 -0
  203. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/examples/reservations.yaml +0 -0
  204. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/hardware_store/supervisor.yaml +0 -0
  205. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/hardware_store/swarm.yaml +0 -0
  206. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/quick_serve_restaurant/.gitkeep +0 -0
  207. {dao_ai-0.0.21 → dao_ai-0.0.22}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +0 -0
  208. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/appointments.sql +0 -0
  209. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/appointments_data.sql +0 -0
  210. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/brand_rep_demo_data.sql +0 -0
  211. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/brand_rep_demo_queries.sql +0 -0
  212. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/brand_rep_demo_tables.sql +0 -0
  213. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/brand_rep_demo_validation.sql +0 -0
  214. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/customers.sql +0 -0
  215. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/customers_data.sql +0 -0
  216. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/dim_stores.sql +0 -0
  217. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/dim_stores_data.sql +0 -0
  218. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/employee_performance.sql +0 -0
  219. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/employee_performance_data.sql +0 -0
  220. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/employee_tasks.sql +0 -0
  221. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/employee_tasks_data.sql +0 -0
  222. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/inventory.sql +0 -0
  223. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/inventory_data.sql +0 -0
  224. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/managers.sql +0 -0
  225. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/managers_data.sql +0 -0
  226. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/product_data.sql +0 -0
  227. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/products.sql +0 -0
  228. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/dais2025/task_assignments.sql +0 -0
  229. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/hardware_store/inventory.snappy.parquet +0 -0
  230. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/hardware_store/inventory.sql +0 -0
  231. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/hardware_store/products.snappy.parquet +0 -0
  232. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/hardware_store/products.sql +0 -0
  233. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/quick_serve_restaurant/.gitkeep +0 -0
  234. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
  235. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/quick_serve_restaurant/items_description.csv +0 -0
  236. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/quick_serve_restaurant/items_description.sql +0 -0
  237. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/quick_serve_restaurant/items_raw.csv +0 -0
  238. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/quick_serve_restaurant/items_raw.sql +0 -0
  239. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/quick_serve_restaurant/orders_raw.csv +0 -0
  240. {dao_ai-0.0.21 → dao_ai-0.0.22}/data/quick_serve_restaurant/orders_raw.sql +0 -0
  241. {dao_ai-0.0.21 → dao_ai-0.0.22}/docs/genie.png +0 -0
  242. {dao_ai-0.0.21 → dao_ai-0.0.22}/docs/hardware_store/README.md +0 -0
  243. {dao_ai-0.0.21 → dao_ai-0.0.22}/docs/hardware_store/retail_supervisor.png +0 -0
  244. {dao_ai-0.0.21 → dao_ai-0.0.22}/docs/hardware_store/retail_swarm.png +0 -0
  245. {dao_ai-0.0.21 → dao_ai-0.0.22}/docs/quick_serve_restaurant/.gitkeep +0 -0
  246. {dao_ai-0.0.21 → dao_ai-0.0.22}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
  247. {dao_ai-0.0.21 → dao_ai-0.0.22}/environment.yaml +0 -0
  248. {dao_ai-0.0.21 → dao_ai-0.0.22}/examples/dais2025/examples.yaml +0 -0
  249. {dao_ai-0.0.21 → dao_ai-0.0.22}/examples/deep_research/examples.yaml +0 -0
  250. {dao_ai-0.0.21 → dao_ai-0.0.22}/examples/executive_assistant/examples.yaml +0 -0
  251. {dao_ai-0.0.21 → dao_ai-0.0.22}/examples/hardware_store/examples.yaml +0 -0
  252. {dao_ai-0.0.21 → dao_ai-0.0.22}/examples/quick_serve_restaurant/.gitkeep +0 -0
  253. {dao_ai-0.0.21 → dao_ai-0.0.22}/examples/quick_serve_restaurant/examples.yaml +0 -0
  254. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/dais2025/extract_store_numbers.sql +0 -0
  255. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/dais2025/find_inventory_by_sku.sql +0 -0
  256. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/dais2025/find_inventory_by_upc.sql +0 -0
  257. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/dais2025/find_product_by_sku.sql +0 -0
  258. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/dais2025/find_product_by_upc.sql +0 -0
  259. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/dais2025/find_store_by_number.sql +0 -0
  260. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
  261. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
  262. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
  263. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
  264. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/hardware_store/find_product_by_sku.sql +0 -0
  265. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/hardware_store/find_product_by_upc.sql +0 -0
  266. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
  267. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
  268. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/quick_serve_restaurant/.gitkeep +0 -0
  269. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
  270. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
  271. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
  272. {dao_ai-0.0.21 → dao_ai-0.0.22}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
  273. /dao_ai-0.0.21/notebooks/05_agent_as_code_driver.py → /dao_ai-0.0.22/notebooks/05_deploy_agent.py +0 -0
  274. {dao_ai-0.0.21 → dao_ai-0.0.22}/notebooks/08_run_examples.py +0 -0
  275. {dao_ai-0.0.21 → dao_ai-0.0.22}/notebooks/99_scratchpad.py +0 -0
  276. {dao_ai-0.0.21 → dao_ai-0.0.22}/notebooks/INVESTech.py +0 -0
  277. {dao_ai-0.0.21 → dao_ai-0.0.22}/schemas/bundle_config_schema.json +0 -0
  278. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/__init__.py +0 -0
  279. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/models.py +0 -0
  280. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/tools/__init__.py +0 -0
  281. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/tools/customer.py +0 -0
  282. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/tools/employee.py +0 -0
  283. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/tools/executive.py +0 -0
  284. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/tools/genie.py +0 -0
  285. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/tools/inventory.py +0 -0
  286. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/tools/models.py +0 -0
  287. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dais2025/tools/store.py +0 -0
  288. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/__init__.py +0 -0
  289. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/agent_as_code.py +0 -0
  290. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/catalog.py +0 -0
  291. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/chat_models.py +0 -0
  292. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/cli.py +0 -0
  293. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/guardrails.py +0 -0
  294. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/hooks/__init__.py +0 -0
  295. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/hooks/core.py +0 -0
  296. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/memory/__init__.py +0 -0
  297. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/memory/base.py +0 -0
  298. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/messages.py +0 -0
  299. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/models.py +0 -0
  300. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/nodes.py +0 -0
  301. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/prompts.py +0 -0
  302. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/providers/__init__.py +0 -0
  303. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/providers/base.py +0 -0
  304. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/state.py +0 -0
  305. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/__init__.py +0 -0
  306. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/agent.py +0 -0
  307. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/core.py +0 -0
  308. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/human_in_the_loop.py +0 -0
  309. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/mcp.py +0 -0
  310. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/python.py +0 -0
  311. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/time.py +0 -0
  312. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/unity_catalog.py +0 -0
  313. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/tools/vector_search.py +0 -0
  314. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/types.py +0 -0
  315. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/dao_ai/vector_search.py +0 -0
  316. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/hardware_store/__init__.py +0 -0
  317. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/hardware_store/hooks.py +0 -0
  318. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/hardware_store/tools.py +0 -0
  319. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/quick_serve_restaurant/.gitkeep +0 -0
  320. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/quick_serve_restaurant/__init__.py +0 -0
  321. {dao_ai-0.0.21 → dao_ai-0.0.22}/src/quick_serve_restaurant/tools.py +0 -0
  322. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/config/test_model_config.yaml +0 -0
  323. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/conftest.py +0 -0
  324. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_catalog.py +0 -0
  325. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_chat_history.py +0 -0
  326. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_config.py +0 -0
  327. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_function_parsing.py +0 -0
  328. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_genie.py +0 -0
  329. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
  330. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_hooks.py +0 -0
  331. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_inference.py +0 -0
  332. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_inference_integration.py +0 -0
  333. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_mcp.py +0 -0
  334. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_messages.py +0 -0
  335. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_models.py +0 -0
  336. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_postgres_integration.py +0 -0
  337. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_state.py +0 -0
  338. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_summarization_inference.py +0 -0
  339. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_tools.py +0 -0
  340. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_types.py +0 -0
  341. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_unity_catalog.py +0 -0
  342. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_utils.py +0 -0
  343. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/test_vector_search.py +0 -0
  344. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/dao_ai/weather_server_mcp.py +0 -0
  345. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/hardware_store/.gitkeep +0 -0
  346. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/hardware_store/test_graph.py +0 -0
  347. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/images/doritos_upc.png +0 -0
  348. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/images/lays_upc.png +0 -0
  349. {dao_ai-0.0.21 → dao_ai-0.0.22}/tests/quick_serve_restaurant/.gitkeep +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dao-ai
3
- Version: 0.0.21
3
+ Version: 0.0.22
4
4
  Summary: DAO AI: A modular, multi-agent orchestration framework for complex AI workflows. Supports agent handoff, tool integration, and dynamic configuration via YAML.
5
5
  Project-URL: Homepage, https://github.com/natefleming/dao-ai
6
6
  Project-URL: Documentation, https://natefleming.github.io/dao-ai
@@ -24,9 +24,9 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
24
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
25
  Classifier: Topic :: System :: Distributed Computing
26
26
  Requires-Python: >=3.12
27
- Requires-Dist: databricks-agents>=1.6.0
27
+ Requires-Dist: databricks-agents>=1.6.1
28
28
  Requires-Dist: databricks-langchain>=0.8.0
29
- Requires-Dist: databricks-sdk[openai]>=0.66.0
29
+ Requires-Dist: databricks-sdk[openai]>=0.67.0
30
30
  Requires-Dist: duckduckgo-search>=8.0.2
31
31
  Requires-Dist: grandalf>=0.8
32
32
  Requires-Dist: langchain-mcp-adapters>=0.1.10
@@ -194,29 +194,30 @@ resources:
194
194
  databases:
195
195
  # PostgreSQL database for agent memory and checkpoints
196
196
  retail_database: &retail_database
197
- name: "retail-consumer-goods"
197
+ name: "Retail and Consumer Goods Database"
198
+ instance_name: "retail-consumer-goods"
198
199
  description: "Database for agent memory and checkpoints"
199
200
 
200
201
  # Database connection parameters
201
202
  # These can be set via environment variables or Databricks secrets
202
- host:
203
- default_value: localhost
204
- options:
205
- - env: PGHOST # Environment variable
206
- - scope: retail_ai # Databricks secret scope
207
- secret: PGHOST # Secret name
208
- port:
209
- default_value: 5432
210
- options:
211
- - env: PGPORT
212
- - scope: retail_ai
213
- secret: PGPORT
214
- database:
215
- default_value: databricks_postgres # Default database name
216
- options:
217
- - env: PGDATABASE
218
- - scope: retail_ai
219
- secret: PGDATABASE
203
+ # host:
204
+ # default_value: localhost
205
+ # options:
206
+ # - env: PGHOST # Environment variable
207
+ # - scope: retail_ai # Databricks secret scope
208
+ # secret: PGHOST # Secret name
209
+ # port:
210
+ # default_value: 5432
211
+ # options:
212
+ # - env: PGPORT
213
+ # - scope: retail_ai
214
+ # secret: PGPORT
215
+ # database:
216
+ # default_value: databricks_postgres # Default database name
217
+ # options:
218
+ # - env: PGDATABASE
219
+ # - scope: retail_ai
220
+ # secret: PGDATABASE
220
221
 
221
222
 
222
223
  # Traditional PostgreSQL authentication (commented out)
@@ -959,7 +960,7 @@ app:
959
960
  content: Can you recommend a lamp to match my oak side tables?
960
961
  custom_inputs:
961
962
  configurable:
962
- thread_id: "1"
963
+ #thread_id: "1"
963
964
  user_id: my_user_id
964
965
  store_num: 87887
965
966
  #chat_history:
@@ -50,17 +50,24 @@ resources:
50
50
  base_parameters:
51
51
  config-path: ${var.config_path}
52
52
  environment_key: dao-ai-env
53
+ - task_key: provision-lakebase
54
+ notebook_task:
55
+ notebook_path: ./notebooks/03_provision_lakebase.py
56
+ base_parameters:
57
+ config-path: ${var.config_path}
58
+ environment_key: dao-ai-env
53
59
  - task_key: generate-evaluation-data
54
60
  depends_on:
55
61
  - task_key: provision-vector-search
56
62
  notebook_task:
57
- notebook_path: ./notebooks/03_generate_evaluation_data.py
63
+ notebook_path: ./notebooks/06_generate_evaluation_data.py
58
64
  base_parameters:
59
65
  config-path: ${var.config_path}
60
66
  environment_key: dao-ai-env
61
67
  - task_key: unity-catalog-tools
62
68
  depends_on:
63
69
  - task_key: provision-vector-search
70
+ - task_key: provision-lakebase
64
71
  notebook_task:
65
72
  notebook_path: ./notebooks/04_unity_catalog_tools.py
66
73
  base_parameters:
@@ -70,7 +77,7 @@ resources:
70
77
  depends_on:
71
78
  - task_key: unity-catalog-tools
72
79
  notebook_task:
73
- notebook_path: ./notebooks/05_agent_as_code_driver.py
80
+ notebook_path: ./notebooks/05_deploy_agent.py
74
81
  base_parameters:
75
82
  config-path: ${var.config_path}
76
83
  environment_key: dao-ai-env
@@ -79,7 +86,7 @@ resources:
79
86
  - task_key: deploy-agents
80
87
  - task_key: generate-evaluation-data
81
88
  notebook_task:
82
- notebook_path: ./notebooks/06_run_evaluation.py
89
+ notebook_path: ./notebooks/07_run_evaluation.py
83
90
  base_parameters:
84
91
  config-path: ${var.config_path}
85
92
  environment_key: dao-ai-env
@@ -1,11 +1,42 @@
1
1
  # Databricks notebook source
2
2
  # MAGIC %pip install --quiet --upgrade -r ../requirements.txt
3
+ # MAGIC %pip uninstall --quiet -y databricks-connect pyspark pyspark-connect
4
+ # MAGIC %pip install --quiet databricks-connect
3
5
  # MAGIC %restart_python
4
6
 
5
7
  # COMMAND ----------
6
8
 
7
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
8
- config_path: str = dbutils.widgets.get("config-path")
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
9
40
  print(config_path)
10
41
 
11
42
  # COMMAND ----------
@@ -6,10 +6,38 @@
6
6
 
7
7
  # COMMAND ----------
8
8
 
9
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
10
- config_path: str = dbutils.widgets.get("config-path")
11
- print(config_path)
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
12
31
 
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
40
+ print(config_path)
13
41
  # COMMAND ----------
14
42
 
15
43
  import sys
@@ -0,0 +1,85 @@
1
+ # Databricks notebook source
2
+ # MAGIC %pip install --quiet --upgrade -r ../requirements.txt
3
+ # MAGIC %pip uninstall --quiet -y databricks-connect pyspark pyspark-connect
4
+ # MAGIC %pip install --quiet databricks-connect
5
+ # MAGIC %restart_python
6
+
7
+ # COMMAND ----------
8
+
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
40
+ print(config_path)
41
+
42
+ # COMMAND ----------
43
+
44
+ import sys
45
+ from typing import Sequence
46
+ from importlib.metadata import version
47
+
48
+ sys.path.insert(0, "../src")
49
+
50
+ pip_requirements: Sequence[str] = (
51
+ f"databricks-sdk=={version('databricks-sdk')}",
52
+ f"mlflow=={version('mlflow')}",
53
+ )
54
+ print("\n".join(pip_requirements))
55
+
56
+ # COMMAND ----------
57
+
58
+ # MAGIC %load_ext autoreload
59
+ # MAGIC %autoreload 2
60
+
61
+ # COMMAND ----------
62
+
63
+ from dotenv import find_dotenv, load_dotenv
64
+
65
+ _ = load_dotenv(find_dotenv())
66
+
67
+ # COMMAND ----------
68
+
69
+ from dao_ai.config import AppConfig
70
+
71
+ config: AppConfig = AppConfig.from_file(path=config_path)
72
+
73
+ # COMMAND ----------
74
+
75
+ from dao_ai.config import DatabaseModel
76
+
77
+ databases: dict[str, DatabaseModel] = config.resources.databases
78
+
79
+ for _, database in databases.items():
80
+ database: DatabaseModel
81
+
82
+ print(f"database: {database}")
83
+ database.create()
84
+
85
+
@@ -6,8 +6,37 @@
6
6
 
7
7
  # COMMAND ----------
8
8
 
9
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
10
- config_path: str = dbutils.widgets.get("config-path")
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
11
40
  print(config_path)
12
41
 
13
42
  # COMMAND ----------
@@ -6,8 +6,37 @@
6
6
 
7
7
  # COMMAND ----------
8
8
 
9
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
10
- config_path: str = dbutils.widgets.get("config-path")
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
11
40
  print(config_path)
12
41
 
13
42
  # COMMAND ----------
@@ -1,5 +1,4 @@
1
1
  # Databricks notebook source
2
- # DBTITLE 1,Install Required Python Packages and Restart Kernel
3
2
  # MAGIC %pip install --quiet --upgrade -r ../requirements.txt
4
3
  # MAGIC %pip uninstall --quiet -y databricks-connect pyspark pyspark-connect
5
4
  # MAGIC %pip install --quiet databricks-connect
@@ -7,11 +6,38 @@
7
6
 
8
7
  # COMMAND ----------
9
8
 
10
- # DBTITLE 1,Set and Retrieve Configuration Path
11
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
12
- config_path: str = dbutils.widgets.get("config-path")
13
- print(config_path)
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
14
31
 
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
40
+ print(config_path)
15
41
  # COMMAND ----------
16
42
 
17
43
  from dotenv import find_dotenv, load_dotenv
@@ -1,11 +1,42 @@
1
1
  # Databricks notebook source
2
- # MAGIC %pip install --quiet -r ../requirements.txt
2
+ # MAGIC %pip install --quiet --upgrade -r ../requirements.txt
3
+ # MAGIC %pip uninstall --quiet -y databricks-connect pyspark pyspark-connect
4
+ # MAGIC %pip install --quiet databricks-connect
3
5
  # MAGIC %restart_python
4
6
 
5
7
  # COMMAND ----------
6
8
 
7
- dbutils.widgets.text(name="config-path", defaultValue="../config/model_config.yaml")
8
- config_path: str = dbutils.widgets.get("config-path")
9
+ from typing import Sequence
10
+ import os
11
+
12
+ def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
13
+ if not os.path.exists(base_path):
14
+ raise FileNotFoundError(f"Base path does not exist: {base_path}")
15
+
16
+ if not os.path.isdir(base_path):
17
+ raise NotADirectoryError(f"Base path is not a directory: {base_path}")
18
+
19
+ yaml_files = []
20
+
21
+ for root, dirs, files in os.walk(base_path):
22
+ for file in files:
23
+ if file.lower().endswith(('.yaml', '.yml')):
24
+ yaml_files.append(os.path.join(root, file))
25
+
26
+ return sorted(yaml_files)
27
+
28
+ # COMMAND ----------
29
+
30
+ dbutils.widgets.text(name="config-path", defaultValue="")
31
+
32
+ config_files: Sequence[str] = find_yaml_files_os_walk("../config")
33
+ dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
34
+
35
+ config_path: str | None = dbutils.widgets.get("config-path") or None
36
+ project_path: str = dbutils.widgets.get("config-paths") or None
37
+
38
+ config_path: str = config_path or project_path
39
+
9
40
  print(config_path)
10
41
 
11
42
  # COMMAND ----------
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "dao-ai"
7
- version = "0.0.21"
7
+ version = "0.0.22"
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" }
@@ -42,9 +42,9 @@ classifiers = [
42
42
  "Topic :: System :: Distributed Computing",
43
43
  ]
44
44
  dependencies = [
45
- "databricks-agents>=1.6.0",
45
+ "databricks-agents>=1.6.1",
46
46
  "databricks-langchain>=0.8.0",
47
- "databricks-sdk[openai]>=0.66.0",
47
+ "databricks-sdk[openai]>=0.67.0",
48
48
  "duckduckgo-search>=8.0.2",
49
49
  "grandalf>=0.8",
50
50
  "langchain>=0.3.27",
@@ -22,10 +22,10 @@ contourpy==1.3.2
22
22
  cryptography==45.0.7
23
23
  cycler==0.12.1
24
24
  cyclopts==3.24.0
25
- databricks-agents==1.6.0
25
+ databricks-agents==1.6.1
26
26
  databricks-ai-bridge==0.8.0
27
27
  databricks-langchain==0.8.0
28
- databricks-sdk==0.66.0
28
+ databricks-sdk==0.67.0
29
29
  dataclasses-json==0.6.7
30
30
  deprecation==2.1.0
31
31
  distlib==0.3.9
@@ -663,6 +663,7 @@
663
663
  "type": "object"
664
664
  },
665
665
  "DatabaseModel": {
666
+ "additionalProperties": false,
666
667
  "properties": {
667
668
  "on_behalf_of_user": {
668
669
  "anyOf": [
@@ -680,6 +681,18 @@
680
681
  "title": "Name",
681
682
  "type": "string"
682
683
  },
684
+ "instance_name": {
685
+ "anyOf": [
686
+ {
687
+ "type": "string"
688
+ },
689
+ {
690
+ "type": "null"
691
+ }
692
+ ],
693
+ "default": null,
694
+ "title": "Instance Name"
695
+ },
683
696
  "description": {
684
697
  "anyOf": [
685
698
  {
@@ -722,6 +735,7 @@
722
735
  "type": "null"
723
736
  }
724
737
  ],
738
+ "default": null,
725
739
  "title": "Host"
726
740
  },
727
741
  "database": {
@@ -823,9 +837,37 @@
823
837
  "type": "null"
824
838
  }
825
839
  ],
826
- "default": 5,
840
+ "default": 10,
827
841
  "title": "Timeout Seconds"
828
842
  },
843
+ "capacity": {
844
+ "anyOf": [
845
+ {
846
+ "enum": [
847
+ "CU_1",
848
+ "CU_2"
849
+ ],
850
+ "type": "string"
851
+ },
852
+ {
853
+ "type": "null"
854
+ }
855
+ ],
856
+ "default": "CU_2",
857
+ "title": "Capacity"
858
+ },
859
+ "node_count": {
860
+ "anyOf": [
861
+ {
862
+ "type": "integer"
863
+ },
864
+ {
865
+ "type": "null"
866
+ }
867
+ ],
868
+ "default": null,
869
+ "title": "Node Count"
870
+ },
829
871
  "user": {
830
872
  "anyOf": [
831
873
  {
@@ -993,8 +1035,7 @@
993
1035
  }
994
1036
  },
995
1037
  "required": [
996
- "name",
997
- "host"
1038
+ "name"
998
1039
  ],
999
1040
  "title": "DatabaseModel",
1000
1041
  "type": "object"
@@ -2332,6 +2373,13 @@
2332
2373
  "model": {
2333
2374
  "$ref": "#/$defs/LLMModel"
2334
2375
  },
2376
+ "tools": {
2377
+ "items": {
2378
+ "$ref": "#/$defs/ToolModel"
2379
+ },
2380
+ "title": "Tools",
2381
+ "type": "array"
2382
+ },
2335
2383
  "prompt": {
2336
2384
  "anyOf": [
2337
2385
  {
@@ -2788,6 +2836,18 @@
2788
2836
  "VolumeModel": {
2789
2837
  "additionalProperties": false,
2790
2838
  "properties": {
2839
+ "on_behalf_of_user": {
2840
+ "anyOf": [
2841
+ {
2842
+ "type": "boolean"
2843
+ },
2844
+ {
2845
+ "type": "null"
2846
+ }
2847
+ ],
2848
+ "default": false,
2849
+ "title": "On Behalf Of User"
2850
+ },
2791
2851
  "schema": {
2792
2852
  "anyOf": [
2793
2853
  {