dao-ai 0.0.21__tar.gz → 0.0.23__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.21 → dao_ai-0.0.23}/PKG-INFO +28 -5
- {dao_ai-0.0.21 → dao_ai-0.0.23}/README.md +24 -2
- dao_ai-0.0.23/config/examples/mcp_with_uc_connection.yaml +109 -0
- dao_ai-0.0.23/config/examples/slack.yaml +69 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/hardware_store/supervisor_postgres.yaml +21 -20
- {dao_ai-0.0.21 → dao_ai-0.0.23}/databricks.yaml +10 -3
- {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/01_ingest_and_transform.py +33 -2
- {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/02_provision_vector_search.py +31 -3
- dao_ai-0.0.23/notebooks/03_provision_lakebase.py +85 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/04_unity_catalog_tools.py +31 -2
- dao_ai-0.0.21/notebooks/03_generate_evaluation_data.py → dao_ai-0.0.23/notebooks/06_generate_evaluation_data.py +31 -2
- dao_ai-0.0.21/notebooks/06_run_evaluation.py → dao_ai-0.0.23/notebooks/07_run_evaluation.py +31 -5
- {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/09_evaluate_inferences.py +34 -3
- {dao_ai-0.0.21 → dao_ai-0.0.23}/pyproject.toml +4 -3
- {dao_ai-0.0.21 → dao_ai-0.0.23}/requirements.txt +3 -2
- {dao_ai-0.0.21 → dao_ai-0.0.23}/schemas/model_config_schema.json +74 -3
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/config.py +98 -11
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/graph.py +3 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/memory/core.py +10 -6
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/memory/postgres.py +71 -30
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/providers/databricks.py +280 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/__init__.py +2 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/genie.py +1 -1
- dao_ai-0.0.23/src/dao_ai/tools/mcp.py +164 -0
- dao_ai-0.0.23/src/dao_ai/tools/slack.py +136 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/utils.py +8 -0
- dao_ai-0.0.23/tests/dao_ai/test_databricks.py +1004 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_function_parsing.py +2 -1
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_genie_databricks_integration.py +1 -1
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_mcp.py +63 -1
- dao_ai-0.0.21/src/dao_ai/tools/mcp.py +0 -117
- dao_ai-0.0.21/tests/dao_ai/test_databricks.py +0 -308
- {dao_ai-0.0.21 → dao_ai-0.0.23}/.gitignore +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/.python-version +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/CHANGELOG.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/CONTRIBUTING.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/LICENSE +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/Makefile +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/Makefile +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/development_workflows.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/Makefile +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/architecture.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/index.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/load-env.sh +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/README.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/dais2025/model_config_dais.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/deep_research.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/executive_assistant.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/genie.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/genie_and_vector_search.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/genie_with_conversion_id.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/human_in_the_loop.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/jira.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/mcp.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/minimal.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/examples/reservations.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/hardware_store/supervisor.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/hardware_store/swarm.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/appointments.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/appointments_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/brand_rep_demo_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/brand_rep_demo_queries.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/brand_rep_demo_tables.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/brand_rep_demo_validation.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/customers.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/customers_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/dim_stores.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/dim_stores_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/employee_performance.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/employee_performance_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/employee_tasks.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/employee_tasks_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/inventory.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/inventory_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/managers.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/managers_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/product_data.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/products.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/dais2025/task_assignments.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/hardware_store/inventory.snappy.parquet +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/hardware_store/inventory.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/hardware_store/products.snappy.parquet +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/hardware_store/products.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/items_description.csv +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/items_description.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/items_raw.csv +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/items_raw.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/orders_raw.csv +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/data/quick_serve_restaurant/orders_raw.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/genie.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/hardware_store/README.md +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/hardware_store/retail_supervisor.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/hardware_store/retail_swarm.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/environment.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/dais2025/examples.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/deep_research/examples.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/executive_assistant/examples.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/hardware_store/examples.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/examples/quick_serve_restaurant/examples.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/extract_store_numbers.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_product_by_sku.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_product_by_upc.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_store_by_number.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_product_by_sku.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_product_by_upc.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
- /dao_ai-0.0.21/notebooks/05_agent_as_code_driver.py → /dao_ai-0.0.23/notebooks/05_deploy_agent.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/08_run_examples.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/99_scratchpad.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/notebooks/INVESTech.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/schemas/bundle_config_schema.json +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/models.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/customer.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/employee.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/executive.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/genie.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/inventory.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/models.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dais2025/tools/store.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/agent_as_code.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/catalog.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/chat_models.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/cli.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/guardrails.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/hooks/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/hooks/core.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/memory/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/memory/base.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/messages.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/models.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/nodes.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/prompts.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/providers/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/providers/base.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/state.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/agent.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/core.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/human_in_the_loop.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/python.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/time.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/unity_catalog.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/tools/vector_search.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/types.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/dao_ai/vector_search.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/hardware_store/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/hardware_store/hooks.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/hardware_store/tools.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/quick_serve_restaurant/__init__.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/src/quick_serve_restaurant/tools.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/config/test_model_config.yaml +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/conftest.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_catalog.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_chat_history.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_config.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_genie.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_hooks.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_inference.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_inference_integration.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_messages.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_models.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_postgres_integration.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_state.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_summarization_inference.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_tools.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_types.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_unity_catalog.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_utils.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/test_vector_search.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/dao_ai/weather_server_mcp.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/hardware_store/.gitkeep +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/hardware_store/test_graph.py +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/images/lays_upc.png +0 -0
- {dao_ai-0.0.21 → dao_ai-0.0.23}/tests/quick_serve_restaurant/.gitkeep +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dao-ai
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.23
|
|
4
4
|
Summary: DAO AI: A modular, multi-agent orchestration framework for complex AI workflows. Supports agent handoff, tool integration, and dynamic configuration via YAML.
|
|
5
5
|
Project-URL: Homepage, https://github.com/natefleming/dao-ai
|
|
6
6
|
Project-URL: Documentation, https://natefleming.github.io/dao-ai
|
|
@@ -24,9 +24,10 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
24
24
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
25
|
Classifier: Topic :: System :: Distributed Computing
|
|
26
26
|
Requires-Python: >=3.12
|
|
27
|
-
Requires-Dist: databricks-agents>=1.6.
|
|
27
|
+
Requires-Dist: databricks-agents>=1.6.1
|
|
28
28
|
Requires-Dist: databricks-langchain>=0.8.0
|
|
29
|
-
Requires-Dist: databricks-
|
|
29
|
+
Requires-Dist: databricks-mcp>=0.3.0
|
|
30
|
+
Requires-Dist: databricks-sdk[openai]>=0.67.0
|
|
30
31
|
Requires-Dist: duckduckgo-search>=8.0.2
|
|
31
32
|
Requires-Dist: grandalf>=0.8
|
|
32
33
|
Requires-Dist: langchain-mcp-adapters>=0.1.10
|
|
@@ -653,7 +654,7 @@ test:
|
|
|
653
654
|
#### 4. MCP (Model Context Protocol) Tools (`type: mcp`)
|
|
654
655
|
MCP tools allow interaction with external services that implement the Model Context Protocol, supporting both HTTP and stdio transports.
|
|
655
656
|
|
|
656
|
-
**Configuration Example:**
|
|
657
|
+
**Configuration Example (Direct URL):**
|
|
657
658
|
```yaml
|
|
658
659
|
tools:
|
|
659
660
|
weather_tool_mcp:
|
|
@@ -664,8 +665,30 @@ test:
|
|
|
664
665
|
transport: streamable_http
|
|
665
666
|
url: http://localhost:8000/mcp
|
|
666
667
|
```
|
|
668
|
+
|
|
669
|
+
**Configuration Example (Unity Catalog Connection):**
|
|
670
|
+
MCP tools can also use Unity Catalog Connections for secure, governed access with on-behalf-of-user capabilities. The connection provides OAuth authentication, while the URL specifies the endpoint:
|
|
671
|
+
```yaml
|
|
672
|
+
resources:
|
|
673
|
+
connections:
|
|
674
|
+
github_connection:
|
|
675
|
+
name: github_u2m_connection # UC Connection name
|
|
676
|
+
|
|
677
|
+
tools:
|
|
678
|
+
github_mcp:
|
|
679
|
+
name: github_mcp
|
|
680
|
+
function:
|
|
681
|
+
type: mcp
|
|
682
|
+
name: github_mcp
|
|
683
|
+
transport: streamable_http
|
|
684
|
+
url: https://workspace.databricks.com/api/2.0/mcp/external/github_u2m_connection # MCP endpoint URL
|
|
685
|
+
connection: *github_connection # UC Connection provides OAuth authentication
|
|
686
|
+
```
|
|
687
|
+
|
|
667
688
|
**Development:**
|
|
668
|
-
Ensure the MCP service is running and accessible at the specified URL or command.
|
|
689
|
+
- **For direct URL connections**: Ensure the MCP service is running and accessible at the specified URL or command. Provide OAuth credentials (client_id, client_secret) or PAT for authentication.
|
|
690
|
+
- **For UC Connection**: URL is required to specify the endpoint. The connection provides OAuth authentication via the workspace client. Ensure the connection is configured in Unity Catalog with appropriate MCP scopes (`mcp.genie`, `mcp.functions`, `mcp.vectorsearch`, `mcp.external`).
|
|
691
|
+
- The framework will handle the MCP protocol communication automatically, including session management and authentication.
|
|
669
692
|
|
|
670
693
|
### Configuring New Agents
|
|
671
694
|
|
|
@@ -581,7 +581,7 @@ test:
|
|
|
581
581
|
#### 4. MCP (Model Context Protocol) Tools (`type: mcp`)
|
|
582
582
|
MCP tools allow interaction with external services that implement the Model Context Protocol, supporting both HTTP and stdio transports.
|
|
583
583
|
|
|
584
|
-
**Configuration Example:**
|
|
584
|
+
**Configuration Example (Direct URL):**
|
|
585
585
|
```yaml
|
|
586
586
|
tools:
|
|
587
587
|
weather_tool_mcp:
|
|
@@ -592,8 +592,30 @@ test:
|
|
|
592
592
|
transport: streamable_http
|
|
593
593
|
url: http://localhost:8000/mcp
|
|
594
594
|
```
|
|
595
|
+
|
|
596
|
+
**Configuration Example (Unity Catalog Connection):**
|
|
597
|
+
MCP tools can also use Unity Catalog Connections for secure, governed access with on-behalf-of-user capabilities. The connection provides OAuth authentication, while the URL specifies the endpoint:
|
|
598
|
+
```yaml
|
|
599
|
+
resources:
|
|
600
|
+
connections:
|
|
601
|
+
github_connection:
|
|
602
|
+
name: github_u2m_connection # UC Connection name
|
|
603
|
+
|
|
604
|
+
tools:
|
|
605
|
+
github_mcp:
|
|
606
|
+
name: github_mcp
|
|
607
|
+
function:
|
|
608
|
+
type: mcp
|
|
609
|
+
name: github_mcp
|
|
610
|
+
transport: streamable_http
|
|
611
|
+
url: https://workspace.databricks.com/api/2.0/mcp/external/github_u2m_connection # MCP endpoint URL
|
|
612
|
+
connection: *github_connection # UC Connection provides OAuth authentication
|
|
613
|
+
```
|
|
614
|
+
|
|
595
615
|
**Development:**
|
|
596
|
-
Ensure the MCP service is running and accessible at the specified URL or command.
|
|
616
|
+
- **For direct URL connections**: Ensure the MCP service is running and accessible at the specified URL or command. Provide OAuth credentials (client_id, client_secret) or PAT for authentication.
|
|
617
|
+
- **For UC Connection**: URL is required to specify the endpoint. The connection provides OAuth authentication via the workspace client. Ensure the connection is configured in Unity Catalog with appropriate MCP scopes (`mcp.genie`, `mcp.functions`, `mcp.vectorsearch`, `mcp.external`).
|
|
618
|
+
- The framework will handle the MCP protocol communication automatically, including session management and authentication.
|
|
597
619
|
|
|
598
620
|
### Configuring New Agents
|
|
599
621
|
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# yaml-language-server: $schema=../../schemas/model_config_schema.json
|
|
2
|
+
|
|
3
|
+
variables:
|
|
4
|
+
client_id: &client_id # Service principal client ID
|
|
5
|
+
options:
|
|
6
|
+
- env: RETAIL_AI_DATABRICKS_CLIENT_ID
|
|
7
|
+
- scope: retail_ai
|
|
8
|
+
secret: RETAIL_AI_DATABRICKS_CLIENT_ID
|
|
9
|
+
client_secret: &client_secret # Service principal secret
|
|
10
|
+
options:
|
|
11
|
+
- env: RETAIL_AI_DATABRICKS_CLIENT_SECRET
|
|
12
|
+
- scope: retail_ai
|
|
13
|
+
secret: RETAIL_AI_DATABRICKS_CLIENT_SECRET
|
|
14
|
+
workspace_host: &workspace_host # Databricks workspace URL
|
|
15
|
+
options:
|
|
16
|
+
- env: RETAIL_AI_DATABRICKS_HOST
|
|
17
|
+
- scope: retail_ai
|
|
18
|
+
secret: RETAIL_AI_DATABRICKS_HOST
|
|
19
|
+
|
|
20
|
+
schemas:
|
|
21
|
+
retail_schema: &retail_schema # Unity Catalog schema configuration
|
|
22
|
+
catalog_name: nfleming # Unity Catalog name
|
|
23
|
+
schema_name: retail_ai # Schema within the catalog
|
|
24
|
+
|
|
25
|
+
resources:
|
|
26
|
+
llms:
|
|
27
|
+
default_llm: &default_llm # Default LLM configuration
|
|
28
|
+
name: databricks-claude-3-7-sonnet # Databricks serving endpoint name
|
|
29
|
+
|
|
30
|
+
connections:
|
|
31
|
+
github_connection: &github_connection # UC Connection for GitHub
|
|
32
|
+
name: github_u2m_connection # UC Connection name
|
|
33
|
+
|
|
34
|
+
tools:
|
|
35
|
+
# Example using UC Connection for GitHub MCP
|
|
36
|
+
github_mcp_uc: &github_mcp_uc
|
|
37
|
+
name: github_mcp # Tool name for agent reference
|
|
38
|
+
function:
|
|
39
|
+
type: mcp # Tool type: MCP server
|
|
40
|
+
name: github_mcp # MCP function name
|
|
41
|
+
transport: streamable_http # Transport protocol
|
|
42
|
+
url: https://adb-984752964297111.11.azuredatabricks.net/api/2.0/mcp/external/github_u2m_connection # MCP endpoint URL
|
|
43
|
+
connection: *github_connection # Reference to UC Connection (provides OAuth auth)
|
|
44
|
+
|
|
45
|
+
# Example using direct URL (existing approach)
|
|
46
|
+
weather_tool_mcp: &weather_tool_mcp
|
|
47
|
+
name: weather # Tool name for agent reference
|
|
48
|
+
function:
|
|
49
|
+
type: mcp # Tool type: MCP server
|
|
50
|
+
name: weather # MCP function name
|
|
51
|
+
transport: streamable_http # Transport protocol
|
|
52
|
+
url: http://localhost:8000/mcp # MCP server URL
|
|
53
|
+
|
|
54
|
+
vector_search_mcp: &vector_search_mcp # Vector search MCP tool configuration
|
|
55
|
+
name: vector_search_mcp
|
|
56
|
+
function:
|
|
57
|
+
type: mcp # MCP function type
|
|
58
|
+
name: vector_search_mcp
|
|
59
|
+
url: https://adb-984752964297111.11.azuredatabricks.net/api/2.0/mcp/vector-search/nfleming/retail_ai
|
|
60
|
+
client_id: *client_id
|
|
61
|
+
client_secret: *client_secret
|
|
62
|
+
workspace_host: *workspace_host
|
|
63
|
+
|
|
64
|
+
unity_catalog_mcp: &unity_catalog_mcp # Unity Catalog MCP tool configuration
|
|
65
|
+
name: unity_catalog_mcp
|
|
66
|
+
function:
|
|
67
|
+
type: mcp # MCP function type
|
|
68
|
+
name: unity_catalog_mcp
|
|
69
|
+
url: https://adb-984752964297111.11.azuredatabricks.net/api/2.0/mcp/functions/nfleming/retail_ai
|
|
70
|
+
client_id: *client_id
|
|
71
|
+
client_secret: *client_secret
|
|
72
|
+
workspace_host: *workspace_host
|
|
73
|
+
|
|
74
|
+
genie_mcp: &genie_mcp # Genie MCP tool configuration
|
|
75
|
+
name: genie_mcp
|
|
76
|
+
function:
|
|
77
|
+
type: mcp # MCP function type
|
|
78
|
+
name: genie_mcp
|
|
79
|
+
url: https://adb-984752964297111.11.azuredatabricks.net/api/2.0/mcp/genie/01f01c91f1f414d59daaefd2b7ec82ea
|
|
80
|
+
client_id: *client_id
|
|
81
|
+
client_secret: *client_secret
|
|
82
|
+
workspace_host: *workspace_host
|
|
83
|
+
|
|
84
|
+
agents:
|
|
85
|
+
mcp_agent: &mcp_agent # MCP agent configuration
|
|
86
|
+
name: mcp_agent # Agent identifier
|
|
87
|
+
model: *default_llm # Reference to LLM configuration
|
|
88
|
+
tools: # Tools available to this agent
|
|
89
|
+
- *github_mcp_uc
|
|
90
|
+
- *vector_search_mcp
|
|
91
|
+
- *unity_catalog_mcp
|
|
92
|
+
- *genie_mcp
|
|
93
|
+
prompt: | # System prompt defining agent behavior
|
|
94
|
+
You are a multi-purpose agent that can perform vector search, interact with Unity Catalog,
|
|
95
|
+
interact with Genie rooms, and interact with GitHub. Use the tools provided to answer
|
|
96
|
+
questions and perform tasks. You many need to use the tools in combination to achieve
|
|
97
|
+
complex tasks.
|
|
98
|
+
|
|
99
|
+
app:
|
|
100
|
+
name: mcp_agent # Application name
|
|
101
|
+
log_level: DEBUG # Logging level for the application
|
|
102
|
+
registered_model: # MLflow registered model configuration
|
|
103
|
+
schema: *retail_schema # Schema where model will be registered
|
|
104
|
+
name: mcp_agent # Model name in MLflow registry
|
|
105
|
+
agents: # List of agents included in the system
|
|
106
|
+
- *mcp_agent # MCP agent
|
|
107
|
+
orchestration: # Agent orchestration configuration
|
|
108
|
+
swarm: # Supervisor orchestration pattern
|
|
109
|
+
model: *default_llm # LLM for routing decisions
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# yaml-language-server: $schema=../../schemas/model_config_schema.json
|
|
2
|
+
|
|
3
|
+
schemas:
|
|
4
|
+
default_schema: &default_schema # Unity Catalog schema configuration
|
|
5
|
+
catalog_name: main # Unity Catalog name
|
|
6
|
+
schema_name: default # Schema within the catalog
|
|
7
|
+
|
|
8
|
+
resources:
|
|
9
|
+
llms:
|
|
10
|
+
# Primary LLM for Slack agent
|
|
11
|
+
default_llm: &default_llm
|
|
12
|
+
name: databricks-meta-llama-3-3-70b-instruct # Databricks serving endpoint name
|
|
13
|
+
temperature: 0.7 # Temperature for more natural responses
|
|
14
|
+
max_tokens: 4096 # Maximum tokens per response
|
|
15
|
+
on_behalf_of_user: false
|
|
16
|
+
|
|
17
|
+
connections:
|
|
18
|
+
# Unity Catalog HTTP connection to Slack
|
|
19
|
+
slack_connection: &slack_connection
|
|
20
|
+
name: slack_bot_connection # UC Connection name
|
|
21
|
+
on_behalf_of_user: false # Use service principal auth
|
|
22
|
+
|
|
23
|
+
tools:
|
|
24
|
+
# Slack messaging tool using factory function
|
|
25
|
+
slack_tool: &slack_tool
|
|
26
|
+
name: send_slack_message # Tool name for agent reference
|
|
27
|
+
function:
|
|
28
|
+
type: factory # Tool type: factory function
|
|
29
|
+
name: dao_ai.tools.create_send_slack_message_tool # Factory function path
|
|
30
|
+
args: # Arguments passed to factory
|
|
31
|
+
connection: *slack_connection # Reference to Slack UC connection
|
|
32
|
+
channel_name: "general" # Slack channel name (can also use channel_id)
|
|
33
|
+
name: send_slack_message
|
|
34
|
+
description: Send a message to the #general Slack channel
|
|
35
|
+
|
|
36
|
+
agents:
|
|
37
|
+
# Slack notification agent
|
|
38
|
+
slack_agent: &slack_agent
|
|
39
|
+
name: slack_agent # Agent identifier
|
|
40
|
+
description: "Agent that can send notifications to Slack"
|
|
41
|
+
model: *default_llm # Reference to LLM configuration
|
|
42
|
+
tools: # Tools available to this agent
|
|
43
|
+
- *slack_tool
|
|
44
|
+
prompt: | # System prompt defining agent behavior
|
|
45
|
+
You are a helpful assistant that can send notifications to Slack.
|
|
46
|
+
When asked to notify someone or send a message, use the send_slack_message tool
|
|
47
|
+
to post to the #general channel. Keep messages concise and professional.
|
|
48
|
+
|
|
49
|
+
app:
|
|
50
|
+
name: slack_agent_example # Application name
|
|
51
|
+
description: "Agent system that can send notifications to Slack"
|
|
52
|
+
log_level: INFO # Logging level for the application
|
|
53
|
+
registered_model: # MLflow registered model configuration
|
|
54
|
+
schema: *default_schema # Schema where model will be registered
|
|
55
|
+
name: slack_notification_agent # Model name in MLflow registry
|
|
56
|
+
endpoint_name: slack_notification_agent # Model serving endpoint name
|
|
57
|
+
tags: # Tags for resource organization
|
|
58
|
+
integration: slack # Integration type
|
|
59
|
+
notification: true # Indicates notification capabilities
|
|
60
|
+
permissions: # Model serving permissions
|
|
61
|
+
- principals: [users] # Grant access to all users
|
|
62
|
+
entitlements:
|
|
63
|
+
- CAN_QUERY # Query permissions
|
|
64
|
+
agents: # List of agents included in the system
|
|
65
|
+
- *slack_agent # Slack notification agent
|
|
66
|
+
orchestration: # Agent orchestration configuration
|
|
67
|
+
swarm: # Swarm orchestration pattern
|
|
68
|
+
model: *default_llm # LLM for routing decisions
|
|
69
|
+
|
|
@@ -194,29 +194,30 @@ resources:
|
|
|
194
194
|
databases:
|
|
195
195
|
# PostgreSQL database for agent memory and checkpoints
|
|
196
196
|
retail_database: &retail_database
|
|
197
|
-
name: "
|
|
197
|
+
name: "Retail and Consumer Goods Database"
|
|
198
|
+
instance_name: "retail-consumer-goods"
|
|
198
199
|
description: "Database for agent memory and checkpoints"
|
|
199
200
|
|
|
200
201
|
# Database connection parameters
|
|
201
202
|
# These can be set via environment variables or Databricks secrets
|
|
202
|
-
host:
|
|
203
|
-
default_value: localhost
|
|
204
|
-
options:
|
|
205
|
-
- env: PGHOST # Environment variable
|
|
206
|
-
- scope: retail_ai # Databricks secret scope
|
|
207
|
-
secret: PGHOST # Secret name
|
|
208
|
-
port:
|
|
209
|
-
default_value: 5432
|
|
210
|
-
options:
|
|
211
|
-
- env: PGPORT
|
|
212
|
-
- scope: retail_ai
|
|
213
|
-
secret: PGPORT
|
|
214
|
-
database:
|
|
215
|
-
default_value: databricks_postgres # Default database name
|
|
216
|
-
options:
|
|
217
|
-
- env: PGDATABASE
|
|
218
|
-
- scope: retail_ai
|
|
219
|
-
secret: PGDATABASE
|
|
203
|
+
# host:
|
|
204
|
+
# default_value: localhost
|
|
205
|
+
# options:
|
|
206
|
+
# - env: PGHOST # Environment variable
|
|
207
|
+
# - scope: retail_ai # Databricks secret scope
|
|
208
|
+
# secret: PGHOST # Secret name
|
|
209
|
+
# port:
|
|
210
|
+
# default_value: 5432
|
|
211
|
+
# options:
|
|
212
|
+
# - env: PGPORT
|
|
213
|
+
# - scope: retail_ai
|
|
214
|
+
# secret: PGPORT
|
|
215
|
+
# database:
|
|
216
|
+
# default_value: databricks_postgres # Default database name
|
|
217
|
+
# options:
|
|
218
|
+
# - env: PGDATABASE
|
|
219
|
+
# - scope: retail_ai
|
|
220
|
+
# secret: PGDATABASE
|
|
220
221
|
|
|
221
222
|
|
|
222
223
|
# Traditional PostgreSQL authentication (commented out)
|
|
@@ -959,7 +960,7 @@ app:
|
|
|
959
960
|
content: Can you recommend a lamp to match my oak side tables?
|
|
960
961
|
custom_inputs:
|
|
961
962
|
configurable:
|
|
962
|
-
thread_id: "1"
|
|
963
|
+
#thread_id: "1"
|
|
963
964
|
user_id: my_user_id
|
|
964
965
|
store_num: 87887
|
|
965
966
|
#chat_history:
|
|
@@ -50,17 +50,24 @@ resources:
|
|
|
50
50
|
base_parameters:
|
|
51
51
|
config-path: ${var.config_path}
|
|
52
52
|
environment_key: dao-ai-env
|
|
53
|
+
- task_key: provision-lakebase
|
|
54
|
+
notebook_task:
|
|
55
|
+
notebook_path: ./notebooks/03_provision_lakebase.py
|
|
56
|
+
base_parameters:
|
|
57
|
+
config-path: ${var.config_path}
|
|
58
|
+
environment_key: dao-ai-env
|
|
53
59
|
- task_key: generate-evaluation-data
|
|
54
60
|
depends_on:
|
|
55
61
|
- task_key: provision-vector-search
|
|
56
62
|
notebook_task:
|
|
57
|
-
notebook_path: ./notebooks/
|
|
63
|
+
notebook_path: ./notebooks/06_generate_evaluation_data.py
|
|
58
64
|
base_parameters:
|
|
59
65
|
config-path: ${var.config_path}
|
|
60
66
|
environment_key: dao-ai-env
|
|
61
67
|
- task_key: unity-catalog-tools
|
|
62
68
|
depends_on:
|
|
63
69
|
- task_key: provision-vector-search
|
|
70
|
+
- task_key: provision-lakebase
|
|
64
71
|
notebook_task:
|
|
65
72
|
notebook_path: ./notebooks/04_unity_catalog_tools.py
|
|
66
73
|
base_parameters:
|
|
@@ -70,7 +77,7 @@ resources:
|
|
|
70
77
|
depends_on:
|
|
71
78
|
- task_key: unity-catalog-tools
|
|
72
79
|
notebook_task:
|
|
73
|
-
notebook_path: ./notebooks/
|
|
80
|
+
notebook_path: ./notebooks/05_deploy_agent.py
|
|
74
81
|
base_parameters:
|
|
75
82
|
config-path: ${var.config_path}
|
|
76
83
|
environment_key: dao-ai-env
|
|
@@ -79,7 +86,7 @@ resources:
|
|
|
79
86
|
- task_key: deploy-agents
|
|
80
87
|
- task_key: generate-evaluation-data
|
|
81
88
|
notebook_task:
|
|
82
|
-
notebook_path: ./notebooks/
|
|
89
|
+
notebook_path: ./notebooks/07_run_evaluation.py
|
|
83
90
|
base_parameters:
|
|
84
91
|
config-path: ${var.config_path}
|
|
85
92
|
environment_key: dao-ai-env
|
|
@@ -1,11 +1,42 @@
|
|
|
1
1
|
# Databricks notebook source
|
|
2
2
|
# MAGIC %pip install --quiet --upgrade -r ../requirements.txt
|
|
3
|
+
# MAGIC %pip uninstall --quiet -y databricks-connect pyspark pyspark-connect
|
|
4
|
+
# MAGIC %pip install --quiet databricks-connect
|
|
3
5
|
# MAGIC %restart_python
|
|
4
6
|
|
|
5
7
|
# COMMAND ----------
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
from typing import Sequence
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
|
|
13
|
+
if not os.path.exists(base_path):
|
|
14
|
+
raise FileNotFoundError(f"Base path does not exist: {base_path}")
|
|
15
|
+
|
|
16
|
+
if not os.path.isdir(base_path):
|
|
17
|
+
raise NotADirectoryError(f"Base path is not a directory: {base_path}")
|
|
18
|
+
|
|
19
|
+
yaml_files = []
|
|
20
|
+
|
|
21
|
+
for root, dirs, files in os.walk(base_path):
|
|
22
|
+
for file in files:
|
|
23
|
+
if file.lower().endswith(('.yaml', '.yml')):
|
|
24
|
+
yaml_files.append(os.path.join(root, file))
|
|
25
|
+
|
|
26
|
+
return sorted(yaml_files)
|
|
27
|
+
|
|
28
|
+
# COMMAND ----------
|
|
29
|
+
|
|
30
|
+
dbutils.widgets.text(name="config-path", defaultValue="")
|
|
31
|
+
|
|
32
|
+
config_files: Sequence[str] = find_yaml_files_os_walk("../config")
|
|
33
|
+
dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
|
|
34
|
+
|
|
35
|
+
config_path: str | None = dbutils.widgets.get("config-path") or None
|
|
36
|
+
project_path: str = dbutils.widgets.get("config-paths") or None
|
|
37
|
+
|
|
38
|
+
config_path: str = config_path or project_path
|
|
39
|
+
|
|
9
40
|
print(config_path)
|
|
10
41
|
|
|
11
42
|
# COMMAND ----------
|
|
@@ -6,10 +6,38 @@
|
|
|
6
6
|
|
|
7
7
|
# COMMAND ----------
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
from typing import Sequence
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
|
|
13
|
+
if not os.path.exists(base_path):
|
|
14
|
+
raise FileNotFoundError(f"Base path does not exist: {base_path}")
|
|
15
|
+
|
|
16
|
+
if not os.path.isdir(base_path):
|
|
17
|
+
raise NotADirectoryError(f"Base path is not a directory: {base_path}")
|
|
18
|
+
|
|
19
|
+
yaml_files = []
|
|
20
|
+
|
|
21
|
+
for root, dirs, files in os.walk(base_path):
|
|
22
|
+
for file in files:
|
|
23
|
+
if file.lower().endswith(('.yaml', '.yml')):
|
|
24
|
+
yaml_files.append(os.path.join(root, file))
|
|
25
|
+
|
|
26
|
+
return sorted(yaml_files)
|
|
27
|
+
|
|
28
|
+
# COMMAND ----------
|
|
29
|
+
|
|
30
|
+
dbutils.widgets.text(name="config-path", defaultValue="")
|
|
12
31
|
|
|
32
|
+
config_files: Sequence[str] = find_yaml_files_os_walk("../config")
|
|
33
|
+
dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
|
|
34
|
+
|
|
35
|
+
config_path: str | None = dbutils.widgets.get("config-path") or None
|
|
36
|
+
project_path: str = dbutils.widgets.get("config-paths") or None
|
|
37
|
+
|
|
38
|
+
config_path: str = config_path or project_path
|
|
39
|
+
|
|
40
|
+
print(config_path)
|
|
13
41
|
# COMMAND ----------
|
|
14
42
|
|
|
15
43
|
import sys
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Databricks notebook source
|
|
2
|
+
# MAGIC %pip install --quiet --upgrade -r ../requirements.txt
|
|
3
|
+
# MAGIC %pip uninstall --quiet -y databricks-connect pyspark pyspark-connect
|
|
4
|
+
# MAGIC %pip install --quiet databricks-connect
|
|
5
|
+
# MAGIC %restart_python
|
|
6
|
+
|
|
7
|
+
# COMMAND ----------
|
|
8
|
+
|
|
9
|
+
from typing import Sequence
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
|
|
13
|
+
if not os.path.exists(base_path):
|
|
14
|
+
raise FileNotFoundError(f"Base path does not exist: {base_path}")
|
|
15
|
+
|
|
16
|
+
if not os.path.isdir(base_path):
|
|
17
|
+
raise NotADirectoryError(f"Base path is not a directory: {base_path}")
|
|
18
|
+
|
|
19
|
+
yaml_files = []
|
|
20
|
+
|
|
21
|
+
for root, dirs, files in os.walk(base_path):
|
|
22
|
+
for file in files:
|
|
23
|
+
if file.lower().endswith(('.yaml', '.yml')):
|
|
24
|
+
yaml_files.append(os.path.join(root, file))
|
|
25
|
+
|
|
26
|
+
return sorted(yaml_files)
|
|
27
|
+
|
|
28
|
+
# COMMAND ----------
|
|
29
|
+
|
|
30
|
+
dbutils.widgets.text(name="config-path", defaultValue="")
|
|
31
|
+
|
|
32
|
+
config_files: Sequence[str] = find_yaml_files_os_walk("../config")
|
|
33
|
+
dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
|
|
34
|
+
|
|
35
|
+
config_path: str | None = dbutils.widgets.get("config-path") or None
|
|
36
|
+
project_path: str = dbutils.widgets.get("config-paths") or None
|
|
37
|
+
|
|
38
|
+
config_path: str = config_path or project_path
|
|
39
|
+
|
|
40
|
+
print(config_path)
|
|
41
|
+
|
|
42
|
+
# COMMAND ----------
|
|
43
|
+
|
|
44
|
+
import sys
|
|
45
|
+
from typing import Sequence
|
|
46
|
+
from importlib.metadata import version
|
|
47
|
+
|
|
48
|
+
sys.path.insert(0, "../src")
|
|
49
|
+
|
|
50
|
+
pip_requirements: Sequence[str] = (
|
|
51
|
+
f"databricks-sdk=={version('databricks-sdk')}",
|
|
52
|
+
f"mlflow=={version('mlflow')}",
|
|
53
|
+
)
|
|
54
|
+
print("\n".join(pip_requirements))
|
|
55
|
+
|
|
56
|
+
# COMMAND ----------
|
|
57
|
+
|
|
58
|
+
# MAGIC %load_ext autoreload
|
|
59
|
+
# MAGIC %autoreload 2
|
|
60
|
+
|
|
61
|
+
# COMMAND ----------
|
|
62
|
+
|
|
63
|
+
from dotenv import find_dotenv, load_dotenv
|
|
64
|
+
|
|
65
|
+
_ = load_dotenv(find_dotenv())
|
|
66
|
+
|
|
67
|
+
# COMMAND ----------
|
|
68
|
+
|
|
69
|
+
from dao_ai.config import AppConfig
|
|
70
|
+
|
|
71
|
+
config: AppConfig = AppConfig.from_file(path=config_path)
|
|
72
|
+
|
|
73
|
+
# COMMAND ----------
|
|
74
|
+
|
|
75
|
+
from dao_ai.config import DatabaseModel
|
|
76
|
+
|
|
77
|
+
databases: dict[str, DatabaseModel] = config.resources.databases
|
|
78
|
+
|
|
79
|
+
for _, database in databases.items():
|
|
80
|
+
database: DatabaseModel
|
|
81
|
+
|
|
82
|
+
print(f"database: {database}")
|
|
83
|
+
database.create()
|
|
84
|
+
|
|
85
|
+
|
|
@@ -6,8 +6,37 @@
|
|
|
6
6
|
|
|
7
7
|
# COMMAND ----------
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
from typing import Sequence
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
|
|
13
|
+
if not os.path.exists(base_path):
|
|
14
|
+
raise FileNotFoundError(f"Base path does not exist: {base_path}")
|
|
15
|
+
|
|
16
|
+
if not os.path.isdir(base_path):
|
|
17
|
+
raise NotADirectoryError(f"Base path is not a directory: {base_path}")
|
|
18
|
+
|
|
19
|
+
yaml_files = []
|
|
20
|
+
|
|
21
|
+
for root, dirs, files in os.walk(base_path):
|
|
22
|
+
for file in files:
|
|
23
|
+
if file.lower().endswith(('.yaml', '.yml')):
|
|
24
|
+
yaml_files.append(os.path.join(root, file))
|
|
25
|
+
|
|
26
|
+
return sorted(yaml_files)
|
|
27
|
+
|
|
28
|
+
# COMMAND ----------
|
|
29
|
+
|
|
30
|
+
dbutils.widgets.text(name="config-path", defaultValue="")
|
|
31
|
+
|
|
32
|
+
config_files: Sequence[str] = find_yaml_files_os_walk("../config")
|
|
33
|
+
dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
|
|
34
|
+
|
|
35
|
+
config_path: str | None = dbutils.widgets.get("config-path") or None
|
|
36
|
+
project_path: str = dbutils.widgets.get("config-paths") or None
|
|
37
|
+
|
|
38
|
+
config_path: str = config_path or project_path
|
|
39
|
+
|
|
11
40
|
print(config_path)
|
|
12
41
|
|
|
13
42
|
# COMMAND ----------
|
|
@@ -6,8 +6,37 @@
|
|
|
6
6
|
|
|
7
7
|
# COMMAND ----------
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
from typing import Sequence
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
def find_yaml_files_os_walk(base_path: str) -> Sequence[str]:
|
|
13
|
+
if not os.path.exists(base_path):
|
|
14
|
+
raise FileNotFoundError(f"Base path does not exist: {base_path}")
|
|
15
|
+
|
|
16
|
+
if not os.path.isdir(base_path):
|
|
17
|
+
raise NotADirectoryError(f"Base path is not a directory: {base_path}")
|
|
18
|
+
|
|
19
|
+
yaml_files = []
|
|
20
|
+
|
|
21
|
+
for root, dirs, files in os.walk(base_path):
|
|
22
|
+
for file in files:
|
|
23
|
+
if file.lower().endswith(('.yaml', '.yml')):
|
|
24
|
+
yaml_files.append(os.path.join(root, file))
|
|
25
|
+
|
|
26
|
+
return sorted(yaml_files)
|
|
27
|
+
|
|
28
|
+
# COMMAND ----------
|
|
29
|
+
|
|
30
|
+
dbutils.widgets.text(name="config-path", defaultValue="")
|
|
31
|
+
|
|
32
|
+
config_files: Sequence[str] = find_yaml_files_os_walk("../config")
|
|
33
|
+
dbutils.widgets.dropdown(name="config-paths", choices=config_files, defaultValue=next(iter(config_files), ""))
|
|
34
|
+
|
|
35
|
+
config_path: str | None = dbutils.widgets.get("config-path") or None
|
|
36
|
+
project_path: str = dbutils.widgets.get("config-paths") or None
|
|
37
|
+
|
|
38
|
+
config_path: str = config_path or project_path
|
|
39
|
+
|
|
11
40
|
print(config_path)
|
|
12
41
|
|
|
13
42
|
# COMMAND ----------
|