dao-ai 0.0.24__tar.gz → 0.0.25__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.24 → dao_ai-0.0.25}/.gitignore +3 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/Makefile +1 -1
- {dao_ai-0.0.24 → dao_ai-0.0.25}/PKG-INFO +1 -1
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +72 -43
- dao_ai-0.0.24/databricks.yaml → dao_ai-0.0.25/databricks.yaml.template +9 -7
- {dao_ai-0.0.24 → dao_ai-0.0.25}/pyproject.toml +1 -1
- {dao_ai-0.0.24 → dao_ai-0.0.25}/schemas/model_config_schema.json +10 -6
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/cli.py +77 -18
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/config.py +1 -1
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_databricks.py +18 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_genie_databricks_integration.py +2 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_inference_integration.py +3 -1
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_postgres_integration.py +1 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_prompts.py +10 -250
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/hardware_store/test_graph.py +2 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/.python-version +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/CHANGELOG.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/CONTRIBUTING.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/LICENSE +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/Makefile +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/development_workflows.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/Makefile +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/architecture.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/index.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/load-env.sh +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/tests/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/tests/README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/dais2025/model_config_dais.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/deep_research.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/executive_assistant.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/genie.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/genie_and_vector_search.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/genie_with_conversion_id.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/human_in_the_loop.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/jira.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/mcp.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/mcp_with_uc_connection.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/minimal.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/prompt_registry.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/reservations.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/examples/slack.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/hardware_store/supervisor.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/hardware_store/supervisor_postgres.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/hardware_store/swarm.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/config/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/appointments.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/appointments_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/brand_rep_demo_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/brand_rep_demo_queries.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/brand_rep_demo_tables.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/brand_rep_demo_validation.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/customers.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/customers_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/dim_stores.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/dim_stores_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/employee_performance.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/employee_performance_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/employee_tasks.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/employee_tasks_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/inventory.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/inventory_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/managers.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/managers_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/product_data.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/products.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/dais2025/task_assignments.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/hardware_store/inventory.snappy.parquet +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/hardware_store/inventory.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/hardware_store/products.snappy.parquet +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/hardware_store/products.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/quick_serve_restaurant/items_description.csv +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/quick_serve_restaurant/items_description.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/quick_serve_restaurant/items_raw.csv +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/quick_serve_restaurant/items_raw.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/quick_serve_restaurant/orders_raw.csv +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/data/quick_serve_restaurant/orders_raw.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/docs/genie.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/docs/hardware_store/README.md +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/docs/hardware_store/retail_supervisor.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/docs/hardware_store/retail_swarm.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/docs/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/environment.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/examples/dais2025/examples.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/examples/deep_research/examples.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/examples/executive_assistant/examples.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/examples/hardware_store/examples.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/examples/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/examples/quick_serve_restaurant/examples.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/dais2025/extract_store_numbers.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/dais2025/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/dais2025/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/dais2025/find_product_by_sku.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/dais2025/find_product_by_upc.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/dais2025/find_store_by_number.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/hardware_store/find_product_by_sku.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/hardware_store/find_product_by_upc.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/01_ingest_and_transform.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/02_provision_vector_search.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/03_provision_lakebase.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/04_unity_catalog_tools.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/05_deploy_agent.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/06_generate_evaluation_data.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/07_run_evaluation.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/08_run_examples.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/09_evaluate_inferences.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/99_scratchpad.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/notebooks/INVESTech.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/requirements.txt +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/schemas/bundle_config_schema.json +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/models.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/tools/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/tools/customer.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/tools/employee.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/tools/executive.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/tools/genie.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/tools/inventory.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/tools/models.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dais2025/tools/store.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/agent_as_code.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/catalog.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/chat_models.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/graph.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/guardrails.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/hooks/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/hooks/core.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/memory/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/memory/base.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/memory/core.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/memory/postgres.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/messages.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/models.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/nodes.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/prompts.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/providers/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/providers/base.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/providers/databricks.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/state.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/agent.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/core.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/genie.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/human_in_the_loop.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/mcp.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/python.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/slack.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/time.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/unity_catalog.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/tools/vector_search.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/types.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/utils.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/dao_ai/vector_search.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/hardware_store/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/hardware_store/hooks.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/hardware_store/tools.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/quick_serve_restaurant/__init__.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/src/quick_serve_restaurant/tools.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/config/test_model_config.yaml +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/conftest.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_catalog.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_chat_history.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_config.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_function_parsing.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_genie.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_hooks.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_inference.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_mcp.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_messages.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_models.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_state.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_summarization_inference.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_tools.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_types.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_unity_catalog.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_utils.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/test_vector_search.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/dao_ai/weather_server_mcp.py +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/hardware_store/.gitkeep +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/images/lays_upc.png +0 -0
- {dao_ai-0.0.24 → dao_ai-0.0.25}/tests/quick_serve_restaurant/.gitkeep +0 -0
|
@@ -64,7 +64,7 @@ schema: depends
|
|
|
64
64
|
@$(PYTHON) -c "from dao_ai.config import AppConfig; import json; print(json.dumps(AppConfig.model_json_schema(), indent=2))"
|
|
65
65
|
|
|
66
66
|
test:
|
|
67
|
-
$(PYTEST) $(TEST_DIR)
|
|
67
|
+
$(PYTEST) -ra --tb=short $(TEST_DIR)
|
|
68
68
|
|
|
69
69
|
help:
|
|
70
70
|
$(info TOP_DIR: $(TOP_DIR))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dao-ai
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.25
|
|
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
|
|
@@ -261,51 +261,30 @@ tools:
|
|
|
261
261
|
name: dao_ai.tools.current_time_tool
|
|
262
262
|
|
|
263
263
|
|
|
264
|
-
#
|
|
265
|
-
#
|
|
266
|
-
#
|
|
267
|
-
#
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
#type: postgres # Store type (memory or postgres)
|
|
281
|
-
type: memory
|
|
282
|
-
embedding_model: *embedding_model # Model for semantic memory
|
|
283
|
-
dims: 1536 # Embedding dimensions
|
|
284
|
-
database: *qsr_database # Database for persistence (if needed)
|
|
285
|
-
namespace: "{user_id}"
|
|
286
|
-
|
|
287
|
-
# =============================================================================
|
|
288
|
-
# AGENTS CONFIGURATION
|
|
289
|
-
# =============================================================================
|
|
290
|
-
# Define specialized agents for different aspects of customer service
|
|
291
|
-
# Each agent has specific tools, capabilities, and responsibilities
|
|
292
|
-
|
|
293
|
-
agents:
|
|
264
|
+
# ==============================================================================
|
|
265
|
+
# PROMPTS CONFIGURATION
|
|
266
|
+
# ==============================================================================
|
|
267
|
+
# Define reusable prompts that can be stored in MLflow Prompt Registry
|
|
268
|
+
#
|
|
269
|
+
# Prompts support:
|
|
270
|
+
# - default_template: Fallback template when registry is unavailable
|
|
271
|
+
# - description: Used as commit message when syncing to registry
|
|
272
|
+
# - alias: Reference specific versions (e.g., "production", "staging")
|
|
273
|
+
# - version: Pin to specific version number
|
|
274
|
+
# - tags: Metadata and organization
|
|
275
|
+
#
|
|
276
|
+
# Priority: Registry > default_template (registry is source of truth)
|
|
277
|
+
# ==============================================================================
|
|
278
|
+
|
|
279
|
+
prompts:
|
|
294
280
|
# ---------------------------------------------------------------------------
|
|
295
|
-
#
|
|
281
|
+
# Barista Agent Prompt
|
|
296
282
|
# ---------------------------------------------------------------------------
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
name:
|
|
300
|
-
description: "Expert coffee shop barista
|
|
301
|
-
|
|
302
|
-
tools:
|
|
303
|
-
- *insert_coffee_order_tool
|
|
304
|
-
- *match_item_by_description_and_price_tool
|
|
305
|
-
- *match_historical_item_order_by_date_tool
|
|
306
|
-
- *lookup_items_by_descriptions_tool
|
|
307
|
-
- *current_time_tool
|
|
308
|
-
prompt: | # System prompt defining agent behavior
|
|
283
|
+
barista_prompt: &barista_prompt
|
|
284
|
+
schema: *qsr_schema
|
|
285
|
+
name: barista_prompt
|
|
286
|
+
description: "Expert coffee shop barista prompt for menu recommendations, ordering, and order history"
|
|
287
|
+
default_template: |
|
|
309
288
|
### User Information
|
|
310
289
|
- **User Id**: {user_id}
|
|
311
290
|
- **Session ID**: {thread_id}
|
|
@@ -352,6 +331,56 @@ agents:
|
|
|
352
331
|
**Handle Ambiguity**: If a customer's request is unclear, use your tools to show options and let them choose.
|
|
353
332
|
|
|
354
333
|
You are friendly, knowledgeable, and always ready to help customers find exactly what they're looking for!
|
|
334
|
+
tags:
|
|
335
|
+
environment: production
|
|
336
|
+
agent_name: barista
|
|
337
|
+
|
|
338
|
+
# =============================================================================
|
|
339
|
+
# MEMORY CONFIGURATION
|
|
340
|
+
# =============================================================================
|
|
341
|
+
# Configure persistent storage for agent conversations and context
|
|
342
|
+
|
|
343
|
+
memory: &memory
|
|
344
|
+
# Conversation checkpointing for state persistence
|
|
345
|
+
checkpointer:
|
|
346
|
+
name: default_checkpointer # Checkpointer identifier
|
|
347
|
+
#type: postgres # Store type (memory or postgres)
|
|
348
|
+
type: memory
|
|
349
|
+
database: *qsr_database # Reference to database configuration
|
|
350
|
+
|
|
351
|
+
# Long-term memory store for agent context
|
|
352
|
+
store:
|
|
353
|
+
name: default_store # Store identifier
|
|
354
|
+
#type: postgres # Store type (memory or postgres)
|
|
355
|
+
type: memory
|
|
356
|
+
embedding_model: *embedding_model # Model for semantic memory
|
|
357
|
+
dims: 1536 # Embedding dimensions
|
|
358
|
+
database: *qsr_database # Database for persistence (if needed)
|
|
359
|
+
namespace: "{user_id}"
|
|
360
|
+
|
|
361
|
+
# =============================================================================
|
|
362
|
+
# AGENTS CONFIGURATION
|
|
363
|
+
# =============================================================================
|
|
364
|
+
# Define specialized agents for different aspects of customer service
|
|
365
|
+
# Each agent has specific tools, capabilities, and responsibilities
|
|
366
|
+
|
|
367
|
+
agents:
|
|
368
|
+
# ---------------------------------------------------------------------------
|
|
369
|
+
# BARISTA AGENT (Using Prompt Reference - Recommended)
|
|
370
|
+
# ---------------------------------------------------------------------------
|
|
371
|
+
# Expert coffee shop agent specialized in menu inquiries, recommendations, ordering, and order history
|
|
372
|
+
# This example shows how to use a prompt reference from the prompts section
|
|
373
|
+
barista: &barista
|
|
374
|
+
name: barista # Agent identifier
|
|
375
|
+
description: "Expert coffee shop barista specializing in menu recommendations, coffee ordering, price inquiries, item descriptions, and order history. Can find products by description, match items within price ranges, process coffee orders, and retrieve historical order data."
|
|
376
|
+
model: *tool_calling_llm # Reference to LLM configuration
|
|
377
|
+
tools:
|
|
378
|
+
- *insert_coffee_order_tool
|
|
379
|
+
- *match_item_by_description_and_price_tool
|
|
380
|
+
- *match_historical_item_order_by_date_tool
|
|
381
|
+
- *lookup_items_by_descriptions_tool
|
|
382
|
+
- *current_time_tool
|
|
383
|
+
prompt: *barista_prompt # Reference to prompt (instead of inline)
|
|
355
384
|
handoff_prompt: |
|
|
356
385
|
Coffee shop inquiries including menu questions, item recommendations, price checks, coffee ordering, taste descriptions, and order history.
|
|
357
386
|
Examples: "What coffee drinks do you have?", "I'd like a medium latte", "What's good for under $4?", "What did I order yesterday?", "Tell me about your cold brew", "Can you recommend something sweet?"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# yaml-language-server: $schema=./schemas/bundle_config_schema.json
|
|
2
2
|
|
|
3
3
|
bundle:
|
|
4
|
-
name:
|
|
4
|
+
name: __APP_NAME__
|
|
5
5
|
|
|
6
6
|
artifacts:
|
|
7
7
|
default:
|
|
@@ -12,17 +12,19 @@ artifacts:
|
|
|
12
12
|
variables:
|
|
13
13
|
config_path:
|
|
14
14
|
description: Path to the configuration file for the job.
|
|
15
|
-
default: ../config/model_config.yaml
|
|
16
15
|
node_type:
|
|
17
16
|
description: The job compute node type
|
|
18
17
|
default: Standard_D4ads_v5
|
|
19
|
-
app_name:
|
|
20
|
-
description: The job name
|
|
21
18
|
|
|
22
19
|
resources:
|
|
23
20
|
jobs:
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
# The job name and bundle name are templated and replaced by CLI at deployment time
|
|
22
|
+
# This allows multiple apps to coexist with separate bundle identities
|
|
23
|
+
deploy_job:
|
|
24
|
+
name: __APP_NAME__-job
|
|
25
|
+
tags:
|
|
26
|
+
app_name: __APP_NAME__
|
|
27
|
+
config_path: ${var.config_path}
|
|
26
28
|
job_clusters:
|
|
27
29
|
- job_cluster_key: common-cluster
|
|
28
30
|
new_cluster:
|
|
@@ -92,7 +94,7 @@ resources:
|
|
|
92
94
|
environment_key: dao-ai-env
|
|
93
95
|
|
|
94
96
|
targets:
|
|
95
|
-
|
|
97
|
+
__APP_NAME__:
|
|
96
98
|
mode: development
|
|
97
99
|
default: true
|
|
98
100
|
|
|
@@ -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.25"
|
|
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" }
|
|
@@ -548,14 +548,18 @@
|
|
|
548
548
|
"title": "Messages"
|
|
549
549
|
},
|
|
550
550
|
"custom_inputs": {
|
|
551
|
-
"
|
|
552
|
-
|
|
553
|
-
|
|
551
|
+
"anyOf": [
|
|
552
|
+
{
|
|
553
|
+
"additionalProperties": true,
|
|
554
|
+
"type": "object"
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
"type": "null"
|
|
558
|
+
}
|
|
559
|
+
],
|
|
560
|
+
"title": "Custom Inputs"
|
|
554
561
|
}
|
|
555
562
|
},
|
|
556
|
-
"required": [
|
|
557
|
-
"custom_inputs"
|
|
558
|
-
],
|
|
559
563
|
"title": "ChatPayload",
|
|
560
564
|
"type": "object"
|
|
561
565
|
},
|
|
@@ -460,6 +460,49 @@ def setup_logging(verbosity: int) -> None:
|
|
|
460
460
|
logger.add(sys.stderr, level=level)
|
|
461
461
|
|
|
462
462
|
|
|
463
|
+
def generate_bundle_from_template(config_path: Path, app_name: str) -> Path:
|
|
464
|
+
"""
|
|
465
|
+
Generate an app-specific databricks.yaml from databricks.yaml.template.
|
|
466
|
+
|
|
467
|
+
This function:
|
|
468
|
+
1. Reads databricks.yaml.template (permanent template file)
|
|
469
|
+
2. Replaces __APP_NAME__ with the actual app name
|
|
470
|
+
3. Writes to databricks.yaml (overwrites if exists)
|
|
471
|
+
4. Returns the path to the generated file
|
|
472
|
+
|
|
473
|
+
The generated databricks.yaml is overwritten on each deployment and is not tracked in git.
|
|
474
|
+
Schema reference remains pointing to ./schemas/bundle_config_schema.json.
|
|
475
|
+
|
|
476
|
+
Args:
|
|
477
|
+
config_path: Path to the app config file
|
|
478
|
+
app_name: Normalized app name
|
|
479
|
+
|
|
480
|
+
Returns:
|
|
481
|
+
Path to the generated databricks.yaml file
|
|
482
|
+
"""
|
|
483
|
+
cwd = Path.cwd()
|
|
484
|
+
template_path = cwd / "databricks.yaml.template"
|
|
485
|
+
output_path = cwd / "databricks.yaml"
|
|
486
|
+
|
|
487
|
+
if not template_path.exists():
|
|
488
|
+
logger.error(f"Template file {template_path} does not exist.")
|
|
489
|
+
sys.exit(1)
|
|
490
|
+
|
|
491
|
+
# Read template
|
|
492
|
+
with open(template_path, "r") as f:
|
|
493
|
+
template_content = f.read()
|
|
494
|
+
|
|
495
|
+
# Replace template variables
|
|
496
|
+
bundle_content = template_content.replace("__APP_NAME__", app_name)
|
|
497
|
+
|
|
498
|
+
# Write generated databricks.yaml (overwrite if exists)
|
|
499
|
+
with open(output_path, "w") as f:
|
|
500
|
+
f.write(bundle_content)
|
|
501
|
+
|
|
502
|
+
logger.info(f"Generated bundle configuration at {output_path} from template")
|
|
503
|
+
return output_path
|
|
504
|
+
|
|
505
|
+
|
|
463
506
|
def run_databricks_command(
|
|
464
507
|
command: list[str],
|
|
465
508
|
profile: Optional[str] = None,
|
|
@@ -467,44 +510,55 @@ def run_databricks_command(
|
|
|
467
510
|
target: Optional[str] = None,
|
|
468
511
|
dry_run: bool = False,
|
|
469
512
|
) -> None:
|
|
470
|
-
"""Execute a databricks CLI command with optional profile."""
|
|
513
|
+
"""Execute a databricks CLI command with optional profile and target."""
|
|
514
|
+
config_path = Path(config) if config else None
|
|
515
|
+
|
|
516
|
+
if config_path and not config_path.exists():
|
|
517
|
+
logger.error(f"Configuration file {config_path} does not exist.")
|
|
518
|
+
sys.exit(1)
|
|
519
|
+
|
|
520
|
+
# Load app config and generate bundle from template
|
|
521
|
+
app_config: AppConfig = AppConfig.from_file(config_path) if config_path else None
|
|
522
|
+
normalized_name: str = normalize_name(app_config.app.name) if app_config else None
|
|
523
|
+
|
|
524
|
+
# Generate app-specific bundle from template (overwrites databricks.yaml temporarily)
|
|
525
|
+
if config_path and app_config:
|
|
526
|
+
generate_bundle_from_template(config_path, normalized_name)
|
|
527
|
+
|
|
528
|
+
# Use app name as target if not explicitly provided
|
|
529
|
+
# This ensures each app gets its own Terraform state in .databricks/bundle/<app-name>/
|
|
530
|
+
if not target and normalized_name:
|
|
531
|
+
target = normalized_name
|
|
532
|
+
logger.debug(f"Using app-specific target: {target}")
|
|
533
|
+
|
|
534
|
+
# Build databricks command (no -c flag needed, uses databricks.yaml in current dir)
|
|
471
535
|
cmd = ["databricks"]
|
|
472
536
|
if profile:
|
|
473
537
|
cmd.extend(["--profile", profile])
|
|
538
|
+
|
|
474
539
|
if target:
|
|
475
540
|
cmd.extend(["--target", target])
|
|
476
|
-
cmd.extend(command)
|
|
477
|
-
if config:
|
|
478
|
-
config_path = Path(config)
|
|
479
541
|
|
|
480
|
-
|
|
481
|
-
logger.error(f"Configuration file {config_path} does not exist.")
|
|
482
|
-
sys.exit(1)
|
|
483
|
-
|
|
484
|
-
app_config: AppConfig = AppConfig.from_file(config_path)
|
|
542
|
+
cmd.extend(command)
|
|
485
543
|
|
|
486
|
-
|
|
487
|
-
|
|
544
|
+
# Add config_path variable for notebooks
|
|
545
|
+
if config_path and app_config:
|
|
546
|
+
# Calculate relative path from notebooks directory to config file
|
|
488
547
|
config_abs = config_path.resolve()
|
|
489
548
|
cwd = Path.cwd()
|
|
490
549
|
notebooks_dir = cwd / "notebooks"
|
|
491
550
|
|
|
492
|
-
# Calculate relative path from notebooks directory to config file
|
|
493
551
|
try:
|
|
494
552
|
relative_config = config_abs.relative_to(notebooks_dir)
|
|
495
553
|
except ValueError:
|
|
496
|
-
# Config file is outside notebooks directory, calculate relative path
|
|
497
|
-
# Use os.path.relpath to get the relative path from notebooks_dir to config file
|
|
498
554
|
relative_config = Path(os.path.relpath(config_abs, notebooks_dir))
|
|
499
555
|
|
|
500
556
|
cmd.append(f'--var="config_path={relative_config}"')
|
|
501
557
|
|
|
502
|
-
normalized_name: str = normalize_name(app_config.app.name)
|
|
503
|
-
cmd.append(f'--var="app_name={normalized_name}"')
|
|
504
|
-
|
|
505
558
|
logger.debug(f"Executing command: {' '.join(cmd)}")
|
|
506
559
|
|
|
507
560
|
if dry_run:
|
|
561
|
+
logger.info(f"[DRY RUN] Would execute: {' '.join(cmd)}")
|
|
508
562
|
return
|
|
509
563
|
|
|
510
564
|
try:
|
|
@@ -531,6 +585,9 @@ def run_databricks_command(
|
|
|
531
585
|
except FileNotFoundError:
|
|
532
586
|
logger.error("databricks CLI not found. Please install the Databricks CLI.")
|
|
533
587
|
sys.exit(1)
|
|
588
|
+
except Exception as e:
|
|
589
|
+
logger.error(f"Command execution failed: {e}")
|
|
590
|
+
sys.exit(1)
|
|
534
591
|
|
|
535
592
|
|
|
536
593
|
def handle_bundle_command(options: Namespace) -> None:
|
|
@@ -539,6 +596,7 @@ def handle_bundle_command(options: Namespace) -> None:
|
|
|
539
596
|
config: Optional[str] = options.config
|
|
540
597
|
target: Optional[str] = options.target
|
|
541
598
|
dry_run: bool = options.dry_run
|
|
599
|
+
|
|
542
600
|
if options.deploy:
|
|
543
601
|
logger.info("Deploying DAO AI asset bundle...")
|
|
544
602
|
run_databricks_command(
|
|
@@ -546,8 +604,9 @@ def handle_bundle_command(options: Namespace) -> None:
|
|
|
546
604
|
)
|
|
547
605
|
if options.run:
|
|
548
606
|
logger.info("Running DAO AI system with current configuration...")
|
|
607
|
+
# Use static job resource key that matches databricks.yaml (resources.jobs.deploy_job)
|
|
549
608
|
run_databricks_command(
|
|
550
|
-
["bundle", "run", "
|
|
609
|
+
["bundle", "run", "deploy_job"],
|
|
551
610
|
profile,
|
|
552
611
|
config,
|
|
553
612
|
target,
|
|
@@ -1301,7 +1301,7 @@ class ChatPayload(BaseModel):
|
|
|
1301
1301
|
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
1302
1302
|
input: Optional[list[Message]] = None
|
|
1303
1303
|
messages: Optional[list[Message]] = None
|
|
1304
|
-
custom_inputs: dict
|
|
1304
|
+
custom_inputs: Optional[dict] = Field(default_factory=dict)
|
|
1305
1305
|
|
|
1306
1306
|
@model_validator(mode="after")
|
|
1307
1307
|
def validate_mutual_exclusion_and_alias(self) -> "ChatPayload":
|
|
@@ -354,6 +354,7 @@ def test_database_model_capacity_validation():
|
|
|
354
354
|
|
|
355
355
|
|
|
356
356
|
@pytest.mark.unit
|
|
357
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
357
358
|
def test_create_lakebase_new_database():
|
|
358
359
|
"""Test create_lakebase when database doesn't exist."""
|
|
359
360
|
# Mock workspace client
|
|
@@ -393,6 +394,7 @@ def test_create_lakebase_new_database():
|
|
|
393
394
|
|
|
394
395
|
|
|
395
396
|
@pytest.mark.unit
|
|
397
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
396
398
|
def test_create_lakebase_database_already_exists_available():
|
|
397
399
|
"""Test create_lakebase when database already exists and is AVAILABLE."""
|
|
398
400
|
# Mock workspace client
|
|
@@ -430,6 +432,7 @@ def test_create_lakebase_database_already_exists_available():
|
|
|
430
432
|
|
|
431
433
|
|
|
432
434
|
@pytest.mark.unit
|
|
435
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
433
436
|
def test_create_lakebase_database_starting_state():
|
|
434
437
|
"""Test create_lakebase when database is in STARTING state."""
|
|
435
438
|
# Mock workspace client
|
|
@@ -475,6 +478,7 @@ def test_create_lakebase_database_starting_state():
|
|
|
475
478
|
|
|
476
479
|
|
|
477
480
|
@pytest.mark.unit
|
|
481
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
478
482
|
def test_create_lakebase_database_updating_state():
|
|
479
483
|
"""Test create_lakebase when database is in UPDATING state."""
|
|
480
484
|
# Mock workspace client
|
|
@@ -520,6 +524,7 @@ def test_create_lakebase_database_updating_state():
|
|
|
520
524
|
|
|
521
525
|
|
|
522
526
|
@pytest.mark.unit
|
|
527
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
523
528
|
def test_create_lakebase_database_stopped_state():
|
|
524
529
|
"""Test create_lakebase when database is in STOPPED state."""
|
|
525
530
|
# Mock workspace client
|
|
@@ -555,6 +560,7 @@ def test_create_lakebase_database_stopped_state():
|
|
|
555
560
|
|
|
556
561
|
|
|
557
562
|
@pytest.mark.unit
|
|
563
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
558
564
|
def test_create_lakebase_database_deleting_state():
|
|
559
565
|
"""Test create_lakebase when database is in DELETING state."""
|
|
560
566
|
# Mock workspace client
|
|
@@ -590,6 +596,7 @@ def test_create_lakebase_database_deleting_state():
|
|
|
590
596
|
|
|
591
597
|
|
|
592
598
|
@pytest.mark.unit
|
|
599
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
593
600
|
def test_create_lakebase_concurrent_creation():
|
|
594
601
|
"""Test create_lakebase when database is created concurrently by another process."""
|
|
595
602
|
# Mock workspace client
|
|
@@ -626,6 +633,7 @@ def test_create_lakebase_concurrent_creation():
|
|
|
626
633
|
|
|
627
634
|
|
|
628
635
|
@pytest.mark.unit
|
|
636
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
629
637
|
def test_create_lakebase_unexpected_error():
|
|
630
638
|
"""Test create_lakebase handles unexpected errors appropriately."""
|
|
631
639
|
# Mock workspace client
|
|
@@ -659,6 +667,7 @@ def test_create_lakebase_unexpected_error():
|
|
|
659
667
|
|
|
660
668
|
|
|
661
669
|
@pytest.mark.unit
|
|
670
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
662
671
|
def test_create_lakebase_timeout_waiting_for_available():
|
|
663
672
|
"""Test create_lakebase handles timeout when waiting for AVAILABLE state."""
|
|
664
673
|
# Mock workspace client
|
|
@@ -696,6 +705,7 @@ def test_create_lakebase_timeout_waiting_for_available():
|
|
|
696
705
|
|
|
697
706
|
|
|
698
707
|
@pytest.mark.unit
|
|
708
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
699
709
|
def test_create_lakebase_default_values():
|
|
700
710
|
"""Test create_lakebase uses correct default values."""
|
|
701
711
|
# Mock workspace client
|
|
@@ -729,6 +739,7 @@ def test_create_lakebase_default_values():
|
|
|
729
739
|
|
|
730
740
|
|
|
731
741
|
@pytest.mark.unit
|
|
742
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
732
743
|
def test_create_lakebase_custom_capacity_cu1():
|
|
733
744
|
"""Test create_lakebase with custom capacity CU_1."""
|
|
734
745
|
# Mock workspace client
|
|
@@ -763,6 +774,7 @@ def test_create_lakebase_custom_capacity_cu1():
|
|
|
763
774
|
|
|
764
775
|
|
|
765
776
|
@pytest.mark.unit
|
|
777
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
766
778
|
def test_create_lakebase_database_disappears_during_wait():
|
|
767
779
|
"""Test create_lakebase when database disappears while waiting for AVAILABLE state."""
|
|
768
780
|
# Mock workspace client
|
|
@@ -806,6 +818,7 @@ def test_create_lakebase_database_disappears_during_wait():
|
|
|
806
818
|
|
|
807
819
|
|
|
808
820
|
@pytest.mark.unit
|
|
821
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
809
822
|
def test_create_lakebase_instance_role_success():
|
|
810
823
|
"""Test creating a lakebase instance role successfully."""
|
|
811
824
|
# Mock workspace client
|
|
@@ -847,6 +860,7 @@ def test_create_lakebase_instance_role_success():
|
|
|
847
860
|
|
|
848
861
|
|
|
849
862
|
@pytest.mark.unit
|
|
863
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
850
864
|
def test_create_lakebase_instance_role_already_exists():
|
|
851
865
|
"""Test when instance role already exists."""
|
|
852
866
|
# Mock workspace client
|
|
@@ -881,6 +895,7 @@ def test_create_lakebase_instance_role_already_exists():
|
|
|
881
895
|
|
|
882
896
|
|
|
883
897
|
@pytest.mark.unit
|
|
898
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
884
899
|
def test_create_lakebase_instance_role_missing_client_id():
|
|
885
900
|
"""Test that a warning is logged and method returns early when client_id is not provided."""
|
|
886
901
|
# Mock workspace client
|
|
@@ -907,6 +922,7 @@ def test_create_lakebase_instance_role_missing_client_id():
|
|
|
907
922
|
|
|
908
923
|
|
|
909
924
|
@pytest.mark.unit
|
|
925
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
910
926
|
def test_create_lakebase_instance_role_concurrent_creation():
|
|
911
927
|
"""Test when role is created concurrently by another process."""
|
|
912
928
|
# Mock workspace client
|
|
@@ -940,6 +956,7 @@ def test_create_lakebase_instance_role_concurrent_creation():
|
|
|
940
956
|
|
|
941
957
|
|
|
942
958
|
@pytest.mark.unit
|
|
959
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
943
960
|
def test_create_lakebase_instance_role_unexpected_error():
|
|
944
961
|
"""Test that unexpected errors are raised."""
|
|
945
962
|
# Mock workspace client
|
|
@@ -970,6 +987,7 @@ def test_create_lakebase_instance_role_unexpected_error():
|
|
|
970
987
|
|
|
971
988
|
|
|
972
989
|
@pytest.mark.unit
|
|
990
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
973
991
|
def test_create_lakebase_instance_role_with_composite_variable():
|
|
974
992
|
"""Test creating role when client_id is a CompositeVariableModel."""
|
|
975
993
|
from dao_ai.config import CompositeVariableModel, EnvironmentVariableModel
|
|
@@ -22,6 +22,7 @@ The fix involved:
|
|
|
22
22
|
from unittest.mock import Mock, patch
|
|
23
23
|
|
|
24
24
|
import pytest
|
|
25
|
+
from conftest import has_databricks_env
|
|
25
26
|
from langchain_core.tools import StructuredTool
|
|
26
27
|
|
|
27
28
|
from dao_ai.config import GenieRoomModel
|
|
@@ -208,6 +209,7 @@ class TestGenieDatabricksIntegration:
|
|
|
208
209
|
assert hasattr(tool, "func")
|
|
209
210
|
assert tool.func is not None
|
|
210
211
|
|
|
212
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
211
213
|
def test_conversation_persistence_with_injected_state(self, mock_genie_tool):
|
|
212
214
|
"""
|
|
213
215
|
Test that conversation persistence works correctly with injected state pattern.
|
|
@@ -5,7 +5,7 @@ import sys
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
|
-
from conftest import has_postgres_env
|
|
8
|
+
from conftest import has_databricks_env, has_postgres_env
|
|
9
9
|
from mlflow.types.responses import ResponsesAgentRequest
|
|
10
10
|
from mlflow.types.responses_helpers import Message
|
|
11
11
|
|
|
@@ -43,6 +43,7 @@ def app_config_postgres(supervisor_postgres_config_path: Path) -> AppConfig:
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
@pytest.mark.integration
|
|
46
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
46
47
|
def test_load_config_and_create_responses_agent(
|
|
47
48
|
app_config_supervisor: AppConfig,
|
|
48
49
|
) -> None:
|
|
@@ -373,6 +374,7 @@ def test_inference_with_postgres_memory(app_config_postgres: AppConfig) -> None:
|
|
|
373
374
|
|
|
374
375
|
|
|
375
376
|
@pytest.mark.unit
|
|
377
|
+
@pytest.mark.skipif(not has_databricks_env(), reason="Databricks env vars not set")
|
|
376
378
|
def test_config_has_required_components_for_inference() -> None:
|
|
377
379
|
"""Unit test to verify config has required components for inference without actual inference."""
|
|
378
380
|
config_path = (
|
|
@@ -202,6 +202,7 @@ def test_postgres_memory_initialization(postgres_app_config: AppConfig) -> None:
|
|
|
202
202
|
|
|
203
203
|
|
|
204
204
|
@pytest.mark.unit
|
|
205
|
+
@pytest.mark.skipif(not has_postgres_env(), reason="PostgreSQL env vars not set")
|
|
205
206
|
def test_load_postgres_config_without_env() -> None:
|
|
206
207
|
"""Test that PostgreSQL config loads without requiring environment variables."""
|
|
207
208
|
config_path = (
|