dao-ai 0.1.0__tar.gz → 0.1.11__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.1.0 → dao_ai-0.1.11}/.gitignore +5 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/CHANGELOG.md +35 -1
- {dao_ai-0.1.0 → dao_ai-0.1.11}/Makefile +11 -3
- dao_ai-0.1.11/PKG-INFO +489 -0
- dao_ai-0.1.11/README.md +410 -0
- dao_ai-0.1.11/app.yaml +12 -0
- dao_ai-0.1.11/config/examples/01_getting_started/README.md +74 -0
- dao_ai-0.1.11/config/examples/01_getting_started/minimal.yaml +68 -0
- dao_ai-0.1.11/config/examples/02_mcp/README.md +281 -0
- dao_ai-0.1.0/config/examples/jira.yaml → dao_ai-0.1.11/config/examples/02_mcp/custom_mcp.yaml +3 -4
- dao_ai-0.1.11/config/examples/02_mcp/external_mcp.yaml +59 -0
- dao_ai-0.1.11/config/examples/02_mcp/filtered_mcp.yaml +354 -0
- dao_ai-0.1.0/config/examples/mcp.yaml → dao_ai-0.1.11/config/examples/02_mcp/managed_mcp.yaml +4 -18
- dao_ai-0.1.0/config/examples/slack.yaml → dao_ai-0.1.11/config/examples/02_mcp/slack_integration.yaml +3 -3
- dao_ai-0.1.11/config/examples/03_reranking/README.md +322 -0
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/03_reranking}/vector_search_with_reranking.yaml +16 -14
- dao_ai-0.1.11/config/examples/04_genie/README.md +106 -0
- dao_ai-0.1.11/config/examples/04_genie/genie_basic.yaml +63 -0
- dao_ai-0.1.0/config/examples/genie_with_lru_cache.yaml → dao_ai-0.1.11/config/examples/04_genie/genie_lru_cache.yaml +4 -45
- dao_ai-0.1.0/config/examples/genie_with_semantic_cache.yaml → dao_ai-0.1.11/config/examples/04_genie/genie_semantic_cache.yaml +4 -43
- dao_ai-0.1.0/config/examples/genie_with_conversion_id.yaml → dao_ai-0.1.11/config/examples/04_genie/genie_with_conversation_id.yaml +5 -20
- dao_ai-0.1.11/config/examples/05_memory/README.md +127 -0
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/05_memory}/conversation_summarization.yaml +5 -43
- dao_ai-0.1.11/config/examples/05_memory/in_memory_basic.yaml +73 -0
- dao_ai-0.1.11/config/examples/05_memory/lakebase_persistence.yaml +133 -0
- dao_ai-0.1.11/config/examples/05_memory/postgres_persistence.yaml +176 -0
- dao_ai-0.1.11/config/examples/06_on_behalf_of_user/README.md +172 -0
- dao_ai-0.1.11/config/examples/06_on_behalf_of_user/obo_basic.yaml +194 -0
- dao_ai-0.1.11/config/examples/07_human_in_the_loop/README.md +151 -0
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/07_human_in_the_loop}/human_in_the_loop.yaml +9 -23
- dao_ai-0.1.11/config/examples/08_guardrails/README.md +201 -0
- dao_ai-0.1.0/config/examples/guardrails.yaml → dao_ai-0.1.11/config/examples/08_guardrails/guardrails_basic.yaml +4 -4
- dao_ai-0.1.11/config/examples/09_structured_output/README.md +96 -0
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/09_structured_output}/structured_output.yaml +3 -3
- dao_ai-0.1.11/config/examples/10_agent_integrations/README.md +450 -0
- dao_ai-0.1.11/config/examples/10_agent_integrations/agent_bricks.yaml +112 -0
- dao_ai-0.1.11/config/examples/10_agent_integrations/kasal.yaml +159 -0
- dao_ai-0.1.11/config/examples/11_prompt_engineering/README.md +172 -0
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/11_prompt_engineering}/prompt_optimization.yaml +5 -55
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/11_prompt_engineering}/prompt_registry.yaml +31 -77
- dao_ai-0.1.11/config/examples/12_middleware/README.md +1253 -0
- dao_ai-0.1.11/config/examples/12_middleware/combined_middleware.yaml +231 -0
- dao_ai-0.1.11/config/examples/12_middleware/context_management.yaml +327 -0
- dao_ai-0.1.11/config/examples/12_middleware/custom_field_validation.yaml +262 -0
- dao_ai-0.1.11/config/examples/12_middleware/limit_middleware.yaml +299 -0
- dao_ai-0.1.11/config/examples/12_middleware/logging_middleware.yaml +180 -0
- dao_ai-0.1.11/config/examples/12_middleware/pii_middleware.yaml +384 -0
- dao_ai-0.1.11/config/examples/12_middleware/retry_middleware.yaml +313 -0
- dao_ai-0.1.11/config/examples/12_middleware/tool_selector_middleware.yaml +321 -0
- dao_ai-0.1.11/config/examples/13_orchestration/README.md +168 -0
- dao_ai-0.1.11/config/examples/13_orchestration/supervisor_pattern.yaml +146 -0
- dao_ai-0.1.11/config/examples/13_orchestration/swarm_pattern.yaml +188 -0
- dao_ai-0.1.11/config/examples/14_basic_tools/README.md +123 -0
- dao_ai-0.1.11/config/examples/14_basic_tools/sql_tool_example.yaml +141 -0
- dao_ai-0.1.11/config/examples/15_complete_applications/README.md +308 -0
- dao_ai-0.1.0/config/dais2025/model_config_dais.yaml → dao_ai-0.1.11/config/examples/15_complete_applications/brick_store.yaml +12 -85
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/15_complete_applications}/deep_research.yaml +5 -5
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/15_complete_applications}/executive_assistant.yaml +5 -97
- {dao_ai-0.1.0/config/examples → dao_ai-0.1.11/config/examples/15_complete_applications}/genie_and_genie_mcp.yaml +4 -23
- dao_ai-0.1.0/config/examples/genie_and_vector_search.yaml → dao_ai-0.1.11/config/examples/15_complete_applications/genie_vector_search_hybrid.yaml +4 -8
- dao_ai-0.1.0/config/hardware_store/supervisor.yaml → dao_ai-0.1.11/config/examples/15_complete_applications/hardware_store.yaml +20 -148
- dao_ai-0.1.0/config/hardware_store/supervisor_postgres.yaml → dao_ai-0.1.11/config/examples/15_complete_applications/hardware_store_lakebase.yaml +69 -308
- dao_ai-0.1.0/config/hardware_store/swarm.yaml → dao_ai-0.1.11/config/examples/15_complete_applications/hardware_store_swarm.yaml +52 -264
- dao_ai-0.1.0/config/quick_serve_restaurant/quick-serve-restaurant.yaml → dao_ai-0.1.11/config/examples/15_complete_applications/quick_serve_restaurant.yaml +15 -58
- dao_ai-0.1.0/config/examples/reservations.yaml → dao_ai-0.1.11/config/examples/15_complete_applications/reservations_system.yaml +5 -17
- dao_ai-0.1.11/config/examples/README.md +403 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/databricks.yaml.template +25 -9
- dao_ai-0.1.11/docs/architecture.md +276 -0
- dao_ai-0.1.11/docs/cli-reference.md +353 -0
- dao_ai-0.1.11/docs/configuration-reference.md +345 -0
- dao_ai-0.1.11/docs/contributing.md +343 -0
- dao_ai-0.1.11/docs/examples.md +449 -0
- dao_ai-0.1.11/docs/faq.md +213 -0
- dao_ai-0.1.11/docs/key-capabilities.md +1092 -0
- dao_ai-0.1.11/docs/python-api.md +182 -0
- dao_ai-0.1.11/docs/why-dao.md +202 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/05_deploy_agent.py +21 -3
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/07_run_evaluation.py +9 -1
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/10_optimize_prompts.py +3 -2
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/99_scratchpad.py +1 -1
- {dao_ai-0.1.0 → dao_ai-0.1.11}/pyproject.toml +29 -3
- {dao_ai-0.1.0 → dao_ai-0.1.11}/requirements.txt +11 -1
- {dao_ai-0.1.0 → dao_ai-0.1.11}/schemas/model_config_schema.json +225 -116
- dao_ai-0.1.11/src/dao_ai/apps/__init__.py +24 -0
- dao_ai-0.1.11/src/dao_ai/apps/handlers.py +84 -0
- dao_ai-0.1.11/src/dao_ai/apps/model_serving.py +29 -0
- dao_ai-0.1.11/src/dao_ai/apps/resources.py +1072 -0
- dao_ai-0.1.11/src/dao_ai/apps/server.py +39 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/cli.py +538 -39
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/config.py +941 -242
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/genie/cache/core.py +6 -2
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/genie/cache/lru.py +29 -11
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/genie/cache/semantic.py +95 -44
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/hooks/core.py +5 -5
- dao_ai-0.1.11/src/dao_ai/logging.py +56 -0
- dao_ai-0.1.11/src/dao_ai/memory/core.py +156 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/memory/databricks.py +54 -41
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/memory/postgres.py +106 -40
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/middleware/__init__.py +38 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/middleware/assertions.py +48 -20
- dao_ai-0.1.11/src/dao_ai/middleware/context_editing.py +230 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/middleware/core.py +14 -8
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/middleware/guardrails.py +33 -28
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/middleware/human_in_the_loop.py +12 -7
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/middleware/message_validation.py +65 -33
- dao_ai-0.1.11/src/dao_ai/middleware/model_call_limit.py +77 -0
- dao_ai-0.1.11/src/dao_ai/middleware/model_retry.py +121 -0
- dao_ai-0.1.11/src/dao_ai/middleware/pii.py +157 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/middleware/summarization.py +17 -12
- dao_ai-0.1.11/src/dao_ai/middleware/tool_call_limit.py +210 -0
- dao_ai-0.1.11/src/dao_ai/middleware/tool_retry.py +174 -0
- dao_ai-0.1.11/src/dao_ai/middleware/tool_selector.py +129 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/models.py +461 -401
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/nodes.py +144 -22
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/optimization.py +26 -16
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/orchestration/core.py +15 -8
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/orchestration/supervisor.py +25 -10
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/orchestration/swarm.py +57 -12
- dao_ai-0.1.11/src/dao_ai/prompts.py +86 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/providers/base.py +28 -2
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/providers/databricks.py +607 -158
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/state.py +25 -6
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/__init__.py +5 -1
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/agent.py +1 -3
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/core.py +7 -7
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/email.py +29 -77
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/genie.py +18 -13
- dao_ai-0.1.11/src/dao_ai/tools/mcp.py +671 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/python.py +5 -2
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/search.py +1 -1
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/slack.py +21 -9
- dao_ai-0.1.11/src/dao_ai/tools/sql.py +202 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/time.py +30 -7
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/unity_catalog.py +129 -86
- dao_ai-0.1.11/src/dao_ai/tools/vector_search.py +392 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/utils.py +15 -10
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/vector_search.py +37 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/config/test_model_config.yaml +28 -63
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/conftest.py +4 -2
- dao_ai-0.1.11/tests/dao_ai/middleware/test_context_editing.py +187 -0
- dao_ai-0.1.11/tests/dao_ai/middleware/test_model_call_limit.py +102 -0
- dao_ai-0.1.11/tests/dao_ai/middleware/test_model_retry.py +127 -0
- dao_ai-0.1.11/tests/dao_ai/middleware/test_pii.py +205 -0
- dao_ai-0.1.11/tests/dao_ai/middleware/test_tool_call_limit.py +228 -0
- dao_ai-0.1.11/tests/dao_ai/middleware/test_tool_retry.py +152 -0
- dao_ai-0.1.11/tests/dao_ai/middleware/test_tool_selector.py +193 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_assertions_middleware.py +12 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_chat_history.py +17 -4
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_config.py +20 -30
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_databricks.py +962 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_function_parsing.py +17 -15
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_genie.py +9 -4
- dao_ai-0.1.11/tests/dao_ai/test_genie_room_model.py +1087 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_human_in_the_loop.py +19 -9
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_inference_integration.py +17 -6
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_input_output_structure.py +13 -11
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_mcp.py +66 -13
- dao_ai-0.1.11/tests/dao_ai/test_mcp_filtering.py +256 -0
- dao_ai-0.1.11/tests/dao_ai/test_mcp_filtering_integration.py +974 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_mcp_function_model.py +173 -30
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_message_validation_middleware.py +7 -4
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_prompt_optimizations.py +8 -4
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_prompts.py +4 -3
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_reranking.py +77 -9
- dao_ai-0.1.11/tests/dao_ai/test_resources_model_genie_integration.py +620 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_responses_agent_structured_output_unit.py +61 -19
- dao_ai-0.1.11/tests/dao_ai/test_sql_tool.py +203 -0
- dao_ai-0.1.11/tests/dao_ai/test_sql_tool_integration.py +327 -0
- dao_ai-0.1.11/tests/dao_ai/test_swarm_middleware.py +418 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_tools.py +1 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_unity_catalog.py +15 -4
- dao_ai-0.1.11/tests/dao_ai/test_warehouse_model.py +166 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/hardware_store/test_graph.py +2 -5
- dao_ai-0.1.0/PKG-INFO +0 -1878
- dao_ai-0.1.0/README.md +0 -1801
- dao_ai-0.1.0/config/examples/genie.yaml +0 -146
- dao_ai-0.1.0/config/examples/mcp_with_uc_connection.yaml +0 -159
- dao_ai-0.1.0/config/examples/minimal.yaml +0 -81
- dao_ai-0.1.0/config/hardware_store/supervisor_postgres_dao_ai_native.yaml +0 -1064
- dao_ai-0.1.0/notebooks/INVESTech.py +0 -90
- dao_ai-0.1.0/src/dao_ai/agent_as_code.py +0 -25
- dao_ai-0.1.0/src/dao_ai/memory/core.py +0 -139
- dao_ai-0.1.0/src/dao_ai/prompts.py +0 -144
- dao_ai-0.1.0/src/dao_ai/tools/mcp.py +0 -196
- dao_ai-0.1.0/src/dao_ai/tools/vector_search.py +0 -318
- dao_ai-0.1.0/src/hardware_store/__init__.py +0 -0
- dao_ai-0.1.0/src/hardware_store/hooks.py +0 -68
- dao_ai-0.1.0/src/hardware_store/tools.py +0 -460
- dao_ai-0.1.0/src/quick_serve_restaurant/__init__.py +0 -0
- dao_ai-0.1.0/src/quick_serve_restaurant/tools.py +0 -82
- dao_ai-0.1.0/tests/hardware_store/.gitkeep +0 -0
- dao_ai-0.1.0/tests/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/.python-version +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/CONTRIBUTING.md +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/LICENSE +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/appointments.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/appointments_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/brand_rep_demo_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/brand_rep_demo_queries.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/brand_rep_demo_tables.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/brand_rep_demo_validation.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/customers.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/customers_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/dim_stores.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/dim_stores_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/employee_performance.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/employee_performance_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/employee_tasks.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/employee_tasks_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/inventory.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/inventory_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/managers.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/managers_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/product_data.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/products.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/dais2025/task_assignments.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/hardware_store/inventory.snappy.parquet +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/hardware_store/inventory.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/hardware_store/products.snappy.parquet +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/hardware_store/products.sql +0 -0
- {dao_ai-0.1.0/config → dao_ai-0.1.11/data}/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/quick_serve_restaurant/items_description.csv +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/quick_serve_restaurant/items_description.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/quick_serve_restaurant/items_raw.csv +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/quick_serve_restaurant/items_raw.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/quick_serve_restaurant/orders_raw.csv +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/data/quick_serve_restaurant/orders_raw.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/docs/hardware_store/README.md +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/docs/hardware_store/retail_supervisor.png +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/docs/hardware_store/retail_swarm.png +0 -0
- {dao_ai-0.1.0/docs → dao_ai-0.1.11/docs/images}/genie.png +0 -0
- {dao_ai-0.1.0/data → dao_ai-0.1.11/docs}/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/environment.yaml +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/examples/dais2025/examples.yaml +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/examples/deep_research/examples.yaml +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/examples/executive_assistant/examples.yaml +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/examples/hardware_store/examples.yaml +0 -0
- {dao_ai-0.1.0/docs → dao_ai-0.1.11/examples}/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/examples/quick_serve_restaurant/examples.yaml +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/dais2025/extract_store_numbers.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/dais2025/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/dais2025/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/dais2025/find_product_by_sku.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/dais2025/find_product_by_upc.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/dais2025/find_store_by_number.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/hardware_store/find_product_by_sku.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/hardware_store/find_product_by_upc.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.0/examples → dao_ai-0.1.11/functions}/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/01_ingest_and_transform.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/02_provision_vector_search.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/03_provision_lakebase.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/04_unity_catalog_tools.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/06_generate_evaluation_data.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/08_run_examples.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/notebooks/09_evaluate_inferences.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/schemas/bundle_config_schema.json +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/models.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/tools/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/tools/customer.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/tools/employee.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/tools/executive.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/tools/genie.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/tools/inventory.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/tools/models.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dais2025/tools/store.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/catalog.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/genie/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/genie/cache/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/genie/cache/base.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/genie/core.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/graph.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/hooks/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/memory/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/memory/base.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/messages.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/middleware/base.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/orchestration/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/providers/__init__.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/tools/memory.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/src/dao_ai/types.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_agent_response_format.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_catalog.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_genie_databricks_integration.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_guardrail_retry.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_hitl_config_model.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_hitl_responses_agent.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_hooks.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_inference.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_interrupt_type.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_llm_interrupt_handling.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_messages.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_models.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_optimization.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_postgres_integration.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_reranking_integration.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_response_format.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_semantic_cache_context.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_state.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_summarization_inference.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_types.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_utils.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_utils_type_from_fqn.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/test_vector_search.py +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/dao_ai/weather_server_mcp.py +0 -0
- {dao_ai-0.1.0/functions/quick_serve_restaurant → dao_ai-0.1.11/tests/hardware_store}/.gitkeep +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.1.0 → dao_ai-0.1.11}/tests/images/lays_upc.png +0 -0
- {dao_ai-0.1.0/src → dao_ai-0.1.11/tests}/quick_serve_restaurant/.gitkeep +0 -0
|
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
- **MCP Tool Filtering**: Control which tools are loaded from MCP servers
|
|
12
|
+
- `include_tools`: Optional allowlist with glob pattern support (e.g., `["query_*", "list_*"]`)
|
|
13
|
+
- `exclude_tools`: Optional denylist with glob pattern support (e.g., `["drop_*", "delete_*"]`)
|
|
14
|
+
- Precedence: exclude always overrides include for maximum security
|
|
15
|
+
- Pattern syntax: `*` (any chars), `?` (single char), `[abc]` (char set), `[!abc]` (negation)
|
|
16
|
+
- Use cases: Security (block dangerous operations), performance (reduce context), access control
|
|
17
|
+
- New example config: `config/examples/02_mcp/filtered_mcp.yaml` with 6 filtering strategies
|
|
18
|
+
- Comprehensive documentation in configuration reference and MCP README
|
|
19
|
+
|
|
20
|
+
- **CLI: list-mcp-tools Command**: Discover and inspect MCP tools from configuration
|
|
21
|
+
- Lists all available tools from configured MCP servers with full details
|
|
22
|
+
- Shows tool descriptions (no truncation), parameters, types, and requirements
|
|
23
|
+
- Pretty-printed schemas in readable format (53% more compact than JSON)
|
|
24
|
+
- Filter statistics: total available, included, and excluded tool counts
|
|
25
|
+
- `--apply-filters` flag: Show only tools that will be loaded (respects include/exclude)
|
|
26
|
+
- Aggregated output: Collects all data before display (no logging interference)
|
|
27
|
+
- Detailed exclusion reasons: Shows why tools are filtered out
|
|
28
|
+
- Use cases: Discovery, debugging, validation, planning, documentation
|
|
29
|
+
|
|
30
|
+
- **AnyVariable Support for Additional Fields**: More configuration flexibility
|
|
31
|
+
- `SchemaModel.catalog_name` and `SchemaModel.schema_name` now support AnyVariable
|
|
32
|
+
- `DatabricksAppModel.url` now supports AnyVariable
|
|
33
|
+
- Allows environment variables, Databricks secrets, and fallback chains
|
|
34
|
+
- Benefits: Environment flexibility, security, portability, backwards compatible
|
|
35
|
+
- Examples: `{env: CATALOG_NAME}`, `{scope: secrets, secret: url}`, composite fallbacks
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
- **Refactored Dynamic Prompt Creation**: Simplified and improved `prompts.py`
|
|
39
|
+
- Consolidated redundant prompt creation logic into single `make_prompt()` function
|
|
40
|
+
- Removed unused `create_prompt_middleware()` function (dead code)
|
|
41
|
+
- Cleaner context field handling with generic loop over all context attributes
|
|
42
|
+
- More maintainable codebase with reduced duplication
|
|
43
|
+
|
|
10
44
|
## [0.1.0] - 2025-12-19
|
|
11
45
|
|
|
12
46
|
### Added
|
|
@@ -21,7 +55,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
21
55
|
- `LoggingSummarizationMiddleware`: Extends LangChain's `SummarizationMiddleware` with detailed logging
|
|
22
56
|
- Configurable via `chat_history` in YAML with `max_tokens`, `max_tokens_before_summary`, `max_messages_before_summary`
|
|
23
57
|
- Logs original and summarized message/token counts for observability
|
|
24
|
-
- New example config: `config/examples/conversation_summarization.yaml`
|
|
58
|
+
- New example config: `config/examples/04_memory/conversation_summarization.yaml`
|
|
25
59
|
|
|
26
60
|
- **GEPA-Based Prompt Optimization**: Replaced MLflow optimizer with GEPA (Generative Evolution of Prompts and Agents)
|
|
27
61
|
- `optimize_prompt()` function using DSPy's evolutionary optimization
|
|
@@ -27,7 +27,7 @@ FIND := $(shell which find)
|
|
|
27
27
|
RM := rm -rf
|
|
28
28
|
CD := cd
|
|
29
29
|
|
|
30
|
-
.PHONY: all clean distclean dist check format publish help
|
|
30
|
+
.PHONY: all clean distclean dist check format publish help test unit integration
|
|
31
31
|
|
|
32
32
|
all: dist
|
|
33
33
|
|
|
@@ -66,13 +66,19 @@ schema: depends
|
|
|
66
66
|
test:
|
|
67
67
|
$(PYTEST) -ra --tb=short $(TEST_DIR)
|
|
68
68
|
|
|
69
|
+
unit:
|
|
70
|
+
$(PYTEST) -ra --tb=short -m unit $(TEST_DIR)
|
|
71
|
+
|
|
72
|
+
integration:
|
|
73
|
+
$(PYTEST) -ra --tb=short -m integration $(TEST_DIR)
|
|
74
|
+
|
|
69
75
|
help:
|
|
70
76
|
$(info TOP_DIR: $(TOP_DIR))
|
|
71
77
|
$(info SRC_DIR: $(SRC_DIR))
|
|
72
78
|
$(info TEST_DIR: $(TEST_DIR))
|
|
73
79
|
$(info DIST_DIR: $(DIST_DIR))
|
|
74
80
|
$(info )
|
|
75
|
-
$(info $$> make [all|dist|install|clean|distclean|format|depends|publish|schema|test|help])
|
|
81
|
+
$(info $$> make [all|dist|install|clean|distclean|format|depends|publish|schema|test|unit|integration|help])
|
|
76
82
|
$(info )
|
|
77
83
|
$(info all - build library: [$(LIB)]. This is the default)
|
|
78
84
|
$(info dist - build library: [$(LIB)])
|
|
@@ -84,7 +90,9 @@ help:
|
|
|
84
90
|
$(info depends - installs library dependencies)
|
|
85
91
|
$(info publish - publish library)
|
|
86
92
|
$(info schema - print JSON schema for AppConfig)
|
|
87
|
-
$(info test - run tests)
|
|
93
|
+
$(info test - run all tests)
|
|
94
|
+
$(info unit - run unit tests only)
|
|
95
|
+
$(info integration - run integration tests only)
|
|
88
96
|
$(info help - show this help message)
|
|
89
97
|
@true
|
|
90
98
|
|
dao_ai-0.1.11/PKG-INFO
ADDED
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dao-ai
|
|
3
|
+
Version: 0.1.11
|
|
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
|
+
Project-URL: Homepage, https://github.com/natefleming/dao-ai
|
|
6
|
+
Project-URL: Documentation, https://natefleming.github.io/dao-ai
|
|
7
|
+
Project-URL: Repository, https://github.com/natefleming/dao-ai
|
|
8
|
+
Project-URL: Issues, https://github.com/natefleming/dao-ai/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/natefleming/dao-ai/blob/main/CHANGELOG.md
|
|
10
|
+
Author-email: Nate Fleming <nate.fleming@databricks.com>, Nate Fleming <nate.fleming@gmail.com>
|
|
11
|
+
Maintainer-email: Nate Fleming <nate.fleming@databricks.com>
|
|
12
|
+
License: MIT
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Keywords: agents,ai,databricks,langchain,langgraph,llm,multi-agent,orchestration,vector-search,workflow
|
|
15
|
+
Classifier: Development Status :: 3 - Alpha
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Intended Audience :: Science/Research
|
|
18
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
19
|
+
Classifier: Operating System :: OS Independent
|
|
20
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Classifier: Topic :: System :: Distributed Computing
|
|
27
|
+
Requires-Python: >=3.11
|
|
28
|
+
Requires-Dist: databricks-agents>=1.9.0
|
|
29
|
+
Requires-Dist: databricks-langchain[memory]>=0.12.1
|
|
30
|
+
Requires-Dist: databricks-mcp>=0.5.0
|
|
31
|
+
Requires-Dist: databricks-sdk[openai]>=0.77.0
|
|
32
|
+
Requires-Dist: ddgs>=9.10.0
|
|
33
|
+
Requires-Dist: dspy>=2.6.27
|
|
34
|
+
Requires-Dist: flashrank>=0.2.10
|
|
35
|
+
Requires-Dist: gepa>=0.0.22
|
|
36
|
+
Requires-Dist: grandalf>=0.8
|
|
37
|
+
Requires-Dist: langchain-community>=0.3.26
|
|
38
|
+
Requires-Dist: langchain-mcp-adapters>=0.2.1
|
|
39
|
+
Requires-Dist: langchain-tavily>=0.2.15
|
|
40
|
+
Requires-Dist: langchain>=1.2.0
|
|
41
|
+
Requires-Dist: langgraph-checkpoint-postgres>=3.0.2
|
|
42
|
+
Requires-Dist: langgraph>=1.0.5
|
|
43
|
+
Requires-Dist: langmem>=0.0.30
|
|
44
|
+
Requires-Dist: loguru>=0.7.3
|
|
45
|
+
Requires-Dist: mcp>=1.24.0
|
|
46
|
+
Requires-Dist: mlflow[databricks]>=3.8.1
|
|
47
|
+
Requires-Dist: nest-asyncio>=1.6.0
|
|
48
|
+
Requires-Dist: openevals>=0.1.3
|
|
49
|
+
Requires-Dist: openpyxl>=3.1.5
|
|
50
|
+
Requires-Dist: psycopg[binary,pool]>=3.3.2
|
|
51
|
+
Requires-Dist: pydantic>=2.12.5
|
|
52
|
+
Requires-Dist: python-dotenv>=1.2.1
|
|
53
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
54
|
+
Requires-Dist: rich>=14.2.0
|
|
55
|
+
Requires-Dist: scipy>=1.14.0
|
|
56
|
+
Requires-Dist: sqlparse>=0.5.4
|
|
57
|
+
Requires-Dist: tomli>=2.3.0
|
|
58
|
+
Requires-Dist: unitycatalog-ai[databricks]>=0.3.2
|
|
59
|
+
Provides-Extra: databricks
|
|
60
|
+
Requires-Dist: databricks-connect>=16.0.0; extra == 'databricks'
|
|
61
|
+
Requires-Dist: databricks-vectorsearch>=0.63; extra == 'databricks'
|
|
62
|
+
Requires-Dist: pyspark>=3.5.0; extra == 'databricks'
|
|
63
|
+
Provides-Extra: dev
|
|
64
|
+
Requires-Dist: mypy>=1.19.1; extra == 'dev'
|
|
65
|
+
Requires-Dist: pre-commit>=4.5.1; extra == 'dev'
|
|
66
|
+
Requires-Dist: pytest>=9.0.2; extra == 'dev'
|
|
67
|
+
Requires-Dist: ruff>=0.14.9; extra == 'dev'
|
|
68
|
+
Provides-Extra: docs
|
|
69
|
+
Requires-Dist: mkdocs-material>=9.7.1; extra == 'docs'
|
|
70
|
+
Requires-Dist: mkdocs>=1.6.1; extra == 'docs'
|
|
71
|
+
Requires-Dist: mkdocstrings[python]>=1.0.0; extra == 'docs'
|
|
72
|
+
Provides-Extra: test
|
|
73
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == 'test'
|
|
74
|
+
Requires-Dist: pytest-mock>=3.15.1; extra == 'test'
|
|
75
|
+
Requires-Dist: pytest-rerunfailures>=15.0; extra == 'test'
|
|
76
|
+
Requires-Dist: pytest-xdist>=3.6.1; extra == 'test'
|
|
77
|
+
Requires-Dist: pytest>=9.0.2; extra == 'test'
|
|
78
|
+
Description-Content-Type: text/markdown
|
|
79
|
+
|
|
80
|
+
# DAO: Declarative Agent Orchestration
|
|
81
|
+
|
|
82
|
+
[](CHANGELOG.md)
|
|
83
|
+
[](https://www.python.org/)
|
|
84
|
+
[](LICENSE)
|
|
85
|
+
|
|
86
|
+
**Production-grade AI agents defined in YAML, powered by LangGraph, deployed on Databricks.**
|
|
87
|
+
|
|
88
|
+
DAO is an **infrastructure-as-code framework** for building, deploying, and managing multi-agent AI systems. Instead of writing boilerplate Python code to wire up agents, tools, and orchestration, you define everything declaratively in YAML configuration files.
|
|
89
|
+
|
|
90
|
+
```yaml
|
|
91
|
+
# Define an agent in 10 lines of YAML
|
|
92
|
+
agents:
|
|
93
|
+
product_expert:
|
|
94
|
+
name: product_expert
|
|
95
|
+
model: *claude_sonnet
|
|
96
|
+
tools:
|
|
97
|
+
- *vector_search_tool
|
|
98
|
+
- *genie_tool
|
|
99
|
+
prompt: |
|
|
100
|
+
You are a product expert. Answer questions about inventory and pricing.
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 🎨 Visual Configuration Studio
|
|
104
|
+
|
|
105
|
+
Prefer a visual interface? Check out **[DAO AI Builder](https://github.com/natefleming/dao-ai-builder)** — a React-based web application that provides a graphical interface for creating and editing DAO configurations. Perfect for:
|
|
106
|
+
|
|
107
|
+
- **Exploring** DAO's capabilities through an intuitive UI
|
|
108
|
+
- **Learning** the configuration structure with guided forms
|
|
109
|
+
- **Building** agents visually without writing YAML manually
|
|
110
|
+
- **Importing** and editing existing configurations
|
|
111
|
+
|
|
112
|
+
DAO AI Builder generates valid YAML configurations that work seamlessly with this framework. Use whichever workflow suits you best — visual builder or direct YAML editing.
|
|
113
|
+
|
|
114
|
+
<p align="center">
|
|
115
|
+
<img src="https://raw.githubusercontent.com/natefleming/dao-ai-builder/6ca07d2b977d9509b75edfb2e0f45681c840a931/docs/images/dao-ai-builder-screenshot.png" width="700" alt="DAO AI Builder Screenshot">
|
|
116
|
+
</p>
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 📚 Documentation
|
|
121
|
+
|
|
122
|
+
### Getting Started
|
|
123
|
+
- **[Why DAO?](docs/why-dao.md)** - Learn what DAO is and how it compares to other platforms
|
|
124
|
+
- **[Quick Start](#quick-start)** - Build and deploy your first agent in minutes
|
|
125
|
+
- **[Architecture](docs/architecture.md)** - Understand how DAO works under the hood
|
|
126
|
+
|
|
127
|
+
### Core Concepts
|
|
128
|
+
- **[Key Capabilities](docs/key-capabilities.md)** - Explore 14 powerful features for production agents
|
|
129
|
+
- **[Configuration Reference](docs/configuration-reference.md)** - Complete YAML configuration guide
|
|
130
|
+
- **[Examples](docs/examples.md)** - Ready-to-use example configurations
|
|
131
|
+
|
|
132
|
+
### Reference
|
|
133
|
+
- **[CLI Reference](docs/cli-reference.md)** - Command-line interface documentation
|
|
134
|
+
- **[Python API](docs/python-api.md)** - Programmatic usage and customization
|
|
135
|
+
- **[FAQ](docs/faq.md)** - Frequently asked questions
|
|
136
|
+
|
|
137
|
+
### Contributing
|
|
138
|
+
- **[Contributing Guide](docs/contributing.md)** - How to contribute to DAO
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Quick Start
|
|
143
|
+
|
|
144
|
+
### Prerequisites
|
|
145
|
+
|
|
146
|
+
Before you begin, you'll need:
|
|
147
|
+
|
|
148
|
+
- **Python 3.11 or newer** installed on your computer ([download here](https://www.python.org/downloads/))
|
|
149
|
+
- **A Databricks workspace** (ask your IT team or see [Databricks docs](https://docs.databricks.com/))
|
|
150
|
+
- Access to **Unity Catalog** (your organization's data catalog)
|
|
151
|
+
- **Model Serving** enabled (for deploying AI agents)
|
|
152
|
+
- *Optional*: Vector Search, Genie (for advanced features)
|
|
153
|
+
|
|
154
|
+
**Not sure if you have access?** Your Databricks administrator can grant you permissions.
|
|
155
|
+
|
|
156
|
+
### Installation
|
|
157
|
+
|
|
158
|
+
**Option 1: Install from PyPI (Recommended)**
|
|
159
|
+
|
|
160
|
+
The simplest way to get started:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# Install directly from PyPI
|
|
164
|
+
pip install dao-ai
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Option 2: For developers familiar with Git**
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Clone this repository
|
|
171
|
+
git clone <repo-url>
|
|
172
|
+
cd dao-ai
|
|
173
|
+
|
|
174
|
+
# Create an isolated Python environment
|
|
175
|
+
uv venv
|
|
176
|
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
177
|
+
|
|
178
|
+
# Install DAO and its dependencies
|
|
179
|
+
make install
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Option 3: For those new to development**
|
|
183
|
+
|
|
184
|
+
1. Download this project as a ZIP file (click the green "Code" button on GitHub → Download ZIP)
|
|
185
|
+
2. Extract the ZIP file to a folder on your computer
|
|
186
|
+
3. Open a terminal/command prompt and navigate to that folder
|
|
187
|
+
4. Run these commands:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# On Mac/Linux:
|
|
191
|
+
python3 -m venv .venv
|
|
192
|
+
source .venv/bin/activate
|
|
193
|
+
pip install -e .
|
|
194
|
+
|
|
195
|
+
# On Windows:
|
|
196
|
+
python -m venv .venv
|
|
197
|
+
.venv\Scripts\activate
|
|
198
|
+
pip install -e .
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Verification:** Run `dao-ai --version` to confirm the installation succeeded.
|
|
202
|
+
|
|
203
|
+
### Your First Agent
|
|
204
|
+
|
|
205
|
+
Let's build a simple AI assistant in 4 steps. This agent will use a language model from Databricks to answer questions.
|
|
206
|
+
|
|
207
|
+
**Step 1: Create a configuration file**
|
|
208
|
+
|
|
209
|
+
Create a new file called `config/my_agent.yaml` and paste this content:
|
|
210
|
+
|
|
211
|
+
```yaml
|
|
212
|
+
schemas:
|
|
213
|
+
my_schema: &my_schema
|
|
214
|
+
catalog_name: my_catalog # Replace with your Unity Catalog name
|
|
215
|
+
schema_name: my_schema # Replace with your schema name
|
|
216
|
+
|
|
217
|
+
resources:
|
|
218
|
+
llms:
|
|
219
|
+
default_llm: &default_llm
|
|
220
|
+
name: databricks-meta-llama-3-3-70b-instruct # The AI model to use
|
|
221
|
+
|
|
222
|
+
agents:
|
|
223
|
+
assistant: &assistant
|
|
224
|
+
name: assistant
|
|
225
|
+
model: *default_llm
|
|
226
|
+
prompt: |
|
|
227
|
+
You are a helpful assistant.
|
|
228
|
+
|
|
229
|
+
app:
|
|
230
|
+
name: my_first_agent
|
|
231
|
+
registered_model:
|
|
232
|
+
schema: *my_schema
|
|
233
|
+
name: my_first_agent
|
|
234
|
+
agents:
|
|
235
|
+
- *assistant
|
|
236
|
+
orchestration:
|
|
237
|
+
swarm:
|
|
238
|
+
model: *default_llm
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**💡 What's happening here?**
|
|
242
|
+
- `schemas`: Points to your Unity Catalog location (where the agent will be registered)
|
|
243
|
+
- `resources`: Defines the AI model (Llama 3.3 70B in this case)
|
|
244
|
+
- `agents`: Describes your assistant agent and its behavior
|
|
245
|
+
- `app`: Configures how the agent is deployed and orchestrated
|
|
246
|
+
|
|
247
|
+
**Step 2: Validate your configuration**
|
|
248
|
+
|
|
249
|
+
This checks for errors in your YAML file:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
dao-ai validate -c config/my_agent.yaml
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
You should see: ✅ `Configuration is valid!`
|
|
256
|
+
|
|
257
|
+
**Step 3: Visualize the agent workflow** (optional)
|
|
258
|
+
|
|
259
|
+
Generate a diagram showing how your agent works:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
dao-ai graph -c config/my_agent.yaml -o my_agent.png
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
This creates `my_agent.png` — open it to see a visual representation of your agent.
|
|
266
|
+
|
|
267
|
+
**Step 4: Deploy to Databricks**
|
|
268
|
+
|
|
269
|
+
**Option A: Using Python** (programmatic deployment)
|
|
270
|
+
|
|
271
|
+
```python
|
|
272
|
+
from dao_ai.config import AppConfig
|
|
273
|
+
|
|
274
|
+
# Load your configuration
|
|
275
|
+
config = AppConfig.from_file("config/my_agent.yaml")
|
|
276
|
+
|
|
277
|
+
# Package the agent as an MLflow model
|
|
278
|
+
config.create_agent()
|
|
279
|
+
|
|
280
|
+
# Deploy to Databricks Model Serving
|
|
281
|
+
config.deploy_agent()
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
**Option B: Using the CLI** (one command)
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
dao-ai bundle --deploy --run -c config/my_agent.yaml
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
This single command:
|
|
291
|
+
1. Validates your configuration
|
|
292
|
+
2. Packages the agent
|
|
293
|
+
3. Deploys it to Databricks
|
|
294
|
+
4. Creates a serving endpoint
|
|
295
|
+
|
|
296
|
+
**Deploying to a specific workspace:**
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
# Deploy to AWS workspace
|
|
300
|
+
dao-ai bundle --deploy --run -c config/my_agent.yaml --profile aws-field-eng
|
|
301
|
+
|
|
302
|
+
# Deploy to Azure workspace
|
|
303
|
+
dao-ai bundle --deploy --run -c config/my_agent.yaml --profile azure-retail
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
**Step 5: Interact with your agent**
|
|
307
|
+
|
|
308
|
+
Once deployed, you can chat with your agent using Python:
|
|
309
|
+
|
|
310
|
+
```python
|
|
311
|
+
from mlflow.deployments import get_deploy_client
|
|
312
|
+
|
|
313
|
+
# Connect to your Databricks workspace
|
|
314
|
+
client = get_deploy_client("databricks")
|
|
315
|
+
|
|
316
|
+
# Send a message to your agent
|
|
317
|
+
response = client.predict(
|
|
318
|
+
endpoint="my_first_agent",
|
|
319
|
+
inputs={
|
|
320
|
+
"messages": [{"role": "user", "content": "Hello! What can you help me with?"}],
|
|
321
|
+
"configurable": {
|
|
322
|
+
"thread_id": "1", # Conversation ID
|
|
323
|
+
"user_id": "demo_user" # User identifier
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
# Print the agent's response
|
|
329
|
+
print(response["message"]["content"])
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**🎉 Congratulations!** You've built and deployed your first AI agent with DAO.
|
|
333
|
+
|
|
334
|
+
**Next steps:**
|
|
335
|
+
- Explore the [`config/examples/`](config/examples/) folder for more advanced configurations
|
|
336
|
+
- Try the [DAO AI Builder](https://github.com/natefleming/dao-ai-builder) visual interface
|
|
337
|
+
- Learn about [Key Capabilities](docs/key-capabilities.md) to add advanced features
|
|
338
|
+
- Read the [Architecture](docs/architecture.md) documentation to understand how it works
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## Key Features at a Glance
|
|
343
|
+
|
|
344
|
+
DAO provides powerful capabilities for building production-ready AI agents:
|
|
345
|
+
|
|
346
|
+
| Feature | Description |
|
|
347
|
+
|---------|-------------|
|
|
348
|
+
| **Multi-Tool Support** | Python functions, Unity Catalog, MCP, Agent Endpoints |
|
|
349
|
+
| **On-Behalf-Of User** | Per-user permissions and governance |
|
|
350
|
+
| **Advanced Caching** | Two-tier (LRU + Semantic) caching for cost optimization |
|
|
351
|
+
| **Vector Search Reranking** | Improve RAG quality with FlashRank |
|
|
352
|
+
| **Human-in-the-Loop** | Approval workflows for sensitive operations |
|
|
353
|
+
| **Memory & Persistence** | PostgreSQL, Lakebase, or in-memory state |
|
|
354
|
+
| **Prompt Registry** | Version and manage prompts in MLflow |
|
|
355
|
+
| **Prompt Optimization** | Automated tuning with GEPA (Generative Evolution of Prompts and Agents) |
|
|
356
|
+
| **Guardrails** | Content filters, safety checks, validation |
|
|
357
|
+
| **Middleware** | Input validation, logging, performance monitoring, audit trails |
|
|
358
|
+
| **Conversation Summarization** | Handle long conversations automatically |
|
|
359
|
+
| **Structured Output** | JSON schema for predictable responses |
|
|
360
|
+
| **Custom I/O** | Flexible input/output with runtime state |
|
|
361
|
+
| **Hook System** | Lifecycle hooks for initialization and cleanup |
|
|
362
|
+
|
|
363
|
+
👉 **Learn more:** [Key Capabilities Documentation](docs/key-capabilities.md)
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Architecture Overview
|
|
368
|
+
|
|
369
|
+
```mermaid
|
|
370
|
+
graph TB
|
|
371
|
+
subgraph yaml["YAML Configuration"]
|
|
372
|
+
direction LR
|
|
373
|
+
schemas[Schemas] ~~~ resources[Resources] ~~~ tools[Tools] ~~~ agents[Agents] ~~~ orchestration[Orchestration]
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
subgraph dao["DAO Framework (Python)"]
|
|
377
|
+
direction LR
|
|
378
|
+
config[Config<br/>Loader] ~~~ graph_builder[Graph<br/>Builder] ~~~ nodes[Nodes<br/>Factory] ~~~ tool_factory[Tool<br/>Factory]
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
subgraph langgraph["LangGraph Runtime"]
|
|
382
|
+
direction LR
|
|
383
|
+
msg_hook[Message<br/>Hook] --> supervisor[Supervisor/<br/>Swarm] --> specialized[Specialized<br/>Agents]
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
subgraph databricks["Databricks Platform"]
|
|
387
|
+
direction LR
|
|
388
|
+
model_serving[Model<br/>Serving] ~~~ unity_catalog[Unity<br/>Catalog] ~~~ vector_search[Vector<br/>Search] ~~~ genie_spaces[Genie<br/>Spaces] ~~~ mlflow[MLflow]
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
yaml ==> dao
|
|
392
|
+
dao ==> langgraph
|
|
393
|
+
langgraph ==> databricks
|
|
394
|
+
|
|
395
|
+
style yaml fill:#1B5162,stroke:#618794,stroke-width:3px,color:#fff
|
|
396
|
+
style dao fill:#FFAB00,stroke:#7D5319,stroke-width:3px,color:#1B3139
|
|
397
|
+
style langgraph fill:#618794,stroke:#143D4A,stroke-width:3px,color:#fff
|
|
398
|
+
style databricks fill:#00875C,stroke:#095A35,stroke-width:3px,color:#fff
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
👉 **Learn more:** [Architecture Documentation](docs/architecture.md)
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Example Configurations
|
|
406
|
+
|
|
407
|
+
The `config/examples/` directory contains ready-to-use configurations organized in a **progressive learning path**:
|
|
408
|
+
|
|
409
|
+
- `01_getting_started/minimal.yaml` - Simplest possible agent
|
|
410
|
+
- `02_tools/vector_search_with_reranking.yaml` - RAG with improved accuracy
|
|
411
|
+
- `04_genie/genie_semantic_cache.yaml` - NL-to-SQL with two-tier caching
|
|
412
|
+
- `05_memory/conversation_summarization.yaml` - Long conversation handling
|
|
413
|
+
- `06_on_behalf_of_user/obo_basic.yaml` - User-level access control
|
|
414
|
+
- `07_human_in_the_loop/human_in_the_loop.yaml` - Approval workflows
|
|
415
|
+
|
|
416
|
+
And many more! Follow the numbered path or jump to what you need. See the full guide in [Examples Documentation](docs/examples.md).
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## CLI Quick Reference
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
# Validate configuration
|
|
424
|
+
dao-ai validate -c config/my_config.yaml
|
|
425
|
+
|
|
426
|
+
# Generate JSON schema for IDE support
|
|
427
|
+
dao-ai schema > schemas/model_config_schema.json
|
|
428
|
+
|
|
429
|
+
# Visualize agent workflow
|
|
430
|
+
dao-ai graph -c config/my_config.yaml -o workflow.png
|
|
431
|
+
|
|
432
|
+
# Deploy with Databricks Asset Bundles
|
|
433
|
+
dao-ai bundle --deploy --run -c config/my_config.yaml
|
|
434
|
+
|
|
435
|
+
# Deploy to a specific workspace (multi-cloud support)
|
|
436
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile aws-field-eng
|
|
437
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile azure-retail
|
|
438
|
+
|
|
439
|
+
# Interactive chat with agent
|
|
440
|
+
dao-ai chat -c config/my_config.yaml
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### Multi-Cloud Deployment
|
|
444
|
+
|
|
445
|
+
DAO AI supports deploying to Azure, AWS, and GCP workspaces with automatic cloud detection:
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
# Deploy to AWS workspace
|
|
449
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile aws-prod
|
|
450
|
+
|
|
451
|
+
# Deploy to Azure workspace
|
|
452
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile azure-prod
|
|
453
|
+
|
|
454
|
+
# Deploy to GCP workspace
|
|
455
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile gcp-prod
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
The CLI automatically:
|
|
459
|
+
- Detects the cloud provider from your profile's workspace URL
|
|
460
|
+
- Selects appropriate compute node types for each cloud
|
|
461
|
+
- Creates isolated deployment state per profile
|
|
462
|
+
|
|
463
|
+
👉 **Learn more:** [CLI Reference Documentation](docs/cli-reference.md)
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Community & Support
|
|
468
|
+
|
|
469
|
+
- **Documentation**: [docs/](docs/)
|
|
470
|
+
- **Examples**: [config/examples/](config/examples/)
|
|
471
|
+
- **Issues**: [GitHub Issues](https://github.com/your-org/dao-ai/issues)
|
|
472
|
+
- **Discussions**: [GitHub Discussions](https://github.com/your-org/dao-ai/discussions)
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## Contributing
|
|
477
|
+
|
|
478
|
+
We welcome contributions! See the [Contributing Guide](docs/contributing.md) for details on:
|
|
479
|
+
|
|
480
|
+
- Setting up your development environment
|
|
481
|
+
- Code style and testing guidelines
|
|
482
|
+
- How to submit pull requests
|
|
483
|
+
- Project structure overview
|
|
484
|
+
|
|
485
|
+
---
|
|
486
|
+
|
|
487
|
+
## License
|
|
488
|
+
|
|
489
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|