dao-ai 0.0.16__tar.gz → 0.0.17__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 (341) hide show
  1. {dao_ai-0.0.16 → dao_ai-0.0.17}/PKG-INFO +1 -1
  2. dao_ai-0.0.17/config/examples/deep_research.yaml +237 -0
  3. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/examples/executive_assistant.yaml +2 -3
  4. {dao_ai-0.0.16 → dao_ai-0.0.17}/pyproject.toml +1 -1
  5. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/graph.py +1 -1
  6. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/models.py +114 -58
  7. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/nodes.py +7 -3
  8. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/agent.py +3 -3
  9. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/genie.py +4 -2
  10. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/human_in_the_loop.py +3 -3
  11. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/mcp.py +11 -12
  12. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_summarization_inference.py +64 -48
  13. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_tools.py +20 -7
  14. dao_ai-0.0.16/config/examples/deep_research.yaml +0 -356
  15. {dao_ai-0.0.16 → dao_ai-0.0.17}/.gitignore +0 -0
  16. {dao_ai-0.0.16 → dao_ai-0.0.17}/.python-version +0 -0
  17. {dao_ai-0.0.16 → dao_ai-0.0.17}/CHANGELOG.md +0 -0
  18. {dao_ai-0.0.16 → dao_ai-0.0.17}/CONTRIBUTING.md +0 -0
  19. {dao_ai-0.0.16 → dao_ai-0.0.17}/LICENSE +0 -0
  20. {dao_ai-0.0.16 → dao_ai-0.0.17}/Makefile +0 -0
  21. {dao_ai-0.0.16 → dao_ai-0.0.17}/README.md +0 -0
  22. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/Makefile +0 -0
  23. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
  24. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
  25. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  26. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  27. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  28. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  29. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/development_workflows.md +0 -0
  30. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/.gitkeep +0 -0
  31. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/Makefile +0 -0
  32. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
  33. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
  34. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
  35. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
  36. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
  37. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
  38. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
  39. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
  40. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
  41. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
  42. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
  43. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
  44. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
  45. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
  46. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/architecture.png +0 -0
  47. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
  48. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
  49. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
  50. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
  51. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
  52. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
  53. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
  54. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
  55. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/index.md +0 -0
  56. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
  57. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
  58. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
  59. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
  60. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
  61. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
  62. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
  63. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
  64. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/load-env.sh +0 -0
  65. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
  66. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
  67. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
  68. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
  69. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
  70. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
  71. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
  72. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
  73. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
  74. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
  75. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
  76. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
  77. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
  78. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
  79. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
  80. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
  81. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
  82. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
  83. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
  84. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
  85. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
  86. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
  87. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
  88. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
  89. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
  90. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
  91. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
  92. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
  93. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
  94. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
  95. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
  96. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
  97. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
  98. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
  99. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
  100. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
  101. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
  102. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
  103. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
  104. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
  105. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
  106. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
  107. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
  108. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
  109. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
  110. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
  111. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
  112. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
  113. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
  114. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
  115. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
  116. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
  117. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
  118. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
  119. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
  120. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
  121. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
  122. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
  123. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
  124. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
  125. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
  126. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
  127. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
  128. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
  129. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
  130. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
  131. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
  132. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
  133. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
  134. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
  135. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
  136. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
  137. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
  138. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
  139. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
  140. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
  141. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
  142. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
  143. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
  144. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
  145. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
  146. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
  147. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
  148. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
  149. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
  150. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
  151. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
  152. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
  153. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
  154. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
  155. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
  156. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
  157. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
  158. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
  159. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
  160. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
  161. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
  162. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
  163. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
  164. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
  165. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
  166. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
  167. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
  168. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
  169. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
  170. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
  171. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
  172. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
  173. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
  174. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
  175. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
  176. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
  177. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/tests/.gitkeep +0 -0
  178. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/tests/README.md +0 -0
  179. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
  180. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
  181. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
  182. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
  183. {dao_ai-0.0.16 → dao_ai-0.0.17}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
  184. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/dais2025/model_config_dais.yaml +0 -0
  185. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/examples/genie.yaml +0 -0
  186. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/examples/genie_and_vector_search.yaml +0 -0
  187. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/examples/human_in_the_loop.yaml +0 -0
  188. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/examples/jira.yaml +0 -0
  189. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/examples/mcp.yaml +0 -0
  190. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/examples/minimal.yaml +0 -0
  191. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/examples/reservations.yaml +0 -0
  192. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/hardware_store/supervisor.yaml +0 -0
  193. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/hardware_store/supervisor_postgres.yaml +0 -0
  194. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/hardware_store/swarm.yaml +0 -0
  195. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/quick_serve_restaurant/.gitkeep +0 -0
  196. {dao_ai-0.0.16 → dao_ai-0.0.17}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +0 -0
  197. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/appointments.sql +0 -0
  198. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/appointments_data.sql +0 -0
  199. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/brand_rep_demo_data.sql +0 -0
  200. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/brand_rep_demo_queries.sql +0 -0
  201. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/brand_rep_demo_tables.sql +0 -0
  202. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/brand_rep_demo_validation.sql +0 -0
  203. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/customers.sql +0 -0
  204. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/customers_data.sql +0 -0
  205. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/dim_stores.sql +0 -0
  206. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/dim_stores_data.sql +0 -0
  207. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/employee_performance.sql +0 -0
  208. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/employee_performance_data.sql +0 -0
  209. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/employee_tasks.sql +0 -0
  210. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/employee_tasks_data.sql +0 -0
  211. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/inventory.sql +0 -0
  212. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/inventory_data.sql +0 -0
  213. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/managers.sql +0 -0
  214. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/managers_data.sql +0 -0
  215. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/product_data.sql +0 -0
  216. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/products.sql +0 -0
  217. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/dais2025/task_assignments.sql +0 -0
  218. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/hardware_store/inventory.snappy.parquet +0 -0
  219. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/hardware_store/inventory.sql +0 -0
  220. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/hardware_store/products.snappy.parquet +0 -0
  221. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/hardware_store/products.sql +0 -0
  222. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/quick_serve_restaurant/.gitkeep +0 -0
  223. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
  224. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/quick_serve_restaurant/items_description.csv +0 -0
  225. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/quick_serve_restaurant/items_description.sql +0 -0
  226. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/quick_serve_restaurant/items_raw.csv +0 -0
  227. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/quick_serve_restaurant/items_raw.sql +0 -0
  228. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/quick_serve_restaurant/orders_raw.csv +0 -0
  229. {dao_ai-0.0.16 → dao_ai-0.0.17}/data/quick_serve_restaurant/orders_raw.sql +0 -0
  230. {dao_ai-0.0.16 → dao_ai-0.0.17}/databricks.yaml +0 -0
  231. {dao_ai-0.0.16 → dao_ai-0.0.17}/docs/genie.png +0 -0
  232. {dao_ai-0.0.16 → dao_ai-0.0.17}/docs/hardware_store/README.md +0 -0
  233. {dao_ai-0.0.16 → dao_ai-0.0.17}/docs/hardware_store/retail_supervisor.png +0 -0
  234. {dao_ai-0.0.16 → dao_ai-0.0.17}/docs/hardware_store/retail_swarm.png +0 -0
  235. {dao_ai-0.0.16 → dao_ai-0.0.17}/docs/quick_serve_restaurant/.gitkeep +0 -0
  236. {dao_ai-0.0.16 → dao_ai-0.0.17}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
  237. {dao_ai-0.0.16 → dao_ai-0.0.17}/environment.yaml +0 -0
  238. {dao_ai-0.0.16 → dao_ai-0.0.17}/examples/dais2025/examples.yaml +0 -0
  239. {dao_ai-0.0.16 → dao_ai-0.0.17}/examples/deep_research/examples.yaml +0 -0
  240. {dao_ai-0.0.16 → dao_ai-0.0.17}/examples/executive_assistant/examples.yaml +0 -0
  241. {dao_ai-0.0.16 → dao_ai-0.0.17}/examples/hardware_store/examples.yaml +0 -0
  242. {dao_ai-0.0.16 → dao_ai-0.0.17}/examples/quick_serve_restaurant/.gitkeep +0 -0
  243. {dao_ai-0.0.16 → dao_ai-0.0.17}/examples/quick_serve_restaurant/examples.yaml +0 -0
  244. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/dais2025/extract_store_numbers.sql +0 -0
  245. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/dais2025/find_inventory_by_sku.sql +0 -0
  246. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/dais2025/find_inventory_by_upc.sql +0 -0
  247. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/dais2025/find_product_by_sku.sql +0 -0
  248. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/dais2025/find_product_by_upc.sql +0 -0
  249. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/dais2025/find_store_by_number.sql +0 -0
  250. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
  251. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
  252. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
  253. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
  254. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/hardware_store/find_product_by_sku.sql +0 -0
  255. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/hardware_store/find_product_by_upc.sql +0 -0
  256. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
  257. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
  258. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/quick_serve_restaurant/.gitkeep +0 -0
  259. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
  260. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
  261. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
  262. {dao_ai-0.0.16 → dao_ai-0.0.17}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
  263. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/01_ingest_and_transform.py +0 -0
  264. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/02_provision_vector_search.py +0 -0
  265. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/03_generate_evaluation_data.py +0 -0
  266. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/04_unity_catalog_tools.py +0 -0
  267. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/05_agent_as_code_driver.py +0 -0
  268. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/06_run_evaluation.py +0 -0
  269. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/08_run_examples.py +0 -0
  270. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/09_evaluate_inferences.py +0 -0
  271. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/99_scratchpad.py +0 -0
  272. {dao_ai-0.0.16 → dao_ai-0.0.17}/notebooks/INVESTech.py +0 -0
  273. {dao_ai-0.0.16 → dao_ai-0.0.17}/requirements.txt +0 -0
  274. {dao_ai-0.0.16 → dao_ai-0.0.17}/schemas/bundle_config_schema.json +0 -0
  275. {dao_ai-0.0.16 → dao_ai-0.0.17}/schemas/model_config_schema.json +0 -0
  276. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/__init__.py +0 -0
  277. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/models.py +0 -0
  278. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/tools/__init__.py +0 -0
  279. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/tools/customer.py +0 -0
  280. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/tools/employee.py +0 -0
  281. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/tools/executive.py +0 -0
  282. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/tools/genie.py +0 -0
  283. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/tools/inventory.py +0 -0
  284. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/tools/models.py +0 -0
  285. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dais2025/tools/store.py +0 -0
  286. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/__init__.py +0 -0
  287. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/agent_as_code.py +0 -0
  288. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/catalog.py +0 -0
  289. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/chat_models.py +0 -0
  290. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/cli.py +0 -0
  291. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/config.py +0 -0
  292. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/guardrails.py +0 -0
  293. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/hooks/__init__.py +0 -0
  294. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/hooks/core.py +0 -0
  295. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/memory/__init__.py +0 -0
  296. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/memory/base.py +0 -0
  297. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/memory/core.py +0 -0
  298. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/memory/postgres.py +0 -0
  299. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/messages.py +0 -0
  300. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/prompts.py +0 -0
  301. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/providers/__init__.py +0 -0
  302. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/providers/base.py +0 -0
  303. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/providers/databricks.py +0 -0
  304. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/state.py +0 -0
  305. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/__init__.py +0 -0
  306. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/core.py +0 -0
  307. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/python.py +0 -0
  308. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/time.py +0 -0
  309. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/unity_catalog.py +0 -0
  310. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/tools/vector_search.py +0 -0
  311. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/types.py +0 -0
  312. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/utils.py +0 -0
  313. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/dao_ai/vector_search.py +0 -0
  314. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/hardware_store/__init__.py +0 -0
  315. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/hardware_store/hooks.py +0 -0
  316. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/hardware_store/tools.py +0 -0
  317. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/quick_serve_restaurant/.gitkeep +0 -0
  318. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/quick_serve_restaurant/__init__.py +0 -0
  319. {dao_ai-0.0.16 → dao_ai-0.0.17}/src/quick_serve_restaurant/tools.py +0 -0
  320. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/config/test_model_config.yaml +0 -0
  321. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/conftest.py +0 -0
  322. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_catalog.py +0 -0
  323. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_chat_history.py +0 -0
  324. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_config.py +0 -0
  325. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_databricks.py +0 -0
  326. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_function_parsing.py +0 -0
  327. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_hooks.py +0 -0
  328. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_inference.py +0 -0
  329. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_mcp.py +0 -0
  330. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_messages.py +0 -0
  331. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_models.py +0 -0
  332. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_state.py +0 -0
  333. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_types.py +0 -0
  334. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_utils.py +0 -0
  335. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/test_vector_search.py +0 -0
  336. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/dao_ai/weather_server_mcp.py +0 -0
  337. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/hardware_store/.gitkeep +0 -0
  338. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/hardware_store/test_graph.py +0 -0
  339. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/images/doritos_upc.png +0 -0
  340. {dao_ai-0.0.16 → dao_ai-0.0.17}/tests/images/lays_upc.png +0 -0
  341. {dao_ai-0.0.16 → dao_ai-0.0.17}/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.16
