dao-ai 0.0.8__tar.gz → 0.0.10__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.
- {dao_ai-0.0.8 → dao_ai-0.0.10}/Makefile +1 -1
- {dao_ai-0.0.8 → dao_ai-0.0.10}/PKG-INFO +5 -2
- {dao_ai-0.0.8 → dao_ai-0.0.10}/pyproject.toml +11 -2
- {dao_ai-0.0.8 → dao_ai-0.0.10}/requirements.txt +0 -2
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/config.py +12 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/models.py +1 -1
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/providers/databricks.py +15 -8
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/utils.py +8 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_config.py +170 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_utils.py +15 -1
- dao_ai-0.0.10/tests/hardware_store/.gitkeep +0 -0
- dao_ai-0.0.10/tests/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/.gitignore +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/.python-version +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/CHANGELOG.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/CONTRIBUTING.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/LICENSE +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/Makefile +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/development_workflows.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/.gitkeep +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/Makefile +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/architecture.png +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/index.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/load-env.sh +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/tests/.gitkeep +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/tests/README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/dais2025/model_config_dais.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/examples/genie.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/examples/genie_and_vector_search.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/examples/human_in_the_loop.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/examples/jira.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/examples/mcp.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/examples/minimal.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/examples/reservations.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/hardware_store/supervisor.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/hardware_store/supervisor_postgres.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/hardware_store/swarm.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/appointments.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/appointments_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/brand_rep_demo_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/brand_rep_demo_queries.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/brand_rep_demo_tables.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/brand_rep_demo_validation.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/customers.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/customers_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/dim_stores.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/dim_stores_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/employee_performance.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/employee_performance_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/employee_tasks.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/employee_tasks_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/inventory.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/inventory_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/managers.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/managers_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/product_data.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/products.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/dais2025/task_assignments.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/hardware_store/inventory.snappy.parquet +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/hardware_store/inventory.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/hardware_store/products.snappy.parquet +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/hardware_store/products.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/quick_serve_restaurant/items_description.csv +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/quick_serve_restaurant/items_description.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/quick_serve_restaurant/items_raw.csv +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/quick_serve_restaurant/items_raw.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/quick_serve_restaurant/orders_raw.csv +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/data/quick_serve_restaurant/orders_raw.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/databricks.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/docs/genie.png +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/docs/hardware_store/README.md +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/docs/hardware_store/retail_supervisor.png +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/docs/hardware_store/retail_swarm.png +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/docs/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/environment.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/examples/dais2025/examples.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/examples/hardware_store/examples.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/examples/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/examples/quick_serve_restaurant/examples.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/dais2025/extract_store_numbers.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/dais2025/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/dais2025/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/dais2025/find_product_by_sku.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/dais2025/find_product_by_upc.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/dais2025/find_store_by_number.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/hardware_store/find_product_by_sku.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/hardware_store/find_product_by_upc.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/01_ingest_and_transform.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/02_provision_vector_search.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/03_generate_evaluation_data.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/04_unity_catalog_tools.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/05_agent_as_code_driver.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/06_run_evaluation.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/08_run_examples.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/09_evaluate_inferences.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/notebooks/99_scratchpad.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/schemas/bundle_config_schema.json +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/schemas/model_config_schema.json +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/models.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/tools/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/tools/customer.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/tools/employee.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/tools/executive.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/tools/genie.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/tools/inventory.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/tools/models.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dais2025/tools/store.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/agent_as_code.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/catalog.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/chat_models.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/cli.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/graph.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/guardrails.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/hooks/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/hooks/core.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/memory/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/memory/base.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/memory/core.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/memory/postgres.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/messages.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/nodes.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/prompts.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/providers/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/providers/base.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/state.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/agent.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/core.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/genie.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/human_in_the_loop.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/mcp.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/python.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/time.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/unity_catalog.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/tools/vector_search.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/types.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/dao_ai/vector_search.py +0 -0
- /dao_ai-0.0.8/src/quick_serve_restaurant/.gitkeep → /dao_ai-0.0.10/src/hardware_store/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/hardware_store/hooks.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/hardware_store/tools.py +0 -0
- {dao_ai-0.0.8/tests/hardware_store → dao_ai-0.0.10/src/quick_serve_restaurant}/.gitkeep +0 -0
- /dao_ai-0.0.8/tests/quick_serve_restaurant/.gitkeep → /dao_ai-0.0.10/src/quick_serve_restaurant/__init__.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/src/quick_serve_restaurant/tools.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/config/test_model_config.yaml +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/conftest.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_catalog.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_chat_history.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_databricks.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_function_parsing.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_hooks.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_inference.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_mcp.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_messages.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_models.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_state.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_summarization_inference.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_tools.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_types.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/test_vector_search.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/dao_ai/weather_server_mcp.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/hardware_store/test_graph.py +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.0.8 → dao_ai-0.0.10}/tests/images/lays_upc.png +0 -0
|
@@ -18,7 +18,7 @@ UV := uv
|
|
|
18
18
|
SYNC := $(UV) sync
|
|
19
19
|
BUILD := $(UV) build
|
|
20
20
|
PYTHON := $(UV) run python
|
|
21
|
-
EXPORT := $(UV) pip freeze --exclude-editable
|
|
21
|
+
EXPORT := $(UV) pip freeze --exclude-editable | grep -v -E "(databricks-vectorsearch|pyspark|databricks-connect)"
|
|
22
22
|
PUBLISH := $(UV) run twine upload
|
|
23
23
|
PYTEST := $(UV) run pytest -v -s
|
|
24
24
|
RUFF_CHECK := $(UV) run ruff check --fix --ignore E501
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dao-ai
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.10
|
|
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
|
|
@@ -27,7 +27,6 @@ Requires-Python: >=3.12
|
|
|
27
27
|
Requires-Dist: databricks-agents>=1.2.0
|
|
28
28
|
Requires-Dist: databricks-langchain>=0.4.2
|
|
29
29
|
Requires-Dist: databricks-sdk[openai]>=0.55.0
|
|
30
|
-
Requires-Dist: databricks-vectorsearch>=0.56
|
|
31
30
|
Requires-Dist: duckduckgo-search>=8.0.2
|
|
32
31
|
Requires-Dist: grandalf>=0.8
|
|
33
32
|
Requires-Dist: langchain-mcp-adapters>=0.1.9
|
|
@@ -51,6 +50,10 @@ Requires-Dist: rich>=14.0.0
|
|
|
51
50
|
Requires-Dist: scipy<=1.15
|
|
52
51
|
Requires-Dist: sqlparse>=0.5.3
|
|
53
52
|
Requires-Dist: unitycatalog-ai[databricks]>=0.3.0
|
|
53
|
+
Provides-Extra: databricks
|
|
54
|
+
Requires-Dist: databricks-connect>=15.0.0; extra == 'databricks'
|
|
55
|
+
Requires-Dist: databricks-vectorsearch>=0.56; extra == 'databricks'
|
|
56
|
+
Requires-Dist: pyspark>=3.5.0; extra == 'databricks'
|
|
54
57
|
Provides-Extra: dev
|
|
55
58
|
Requires-Dist: mypy>=1.0.0; extra == 'dev'
|
|
56
59
|
Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dao-ai"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.10"
|
|
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" }
|
|
@@ -45,7 +45,6 @@ dependencies = [
|
|
|
45
45
|
"databricks-agents>=1.2.0",
|
|
46
46
|
"databricks-langchain>=0.4.2",
|
|
47
47
|
"databricks-sdk[openai]>=0.55.0",
|
|
48
|
-
"databricks-vectorsearch>=0.56",
|
|
49
48
|
"duckduckgo-search>=8.0.2",
|
|
50
49
|
"grandalf>=0.8",
|
|
51
50
|
"langchain>=0.3.27",
|
|
@@ -98,6 +97,11 @@ test = [
|
|
|
98
97
|
"pytest-cov>=4.0.0",
|
|
99
98
|
"pytest-mock>=3.10.0",
|
|
100
99
|
]
|
|
100
|
+
databricks = [
|
|
101
|
+
"databricks-vectorsearch>=0.56",
|
|
102
|
+
"pyspark>=3.5.0",
|
|
103
|
+
"databricks-connect>=15.0.0",
|
|
104
|
+
]
|
|
101
105
|
|
|
102
106
|
[dependency-groups]
|
|
103
107
|
dev = [
|
|
@@ -116,6 +120,11 @@ test = [
|
|
|
116
120
|
"pytest-cov>=4.0.0",
|
|
117
121
|
"pytest-mock>=3.10.0",
|
|
118
122
|
]
|
|
123
|
+
databricks = [
|
|
124
|
+
"databricks-vectorsearch>=0.56",
|
|
125
|
+
"pyspark>=3.5.0",
|
|
126
|
+
"databricks-connect>=15.0.0",
|
|
127
|
+
]
|
|
119
128
|
all = [
|
|
120
129
|
{ include-group = "dev" },
|
|
121
130
|
{ include-group = "docs" },
|
|
@@ -20,10 +20,8 @@ contourpy==1.3.2
|
|
|
20
20
|
cycler==0.12.1
|
|
21
21
|
databricks-agents==1.2.0
|
|
22
22
|
databricks-ai-bridge==0.5.1
|
|
23
|
-
databricks-connect==16.3.4
|
|
24
23
|
databricks-langchain==0.5.1
|
|
25
24
|
databricks-sdk==0.61.0
|
|
26
|
-
databricks-vectorsearch==0.56
|
|
27
25
|
dataclasses-json==0.6.7
|
|
28
26
|
deprecation==2.1.0
|
|
29
27
|
distlib==0.3.9
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import atexit
|
|
2
|
+
import importlib
|
|
2
3
|
import os
|
|
4
|
+
import sys
|
|
3
5
|
from abc import ABC, abstractmethod
|
|
4
6
|
from enum import Enum
|
|
5
7
|
from os import PathLike
|
|
@@ -1069,6 +1071,16 @@ class AppModel(BaseModel):
|
|
|
1069
1071
|
|
|
1070
1072
|
return self
|
|
1071
1073
|
|
|
1074
|
+
@model_validator(mode="after")
|
|
1075
|
+
def add_code_paths_to_sys_path(self):
|
|
1076
|
+
for code_path in self.code_paths:
|
|
1077
|
+
parent_path: str = str(Path(code_path).parent)
|
|
1078
|
+
if parent_path not in sys.path:
|
|
1079
|
+
sys.path.insert(0, parent_path)
|
|
1080
|
+
logger.debug(f"Added code path to sys.path: {parent_path}")
|
|
1081
|
+
importlib.invalidate_caches()
|
|
1082
|
+
return self
|
|
1083
|
+
|
|
1072
1084
|
|
|
1073
1085
|
class GuidelineModel(BaseModel):
|
|
1074
1086
|
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
@@ -266,7 +266,7 @@ def _process_config_messages_stream(
|
|
|
266
266
|
def process_messages_stream(
|
|
267
267
|
app: LanggraphChatModel,
|
|
268
268
|
messages: Sequence[BaseMessage] | Sequence[ChatMessage] | dict[str, Any],
|
|
269
|
-
custom_inputs: dict[str, Any],
|
|
269
|
+
custom_inputs: Optional[dict[str, Any]] = None,
|
|
270
270
|
) -> Generator[ChatCompletionChunk | AIMessageChunk, None, None]:
|
|
271
271
|
"""
|
|
272
272
|
Process messages through a ChatAgent in streaming mode.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import base64
|
|
2
|
+
from importlib.metadata import version
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
from typing import Any, Callable, Final, Sequence
|
|
4
5
|
|
|
@@ -57,7 +58,12 @@ from dao_ai.config import (
|
|
|
57
58
|
)
|
|
58
59
|
from dao_ai.models import get_latest_model_version
|
|
59
60
|
from dao_ai.providers.base import ServiceProvider
|
|
60
|
-
from dao_ai.utils import
|
|
61
|
+
from dao_ai.utils import (
|
|
62
|
+
get_installed_packages,
|
|
63
|
+
is_installed,
|
|
64
|
+
is_lib_provided,
|
|
65
|
+
normalize_name,
|
|
66
|
+
)
|
|
61
67
|
from dao_ai.vector_search import endpoint_exists, index_exists
|
|
62
68
|
|
|
63
69
|
MAX_NUM_INDEXES: Final[int] = 50
|
|
@@ -262,10 +268,6 @@ class DatabricksProvider(ServiceProvider):
|
|
|
262
268
|
)
|
|
263
269
|
logger.debug(f"auth_policy: {auth_policy}")
|
|
264
270
|
|
|
265
|
-
pip_requirements: Sequence[str] = (
|
|
266
|
-
get_installed_packages() + config.app.pip_requirements
|
|
267
|
-
)
|
|
268
|
-
|
|
269
271
|
code_paths: list[str] = config.app.code_paths
|
|
270
272
|
for path in code_paths:
|
|
271
273
|
path = Path(path)
|
|
@@ -275,10 +277,13 @@ class DatabricksProvider(ServiceProvider):
|
|
|
275
277
|
model_root_path: Path = Path(dao_ai.__file__).parent
|
|
276
278
|
model_path: Path = model_root_path / "agent_as_code.py"
|
|
277
279
|
|
|
280
|
+
pip_requirements: Sequence[str] = config.app.pip_requirements
|
|
281
|
+
|
|
278
282
|
if is_installed():
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
283
|
+
if not is_lib_provided("dao-ai", pip_requirements):
|
|
284
|
+
pip_requirements += [
|
|
285
|
+
f"dao-ai=={version('dao-ai')}",
|
|
286
|
+
]
|
|
282
287
|
else:
|
|
283
288
|
src_path: Path = model_root_path.parent
|
|
284
289
|
directories: Sequence[Path] = [d for d in src_path.iterdir() if d.is_dir()]
|
|
@@ -286,6 +291,8 @@ class DatabricksProvider(ServiceProvider):
|
|
|
286
291
|
directory: Path
|
|
287
292
|
code_paths.append(directory.as_posix())
|
|
288
293
|
|
|
294
|
+
pip_requirements += get_installed_packages()
|
|
295
|
+
|
|
289
296
|
logger.debug(f"pip_requirements: {pip_requirements}")
|
|
290
297
|
logger.debug(f"code_paths: {code_paths}")
|
|
291
298
|
|
|
@@ -11,6 +11,13 @@ from loguru import logger
|
|
|
11
11
|
import dao_ai
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
def is_lib_provided(lib_name: str, pip_requirements: Sequence[str]) -> bool:
|
|
15
|
+
return any(
|
|
16
|
+
re.search(rf"\b{re.escape(lib_name)}\b", requirement)
|
|
17
|
+
for requirement in pip_requirements
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
14
21
|
def is_installed():
|
|
15
22
|
current_file = os.path.abspath(dao_ai.__file__)
|
|
16
23
|
site_packages = [os.path.abspath(path) for path in site.getsitepackages()]
|
|
@@ -85,6 +92,7 @@ def load_function(function_name: str) -> Callable[..., Any]:
|
|
|
85
92
|
>>> version = func("my_model")
|
|
86
93
|
"""
|
|
87
94
|
logger.debug(f"Loading function: {function_name}")
|
|
95
|
+
|
|
88
96
|
try:
|
|
89
97
|
# Split the FQN into module path and function name
|
|
90
98
|
module_path, func_name = function_name.rsplit(".", 1)
|
|
@@ -8,6 +8,7 @@ from mlflow.models import ModelConfig
|
|
|
8
8
|
|
|
9
9
|
from dao_ai.config import (
|
|
10
10
|
AppConfig,
|
|
11
|
+
AppModel,
|
|
11
12
|
CompositeVariableModel,
|
|
12
13
|
EnvironmentVariableModel,
|
|
13
14
|
McpFunctionModel,
|
|
@@ -378,3 +379,172 @@ def test_mcp_function_model_real_pat_authentication() -> None:
|
|
|
378
379
|
|
|
379
380
|
# No Authorization header should be set at creation time (per-invocation auth)
|
|
380
381
|
assert "Authorization" not in mcp_function.headers
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
@pytest.mark.unit
|
|
385
|
+
def test_app_config_initialize_adds_code_paths_to_sys_path(config: AppConfig) -> None:
|
|
386
|
+
"""Test that code_paths are added to sys.path during model creation"""
|
|
387
|
+
import os
|
|
388
|
+
import tempfile
|
|
389
|
+
from pathlib import Path
|
|
390
|
+
|
|
391
|
+
# Create temporary directories for testing
|
|
392
|
+
with (
|
|
393
|
+
tempfile.TemporaryDirectory() as temp_dir1,
|
|
394
|
+
tempfile.TemporaryDirectory() as temp_dir2,
|
|
395
|
+
):
|
|
396
|
+
# Store original sys.path
|
|
397
|
+
original_sys_path = sys.path.copy()
|
|
398
|
+
|
|
399
|
+
try:
|
|
400
|
+
# Create minimal AppModel data with code_paths
|
|
401
|
+
from dao_ai.config import (
|
|
402
|
+
AgentModel,
|
|
403
|
+
LLMModel,
|
|
404
|
+
OrchestrationModel,
|
|
405
|
+
RegisteredModelModel,
|
|
406
|
+
SchemaModel,
|
|
407
|
+
SupervisorModel,
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
schema = SchemaModel(catalog_name="test", schema_name="test")
|
|
411
|
+
registered_model = RegisteredModelModel(schema=schema, name="test_model")
|
|
412
|
+
supervisor = SupervisorModel(model=LLMModel(name="test"))
|
|
413
|
+
orchestration = OrchestrationModel(supervisor=supervisor)
|
|
414
|
+
agent = AgentModel(name="test", model=LLMModel(name="test"))
|
|
415
|
+
|
|
416
|
+
# Create new AppModel instance with code_paths - this should trigger the validator
|
|
417
|
+
_ = AppModel(
|
|
418
|
+
name="test_app",
|
|
419
|
+
registered_model=registered_model,
|
|
420
|
+
orchestration=orchestration,
|
|
421
|
+
agents=[agent],
|
|
422
|
+
code_paths=[temp_dir1, temp_dir2],
|
|
423
|
+
)
|
|
424
|
+
|
|
425
|
+
# Verify that the parent directories of both paths were added to sys.path immediately
|
|
426
|
+
# The implementation adds parent directories, not the exact code_paths
|
|
427
|
+
abs_temp_dir1 = os.path.abspath(temp_dir1)
|
|
428
|
+
abs_temp_dir2 = os.path.abspath(temp_dir2)
|
|
429
|
+
parent_dir1 = str(Path(abs_temp_dir1).parent)
|
|
430
|
+
parent_dir2 = str(Path(abs_temp_dir2).parent)
|
|
431
|
+
|
|
432
|
+
assert parent_dir1 in sys.path, (
|
|
433
|
+
f"Parent of code path {parent_dir1} not found in sys.path"
|
|
434
|
+
)
|
|
435
|
+
assert parent_dir2 in sys.path, (
|
|
436
|
+
f"Parent of code path {parent_dir2} not found in sys.path"
|
|
437
|
+
)
|
|
438
|
+
|
|
439
|
+
# Since both temp dirs have the same parent (system temp dir), only one parent path should be added
|
|
440
|
+
# Verify the parent directory was added
|
|
441
|
+
if parent_dir1 == parent_dir2:
|
|
442
|
+
# Both temp dirs have same parent, so only one entry
|
|
443
|
+
assert sys.path.count(parent_dir1) >= 1, (
|
|
444
|
+
f"Parent directory {parent_dir1} should be added to sys.path"
|
|
445
|
+
)
|
|
446
|
+
else:
|
|
447
|
+
# Different parents, check both
|
|
448
|
+
assert parent_dir1 in sys.path, f"Parent {parent_dir1} not in sys.path"
|
|
449
|
+
assert parent_dir2 in sys.path, f"Parent {parent_dir2} not in sys.path"
|
|
450
|
+
|
|
451
|
+
finally:
|
|
452
|
+
# Restore original sys.path
|
|
453
|
+
sys.path[:] = original_sys_path
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
@pytest.mark.unit
|
|
457
|
+
def test_app_config_initialize_skips_duplicate_code_paths(config: AppConfig) -> None:
|
|
458
|
+
"""Test that duplicate paths are not added to sys.path"""
|
|
459
|
+
import os
|
|
460
|
+
import tempfile
|
|
461
|
+
|
|
462
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
|
463
|
+
abs_temp_dir = os.path.abspath(temp_dir)
|
|
464
|
+
|
|
465
|
+
# Add the path to sys.path first
|
|
466
|
+
original_sys_path = sys.path.copy()
|
|
467
|
+
sys.path.insert(0, abs_temp_dir)
|
|
468
|
+
|
|
469
|
+
try:
|
|
470
|
+
# Count occurrences before creating model with code_paths
|
|
471
|
+
count_before = sys.path.count(abs_temp_dir)
|
|
472
|
+
|
|
473
|
+
# Create minimal AppModel data with code_paths
|
|
474
|
+
from dao_ai.config import (
|
|
475
|
+
AgentModel,
|
|
476
|
+
LLMModel,
|
|
477
|
+
OrchestrationModel,
|
|
478
|
+
RegisteredModelModel,
|
|
479
|
+
SchemaModel,
|
|
480
|
+
SupervisorModel,
|
|
481
|
+
)
|
|
482
|
+
|
|
483
|
+
schema = SchemaModel(catalog_name="test", schema_name="test")
|
|
484
|
+
registered_model = RegisteredModelModel(schema=schema, name="test_model")
|
|
485
|
+
supervisor = SupervisorModel(model=LLMModel(name="test"))
|
|
486
|
+
orchestration = OrchestrationModel(supervisor=supervisor)
|
|
487
|
+
agent = AgentModel(name="test", model=LLMModel(name="test"))
|
|
488
|
+
|
|
489
|
+
# Create new AppModel instance with the same path - this should not add a duplicate
|
|
490
|
+
_ = AppModel(
|
|
491
|
+
name="test_app",
|
|
492
|
+
registered_model=registered_model,
|
|
493
|
+
orchestration=orchestration,
|
|
494
|
+
agents=[agent],
|
|
495
|
+
code_paths=[temp_dir],
|
|
496
|
+
)
|
|
497
|
+
|
|
498
|
+
# Count occurrences after creating model with code_paths
|
|
499
|
+
count_after = sys.path.count(abs_temp_dir)
|
|
500
|
+
|
|
501
|
+
# Should not have added a duplicate
|
|
502
|
+
assert count_after == count_before, "Duplicate path was added to sys.path"
|
|
503
|
+
|
|
504
|
+
finally:
|
|
505
|
+
# Restore original sys.path
|
|
506
|
+
sys.path[:] = original_sys_path
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
@pytest.mark.unit
|
|
510
|
+
def test_app_config_initialize_with_empty_code_paths(config: AppConfig) -> None:
|
|
511
|
+
"""Test that empty code_paths works correctly"""
|
|
512
|
+
# Store original sys.path
|
|
513
|
+
original_sys_path = sys.path.copy()
|
|
514
|
+
|
|
515
|
+
try:
|
|
516
|
+
# Create minimal AppModel data with empty code_paths
|
|
517
|
+
from dao_ai.config import (
|
|
518
|
+
AgentModel,
|
|
519
|
+
LLMModel,
|
|
520
|
+
OrchestrationModel,
|
|
521
|
+
RegisteredModelModel,
|
|
522
|
+
SchemaModel,
|
|
523
|
+
SupervisorModel,
|
|
524
|
+
)
|
|
525
|
+
|
|
526
|
+
schema = SchemaModel(catalog_name="test", schema_name="test")
|
|
527
|
+
registered_model = RegisteredModelModel(schema=schema, name="test_model")
|
|
528
|
+
supervisor = SupervisorModel(model=LLMModel(name="test"))
|
|
529
|
+
orchestration = OrchestrationModel(supervisor=supervisor)
|
|
530
|
+
agent = AgentModel(name="test", model=LLMModel(name="test"))
|
|
531
|
+
|
|
532
|
+
# Create new AppModel instance with empty code_paths
|
|
533
|
+
_ = AppModel(
|
|
534
|
+
name="test_app",
|
|
535
|
+
registered_model=registered_model,
|
|
536
|
+
orchestration=orchestration,
|
|
537
|
+
agents=[agent],
|
|
538
|
+
code_paths=[],
|
|
539
|
+
)
|
|
540
|
+
|
|
541
|
+
# sys.path should be unchanged
|
|
542
|
+
# We can't assert exact equality because the assignment might still trigger the validator,
|
|
543
|
+
# but we can verify no new paths were added
|
|
544
|
+
assert True, (
|
|
545
|
+
"Creating AppModel with empty code_paths should complete without errors"
|
|
546
|
+
)
|
|
547
|
+
|
|
548
|
+
finally:
|
|
549
|
+
# Restore original sys.path
|
|
550
|
+
sys.path[:] = original_sys_path
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
|
|
3
|
-
from dao_ai.utils import load_function
|
|
3
|
+
from dao_ai.utils import is_lib_provided, load_function
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
@pytest.mark.unit
|
|
@@ -45,3 +45,17 @@ def test_load_function_no_dot_separator() -> None:
|
|
|
45
45
|
"""Test loading with invalid function name format."""
|
|
46
46
|
with pytest.raises(ValueError):
|
|
47
47
|
load_function("invalid_format")
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@pytest.mark.unit
|
|
51
|
+
def test_is_lib_provided() -> None:
|
|
52
|
+
"""Test if a library is provided in the pip requirements."""
|
|
53
|
+
assert is_lib_provided("dao-ai", ["dao-ai", "pandas"]) is True
|
|
54
|
+
assert is_lib_provided("dao-ai", ["dao-ai>=0.0.1", "pandas"]) is True
|
|
55
|
+
assert is_lib_provided("dao-ai", ["numpy", "pandas"]) is False
|
|
56
|
+
assert (
|
|
57
|
+
is_lib_provided(
|
|
58
|
+
"dao-ai", ["git+https://github.com/natefleming/dao-ai.git", "numpy"]
|
|
59
|
+
)
|
|
60
|
+
is True
|
|
61
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md
RENAMED
|
File without changes
|
|
File without changes
|
{dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/examples/customer_preparation_workflow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md
RENAMED
|
File without changes
|
|
File without changes
|
{dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md
RENAMED
|
File without changes
|
|
File without changes
|
{dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{dao_ai-0.0.8 → dao_ai-0.0.10}/apps/dais2025/store-app/streamlit_store_app/components/chat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|