dao-ai 0.1.3__tar.gz → 0.1.4__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.3 → dao_ai-0.1.4}/PKG-INFO +35 -1
- {dao_ai-0.1.3 → dao_ai-0.1.4}/README.md +34 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/databricks.yaml.template +21 -9
- dao_ai-0.1.4/docs/cli-reference.md +237 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/pyproject.toml +1 -1
- {dao_ai-0.1.3 → dao_ai-0.1.4}/requirements.txt +1 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/cli.py +94 -18
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/config.py +68 -28
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/providers/databricks.py +10 -15
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/vector_search.py +37 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_databricks.py +307 -10
- dao_ai-0.1.3/docs/cli-reference.md +0 -98
- {dao_ai-0.1.3 → dao_ai-0.1.4}/.gitignore +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/.python-version +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/CHANGELOG.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/CONTRIBUTING.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/LICENSE +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/Makefile +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/01_getting_started/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/01_getting_started/minimal.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/02_mcp/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/02_mcp/custom_mcp.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/02_mcp/external_mcp.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/02_mcp/managed_mcp.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/02_mcp/slack_integration.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/03_reranking/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/03_reranking/vector_search_with_reranking.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/04_genie/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/04_genie/genie_basic.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/04_genie/genie_lru_cache.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/04_genie/genie_semantic_cache.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/04_genie/genie_with_conversation_id.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/05_memory/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/05_memory/conversation_summarization.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/05_memory/in_memory_basic.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/05_memory/lakebase_persistence.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/05_memory/postgres_persistence.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/06_on_behalf_of_user/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/06_on_behalf_of_user/obo_basic.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/07_human_in_the_loop/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/07_human_in_the_loop/human_in_the_loop.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/08_guardrails/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/08_guardrails/guardrails_basic.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/09_structured_output/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/09_structured_output/structured_output.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/10_agent_integrations/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/10_agent_integrations/agent_bricks.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/10_agent_integrations/kasal.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/11_prompt_engineering/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/11_prompt_engineering/prompt_optimization.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/11_prompt_engineering/prompt_registry.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/12_middleware/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/12_middleware/combined_middleware.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/12_middleware/custom_field_validation.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/12_middleware/logging_middleware.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/13_orchestration/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/13_orchestration/supervisor_pattern.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/13_orchestration/swarm_pattern.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/14_basic_tools/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/14_basic_tools/sql_tool_example.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/brick_store.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/deep_research.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/executive_assistant.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/genie_and_genie_mcp.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/genie_vector_search_hybrid.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/hardware_store.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/hardware_store_lakebase.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/hardware_store_swarm.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/quick_serve_restaurant.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/15_complete_applications/reservations_system.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/config/examples/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/appointments.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/appointments_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/brand_rep_demo_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/brand_rep_demo_queries.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/brand_rep_demo_tables.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/brand_rep_demo_validation.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/customers.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/customers_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/dim_stores.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/dim_stores_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/employee_performance.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/employee_performance_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/employee_tasks.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/employee_tasks_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/inventory.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/inventory_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/managers.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/managers_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/product_data.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/products.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/dais2025/task_assignments.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/hardware_store/inventory.snappy.parquet +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/hardware_store/inventory.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/hardware_store/products.snappy.parquet +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/hardware_store/products.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/quick_serve_restaurant/items_description.csv +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/quick_serve_restaurant/items_description.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/quick_serve_restaurant/items_raw.csv +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/quick_serve_restaurant/items_raw.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/quick_serve_restaurant/orders_raw.csv +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/data/quick_serve_restaurant/orders_raw.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/architecture.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/configuration-reference.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/contributing.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/examples.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/faq.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/hardware_store/README.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/hardware_store/retail_supervisor.png +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/hardware_store/retail_swarm.png +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/images/genie.png +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/key-capabilities.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/python-api.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/docs/why-dao.md +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/environment.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/examples/dais2025/examples.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/examples/deep_research/examples.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/examples/executive_assistant/examples.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/examples/hardware_store/examples.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/examples/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/examples/quick_serve_restaurant/examples.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/dais2025/extract_store_numbers.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/dais2025/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/dais2025/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/dais2025/find_product_by_sku.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/dais2025/find_product_by_upc.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/dais2025/find_store_by_number.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/hardware_store/find_product_by_sku.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/hardware_store/find_product_by_upc.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/01_ingest_and_transform.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/02_provision_vector_search.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/03_provision_lakebase.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/04_unity_catalog_tools.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/05_deploy_agent.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/06_generate_evaluation_data.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/07_run_evaluation.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/08_run_examples.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/09_evaluate_inferences.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/10_optimize_prompts.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/notebooks/99_scratchpad.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/schemas/bundle_config_schema.json +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/schemas/model_config_schema.json +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/models.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/tools/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/tools/customer.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/tools/employee.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/tools/executive.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/tools/genie.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/tools/inventory.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/tools/models.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dais2025/tools/store.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/agent_as_code.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/catalog.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/genie/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/genie/cache/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/genie/cache/base.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/genie/cache/core.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/genie/cache/lru.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/genie/cache/semantic.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/genie/core.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/graph.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/hooks/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/hooks/core.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/logging.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/memory/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/memory/base.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/memory/core.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/memory/databricks.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/memory/postgres.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/messages.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/middleware/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/middleware/assertions.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/middleware/base.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/middleware/core.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/middleware/guardrails.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/middleware/human_in_the_loop.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/middleware/message_validation.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/middleware/summarization.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/models.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/nodes.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/optimization.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/orchestration/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/orchestration/core.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/orchestration/supervisor.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/orchestration/swarm.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/prompts.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/providers/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/providers/base.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/state.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/__init__.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/agent.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/core.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/email.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/genie.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/mcp.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/memory.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/python.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/search.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/slack.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/sql.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/time.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/unity_catalog.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/tools/vector_search.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/types.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/src/dao_ai/utils.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/config/test_model_config.yaml +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/conftest.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_agent_response_format.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_assertions_middleware.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_catalog.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_chat_history.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_config.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_function_parsing.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_genie.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_genie_databricks_integration.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_genie_room_model.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_guardrail_retry.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_hitl_config_model.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_hitl_responses_agent.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_hooks.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_human_in_the_loop.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_inference.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_inference_integration.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_input_output_structure.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_interrupt_type.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_llm_interrupt_handling.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_mcp.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_mcp_function_model.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_message_validation_middleware.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_messages.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_models.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_optimization.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_postgres_integration.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_prompt_optimizations.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_prompts.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_reranking.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_reranking_integration.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_resources_model_genie_integration.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_response_format.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_responses_agent_structured_output_unit.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_semantic_cache_context.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_sql_tool.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_sql_tool_integration.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_state.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_summarization_inference.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_swarm_middleware.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_tools.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_types.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_unity_catalog.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_utils.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_utils_type_from_fqn.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/test_vector_search.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/dao_ai/weather_server_mcp.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/hardware_store/.gitkeep +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/hardware_store/test_graph.py +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/tests/images/lays_upc.png +0 -0
- {dao_ai-0.1.3 → dao_ai-0.1.4}/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.1.
|
|
3
|
+
Version: 0.1.4
|
|
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
|
|
@@ -293,6 +293,16 @@ This single command:
|
|
|
293
293
|
3. Deploys it to Databricks
|
|
294
294
|
4. Creates a serving endpoint
|
|
295
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
|
+
|
|
296
306
|
**Step 5: Interact with your agent**
|
|
297
307
|
|
|
298
308
|
Once deployed, you can chat with your agent using Python:
|
|
@@ -422,10 +432,34 @@ dao-ai graph -c config/my_config.yaml -o workflow.png
|
|
|
422
432
|
# Deploy with Databricks Asset Bundles
|
|
423
433
|
dao-ai bundle --deploy --run -c config/my_config.yaml
|
|
424
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
|
+
|
|
425
439
|
# Interactive chat with agent
|
|
426
440
|
dao-ai chat -c config/my_config.yaml
|
|
427
441
|
```
|
|
428
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
|
+
|
|
429
463
|
👉 **Learn more:** [CLI Reference Documentation](docs/cli-reference.md)
|
|
430
464
|
|
|
431
465
|
---
|
|
@@ -214,6 +214,16 @@ This single command:
|
|
|
214
214
|
3. Deploys it to Databricks
|
|
215
215
|
4. Creates a serving endpoint
|
|
216
216
|
|
|
217
|
+
**Deploying to a specific workspace:**
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# Deploy to AWS workspace
|
|
221
|
+
dao-ai bundle --deploy --run -c config/my_agent.yaml --profile aws-field-eng
|
|
222
|
+
|
|
223
|
+
# Deploy to Azure workspace
|
|
224
|
+
dao-ai bundle --deploy --run -c config/my_agent.yaml --profile azure-retail
|
|
225
|
+
```
|
|
226
|
+
|
|
217
227
|
**Step 5: Interact with your agent**
|
|
218
228
|
|
|
219
229
|
Once deployed, you can chat with your agent using Python:
|
|
@@ -343,10 +353,34 @@ dao-ai graph -c config/my_config.yaml -o workflow.png
|
|
|
343
353
|
# Deploy with Databricks Asset Bundles
|
|
344
354
|
dao-ai bundle --deploy --run -c config/my_config.yaml
|
|
345
355
|
|
|
356
|
+
# Deploy to a specific workspace (multi-cloud support)
|
|
357
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile aws-field-eng
|
|
358
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile azure-retail
|
|
359
|
+
|
|
346
360
|
# Interactive chat with agent
|
|
347
361
|
dao-ai chat -c config/my_config.yaml
|
|
348
362
|
```
|
|
349
363
|
|
|
364
|
+
### Multi-Cloud Deployment
|
|
365
|
+
|
|
366
|
+
DAO AI supports deploying to Azure, AWS, and GCP workspaces with automatic cloud detection:
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
# Deploy to AWS workspace
|
|
370
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile aws-prod
|
|
371
|
+
|
|
372
|
+
# Deploy to Azure workspace
|
|
373
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile azure-prod
|
|
374
|
+
|
|
375
|
+
# Deploy to GCP workspace
|
|
376
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile gcp-prod
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
The CLI automatically:
|
|
380
|
+
- Detects the cloud provider from your profile's workspace URL
|
|
381
|
+
- Selects appropriate compute node types for each cloud
|
|
382
|
+
- Creates isolated deployment state per profile
|
|
383
|
+
|
|
350
384
|
👉 **Learn more:** [CLI Reference Documentation](docs/cli-reference.md)
|
|
351
385
|
|
|
352
386
|
---
|
|
@@ -13,8 +13,9 @@ variables:
|
|
|
13
13
|
config_path:
|
|
14
14
|
description: Path to the configuration file for the job.
|
|
15
15
|
node_type:
|
|
16
|
-
description: The job compute node type
|
|
17
|
-
|
|
16
|
+
description: The job compute node type (cloud-specific, set per target)
|
|
17
|
+
cloud:
|
|
18
|
+
description: Cloud provider (azure, aws, gcp) - auto-detected or set per target
|
|
18
19
|
|
|
19
20
|
resources:
|
|
20
21
|
jobs:
|
|
@@ -93,12 +94,23 @@ resources:
|
|
|
93
94
|
config-path: ${var.config_path}
|
|
94
95
|
environment_key: dao-ai-env
|
|
95
96
|
|
|
97
|
+
# Cloud-specific targets with appropriate node types
|
|
98
|
+
# The CLI auto-selects the target based on workspace cloud detection
|
|
96
99
|
targets:
|
|
97
|
-
|
|
100
|
+
azure:
|
|
98
101
|
mode: development
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
variables:
|
|
103
|
+
cloud: azure
|
|
104
|
+
node_type: Standard_D4ads_v5
|
|
105
|
+
|
|
106
|
+
aws:
|
|
107
|
+
mode: development
|
|
108
|
+
variables:
|
|
109
|
+
cloud: aws
|
|
110
|
+
node_type: i3.xlarge
|
|
111
|
+
|
|
112
|
+
gcp:
|
|
113
|
+
mode: development
|
|
114
|
+
variables:
|
|
115
|
+
cloud: gcp
|
|
116
|
+
node_type: n1-standard-4
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# CLI Reference
|
|
2
|
+
|
|
3
|
+
## Validate Configuration
|
|
4
|
+
|
|
5
|
+
Check your configuration for errors:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
dao-ai validate -c config/my_config.yaml
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Generate JSON Schema
|
|
12
|
+
|
|
13
|
+
Generate JSON schema for IDE support and validation:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
dao-ai schema > schemas/model_config_schema.json
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Visualize Agent Workflow
|
|
20
|
+
|
|
21
|
+
Generate a diagram showing how your agent works:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
dao-ai graph -c config/my_config.yaml -o workflow.png
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Deploy with Databricks Asset Bundles
|
|
28
|
+
|
|
29
|
+
Deploy your agent to Databricks. The CLI supports multi-cloud deployments with automatic cloud detection.
|
|
30
|
+
|
|
31
|
+
### Basic Deployment
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Deploy using default profile or environment
|
|
35
|
+
dao-ai bundle --deploy -c config/my_config.yaml
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Multi-Cloud Deployment
|
|
39
|
+
|
|
40
|
+
The CLI automatically detects the cloud provider from your Databricks workspace and selects the appropriate configuration (node types, etc.):
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Deploy to AWS workspace
|
|
44
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile aws-field-eng
|
|
45
|
+
|
|
46
|
+
# Deploy to Azure workspace
|
|
47
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile azure-retail
|
|
48
|
+
|
|
49
|
+
# Deploy to GCP workspace
|
|
50
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile gcp-analytics
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Deploy and Run
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Deploy and immediately run the job
|
|
57
|
+
dao-ai bundle --deploy --run -c config/my_config.yaml --profile aws-field-eng
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Explicit Cloud Override
|
|
61
|
+
|
|
62
|
+
If cloud auto-detection doesn't work, you can specify the cloud explicitly:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
dao-ai bundle --deploy -c config/my_config.yaml --cloud aws
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Dry Run
|
|
69
|
+
|
|
70
|
+
Preview commands without executing:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
dao-ai bundle --deploy -c config/my_config.yaml --profile aws-field-eng --dry-run
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Interactive Chat
|
|
77
|
+
|
|
78
|
+
Start an interactive chat session with your agent:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
dao-ai chat -c config/my_config.yaml
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Verbose Output
|
|
85
|
+
|
|
86
|
+
Increase verbosity for debugging (use `-v` through `-vvvv`):
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
dao-ai -vvvv validate -c config/my_config.yaml
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Command Options
|
|
95
|
+
|
|
96
|
+
### Common Options
|
|
97
|
+
|
|
98
|
+
| Option | Description |
|
|
99
|
+
|--------|-------------|
|
|
100
|
+
| `-c, --config FILE` | Path to configuration file (required) |
|
|
101
|
+
| `-p, --profile NAME` | Databricks CLI profile to use |
|
|
102
|
+
| `-v, --verbose` | Increase verbosity (can be repeated up to 4 times) |
|
|
103
|
+
| `--help` | Show help message |
|
|
104
|
+
|
|
105
|
+
### Validate Options
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
dao-ai validate -c config/my_config.yaml [OPTIONS]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Graph Options
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
dao-ai graph -c config/my_config.yaml -o output.png [OPTIONS]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
| Option | Description |
|
|
118
|
+
|--------|-------------|
|
|
119
|
+
| `-o, --output FILE` | Output file path (supports .png, .pdf, .svg) |
|
|
120
|
+
|
|
121
|
+
### Bundle Options
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
dao-ai bundle -c config/my_config.yaml [OPTIONS]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
| Option | Description |
|
|
128
|
+
|--------|-------------|
|
|
129
|
+
| `-d, --deploy` | Deploy the bundle to Databricks |
|
|
130
|
+
| `-r, --run` | Run the deployment job after deploying |
|
|
131
|
+
| `--destroy` | Destroy the deployed bundle |
|
|
132
|
+
| `-p, --profile NAME` | Databricks CLI profile to use |
|
|
133
|
+
| `--cloud {azure,aws,gcp}` | Cloud provider (auto-detected if not specified) |
|
|
134
|
+
| `-t, --target NAME` | Bundle target name (auto-generated if not specified) |
|
|
135
|
+
| `--dry-run` | Preview commands without executing |
|
|
136
|
+
|
|
137
|
+
### Chat Options
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
dao-ai chat -c config/my_config.yaml [OPTIONS]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Starts an interactive REPL session where you can chat with your agent locally.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Multi-Cloud Support
|
|
148
|
+
|
|
149
|
+
DAO AI supports deploying to Azure, AWS, and GCP Databricks workspaces. The CLI handles cloud-specific configurations automatically.
|
|
150
|
+
|
|
151
|
+
### How It Works
|
|
152
|
+
|
|
153
|
+
1. **Cloud Detection**: When you specify a `--profile`, the CLI detects the cloud provider from the workspace URL
|
|
154
|
+
2. **Target Selection**: The CLI uses the profile name as the deployment target for per-profile isolation
|
|
155
|
+
3. **Node Types**: Cloud-appropriate compute node types are automatically selected:
|
|
156
|
+
- Azure: `Standard_D4ads_v5`
|
|
157
|
+
- AWS: `i3.xlarge`
|
|
158
|
+
- GCP: `n1-standard-4`
|
|
159
|
+
|
|
160
|
+
### Profile Configuration
|
|
161
|
+
|
|
162
|
+
Profiles are configured in `~/.databrickscfg`:
|
|
163
|
+
|
|
164
|
+
```ini
|
|
165
|
+
[aws-field-eng]
|
|
166
|
+
host = https://my-workspace.cloud.databricks.com
|
|
167
|
+
token = dapi...
|
|
168
|
+
|
|
169
|
+
[azure-retail]
|
|
170
|
+
host = https://adb-123456789.azuredatabricks.net
|
|
171
|
+
token = dapi...
|
|
172
|
+
|
|
173
|
+
[gcp-analytics]
|
|
174
|
+
host = https://my-workspace.gcp.databricks.com
|
|
175
|
+
token = dapi...
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Deployment Isolation
|
|
179
|
+
|
|
180
|
+
Each profile gets its own isolated deployment state:
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
/.bundle/my_app/aws-field-eng/files # AWS deployment
|
|
184
|
+
/.bundle/my_app/azure-retail/files # Azure deployment
|
|
185
|
+
/.bundle/my_app/gcp-analytics/files # GCP deployment
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
This allows you to deploy the same application to multiple workspaces without conflicts.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Examples
|
|
193
|
+
|
|
194
|
+
### Deploy to Multiple Clouds
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Deploy to AWS
|
|
198
|
+
dao-ai bundle --deploy -c config/hardware_store.yaml --profile aws-prod
|
|
199
|
+
|
|
200
|
+
# Deploy same app to Azure
|
|
201
|
+
dao-ai bundle --deploy -c config/hardware_store.yaml --profile azure-prod
|
|
202
|
+
|
|
203
|
+
# Deploy same app to GCP
|
|
204
|
+
dao-ai bundle --deploy -c config/hardware_store.yaml --profile gcp-prod
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Development vs Production
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Deploy to development workspace
|
|
211
|
+
dao-ai bundle --deploy -c config/my_app.yaml --profile aws-dev
|
|
212
|
+
|
|
213
|
+
# Deploy to production workspace
|
|
214
|
+
dao-ai bundle --deploy -c config/my_app.yaml --profile aws-prod
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Full Deployment Pipeline
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# Validate configuration
|
|
221
|
+
dao-ai validate -c config/my_app.yaml
|
|
222
|
+
|
|
223
|
+
# Generate workflow diagram
|
|
224
|
+
dao-ai graph -c config/my_app.yaml -o workflow.png
|
|
225
|
+
|
|
226
|
+
# Deploy and run
|
|
227
|
+
dao-ai bundle --deploy --run -c config/my_app.yaml --profile aws-field-eng
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Navigation
|
|
233
|
+
|
|
234
|
+
- [← Previous: Examples](examples.md)
|
|
235
|
+
- [↑ Back to Documentation Index](../README.md#-documentation)
|
|
236
|
+
- [Next: Python API →](python-api.md)
|
|
237
|
+
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dao-ai"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.4"
|
|
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" }
|
|
@@ -47,6 +47,57 @@ def get_default_user_id() -> str:
|
|
|
47
47
|
return local_user
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
def detect_cloud_provider(profile: Optional[str] = None) -> Optional[str]:
|
|
51
|
+
"""
|
|
52
|
+
Detect the cloud provider from the Databricks workspace URL.
|
|
53
|
+
|
|
54
|
+
The cloud provider is determined by the workspace URL pattern:
|
|
55
|
+
- Azure: *.azuredatabricks.net
|
|
56
|
+
- AWS: *.cloud.databricks.com (without gcp subdomain)
|
|
57
|
+
- GCP: *.gcp.databricks.com
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
profile: Optional Databricks CLI profile name
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Cloud provider string ('azure', 'aws', 'gcp') or None if detection fails
|
|
64
|
+
"""
|
|
65
|
+
try:
|
|
66
|
+
from databricks.sdk import WorkspaceClient
|
|
67
|
+
|
|
68
|
+
# Create workspace client with optional profile
|
|
69
|
+
if profile:
|
|
70
|
+
w = WorkspaceClient(profile=profile)
|
|
71
|
+
else:
|
|
72
|
+
w = WorkspaceClient()
|
|
73
|
+
|
|
74
|
+
# Get the workspace URL from config
|
|
75
|
+
host = w.config.host
|
|
76
|
+
if not host:
|
|
77
|
+
logger.warning("Could not determine workspace URL for cloud detection")
|
|
78
|
+
return None
|
|
79
|
+
|
|
80
|
+
host_lower = host.lower()
|
|
81
|
+
|
|
82
|
+
if "azuredatabricks.net" in host_lower:
|
|
83
|
+
logger.debug(f"Detected Azure cloud from workspace URL: {host}")
|
|
84
|
+
return "azure"
|
|
85
|
+
elif ".gcp.databricks.com" in host_lower:
|
|
86
|
+
logger.debug(f"Detected GCP cloud from workspace URL: {host}")
|
|
87
|
+
return "gcp"
|
|
88
|
+
elif ".cloud.databricks.com" in host_lower or "databricks.com" in host_lower:
|
|
89
|
+
# AWS uses *.cloud.databricks.com or regional patterns
|
|
90
|
+
logger.debug(f"Detected AWS cloud from workspace URL: {host}")
|
|
91
|
+
return "aws"
|
|
92
|
+
else:
|
|
93
|
+
logger.warning(f"Could not determine cloud provider from URL: {host}")
|
|
94
|
+
return None
|
|
95
|
+
|
|
96
|
+
except Exception as e:
|
|
97
|
+
logger.warning(f"Could not detect cloud provider: {e}")
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
|
|
50
101
|
env_path: str = find_dotenv()
|
|
51
102
|
if env_path:
|
|
52
103
|
logger.info(f"Loading environment variables from: {env_path}")
|
|
@@ -220,6 +271,13 @@ Examples:
|
|
|
220
271
|
"-t",
|
|
221
272
|
"--target",
|
|
222
273
|
type=str,
|
|
274
|
+
help="Bundle target name (default: auto-generated from app name and cloud)",
|
|
275
|
+
)
|
|
276
|
+
bundle_parser.add_argument(
|
|
277
|
+
"--cloud",
|
|
278
|
+
type=str,
|
|
279
|
+
choices=["azure", "aws", "gcp"],
|
|
280
|
+
help="Cloud provider (auto-detected from workspace URL if not specified)",
|
|
223
281
|
)
|
|
224
282
|
bundle_parser.add_argument(
|
|
225
283
|
"--dry-run",
|
|
@@ -676,7 +734,7 @@ def generate_bundle_from_template(config_path: Path, app_name: str) -> Path:
|
|
|
676
734
|
4. Returns the path to the generated file
|
|
677
735
|
|
|
678
736
|
The generated databricks.yaml is overwritten on each deployment and is not tracked in git.
|
|
679
|
-
|
|
737
|
+
The template contains cloud-specific targets (azure, aws, gcp) with appropriate node types.
|
|
680
738
|
|
|
681
739
|
Args:
|
|
682
740
|
config_path: Path to the app config file
|
|
@@ -713,15 +771,17 @@ def run_databricks_command(
|
|
|
713
771
|
profile: Optional[str] = None,
|
|
714
772
|
config: Optional[str] = None,
|
|
715
773
|
target: Optional[str] = None,
|
|
774
|
+
cloud: Optional[str] = None,
|
|
716
775
|
dry_run: bool = False,
|
|
717
776
|
) -> None:
|
|
718
|
-
"""Execute a databricks CLI command with optional profile and
|
|
777
|
+
"""Execute a databricks CLI command with optional profile, target, and cloud.
|
|
719
778
|
|
|
720
779
|
Args:
|
|
721
780
|
command: The databricks CLI command to execute (e.g., ["bundle", "deploy"])
|
|
722
781
|
profile: Optional Databricks CLI profile name
|
|
723
782
|
config: Optional path to the configuration file
|
|
724
|
-
target: Optional bundle target name
|
|
783
|
+
target: Optional bundle target name (if not provided, auto-generated from app name and cloud)
|
|
784
|
+
cloud: Optional cloud provider ('azure', 'aws', 'gcp'). Auto-detected if not specified.
|
|
725
785
|
dry_run: If True, print the command without executing
|
|
726
786
|
"""
|
|
727
787
|
config_path = Path(config) if config else None
|
|
@@ -730,22 +790,30 @@ def run_databricks_command(
|
|
|
730
790
|
logger.error(f"Configuration file {config_path} does not exist.")
|
|
731
791
|
sys.exit(1)
|
|
732
792
|
|
|
733
|
-
# Load app config
|
|
793
|
+
# Load app config
|
|
734
794
|
app_config: AppConfig = AppConfig.from_file(config_path) if config_path else None
|
|
735
795
|
normalized_name: str = normalize_name(app_config.app.name) if app_config else None
|
|
736
796
|
|
|
797
|
+
# Auto-detect cloud provider if not specified
|
|
798
|
+
if not cloud:
|
|
799
|
+
cloud = detect_cloud_provider(profile)
|
|
800
|
+
if cloud:
|
|
801
|
+
logger.info(f"Auto-detected cloud provider: {cloud}")
|
|
802
|
+
else:
|
|
803
|
+
logger.warning("Could not detect cloud provider. Defaulting to 'azure'.")
|
|
804
|
+
cloud = "azure"
|
|
805
|
+
|
|
737
806
|
# Generate app-specific bundle from template (overwrites databricks.yaml temporarily)
|
|
738
807
|
if config_path and app_config:
|
|
739
808
|
generate_bundle_from_template(config_path, normalized_name)
|
|
740
809
|
|
|
741
|
-
# Use
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
target
|
|
745
|
-
logger.debug(f"Using app-specific target: {target}")
|
|
810
|
+
# Use cloud as target (azure, aws, gcp) - can be overridden with explicit --target
|
|
811
|
+
if not target:
|
|
812
|
+
target = cloud
|
|
813
|
+
logger.debug(f"Using cloud-based target: {target}")
|
|
746
814
|
|
|
747
|
-
# Build databricks command
|
|
748
|
-
#
|
|
815
|
+
# Build databricks command
|
|
816
|
+
# --profile is a global flag, --target is a subcommand flag for 'bundle'
|
|
749
817
|
cmd = ["databricks"]
|
|
750
818
|
if profile:
|
|
751
819
|
cmd.extend(["--profile", profile])
|
|
@@ -810,30 +878,38 @@ def handle_bundle_command(options: Namespace) -> None:
|
|
|
810
878
|
profile: Optional[str] = options.profile
|
|
811
879
|
config: Optional[str] = options.config
|
|
812
880
|
target: Optional[str] = options.target
|
|
881
|
+
cloud: Optional[str] = options.cloud
|
|
813
882
|
dry_run: bool = options.dry_run
|
|
814
883
|
|
|
815
884
|
if options.deploy:
|
|
816
885
|
logger.info("Deploying DAO AI asset bundle...")
|
|
817
886
|
run_databricks_command(
|
|
818
|
-
["bundle", "deploy"],
|
|
887
|
+
["bundle", "deploy"],
|
|
888
|
+
profile=profile,
|
|
889
|
+
config=config,
|
|
890
|
+
target=target,
|
|
891
|
+
cloud=cloud,
|
|
892
|
+
dry_run=dry_run,
|
|
819
893
|
)
|
|
820
894
|
if options.run:
|
|
821
895
|
logger.info("Running DAO AI system with current configuration...")
|
|
822
896
|
# Use static job resource key that matches databricks.yaml (resources.jobs.deploy_job)
|
|
823
897
|
run_databricks_command(
|
|
824
898
|
["bundle", "run", "deploy_job"],
|
|
825
|
-
profile,
|
|
826
|
-
config,
|
|
827
|
-
target,
|
|
899
|
+
profile=profile,
|
|
900
|
+
config=config,
|
|
901
|
+
target=target,
|
|
902
|
+
cloud=cloud,
|
|
828
903
|
dry_run=dry_run,
|
|
829
904
|
)
|
|
830
905
|
if options.destroy:
|
|
831
906
|
logger.info("Destroying DAO AI system with current configuration...")
|
|
832
907
|
run_databricks_command(
|
|
833
908
|
["bundle", "destroy", "--auto-approve"],
|
|
834
|
-
profile,
|
|
835
|
-
config,
|
|
836
|
-
target,
|
|
909
|
+
profile=profile,
|
|
910
|
+
config=config,
|
|
911
|
+
target=target,
|
|
912
|
+
cloud=cloud,
|
|
837
913
|
dry_run=dry_run,
|
|
838
914
|
)
|
|
839
915
|
else:
|