3
+ Version: 0.0.17
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
@@ -0,0 +1,237 @@
1
+ # yaml-language-server: $schema=../../schemas/model_config_schema.json
2
+
3
+ variables:
4
+ tavily_search_key: &tavily_search_key
5
+ options:
6
+ - env: TAVILY_API_KEY
7
+ - scope: retail_consumer_goods
8
+ secret: TAVILY_API_KEY
9
+
10
+ schemas:
11
+ executive_assistant_schema: &executive_assistant_schema
12
+ catalog_name: retail_consumer_goods
13
+ schema_name: store_ops
14
+
15
+ resources:
16
+ llms:
17
+
18
+ fast_llm: &fast_llm
19
+ name: databricks-meta-llama-3-1-8b-instruct
20
+ temperature: 0.1
21
+ max_tokens: 8192
22
+
23
+ tool_calling_llm: &tool_calling_llm
24
+ name: databricks-claude-3-7-sonnet
25
+ temperature: 0.1
26
+ max_tokens: 8192
27
+ fallbacks:
28
+ - databricks-meta-llama-3-3-70b-instruct
29
+
30
+ # LLM for complex reasoning tasks
31
+ reasoning_llm: &reasoning_llm
32
+ name: databricks-claude-3-7-sonnet
33
+ temperature: 0.1
34
+ max_tokens: 8192
35
+
36
+ deep_reasoning_llm: &deep_reasoning_llm
37
+ name: databricks-claude-sonnet-4
38
+ temperature: 0.1
39
+ max_tokens: 8192
40
+ fallbacks:
41
+ - databricks-claude-3-7-sonnet
42
+
43
+ judge_llm: &judge_llm
44
+ name: databricks-claude-3-7-sonnet
45
+ temperature: 0.5
46
+ max_tokens: 8192
47
+
48
+ embedding_model: &embedding_model
49
+ name: databricks-gte-large-en
50
+
51
+
52
+ tables:
53
+ employee_performance:
54
+ schema: *executive_assistant_schema
55
+ name: employee_performance
56
+
57
+ products:
58
+ schema: *executive_assistant_schema
59
+ name: products
60
+
61
+ inventory:
62
+ schema: *executive_assistant_schema
63
+ name: inventory
64
+
65
+ customers:
66
+ schema: *executive_assistant_schema
67
+ name: customers
68
+
69
+ managers:
70
+ schema: *executive_assistant_schema
71
+ name: managers
72
+
73
+ employee_tasks:
74
+ schema: *executive_assistant_schema
75
+ name: employee_tasks
76
+
77
+ appointments:
78
+ schema: *executive_assistant_schema
79
+ name: appointments
80
+
81
+ evaluation:
82
+ schema: *executive_assistant_schema
83
+ name: evaluation
84
+
85
+
86
+ functions:
87
+
88
+ find_inventory_by_sku: &find_inventory_by_sku
89
+ schema: *executive_assistant_schema
90
+ name: find_inventory_by_sku
91
+
92
+ find_inventory_by_upc: &find_inventory_by_upc
93
+ schema: *executive_assistant_schema
94
+ name: find_inventory_by_upc
95
+
96
+ find_product_by_sku: &find_product_by_sku
97
+ schema: *executive_assistant_schema
98
+ name: find_product_by_sku
99
+
100
+ find_product_by_upc: &find_product_by_upc
101
+ schema: *executive_assistant_schema
102
+ name: find_product_by_upc
103
+
104
+ find_store_by_number: &find_store_by_number
105
+ schema: *executive_assistant_schema
106
+ name: find_store_by_number
107
+
108
+ find_store_inventory_by_sku: &find_store_inventory_by_sku
109
+ schema: *executive_assistant_schema
110
+ name: find_store_inventory_by_sku
111
+
112
+ find_store_inventory_by_upc: &find_store_inventory_by_upc
113
+ schema: *executive_assistant_schema
114
+ name: find_store_inventory_by_upc
115
+
116
+ genie_rooms:
117
+ executive_assistant_genie_room: &executive_assistant_genie_room
118
+ name: "Executive Assistant Genie Room"
119
+ description: "A room for Genie agents to interact"
120
+ space_id: 01f05dd06c421ad6b522bf7a517cf6d2
121
+
122
+
123
+ tools:
124
+ executive_assistant_genie_tool: &executive_assistant_genie_tool
125
+ name: executive_assistant_genie_tool
126
+ function:
127
+ type: factory
128
+ name: dao_ai.tools.create_genie_tool
129
+ args:
130
+ name: executive_assistant_genie_tool
131
+ description: Query the data warehouse for customer KPIs, business metrics, employee performance, inventory data, and other operational insights. Use this tool multiple times as needed to gather comprehensive data for executive-level analysis and recommendations.
132
+ genie_room: *executive_assistant_genie_room
133
+
134
+
135
+ tavily_search_tool: &tavily_search_tool
136
+ name: tavily_search_tool
137
+ function:
138
+ type: factory
139
+ name: langchain_tavily.TavilySearch
140
+ args:
141
+ max_results: 5
142
+ topic: general
143
+ search_depth: advanced
144
+ include_domains: ~
145
+ exclude_domains: ~
146
+
147
+ agents:
148
+ executive_assistant_genie: &executive_assistant_genie
149
+ name: executive_assistant_genie
150
+ description: "Executive Assistant Genie Agent"
151
+ model: *reasoning_llm
152
+ tools:
153
+ - *executive_assistant_genie_tool
154
+ - *tavily_search_tool
155
+ prompt: |
156
+ You are an executive-level data analyst and strategic advisor for a retail consumer goods company. Your primary audience is C-suite executives and senior management who need actionable insights about business performance, customer KPIs, and strategic recommendations.
157
+
158
+ ## Your Core Responsibilities:
159
+
160
+ ### 1. Customer KPI Analysis & Reporting
161
+ - Analyze customer acquisition, retention, lifetime value, and churn metrics
162
+ - Track customer satisfaction scores, NPS, and engagement metrics
163
+ - Monitor customer segment performance and behavior patterns
164
+ - Provide trend analysis and year-over-year comparisons
165
+ - Identify customer pain points and opportunities
166
+
167
+ ### 2. Business Performance Insights
168
+ - Monitor revenue, profit margins, and growth trajectories
169
+ - Analyze inventory turnover, stockouts, and supply chain efficiency
170
+ - Track employee performance and operational KPIs
171
+ - Evaluate store performance across locations
172
+ - Assess product performance and category trends
173
+
174
+ ### 3. Strategic Reasoning & Recommendations
175
+ - Provide context and root cause analysis for performance changes
176
+ - Identify correlations between different business metrics
177
+ - Suggest data-driven action plans and strategic initiatives
178
+ - Recommend resource allocation and investment priorities
179
+ - Highlight risks and opportunities based on data trends
180
+
181
+ ## How to Operate:
182
+
183
+ ### Tool Usage Strategy
184
+ - **Use multiple tool calls** when needed to build comprehensive answers
185
+ - Query different data sources to cross-validate insights
186
+ - Drill down into specific metrics when initial results show concerning trends
187
+ - Always verify assumptions with data before making recommendations
188
+
189
+ ### Communication Style
190
+ - **Executive Summary First**: Lead with key findings and recommendations
191
+ - **Data-Driven**: Support all claims with specific metrics and evidence
192
+ - **Action-Oriented**: Provide clear, implementable next steps
193
+ - **Risk-Aware**: Highlight potential challenges and mitigation strategies
194
+ - **Strategic Context**: Connect findings to broader business objectives
195
+
196
+ ### Response Structure
197
+ 1. **Executive Summary** (2-3 bullet points of key insights)
198
+ 2. **Key Metrics & Analysis** (specific data points with context)
199
+ 3. **Root Cause Analysis** (why trends are occurring)
200
+ 4. **Strategic Recommendations** (actionable next steps)
201
+ 5. **Risk Assessment** (potential challenges and opportunities)
202
+
203
+ ## Guidelines:
204
+
205
+ - Always query the data warehouse using your genie tool to get current, accurate information
206
+ - Make multiple queries if needed to build a complete picture
207
+ - Translate technical metrics into business impact language
208
+ - Provide both short-term tactical and long-term strategic recommendations
209
+ - When data shows concerning trends, immediately investigate potential causes
210
+ - Use industry benchmarks and best practices in your recommendations when relevant
211
+ - Be proactive in identifying trends before they become problems
212
+
213
+ Remember: You are trusted advisor to senior leadership. Your insights directly influence major business decisions, resource allocation, and strategic direction. Ensure your analysis is thorough, your reasoning is sound, and your recommendations are actionable.
214
+
215
+
216
+ app:
217
+ name: executive_assistant_agent
218
+ description: "An executive assistant application"
219
+ log_level: DEBUG
220
+ registered_model:
221
+ schema: *executive_assistant_schema
222
+ name: executive_assistant_agent
223
+ endpoint_name: executive_assistant_agent
224
+ environment_vars:
225
+ TAVILY_API_KEY: "{{secrets/retail_consumer_goods/TAVILY_API_KEY}}"
226
+ tags:
227
+ business: rcg
228
+ streaming: true
229
+ permissions:
230
+ - principals: [users]
231
+ entitlements:
232
+ - CAN_QUERY
233
+ agents:
234
+ - *executive_assistant_genie
235
+ orchestration:
236
+ swarm:
237
+ model: *fast_llm
@@ -34,8 +34,7 @@ resources:
34
34
  max_tokens: 8192
