dao-ai 0.1.19__tar.gz → 0.1.20__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.19 → dao_ai-0.1.20}/PKG-INFO +1 -1
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/README.md +2 -2
- dao_ai-0.1.20/config/examples/04_genie/cache_threshold_optimization.yaml +180 -0
- dao_ai-0.1.20/docs/genie_context_aware_cache_prompt_history.md +937 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/key-capabilities.md +3 -3
- dao_ai-0.1.20/notebooks/11_optimize_cache_thresholds.py +380 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/pyproject.toml +1 -1
- {dao_ai-0.1.19 → dao_ai-0.1.20}/requirements.txt +0 -1
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/cli.py +37 -7
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/config.py +177 -3
- dao_ai-0.1.20/src/dao_ai/genie/__init__.py +86 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/__init__.py +70 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/base.py +213 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/__init__.py +31 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/base.py +1151 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/in_memory.py +609 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/persistent.py +802 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/postgres.py +1166 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/lru.py +529 -0
- dao_ai-0.1.20/src/dao_ai/genie/cache/optimization.py +890 -0
- dao_ai-0.1.20/src/dao_ai/genie/core.py +259 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/nodes.py +4 -4
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/__init__.py +2 -2
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/genie.py +10 -10
- dao_ai-0.1.20/tests/dao_ai/genie/cleanup_test_tables.py +185 -0
- dao_ai-0.1.20/tests/dao_ai/genie/test_cache_optimization.py +439 -0
- dao_ai-0.1.20/tests/dao_ai/genie/test_from_space_integration.py +251 -0
- dao_ai-0.1.20/tests/dao_ai/genie/test_prompt_history.py +1026 -0
- dao_ai-0.1.20/tests/dao_ai/test_cache_fallback.py +330 -0
- dao_ai-0.1.19/tests/dao_ai/test_semantic_cache_context.py → dao_ai-0.1.20/tests/dao_ai/test_context_aware_cache.py +50 -25
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_genie.py +293 -102
- dao_ai-0.1.20/tests/dao_ai/test_genie_feedback.py +836 -0
- dao_ai-0.1.19/tests/dao_ai/test_in_memory_semantic_cache.py → dao_ai-0.1.20/tests/dao_ai/test_in_memory_context_aware_cache.py +30 -30
- dao_ai-0.1.19/src/dao_ai/genie/__init__.py +0 -38
- dao_ai-0.1.19/src/dao_ai/genie/cache/__init__.py +0 -45
- dao_ai-0.1.19/src/dao_ai/genie/cache/base.py +0 -72
- dao_ai-0.1.19/src/dao_ai/genie/cache/in_memory_semantic.py +0 -871
- dao_ai-0.1.19/src/dao_ai/genie/cache/lru.py +0 -351
- dao_ai-0.1.19/src/dao_ai/genie/cache/semantic.py +0 -1004
- dao_ai-0.1.19/src/dao_ai/genie/core.py +0 -35
- {dao_ai-0.1.19 → dao_ai-0.1.20}/.gitignore +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/.python-version +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/CHANGELOG.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/CONTRIBUTING.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/CONTRIBUTORS.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/LICENSE +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/Makefile +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/app.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/01_getting_started/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/01_getting_started/minimal.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/custom_mcp.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/external_mcp.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/filtered_mcp.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/managed_mcp.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/slack_integration.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/03_reranking/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/03_reranking/instruction_aware_reranking.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/03_reranking/vector_search_with_reranking.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_basic.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_in_memory_semantic_cache.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_lru_cache.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_semantic_cache.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_with_conversation_id.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/conversation_summarization.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/in_memory_basic.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/lakebase_persistence.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/postgres_persistence.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/06_on_behalf_of_user/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/06_on_behalf_of_user/obo_basic.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/07_human_in_the_loop/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/07_human_in_the_loop/human_in_the_loop.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/08_guardrails/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/08_guardrails/guardrails_basic.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/09_structured_output/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/09_structured_output/structured_output.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/10_agent_integrations/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/10_agent_integrations/agent_bricks.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/10_agent_integrations/kasal.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/11_prompt_engineering/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/11_prompt_engineering/prompt_optimization.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/11_prompt_engineering/prompt_registry.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/combined_middleware.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/context_management.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/custom_field_validation.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/limit_middleware.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/logging_middleware.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/pii_middleware.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/retry_middleware.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/tool_selector_middleware.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/13_orchestration/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/13_orchestration/supervisor_pattern.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/13_orchestration/swarm_pattern.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/14_basic_tools/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/14_basic_tools/sql_tool_example.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/brick_store.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/deep_research.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/executive_assistant.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/genie_and_genie_mcp.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/genie_vector_search_hybrid.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/hardware_store.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/hardware_store_instructed.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/hardware_store_lakebase.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/hardware_store_swarm.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/quick_serve_restaurant.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/reservations_system.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/16_instructed_retriever/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/16_instructed_retriever/full_pipeline.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/16_instructed_retriever/instructed_retriever.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/appointments.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/appointments_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/brand_rep_demo_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/brand_rep_demo_queries.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/brand_rep_demo_tables.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/brand_rep_demo_validation.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/customers.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/customers_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/dim_stores.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/dim_stores_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/employee_performance.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/employee_performance_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/employee_tasks.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/employee_tasks_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/inventory.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/inventory_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/managers.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/managers_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/product_data.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/products.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/task_assignments.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/hardware_store/inventory.snappy.parquet +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/hardware_store/inventory.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/hardware_store/products.snappy.parquet +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/hardware_store/products.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/items_description.csv +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/items_description.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/items_raw.csv +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/items_raw.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/orders_raw.csv +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/orders_raw.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/databricks.yaml.template +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/architecture.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/cli-reference.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/configuration-reference.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/contributing.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/examples.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/faq.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/hardware_store/README.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/hardware_store/retail_supervisor.png +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/hardware_store/retail_swarm.png +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/images/genie.png +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/python-api.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/why-dao.md +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/environment.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/dais2025/examples.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/deep_research/examples.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/executive_assistant/examples.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/hardware_store/examples.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/quick_serve_restaurant/examples.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/extract_store_numbers.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_product_by_sku.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_product_by_upc.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_store_by_number.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_product_by_sku.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_product_by_upc.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/01_ingest_and_transform.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/02_provision_vector_search.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/03_provision_lakebase.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/04_unity_catalog_tools.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/05_deploy_agent.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/06_generate_evaluation_data.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/07_run_evaluation.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/08_run_examples.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/09_evaluate_inferences.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/10_optimize_prompts.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/99_scratchpad.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/schemas/bundle_config_schema.json +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/schemas/model_config_schema.json +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/__init__.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/__init__.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/handlers.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/model_serving.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/resources.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/server.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/catalog.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/evaluation.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/genie/cache/core.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/graph.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/hooks/__init__.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/hooks/core.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/logging.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/__init__.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/base.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/core.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/databricks.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/postgres.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/messages.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/__init__.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/assertions.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/base.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/context_editing.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/core.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/guardrails.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/human_in_the_loop.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/message_validation.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/model_call_limit.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/model_retry.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/pii.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/summarization.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/tool_call_limit.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/tool_retry.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/tool_selector.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/models.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/optimization.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/orchestration/__init__.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/orchestration/core.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/orchestration/supervisor.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/orchestration/swarm.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/__init__.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/instructed_retriever_decomposition.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/instruction_reranker.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/router.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/verifier.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/providers/__init__.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/providers/base.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/providers/databricks.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/state.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/agent.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/core.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/email.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/instructed_retriever.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/instruction_reranker.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/mcp.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/memory.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/python.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/router.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/search.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/slack.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/sql.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/time.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/unity_catalog.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/vector_search.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/verifier.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/types.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/utils.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/vector_search.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/config/test_model_config.yaml +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/conftest.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_context_editing.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_model_call_limit.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_model_retry.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_pii.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_tool_call_limit.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_tool_retry.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_tool_selector.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_agent_response_format.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_assertions_middleware.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_catalog.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_chat_history.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_config.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_databricks.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_evaluation.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_function_parsing.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_genie_databricks_integration.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_genie_room_model.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_guardrail_retry.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_hitl_config_model.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_hitl_responses_agent.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_hooks.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_human_in_the_loop.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_inference.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_inference_integration.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_input_output_structure.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_instructed_retriever.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_instruction_reranker.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_instruction_reranker_integration.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_interrupt_type.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_llm_interrupt_handling.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_mcp.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_mcp_filtering.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_mcp_filtering_integration.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_mcp_function_model.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_message_validation_middleware.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_messages.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_models.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_optimization.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_postgres_integration.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_prompt_optimizations.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_prompts.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_reranking.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_reranking_integration.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_resources_model_genie_integration.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_response_format.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_responses_agent_structured_output_unit.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_router.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_sql_tool.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_sql_tool_integration.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_state.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_summarization_inference.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_swarm_middleware.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_tools.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_types.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_unity_catalog.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_utils.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_utils_type_from_fqn.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_vector_search.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_verifier.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_warehouse_model.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/weather_server_mcp.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/hardware_store/.gitkeep +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/hardware_store/test_graph.py +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/images/doritos_upc.png +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/images/lays_upc.png +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/quick_serve_restaurant/.gitkeep +0 -0
- {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/test_mcp_app_auth.py +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.20
|
|
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
|
|
@@ -115,7 +115,7 @@ genie_tool:
|
|
|
115
115
|
embedding_model: *embedding_model
|
|
116
116
|
similarity_threshold: 0.85
|
|
117
117
|
time_to_live_seconds: 3600
|
|
118
|
-
context_window_size:
|
|
118
|
+
context_window_size: 2 # default
|
|
119
119
|
```
|
|
120
120
|
|
|
121
121
|
### In-Memory Semantic Cache (Single-Instance)
|
|
@@ -141,7 +141,7 @@ genie_tool:
|
|
|
141
141
|
similarity_threshold: 0.85
|
|
142
142
|
time_to_live_seconds: 604800 # 1 week
|
|
143
143
|
capacity: 1000 # LRU eviction when full
|
|
144
|
-
context_window_size:
|
|
144
|
+
context_window_size: 2 # default
|
|
145
145
|
```
|
|
146
146
|
|
|
147
147
|
## Cache Flow
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# yaml-language-server: $schema=../../../schemas/model_config_schema.json
|
|
2
|
+
#
|
|
3
|
+
# Example configuration for Genie semantic cache threshold optimization.
|
|
4
|
+
#
|
|
5
|
+
# This configuration demonstrates how to:
|
|
6
|
+
# 1. Define an evaluation dataset with question pairs
|
|
7
|
+
# 2. Configure threshold optimization parameters
|
|
8
|
+
# 3. Run Optuna Bayesian optimization to find optimal thresholds
|
|
9
|
+
#
|
|
10
|
+
# The optimizer tunes these parameters:
|
|
11
|
+
# - similarity_threshold: Minimum similarity for question matching (0.5-0.99)
|
|
12
|
+
# - context_similarity_threshold: Minimum similarity for context matching (0.5-0.99)
|
|
13
|
+
# - question_weight: Weight for question vs context in combined score (0.1-0.9)
|
|
14
|
+
#
|
|
15
|
+
# Usage:
|
|
16
|
+
# 1. Update the evaluation dataset with your domain-specific question pairs
|
|
17
|
+
# 2. Run the optimization notebook: notebooks/11_optimize_cache_thresholds.py
|
|
18
|
+
# 3. Apply the optimized thresholds to your cache configuration
|
|
19
|
+
|
|
20
|
+
schemas:
|
|
21
|
+
quick_serve_restaurant_schema: &quick_serve_restaurant_schema
|
|
22
|
+
catalog_name: retail_consumer_goods
|
|
23
|
+
schema_name: quick_serve_restaurant
|
|
24
|
+
|
|
25
|
+
resources:
|
|
26
|
+
llms:
|
|
27
|
+
# Judge model for semantic equivalence evaluation
|
|
28
|
+
# Used when expected_match is not provided for an entry
|
|
29
|
+
judge_model: &judge_model
|
|
30
|
+
name: databricks-meta-llama-3-3-70b-instruct
|
|
31
|
+
temperature: 0.0 # Low temperature for consistent judgments
|
|
32
|
+
max_tokens: 10 # Only need "MATCH" or "NO_MATCH"
|
|
33
|
+
|
|
34
|
+
# Embedding model for generating embeddings
|
|
35
|
+
embedding_model: &embedding_model
|
|
36
|
+
name: databricks-gte-large-en
|
|
37
|
+
|
|
38
|
+
warehouses:
|
|
39
|
+
shared_endpoint_warehouse: &shared_endpoint_warehouse
|
|
40
|
+
name: "Shared Endpoint Warehouse"
|
|
41
|
+
warehouse_id: 148ccb90800933a1
|
|
42
|
+
|
|
43
|
+
databases:
|
|
44
|
+
semantic_cache_db: &semantic_cache_db
|
|
45
|
+
name: "Retail and Consumer Goods Database"
|
|
46
|
+
instance_name: "retail-consumer-goods"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# =============================================================================
|
|
50
|
+
# CACHE PARAMETERS (Current Configuration)
|
|
51
|
+
# =============================================================================
|
|
52
|
+
# These are the current threshold values that will be optimized
|
|
53
|
+
|
|
54
|
+
cache_parameters: &cache_parameters
|
|
55
|
+
database: *semantic_cache_db
|
|
56
|
+
warehouse: *shared_endpoint_warehouse
|
|
57
|
+
embedding_model: *embedding_model
|
|
58
|
+
similarity_threshold: 0.85 # Question matching threshold
|
|
59
|
+
context_similarity_threshold: 0.80 # Context matching threshold
|
|
60
|
+
question_weight: 0.6 # Weight for question (context = 1 - question)
|
|
61
|
+
time_to_live_seconds: 86400
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
# =============================================================================
|
|
65
|
+
# EVALUATION DATASET
|
|
66
|
+
# =============================================================================
|
|
67
|
+
# Define pairs of questions to evaluate threshold effectiveness.
|
|
68
|
+
#
|
|
69
|
+
# Each entry contains:
|
|
70
|
+
# - question/context: The incoming query
|
|
71
|
+
# - cached_question/cached_context: The cached entry to compare against
|
|
72
|
+
# - expected_match: Whether these should be considered a cache hit
|
|
73
|
+
# - true: Semantically equivalent (should return cached result)
|
|
74
|
+
# - false: Different questions (should not match)
|
|
75
|
+
# - null/omitted: Use LLM judge to determine
|
|
76
|
+
#
|
|
77
|
+
# Tips for good evaluation data:
|
|
78
|
+
# - Include diverse question types from your domain
|
|
79
|
+
# - Balance positive and negative examples
|
|
80
|
+
# - Include edge cases (similar but different questions)
|
|
81
|
+
# - Use real questions from your production cache if available
|
|
82
|
+
|
|
83
|
+
# Note: Embeddings would normally be pre-computed. For this example,
|
|
84
|
+
# we show the structure - use the notebook to generate real embeddings.
|
|
85
|
+
|
|
86
|
+
threshold_eval_dataset: &threshold_eval_dataset
|
|
87
|
+
name: retail_cache_eval_dataset
|
|
88
|
+
description: "Evaluation dataset for retail domain semantic cache tuning"
|
|
89
|
+
entries: []
|
|
90
|
+
# In practice, populate with real entries like:
|
|
91
|
+
#
|
|
92
|
+
# entries:
|
|
93
|
+
# # Positive pair - paraphrases that should match
|
|
94
|
+
# - question: "What are total sales for Q1?"
|
|
95
|
+
# question_embedding: [0.1, 0.2, ...] # Pre-computed embeddings
|
|
96
|
+
# context: "Previous: Show me revenue breakdown"
|
|
97
|
+
# context_embedding: [0.1, 0.2, ...]
|
|
98
|
+
# cached_question: "Show me Q1 total sales"
|
|
99
|
+
# cached_question_embedding: [0.1, 0.2, ...]
|
|
100
|
+
# cached_context: "Previous: Show me revenue breakdown"
|
|
101
|
+
# cached_context_embedding: [0.1, 0.2, ...]
|
|
102
|
+
# expected_match: true
|
|
103
|
+
#
|
|
104
|
+
# # Negative pair - different questions that should NOT match
|
|
105
|
+
# - question: "What is inventory count by store?"
|
|
106
|
+
# question_embedding: [0.3, 0.1, ...]
|
|
107
|
+
# context: ""
|
|
108
|
+
# context_embedding: [0.0, 0.0, ...]
|
|
109
|
+
# cached_question: "Show revenue by region"
|
|
110
|
+
# cached_question_embedding: [0.5, 0.6, ...]
|
|
111
|
+
# cached_context: ""
|
|
112
|
+
# cached_context_embedding: [0.0, 0.0, ...]
|
|
113
|
+
# expected_match: false
|
|
114
|
+
#
|
|
115
|
+
# # Unlabeled entry - LLM judge will determine
|
|
116
|
+
# - question: "How many items sold last week?"
|
|
117
|
+
# question_embedding: [0.2, 0.3, ...]
|
|
118
|
+
# context: "Previous: Filter by electronics"
|
|
119
|
+
# context_embedding: [0.1, 0.4, ...]
|
|
120
|
+
# cached_question: "Total items sold in past 7 days"
|
|
121
|
+
# cached_question_embedding: [0.2, 0.35, ...]
|
|
122
|
+
# cached_context: "Previous: Filter by electronics"
|
|
123
|
+
# cached_context_embedding: [0.1, 0.4, ...]
|
|
124
|
+
# # expected_match omitted - will use LLM judge
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
# =============================================================================
|
|
128
|
+
# THRESHOLD OPTIMIZATION CONFIGURATION
|
|
129
|
+
# =============================================================================
|
|
130
|
+
# Configure the optimization run parameters.
|
|
131
|
+
|
|
132
|
+
threshold_optimizations:
|
|
133
|
+
|
|
134
|
+
optimize_retail_cache_thresholds:
|
|
135
|
+
name: optimize_retail_cache_thresholds
|
|
136
|
+
cache_parameters: *cache_parameters # Current thresholds to improve
|
|
137
|
+
dataset: *threshold_eval_dataset # Evaluation dataset
|
|
138
|
+
judge_model: *judge_model # LLM for unlabeled entries
|
|
139
|
+
|
|
140
|
+
# Optimization parameters
|
|
141
|
+
n_trials: 50 # Number of Optuna trials (more = better results)
|
|
142
|
+
metric: f1 # Metric to optimize: f1, precision, recall, fbeta
|
|
143
|
+
beta: 1.0 # Beta for fbeta metric (higher = favor recall)
|
|
144
|
+
seed: 42 # Random seed for reproducibility
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
# =============================================================================
|
|
148
|
+
# USAGE INSTRUCTIONS
|
|
149
|
+
# =============================================================================
|
|
150
|
+
#
|
|
151
|
+
# 1. PREPARE EVALUATION DATA:
|
|
152
|
+
# Generate embeddings for your question pairs using the embedding model.
|
|
153
|
+
# You can use the notebook or the generate_eval_dataset_from_cache() function
|
|
154
|
+
# to create a dataset from existing cache entries.
|
|
155
|
+
#
|
|
156
|
+
# 2. RUN OPTIMIZATION:
|
|
157
|
+
# Use the notebook notebooks/11_optimize_cache_thresholds.py with this config,
|
|
158
|
+
# or run programmatically:
|
|
159
|
+
#
|
|
160
|
+
# ```python
|
|
161
|
+
# from dao_ai.config import AppConfig
|
|
162
|
+
#
|
|
163
|
+
# config = AppConfig.from_file("cache_threshold_optimization.yaml")
|
|
164
|
+
# optimization = config.threshold_optimizations["optimize_retail_cache_thresholds"]
|
|
165
|
+
# result = optimization.optimize()
|
|
166
|
+
#
|
|
167
|
+
# print(f"Optimized thresholds: {result.optimized_thresholds}")
|
|
168
|
+
# print(f"Improvement: {result.improvement:.1%}")
|
|
169
|
+
# ```
|
|
170
|
+
#
|
|
171
|
+
# 3. APPLY RESULTS:
|
|
172
|
+
# Update your semantic cache configuration with the optimized values:
|
|
173
|
+
#
|
|
174
|
+
# semantic_cache_parameters:
|
|
175
|
+
# similarity_threshold: <optimized_value>
|
|
176
|
+
# context_similarity_threshold: <optimized_value>
|
|
177
|
+
# question_weight: <optimized_value>
|
|
178
|
+
#
|
|
179
|
+
# 4. MONITOR:
|
|
180
|
+
# Track cache hit rates and accuracy in production to validate improvements.
|