dao-ai 0.0.17__tar.gz → 0.0.18__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.17 → dao_ai-0.0.18}/PKG-INFO +1 -1
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/executive_assistant.yaml +43 -43
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/hardware_store/supervisor.yaml +2 -2
- {dao_ai-0.0.17 → dao_ai-0.0.18}/pyproject.toml +1 -1
- {dao_ai-0.0.17 → dao_ai-0.0.18}/schemas/model_config_schema.json +48 -16
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/agent_as_code.py +2 -2
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/config.py +172 -39
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/messages.py +7 -0
- dao_ai-0.0.18/src/dao_ai/models.py +715 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/providers/databricks.py +8 -4
- dao_ai-0.0.18/tests/dao_ai/test_databricks.py +308 -0
- dao_ai-0.0.18/tests/dao_ai/test_inference.py +309 -0
- dao_ai-0.0.17/src/dao_ai/models.py +0 -407
- dao_ai-0.0.17/tests/dao_ai/test_databricks.py +0 -17
- dao_ai-0.0.17/tests/dao_ai/test_inference.py +0 -51
- {dao_ai-0.0.17 → dao_ai-0.0.18}/.gitignore +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/.python-version +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/CHANGELOG.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/CONTRIBUTING.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/LICENSE +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/Makefile +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/Makefile +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/REFACTORING_SUMMARY.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/base-environment-serverless.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/development_workflows.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/Makefile +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agent_implementation.mmd +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agent_tools_architecture.mmd +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agent-troubleshooting.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-best-practices.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-development-patterns.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-performance.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/agents/agent-quickstart.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/ai-agents.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/overview.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/references/agent-reference.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/agents-and-tools/references/tools-reference.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/applications/streamlit-app.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/architecture/overview.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/architecture.mmd +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/architecture.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/customer_preparation_guide.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/databricks_integration.mmd +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/deployment/production.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/development/contributing.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/employee_tools_guide.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/getting-started/installation.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/getting-started/mkdocs-quickstart.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/getting-started/quick-start.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/index.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/mkdocs.yml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/scenario_1_architecture.mmd +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/scenario_1_flow.mmd +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/setup-docs.sh +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/task_assignment_workflow_guide.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/docs/tools/overview.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/examples/customer_preparation_workflow.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/examples/task_assignment_workflow.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/load-env.sh +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/CSS_REFACTORING_SUMMARY.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/DEMO_CONTROLS_RESTORED.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/DEMO_IMPLEMENTATION_SUMMARY.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/DEMO_QUICK_START.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/Dockerfile +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/HOMEPAGE_README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/Makefile +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/app.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/app.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/backup_homepage.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/chat.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_charts.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/enhanced_navigation.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/associate_homepage.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/dashboard_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/my_tasks_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/performance_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/products_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/associate/schedule_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/chat_integration.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/kpi_summary.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/common/notifications.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/homepage.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/alerts_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/analytics_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/dashboard_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/demo_alerts.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/inventory_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/manager_homepage.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/operations_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/store_manager/team_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/ai_insights_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/executive_dashboard_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/geographical_analysis_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/performance_metrics_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/strategic_insights_tab.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/homepage/vp_retail_operations/vp_homepage.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/metrics.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/navigation.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/oldhomepage.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/components/styles.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/config.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/BRAND_REP_DEMO_SUMMARY.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/comprehensive_demo_script.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/brand_rep_product_education_demo.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_associate_ai_assistant_demo.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/demo_docs/demo_scripts/store_manager_alert_response_demo.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/components/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/components/dashboard_card.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/demo_alerts.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/dev/examples/sample_dashboard.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages/component_showcase.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages/dev_playground.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages/playground.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/daily_operations.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/inventory.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_schedule.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/my_tasks.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/orders.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/products_promotions.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/staff.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pages_wip/team_insights.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/pyproject.toml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/requirements.txt +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/static/css/style.css +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/base.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/components.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/dashboard.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/homepage.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/styles/theme.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/test_vip_notification.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/tests/test_calculations.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/utils/config.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/utils/database.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/utils/model_serving.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app/utils/store_context.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/Makefile +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/app.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_components_enhanced.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin/tailadmin_styles.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/components/tailadmin/tailadmin_styles.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/TAILADMIN_README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/homepage_tailadmin.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_demo.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/tailadmin_implementation_guide.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/test_vp_dashboard.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_enhanced.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/old/vp_dashboard_tailadmin.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/components_demo.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/homepage.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/implementation_guide.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_clean.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pages/vp_dashboard_enhanced.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/pyproject.toml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/streamlit_store_app_tailadmin/tests/test_imports.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/images/lays_upc.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/manager_demo_script.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/notebook_vector_search_test.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/apps/dais2025/store-app/tests/test_vector_search_integration.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/dais2025/model_config_dais.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/deep_research.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/genie.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/genie_and_vector_search.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/human_in_the_loop.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/jira.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/mcp.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/minimal.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/examples/reservations.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/hardware_store/supervisor_postgres.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/hardware_store/swarm.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/config/quick_serve_restaurant/quick-serve-restaurant.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/appointments.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/appointments_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/brand_rep_demo_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/brand_rep_demo_queries.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/brand_rep_demo_tables.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/brand_rep_demo_validation.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/customers.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/customers_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/dim_stores.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/dim_stores_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/employee_performance.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/employee_performance_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/employee_tasks.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/employee_tasks_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/inventory.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/inventory_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/managers.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/managers_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/product_data.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/products.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/dais2025/task_assignments.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/hardware_store/inventory.snappy.parquet +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/hardware_store/inventory.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/hardware_store/products.snappy.parquet +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/hardware_store/products.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/items_description.csv +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/items_description.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/items_raw.csv +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/items_raw.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/orders_raw.csv +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/data/quick_serve_restaurant/orders_raw.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/databricks.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/genie.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/hardware_store/README.md +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/hardware_store/retail_supervisor.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/hardware_store/retail_swarm.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/environment.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/dais2025/examples.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/deep_research/examples.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/executive_assistant/examples.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/hardware_store/examples.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/examples/quick_serve_restaurant/examples.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/extract_store_numbers.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_product_by_sku.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_product_by_upc.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_store_by_number.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_product_by_sku.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_product_by_upc.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/01_ingest_and_transform.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/02_provision_vector_search.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/03_generate_evaluation_data.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/04_unity_catalog_tools.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/05_agent_as_code_driver.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/06_run_evaluation.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/08_run_examples.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/09_evaluate_inferences.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/99_scratchpad.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/notebooks/INVESTech.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/requirements.txt +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/schemas/bundle_config_schema.json +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/models.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/customer.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/employee.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/executive.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/genie.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/inventory.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/models.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dais2025/tools/store.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/catalog.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/chat_models.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/cli.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/graph.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/guardrails.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/hooks/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/hooks/core.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/memory/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/memory/base.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/memory/core.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/memory/postgres.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/nodes.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/prompts.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/providers/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/providers/base.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/state.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/agent.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/core.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/genie.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/human_in_the_loop.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/mcp.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/python.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/time.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/unity_catalog.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/tools/vector_search.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/types.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/utils.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/dao_ai/vector_search.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/hardware_store/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/hardware_store/hooks.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/hardware_store/tools.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/quick_serve_restaurant/__init__.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/src/quick_serve_restaurant/tools.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/config/test_model_config.yaml +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/conftest.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_catalog.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_chat_history.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_config.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_function_parsing.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_hooks.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_mcp.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_messages.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_models.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_state.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_summarization_inference.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_tools.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_types.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_utils.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/test_vector_search.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/dao_ai/weather_server_mcp.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/hardware_store/.gitkeep +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/hardware_store/test_graph.py +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/tests/images/lays_upc.png +0 -0
- {dao_ai-0.0.17 → dao_ai-0.0.18}/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.18
|
|
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
|
|
@@ -50,68 +50,68 @@ resources:
|
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
tables:
|
|
53
|
-
|
|
53
|
+
all_tables:
|
|
54
54
|
schema: *executive_assistant_schema
|
|
55
|
-
|
|
55
|
+
# name: employee_performance
|
|
56
56
|
|
|
57
|
-
products:
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
# products:
|
|
58
|
+
# schema: *executive_assistant_schema
|
|
59
|
+
# name: products
|
|
60
60
|
|
|
61
|
-
inventory:
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
# inventory:
|
|
62
|
+
# schema: *executive_assistant_schema
|
|
63
|
+
# name: inventory
|
|
64
64
|
|
|
65
|
-
customers:
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
# customers:
|
|
66
|
+
# schema: *executive_assistant_schema
|
|
67
|
+
# name: customers
|
|
68
68
|
|
|
69
|
-
managers:
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
# managers:
|
|
70
|
+
# schema: *executive_assistant_schema
|
|
71
|
+
# name: managers
|
|
72
72
|
|
|
73
|
-
employee_tasks:
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
# employee_tasks:
|
|
74
|
+
# schema: *executive_assistant_schema
|
|
75
|
+
# name: employee_tasks
|
|
76
76
|
|
|
77
|
-
appointments:
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
# appointments:
|
|
78
|
+
# schema: *executive_assistant_schema
|
|
79
|
+
# name: appointments
|
|
80
80
|
|
|
81
|
-
evaluation:
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
# evaluation:
|
|
82
|
+
# schema: *executive_assistant_schema
|
|
83
|
+
# name: evaluation
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
functions:
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
all_functions:
|
|
89
89
|
schema: *executive_assistant_schema
|
|
90
|
-
|
|
90
|
+
# name: find_inventory_by_sku
|
|
91
91
|
|
|
92
|
-
find_inventory_by_upc: &find_inventory_by_upc
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
# find_inventory_by_upc: &find_inventory_by_upc
|
|
93
|
+
# schema: *executive_assistant_schema
|
|
94
|
+
# name: find_inventory_by_upc
|
|
95
95
|
|
|
96
|
-
find_product_by_sku: &find_product_by_sku
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
# find_product_by_sku: &find_product_by_sku
|
|
97
|
+
# schema: *executive_assistant_schema
|
|
98
|
+
# name: find_product_by_sku
|
|
99
99
|
|
|
100
|
-
find_product_by_upc: &find_product_by_upc
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
# find_product_by_upc: &find_product_by_upc
|
|
101
|
+
# schema: *executive_assistant_schema
|
|
102
|
+
# name: find_product_by_upc
|
|
103
103
|
|
|
104
|
-
find_store_by_number: &find_store_by_number
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
# find_store_by_number: &find_store_by_number
|
|
105
|
+
# schema: *executive_assistant_schema
|
|
106
|
+
# name: find_store_by_number
|
|
107
107
|
|
|
108
|
-
find_store_inventory_by_sku: &find_store_inventory_by_sku
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
# find_store_inventory_by_sku: &find_store_inventory_by_sku
|
|
109
|
+
# schema: *executive_assistant_schema
|
|
110
|
+
# name: find_store_inventory_by_sku
|
|
111
111
|
|
|
112
|
-
find_store_inventory_by_upc: &find_store_inventory_by_upc
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
# find_store_inventory_by_upc: &find_store_inventory_by_upc
|
|
113
|
+
# schema: *executive_assistant_schema
|
|
114
|
+
# name: find_store_inventory_by_upc
|
|
115
115
|
|
|
116
116
|
genie_rooms:
|
|
117
117
|
executive_assistant_genie_room: &executive_assistant_genie_room
|
|
@@ -898,7 +898,7 @@ agents:
|
|
|
898
898
|
app:
|
|
899
899
|
name: hardware_store_supervisor # Application name
|
|
900
900
|
description: "Multi-agent system for retail customer service and product assistance"
|
|
901
|
-
log_level:
|
|
901
|
+
log_level: DEBUG # Logging level for the application
|
|
902
902
|
registered_model: # MLflow registered model configuration
|
|
903
903
|
schema: *retail_schema # Schema where model will be registered
|
|
904
904
|
name: hardware_store_supervisor # Model name in MLflow registry
|
|
@@ -926,7 +926,7 @@ app:
|
|
|
926
926
|
- dao_ai.hooks.null_hook
|
|
927
927
|
- hardware_store.hooks.require_store_num_hook
|
|
928
928
|
input_example:
|
|
929
|
-
|
|
929
|
+
input:
|
|
930
930
|
- role: user
|
|
931
931
|
content: Can you recommend a lamp to match my oak side tables?
|
|
932
932
|
custom_inputs:
|
|
@@ -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.18"
|
|
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" }
|
|
@@ -480,12 +480,35 @@
|
|
|
480
480
|
"ChatPayload": {
|
|
481
481
|
"additionalProperties": false,
|
|
482
482
|
"properties": {
|
|
483
|
+
"input": {
|
|
484
|
+
"anyOf": [
|
|
485
|
+
{
|
|
486
|
+
"items": {
|
|
487
|
+
"$ref": "#/$defs/Message"
|
|
488
|
+
},
|
|
489
|
+
"type": "array"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"type": "null"
|
|
493
|
+
}
|
|
494
|
+
],
|
|
495
|
+
"default": null,
|
|
496
|
+
"title": "Input"
|
|
497
|
+
},
|
|
483
498
|
"messages": {
|
|
484
|
-
"
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
499
|
+
"anyOf": [
|
|
500
|
+
{
|
|
501
|
+
"items": {
|
|
502
|
+
"$ref": "#/$defs/Message"
|
|
503
|
+
},
|
|
504
|
+
"type": "array"
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"type": "null"
|
|
508
|
+
}
|
|
509
|
+
],
|
|
510
|
+
"default": null,
|
|
511
|
+
"title": "Messages"
|
|
489
512
|
},
|
|
490
513
|
"custom_inputs": {
|
|
491
514
|
"additionalProperties": true,
|
|
@@ -494,7 +517,6 @@
|
|
|
494
517
|
}
|
|
495
518
|
},
|
|
496
519
|
"required": [
|
|
497
|
-
"messages",
|
|
498
520
|
"custom_inputs"
|
|
499
521
|
],
|
|
500
522
|
"title": "ChatPayload",
|
|
@@ -1200,13 +1222,18 @@
|
|
|
1200
1222
|
"default": null
|
|
1201
1223
|
},
|
|
1202
1224
|
"name": {
|
|
1203
|
-
"
|
|
1204
|
-
|
|
1225
|
+
"anyOf": [
|
|
1226
|
+
{
|
|
1227
|
+
"type": "string"
|
|
1228
|
+
},
|
|
1229
|
+
{
|
|
1230
|
+
"type": "null"
|
|
1231
|
+
}
|
|
1232
|
+
],
|
|
1233
|
+
"default": null,
|
|
1234
|
+
"title": "Name"
|
|
1205
1235
|
}
|
|
1206
1236
|
},
|
|
1207
|
-
"required": [
|
|
1208
|
-
"name"
|
|
1209
|
-
],
|
|
1210
1237
|
"title": "FunctionModel",
|
|
1211
1238
|
"type": "object"
|
|
1212
1239
|
},
|
|
@@ -2339,13 +2366,18 @@
|
|
|
2339
2366
|
"default": null
|
|
2340
2367
|
},
|
|
2341
2368
|
"name": {
|
|
2342
|
-
"
|
|
2343
|
-
|
|
2369
|
+
"anyOf": [
|
|
2370
|
+
{
|
|
2371
|
+
"type": "string"
|
|
2372
|
+
},
|
|
2373
|
+
{
|
|
2374
|
+
"type": "null"
|
|
2375
|
+
}
|
|
2376
|
+
],
|
|
2377
|
+
"default": null,
|
|
2378
|
+
"title": "Name"
|
|
2344
2379
|
}
|
|
2345
2380
|
},
|
|
2346
|
-
"required": [
|
|
2347
|
-
"name"
|
|
2348
|
-
],
|
|
2349
2381
|
"title": "TableModel",
|
|
2350
2382
|
"type": "object"
|
|
2351
2383
|
},
|
|
@@ -3,7 +3,7 @@ import sys
|
|
|
3
3
|
import mlflow
|
|
4
4
|
from loguru import logger
|
|
5
5
|
from mlflow.models import ModelConfig
|
|
6
|
-
from mlflow.pyfunc import
|
|
6
|
+
from mlflow.pyfunc import ResponsesAgent
|
|
7
7
|
|
|
8
8
|
from dao_ai.config import AppConfig
|
|
9
9
|
|
|
@@ -17,6 +17,6 @@ log_level: str = config.app.log_level
|
|
|
17
17
|
logger.remove()
|
|
18
18
|
logger.add(sys.stderr, level=log_level)
|
|
19
19
|
|
|
20
|
-
app:
|
|
20
|
+
app: ResponsesAgent = config.as_responses_agent()
|
|
21
21
|
|
|
22
22
|
mlflow.models.set_model(app)
|
|
@@ -9,6 +9,7 @@ from pathlib import Path
|
|
|
9
9
|
from typing import (
|
|
10
10
|
Any,
|
|
11
11
|
Callable,
|
|
12
|
+
Iterator,
|
|
12
13
|
Literal,
|
|
13
14
|
Optional,
|
|
14
15
|
Sequence,
|
|
@@ -21,6 +22,7 @@ from databricks.sdk.credentials_provider import (
|
|
|
21
22
|
CredentialsStrategy,
|
|
22
23
|
ModelServingUserCredentials,
|
|
23
24
|
)
|
|
25
|
+
from databricks.sdk.service.catalog import FunctionInfo, TableInfo
|
|
24
26
|
from databricks.vector_search.client import VectorSearchClient
|
|
25
27
|
from databricks.vector_search.index import VectorSearchIndex
|
|
26
28
|
from databricks_langchain import (
|
|
@@ -44,8 +46,14 @@ from mlflow.models.resources import (
|
|
|
44
46
|
DatabricksUCConnection,
|
|
45
47
|
DatabricksVectorSearchIndex,
|
|
46
48
|
)
|
|
47
|
-
from mlflow.pyfunc import ChatModel
|
|
48
|
-
from pydantic import
|
|
49
|
+
from mlflow.pyfunc import ChatModel, ResponsesAgent
|
|
50
|
+
from pydantic import (
|
|
51
|
+
BaseModel,
|
|
52
|
+
ConfigDict,
|
|
53
|
+
Field,
|
|
54
|
+
field_serializer,
|
|
55
|
+
model_validator,
|
|
56
|
+
)
|
|
49
57
|
|
|
50
58
|
|
|
51
59
|
class HasValue(ABC):
|
|
@@ -69,7 +77,7 @@ class IsDatabricksResource(ABC):
|
|
|
69
77
|
on_behalf_of_user: Optional[bool] = False
|
|
70
78
|
|
|
71
79
|
@abstractmethod
|
|
72
|
-
def
|
|
80
|
+
def as_resources(self) -> Sequence[DatabricksResource]: ...
|
|
73
81
|
|
|
74
82
|
@property
|
|
75
83
|
@abstractmethod
|
|
@@ -235,22 +243,68 @@ class SchemaModel(BaseModel, HasFullName):
|
|
|
235
243
|
class TableModel(BaseModel, HasFullName, IsDatabricksResource):
|
|
236
244
|
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
237
245
|
schema_model: Optional[SchemaModel] = Field(default=None, alias="schema")
|
|
238
|
-
name: str
|
|
246
|
+
name: Optional[str] = None
|
|
247
|
+
|
|
248
|
+
@model_validator(mode="after")
|
|
249
|
+
def validate_name_or_schema_required(self) -> "TableModel":
|
|
250
|
+
if not self.name and not self.schema_model:
|
|
251
|
+
raise ValueError(
|
|
252
|
+
"Either 'name' or 'schema_model' must be provided for TableModel"
|
|
253
|
+
)
|
|
254
|
+
return self
|
|
239
255
|
|
|
240
256
|
@property
|
|
241
257
|
def full_name(self) -> str:
|
|
242
258
|
if self.schema_model:
|
|
243
|
-
|
|
259
|
+
name: str = ""
|
|
260
|
+
if self.name:
|
|
261
|
+
name = f".{self.name}"
|
|
262
|
+
return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}{name}"
|
|
244
263
|
return self.name
|
|
245
264
|
|
|
246
265
|
@property
|
|
247
266
|
def api_scopes(self) -> Sequence[str]:
|
|
248
267
|
return []
|
|
249
268
|
|
|
250
|
-
def
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
269
|
+
def as_resources(self) -> Sequence[DatabricksResource]:
|
|
270
|
+
resources: list[DatabricksResource] = []
|
|
271
|
+
|
|
272
|
+
excluded_suffixes: Sequence[str] = [
|
|
273
|
+
"_payload",
|
|
274
|
+
"_assessment_logs",
|
|
275
|
+
"_request_logs",
|
|
276
|
+
]
|
|
277
|
+
|
|
278
|
+
excluded_prefixes: Sequence[str] = [
|
|
279
|
+
"trace_logs_"
|
|
280
|
+
]
|
|
281
|
+
|
|
282
|
+
if self.name:
|
|
283
|
+
resources.append(
|
|
284
|
+
DatabricksTable(
|
|
285
|
+
table_name=self.full_name, on_behalf_of_user=self.on_behalf_of_user
|
|
286
|
+
)
|
|
287
|
+
)
|
|
288
|
+
else:
|
|
289
|
+
w: WorkspaceClient = self.workspace_client
|
|
290
|
+
schema_full_name: str = self.schema_model.full_name
|
|
291
|
+
tables: Iterator[TableInfo] = w.tables.list(
|
|
292
|
+
catalog_name=self.schema_model.catalog_name,
|
|
293
|
+
schema_name=self.schema_model.schema_name,
|
|
294
|
+
)
|
|
295
|
+
resources.extend(
|
|
296
|
+
[
|
|
297
|
+
DatabricksTable(
|
|
298
|
+
table_name=f"{schema_full_name}.{table.name}",
|
|
299
|
+
on_behalf_of_user=self.on_behalf_of_user,
|
|
300
|
+
)
|
|
301
|
+
for table in tables
|
|
302
|
+
if not any(table.name.endswith(suffix) for suffix in excluded_suffixes)
|
|
303
|
+
and not any(table.name.startswith(prefix) for prefix in excluded_prefixes)
|
|
304
|
+
]
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
return resources
|
|
254
308
|
|
|
255
309
|
|
|
256
310
|
class LLMModel(BaseModel, IsDatabricksResource):
|
|
@@ -266,10 +320,12 @@ class LLMModel(BaseModel, IsDatabricksResource):
|
|
|
266
320
|
"serving.serving-endpoints",
|
|
267
321
|
]
|
|
268
322
|
|
|
269
|
-
def
|
|
270
|
-
return
|
|
271
|
-
|
|
272
|
-
|
|
323
|
+
def as_resources(self) -> Sequence[DatabricksResource]:
|
|
324
|
+
return [
|
|
325
|
+
DatabricksServingEndpoint(
|
|
326
|
+
endpoint_name=self.name, on_behalf_of_user=self.on_behalf_of_user
|
|
327
|
+
)
|
|
328
|
+
]
|
|
273
329
|
|
|
274
330
|
def as_chat_model(self) -> LanguageModelLike:
|
|
275
331
|
# Retrieve langchain chat client from workspace client to enable OBO
|
|
@@ -345,10 +401,12 @@ class IndexModel(BaseModel, HasFullName, IsDatabricksResource):
|
|
|
345
401
|
return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}.{self.name}"
|
|
346
402
|
return self.name
|
|
347
403
|
|
|
348
|
-
def
|
|
349
|
-
return
|
|
350
|
-
|
|
351
|
-
|
|
404
|
+
def as_resources(self) -> Sequence[DatabricksResource]:
|
|
405
|
+
return [
|
|
406
|
+
DatabricksVectorSearchIndex(
|
|
407
|
+
index_name=self.full_name, on_behalf_of_user=self.on_behalf_of_user
|
|
408
|
+
)
|
|
409
|
+
]
|
|
352
410
|
|
|
353
411
|
|
|
354
412
|
class GenieRoomModel(BaseModel, IsDatabricksResource):
|
|
@@ -363,10 +421,12 @@ class GenieRoomModel(BaseModel, IsDatabricksResource):
|
|
|
363
421
|
"dashboards.genie",
|
|
364
422
|
]
|
|
365
423
|
|
|
366
|
-
def
|
|
367
|
-
return
|
|
368
|
-
|
|
369
|
-
|
|
424
|
+
def as_resources(self) -> Sequence[DatabricksResource]:
|
|
425
|
+
return [
|
|
426
|
+
DatabricksGenieSpace(
|
|
427
|
+
genie_space_id=self.space_id, on_behalf_of_user=self.on_behalf_of_user
|
|
428
|
+
)
|
|
429
|
+
]
|
|
370
430
|
|
|
371
431
|
|
|
372
432
|
class VolumeModel(BaseModel, HasFullName):
|
|
@@ -394,7 +454,7 @@ class VolumePathModel(BaseModel, HasFullName):
|
|
|
394
454
|
path: Optional[str] = None
|
|
395
455
|
|
|
396
456
|
@model_validator(mode="after")
|
|
397
|
-
def validate_path_or_volume(self):
|
|
457
|
+
def validate_path_or_volume(self) -> "VolumePathModel":
|
|
398
458
|
if not self.volume and not self.path:
|
|
399
459
|
raise ValueError("Either 'volume' or 'path' must be provided")
|
|
400
460
|
return self
|
|
@@ -502,8 +562,8 @@ class VectorStoreModel(BaseModel, IsDatabricksResource):
|
|
|
502
562
|
"serving.serving-endpoints",
|
|
503
563
|
] + self.index.api_scopes
|
|
504
564
|
|
|
505
|
-
def
|
|
506
|
-
return self.index.
|
|
565
|
+
def as_resources(self) -> Sequence[DatabricksResource]:
|
|
566
|
+
return self.index.as_resources()
|
|
507
567
|
|
|
508
568
|
def as_index(self, vsc: VectorSearchClient | None = None) -> VectorSearchIndex:
|
|
509
569
|
from dao_ai.providers.base import ServiceProvider
|
|
@@ -524,18 +584,52 @@ class VectorStoreModel(BaseModel, IsDatabricksResource):
|
|
|
524
584
|
class FunctionModel(BaseModel, HasFullName, IsDatabricksResource):
|
|
525
585
|
model_config = ConfigDict()
|
|
526
586
|
schema_model: Optional[SchemaModel] = Field(default=None, alias="schema")
|
|
527
|
-
name: str
|
|
587
|
+
name: Optional[str] = None
|
|
588
|
+
|
|
589
|
+
@model_validator(mode="after")
|
|
590
|
+
def validate_name_or_schema_required(self) -> "FunctionModel":
|
|
591
|
+
if not self.name and not self.schema_model:
|
|
592
|
+
raise ValueError(
|
|
593
|
+
"Either 'name' or 'schema_model' must be provided for FunctionModel"
|
|
594
|
+
)
|
|
595
|
+
return self
|
|
528
596
|
|
|
529
597
|
@property
|
|
530
598
|
def full_name(self) -> str:
|
|
531
599
|
if self.schema_model:
|
|
532
|
-
|
|
600
|
+
name: str = ""
|
|
601
|
+
if self.name:
|
|
602
|
+
name = f".{self.name}"
|
|
603
|
+
return f"{self.schema_model.catalog_name}.{self.schema_model.schema_name}{name}"
|
|
533
604
|
return self.name
|
|
534
605
|
|
|
535
|
-
def
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
606
|
+
def as_resources(self) -> Sequence[DatabricksResource]:
|
|
607
|
+
resources: list[DatabricksResource] = []
|
|
608
|
+
if self.name:
|
|
609
|
+
resources.append(
|
|
610
|
+
DatabricksFunction(
|
|
611
|
+
function_name=self.full_name,
|
|
612
|
+
on_behalf_of_user=self.on_behalf_of_user,
|
|
613
|
+
)
|
|
614
|
+
)
|
|
615
|
+
else:
|
|
616
|
+
w: WorkspaceClient = self.workspace_client
|
|
617
|
+
schema_full_name: str = self.schema_model.full_name
|
|
618
|
+
functions: Iterator[FunctionInfo] = w.functions.list(
|
|
619
|
+
catalog_name=self.schema_model.catalog_name,
|
|
620
|
+
schema_name=self.schema_model.schema_name,
|
|
621
|
+
)
|
|
622
|
+
resources.extend(
|
|
623
|
+
[
|
|
624
|
+
DatabricksFunction(
|
|
625
|
+
function_name=f"{schema_full_name}.{function.name}",
|
|
626
|
+
on_behalf_of_user=self.on_behalf_of_user,
|
|
627
|
+
)
|
|
628
|
+
for function in functions
|
|
629
|
+
]
|
|
630
|
+
)
|
|
631
|
+
|
|
632
|
+
return resources
|
|
539
633
|
|
|
540
634
|
@property
|
|
541
635
|
def api_scopes(self) -> Sequence[str]:
|
|
@@ -556,10 +650,12 @@ class ConnectionModel(BaseModel, HasFullName, IsDatabricksResource):
|
|
|
556
650
|
"catalog.connections",
|
|
557
651
|
]
|
|
558
652
|
|
|
559
|
-
def
|
|
560
|
-
return
|
|
561
|
-
|
|
562
|
-
|
|
653
|
+
def as_resources(self) -> Sequence[DatabricksResource]:
|
|
654
|
+
return [
|
|
655
|
+
DatabricksUCConnection(
|
|
656
|
+
connection_name=self.name, on_behalf_of_user=self.on_behalf_of_user
|
|
657
|
+
)
|
|
658
|
+
]
|
|
563
659
|
|
|
564
660
|
|
|
565
661
|
class WarehouseModel(BaseModel, IsDatabricksResource):
|
|
@@ -575,10 +671,12 @@ class WarehouseModel(BaseModel, IsDatabricksResource):
|
|
|
575
671
|
"sql.statement-execution",
|
|
576
672
|
]
|
|
577
673
|
|
|
578
|
-
def
|
|
579
|
-
return
|
|
580
|
-
|
|
581
|
-
|
|
674
|
+
def as_resources(self) -> Sequence[DatabricksResource]:
|
|
675
|
+
return [
|
|
676
|
+
DatabricksSQLWarehouse(
|
|
677
|
+
warehouse_id=self.warehouse_id, on_behalf_of_user=self.on_behalf_of_user
|
|
678
|
+
)
|
|
679
|
+
]
|
|
582
680
|
|
|
583
681
|
|
|
584
682
|
class DatabaseModel(BaseModel):
|
|
@@ -1034,9 +1132,37 @@ class Message(BaseModel):
|
|
|
1034
1132
|
|
|
1035
1133
|
class ChatPayload(BaseModel):
|
|
1036
1134
|
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
1037
|
-
|
|
1135
|
+
input: Optional[list[Message]] = None
|
|
1136
|
+
messages: Optional[list[Message]] = None
|
|
1038
1137
|
custom_inputs: dict
|
|
1039
1138
|
|
|
1139
|
+
@model_validator(mode="after")
|
|
1140
|
+
def validate_mutual_exclusion_and_alias(self) -> "ChatPayload":
|
|
1141
|
+
"""Handle dual field support with automatic aliasing."""
|
|
1142
|
+
# If both fields are provided and they're the same, that's okay (redundant but valid)
|
|
1143
|
+
if self.input is not None and self.messages is not None:
|
|
1144
|
+
# Allow if they're identical (redundant specification)
|
|
1145
|
+
if self.input == self.messages:
|
|
1146
|
+
return self
|
|
1147
|
+
# If they're different, prefer input and copy to messages
|
|
1148
|
+
else:
|
|
1149
|
+
self.messages = self.input
|
|
1150
|
+
return self
|
|
1151
|
+
|
|
1152
|
+
# If neither field is provided, that's an error
|
|
1153
|
+
if self.input is None and self.messages is None:
|
|
1154
|
+
raise ValueError("Must specify either 'input' or 'messages' field.")
|
|
1155
|
+
|
|
1156
|
+
# Create alias: copy messages to input if input is None
|
|
1157
|
+
if self.input is None and self.messages is not None:
|
|
1158
|
+
self.input = self.messages
|
|
1159
|
+
|
|
1160
|
+
# Create alias: copy input to messages if messages is None
|
|
1161
|
+
elif self.messages is None and self.input is not None:
|
|
1162
|
+
self.messages = self.input
|
|
1163
|
+
|
|
1164
|
+
return self
|
|
1165
|
+
|
|
1040
1166
|
|
|
1041
1167
|
class ChatHistoryModel(BaseModel):
|
|
1042
1168
|
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
@@ -1374,3 +1500,10 @@ class AppConfig(BaseModel):
|
|
|
1374
1500
|
graph: CompiledStateGraph = self.as_graph()
|
|
1375
1501
|
app: ChatModel = create_agent(graph)
|
|
1376
1502
|
return app
|
|
1503
|
+
|
|
1504
|
+
def as_responses_agent(self) -> ResponsesAgent:
|
|
1505
|
+
from dao_ai.models import create_responses_agent
|
|
1506
|
+
|
|
1507
|
+
graph: CompiledStateGraph = self.as_graph()
|
|
1508
|
+
app: ResponsesAgent = create_responses_agent(graph)
|
|
1509
|
+
return app
|
|
@@ -11,6 +11,9 @@ from langchain_core.messages import (
|
|
|
11
11
|
)
|
|
12
12
|
from langchain_core.messages.modifier import RemoveMessage
|
|
13
13
|
from mlflow.types.llm import ChatMessage
|
|
14
|
+
from mlflow.types.responses import (
|
|
15
|
+
ResponsesAgentRequest,
|
|
16
|
+
)
|
|
14
17
|
|
|
15
18
|
|
|
16
19
|
def remove_messages(
|
|
@@ -96,6 +99,10 @@ def has_mlflow_messages(messages: ChatMessage | Sequence[ChatMessage]) -> bool:
|
|
|
96
99
|
return any(isinstance(m, ChatMessage) for m in messages)
|
|
97
100
|
|
|
98
101
|
|
|
102
|
+
def has_mlflow_responses_messages(messages: ResponsesAgentRequest) -> bool:
|
|
103
|
+
return isinstance(messages, ResponsesAgentRequest)
|
|
104
|
+
|
|
105
|
+
|
|
99
106
|
def has_image(messages: BaseMessage | Sequence[BaseMessage]) -> bool:
|
|
100
107
|
"""
|
|
101
108
|
Check if a message contains an image.
|