35
35
 
36
36
  deep_reasoning_llm: &deep_reasoning_llm
37
- #name: databricks-claude-sonnet-4
38
- name: databricks-meta-llama-3-3-70b-instruct
37
+ name: databricks-claude-sonnet-4
39
38
  temperature: 0.1
40
39
  max_tokens: 8192
41
40
  fallbacks:
@@ -149,7 +148,7 @@ agents:
149
148
  executive_assistant_genie: &executive_assistant_genie
150
149
  name: executive_assistant_genie
151
150
  description: "Executive Assistant Genie Agent"
152
- model: *deep_reasoning_llm
151
+ model: *reasoning_llm
153
152
  tools:
154
153
  - *executive_assistant_genie_tool
155
154
  - *tavily_search_tool
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "dao-ai"
7
- version = "0.0.16"
7
+ version = "0.0.17"
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" }
@@ -221,7 +221,7 @@ def _create_swarm_graph(config: AppConfig) -> CompiledStateGraph:
221
221
 
222
222
  return swarm_node
223
223
 
224
- #return workflow.compile(checkpointer=checkpointer, store=store)
224
+ # return workflow.compile(checkpointer=checkpointer, store=store)
225
225
 
226
226
 
227
227
  def create_dao_ai_graph(config: AppConfig) -> CompiledStateGraph:
@@ -65,9 +65,19 @@ class LanggraphChatModel(ChatModel):
65
65
  context: Context = self._convert_to_context(params)
66
66
  custom_inputs: dict[str, Any] = {"configurable": context.model_dump()}
67
67
 
68
- response: dict[str, Sequence[BaseMessage]] = self.graph.invoke(
69
- request, context=context, config=custom_inputs
68
+ # Use async ainvoke internally for parallel execution
69
+ import asyncio
70
+
71
+ async def _async_invoke():
72
+ return await self.graph.ainvoke(
73
+ request, context=context, config=custom_inputs
74
+ )
75
+
76
+ loop = asyncio.get_event_loop()
77
+ response: dict[str, Sequence[BaseMessage]] = loop.run_until_complete(
78
+ _async_invoke()
70
79
  )
80
+
71
81
  logger.trace(f"response: {response}")
72
82
 
73
83
  last_message: BaseMessage = response["messages"][-1]
@@ -114,33 +124,51 @@ class LanggraphChatModel(ChatModel):
114
124
  context: Context = self._convert_to_context(params)
115
125
  custom_inputs: dict[str, Any] = {"configurable": context.model_dump()}
116
126
 
117
- for nodes, stream_mode, messages_batch in self.graph.stream(
118
- request,
119
- context=context,
120
- config=custom_inputs,
121
- stream_mode=["messages", "custom"],
122
- subgraphs=True,
123
- ):
124
- nodes: tuple[str, ...]
125
- stream_mode: str
126
- messages_batch: Sequence[BaseMessage]
127
- logger.trace(
128
- f"nodes: {nodes}, stream_mode: {stream_mode}, messages: {messages_batch}"
129
- )
130
- for message in messages_batch:
131
- if (
132
- isinstance(
133
- message,
134
- (
135
- AIMessageChunk,
136
- AIMessage,
137
- ),
138
- )
139
- and message.content
140
- and "summarization" not in nodes
141
- ):
142
- content = message.content
143
- yield self._create_chat_completion_chunk(content)
127
+ # Use async astream internally for parallel execution
128
+ import asyncio
129
+
130
+ async def _async_stream():
131
+ async for nodes, stream_mode, messages_batch in self.graph.astream(
132
+ request,
133
+ context=context,
134
+ config=custom_inputs,
135
+ stream_mode=["messages", "custom"],
136
+ subgraphs=True,
137
+ ):
138
+ nodes: tuple[str, ...]
139
+ stream_mode: str
140
+ messages_batch: Sequence[BaseMessage]
141
+ logger.trace(
142
+ f"nodes: {nodes}, stream_mode: {stream_mode}, messages: {messages_batch}"
143
+ )
144
+ for message in messages_batch:
145
+ if (
146
+ isinstance(
147
+ message,
148
+ (
149
+ AIMessageChunk,
150
+ AIMessage,
151
+ ),
152
+ )
153
+ and message.content
154
+ and "summarization" not in nodes
155
+ ):
156
+ content = message.content
157
+ yield self._create_chat_completion_chunk(content)
158
+
159
+ # Convert async generator to sync generator
160
+ loop = asyncio.get_event_loop()
161
+ async_gen = _async_stream()
162
+
163
+ try:
164
+ while True:
165
+ try:
166
+ item = loop.run_until_complete(async_gen.__anext__())
167
+ yield item
168
+ except StopAsyncIteration:
169
+ break
170
+ finally:
171
+ loop.run_until_complete(async_gen.aclose())
144
172
 
145
173
  def _create_chat_completion_chunk(self, content: str) -> ChatCompletionChunk:
146
174
  return ChatCompletionChunk(
@@ -178,9 +206,18 @@ def _process_langchain_messages(
178
206
  messages: Sequence[BaseMessage],
179
207
  custom_inputs: Optional[dict[str, Any]] = None,
180
208
  ) -> dict[str, Any] | Any:
209
+ """Process LangChain messages using async LangGraph calls internally."""
210
+ import asyncio
211
+
181
212
  if isinstance(app, LanggraphChatModel):
182
213
  app = app.graph
183
- return app.invoke({"messages": messages}, config=custom_inputs)
214
+
215
+ # Use async ainvoke internally for parallel execution
216
+ async def _async_invoke():
217
+ return await app.ainvoke({"messages": messages}, config=custom_inputs)
218
+
219
+ loop = asyncio.get_event_loop()
220
+ return loop.run_until_complete(_async_invoke())
184
221
 
185
222
 
186
223
  def _process_langchain_messages_stream(
@@ -188,6 +225,9 @@ def _process_langchain_messages_stream(
188
225
  messages: Sequence[BaseMessage],
189
226
  custom_inputs: Optional[dict[str, Any]] = None,
190
227
  ) -> Generator[AIMessageChunk, None, None]:
228
+ """Process LangChain messages in streaming mode using async LangGraph calls internally."""
229
+ import asyncio
230
+
191
231
  if isinstance(app, LanggraphChatModel):
192
232
  app = app.graph
193
233
 
@@ -196,32 +236,48 @@ def _process_langchain_messages_stream(
196
236
  custom_inputs = custom_inputs.get("configurable", custom_inputs or {})
197
237
  context: Context = Context(**custom_inputs)
198
238
 
199
- for nodes, stream_mode, messages in app.stream(
200
- {"messages": messages},
201
- context=context,
202
- config=custom_inputs,
203
- stream_mode=["messages", "custom"],
204
- subgraphs=True,
205
- ):
206
- nodes: tuple[str, ...]
207
- stream_mode: str
208
- messages: Sequence[BaseMessage]
209
- logger.trace(
210
- f"nodes: {nodes}, stream_mode: {stream_mode}, messages: {messages}"
211
- )
212
- for message in messages:
213
- if (
214
- isinstance(
215
- message,
216
- (
217
- AIMessageChunk,
218
- AIMessage,
219
- ),
220
- )
221
- and message.content
222
- and "summarization" not in nodes
223
- ):
224
- yield message
239
+ # Use async astream internally for parallel execution
240
+ async def _async_stream():
241
+ async for nodes, stream_mode, stream_messages in app.astream(
242
+ {"messages": messages},
243
+ context=context,
244
+ config=custom_inputs,
245
+ stream_mode=["messages", "custom"],
246
+ subgraphs=True,
247
+ ):
248
+ nodes: tuple[str, ...]
249
+ stream_mode: str
250
+ stream_messages: Sequence[BaseMessage]
251
+ logger.trace(
252
+ f"nodes: {nodes}, stream_mode: {stream_mode}, messages: {stream_messages}"
253
+ )
254
+ for message in stream_messages:
255
+ if (
256
+ isinstance(
257
+ message,
258
+ (
259
+ AIMessageChunk,
260
+ AIMessage,
261
+ ),
262
+ )
263
+ and message.content
264
+ and "summarization" not in nodes
265
+ ):
266
+ yield message
267
+
268
+ # Convert async generator to sync generator
269
+ loop = asyncio.get_event_loop()
270
+ async_gen = _async_stream()
271
+
272
+ try:
273
+ while True:
274
+ try:
275
+ item = loop.run_until_complete(async_gen.__anext__())
276
+ yield item
277
+ except StopAsyncIteration:
278
+ break
279
+ finally:
280
+ loop.run_until_complete(async_gen.aclose())
225
281
 
226
282
 
227
283
  def _process_mlflow_messages(
@@ -272,7 +328,7 @@ def process_messages_stream(
272
328
  Process messages through a ChatAgent in streaming mode.
273
329
 
274
330
  Utility function that normalizes message input formats and
275
- streams the agent's responses as they're generated.
331
+ streams the agent's responses as they're generated using async LangGraph calls internally.
276
332
 
277
333
  Args:
278
334
  app: The ChatAgent to process messages with
@@ -302,7 +358,7 @@ def process_messages(
302
358
  Process messages through a ChatAgent in batch mode.
303
359
 
304
360
  Utility function that normalizes message input formats and
305
- returns the complete response from the agent.
361
+ returns the complete response from the agent using async LangGraph calls internally.
306
362
 
307
363
  Args:
308
364
  app: The ChatAgent to process messages with
@@ -69,7 +69,7 @@ def summarization_node(app_model: AppModel) -> RunnableLike:
69
69
 
70
70
 
71
71
  def call_agent_with_summarized_messages(agent: CompiledStateGraph) -> RunnableLike:
72
- def call_agent(state: SharedState, runtime: Runtime[Context]) -> SharedState:
72
+ async def call_agent(state: SharedState, runtime: Runtime[Context]) -> SharedState:
73
73
  logger.debug(f"Calling agent {agent.name} with summarized messages")
74
74
 
75
75
  # Get the summarized messages from the summarization node
@@ -81,7 +81,9 @@ def call_agent_with_summarized_messages(agent: CompiledStateGraph) -> RunnableLi
81
81
  "messages": messages,
82
82
  }
83
83
 
84
- response: dict[str, Any] = agent.invoke(input=input, context=runtime.context)
84
+ response: dict[str, Any] = await agent.ainvoke(
85
+ input=input, context=runtime.context
86
+ )
85
87
  response_messages = response.get("messages", [])
86
88
  logger.debug(f"Agent returned {len(response_messages)} messages")
87
89
 
@@ -193,7 +195,9 @@ def message_hook_node(config: AppConfig) -> RunnableLike:
193
195
  message_hooks: Sequence[Callable[..., Any]] = create_hooks(config.app.message_hooks)
194
196
 
195
197
  @mlflow.trace()
196
- def message_hook(state: IncomingState, runtime: Runtime[Context]) -> SharedState:
198
+ async def message_hook(
199
+ state: IncomingState, runtime: Runtime[Context]
200
+ ) -> SharedState:
197
201
  logger.debug("Running message validation")
198
202
  response: dict[str, Any] = {"is_valid": True, "message_error": None}
199
203
 
@@ -40,16 +40,16 @@ def create_agent_endpoint_tool(
40
40
 
41
41
  doc: str = description + "\n" + doc_signature
42
42
 
43
- def agent_endpoint(prompt: str) -> AIMessage:
43
+ async def agent_endpoint(prompt: str) -> AIMessage:
44
44
  model: LanguageModelLike = llm.as_chat_model()
45
45
  messages: Sequence[BaseMessage] = [HumanMessage(content=prompt)]
46
- response: AIMessage = model.invoke(messages)
46
+ response: AIMessage = await model.ainvoke(messages)
47
47
  return response
48
48
 
49
49
  name: str = name if name else agent_endpoint.__name__
50
50
 
51
51
  structured_tool: StructuredTool = StructuredTool.from_function(
52
- func=agent_endpoint, name=name, description=doc, parse_docstring=False
52
+ coroutine=agent_endpoint, name=name, description=doc, parse_docstring=False
53
53
  )
54
54
 
55
55
  return structured_tool
@@ -62,14 +62,16 @@ def create_genie_tool(
62
62
 
63
63
  doc: str = description + "\n" + doc_signature
64
64
 
65
- def genie_tool(question: str) -> GenieResponse:
65
+ async def genie_tool(question: str) -> GenieResponse:
66
+ # Use sync API for now since Genie doesn't support async yet
67
+ # Can be easily updated to await when Genie gets async support
66
68
  response: GenieResponse = genie.ask_question(question)
67
69
  return response
68
70
 
69
71
  name: str = name if name else genie_tool.__name__
70
72
 
71
73
  structured_tool: StructuredTool = StructuredTool.from_function(
72
- func=genie_tool, name=name, description=doc, parse_docstring=False
74
+ coroutine=genie_tool, name=name, description=doc, parse_docstring=False
73
75
  )
74
76
 
75
77
  return structured_tool
@@ -50,7 +50,7 @@ def add_human_in_the_loop(
50
50
  logger.debug(f"Wrapping tool {tool} with human-in-the-loop functionality")
51
51
 
52
52
  @create_tool(tool.name, description=tool.description, args_schema=tool.args_schema)
53
- def call_tool_with_interrupt(config: RunnableConfig, **tool_input) -> Any:
53
+ async def call_tool_with_interrupt(config: RunnableConfig, **tool_input) -> Any:
54
54
  logger.debug(f"call_tool_with_interrupt: {tool.name} with input: {tool_input}")
55
55
  request: HumanInterrupt = {
56
56
  "action_request": {
@@ -66,10 +66,10 @@ def add_human_in_the_loop(
66
66
  logger.debug(f"Human interrupt response: {response}")
67
67
 
68
68
  if response["type"] == "accept":
69
- tool_response = tool.invoke(tool_input, config=config)
69
+ tool_response = await tool.ainvoke(tool_input, config=config)
70
70
  elif response["type"] == "edit":
71
71
  tool_input = response["args"]["args"]
72
- tool_response = tool.invoke(tool_input, config=config)
72
+ tool_response = await tool.ainvoke(tool_input, config=config)
73
73
  elif response["type"] == "response":
74
74
  user_feedback = response["args"]
75
75
  tool_response = user_feedback
@@ -77,6 +77,8 @@ def create_mcp_tools(
77
77
  logger.error(f"Failed to list MCP tools: {e}")
78
78
  return []
79
79
 
80
+ # Note: This still needs to run sync during tool creation/registration
81
+ # The actual tool execution will be async
80
82
  try:
81
83
  mcp_tools: list | ListToolsResult = asyncio.run(_list_mcp_tools())
82
84
  if isinstance(mcp_tools, ListToolsResult):
@@ -96,22 +98,19 @@ def create_mcp_tools(
96
98
  description=mcp_tool.description or f"MCP tool: {mcp_tool.name}",
97
99
  args_schema=mcp_tool.inputSchema,
98
100
  )
99
- def tool_wrapper(**kwargs):
101
+ async def tool_wrapper(**kwargs):
100
102
  """Execute MCP tool with fresh session and authentication."""
101
103
  logger.debug(f"Invoking MCP tool {mcp_tool.name} with fresh session")
102
104
 
103
- async def _invoke():
104
- connection = _create_fresh_connection()
105
- client = MultiServerMCPClient({function.name: connection})
105
+ connection = _create_fresh_connection()
106
+ client = MultiServerMCPClient({function.name: connection})
106
107
 
107
- try:
108
- async with client.session(function.name) as session:
109
- return await session.call_tool(mcp_tool.name, kwargs)
110
- except Exception as e:
111
- logger.error(f"MCP tool {mcp_tool.name} failed: {e}")
112
- raise
113
-
114
- return asyncio.run(_invoke())
108
+ try:
109
+ async with client.session(function.name) as session:
110
+ return await session.call_tool(mcp_tool.name, kwargs)
111
+ except Exception as e:
112
+ logger.error(f"MCP tool {mcp_tool.name} failed: {e}")
113
+ raise
115
114
 
116
115
  return as_human_in_the_loop(tool_wrapper, function)
117
116