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.
Files changed (339) hide show
  1. {dao_ai-0.1.19 → dao_ai-0.1.20}/PKG-INFO +1 -1
  2. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/README.md +2 -2
  3. dao_ai-0.1.20/config/examples/04_genie/cache_threshold_optimization.yaml +180 -0
  4. dao_ai-0.1.20/docs/genie_context_aware_cache_prompt_history.md +937 -0
  5. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/key-capabilities.md +3 -3
  6. dao_ai-0.1.20/notebooks/11_optimize_cache_thresholds.py +380 -0
  7. {dao_ai-0.1.19 → dao_ai-0.1.20}/pyproject.toml +1 -1
  8. {dao_ai-0.1.19 → dao_ai-0.1.20}/requirements.txt +0 -1
  9. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/cli.py +37 -7
  10. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/config.py +177 -3
  11. dao_ai-0.1.20/src/dao_ai/genie/__init__.py +86 -0
  12. dao_ai-0.1.20/src/dao_ai/genie/cache/__init__.py +70 -0
  13. dao_ai-0.1.20/src/dao_ai/genie/cache/base.py +213 -0
  14. dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/__init__.py +31 -0
  15. dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/base.py +1151 -0
  16. dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/in_memory.py +609 -0
  17. dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/persistent.py +802 -0
  18. dao_ai-0.1.20/src/dao_ai/genie/cache/context_aware/postgres.py +1166 -0
  19. dao_ai-0.1.20/src/dao_ai/genie/cache/lru.py +529 -0
  20. dao_ai-0.1.20/src/dao_ai/genie/cache/optimization.py +890 -0
  21. dao_ai-0.1.20/src/dao_ai/genie/core.py +259 -0
  22. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/nodes.py +4 -4
  23. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/__init__.py +2 -2
  24. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/genie.py +10 -10
  25. dao_ai-0.1.20/tests/dao_ai/genie/cleanup_test_tables.py +185 -0
  26. dao_ai-0.1.20/tests/dao_ai/genie/test_cache_optimization.py +439 -0
  27. dao_ai-0.1.20/tests/dao_ai/genie/test_from_space_integration.py +251 -0
  28. dao_ai-0.1.20/tests/dao_ai/genie/test_prompt_history.py +1026 -0
  29. dao_ai-0.1.20/tests/dao_ai/test_cache_fallback.py +330 -0
  30. 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
  31. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_genie.py +293 -102
  32. dao_ai-0.1.20/tests/dao_ai/test_genie_feedback.py +836 -0
  33. 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
  34. dao_ai-0.1.19/src/dao_ai/genie/__init__.py +0 -38
  35. dao_ai-0.1.19/src/dao_ai/genie/cache/__init__.py +0 -45
  36. dao_ai-0.1.19/src/dao_ai/genie/cache/base.py +0 -72
  37. dao_ai-0.1.19/src/dao_ai/genie/cache/in_memory_semantic.py +0 -871
  38. dao_ai-0.1.19/src/dao_ai/genie/cache/lru.py +0 -351
  39. dao_ai-0.1.19/src/dao_ai/genie/cache/semantic.py +0 -1004
  40. dao_ai-0.1.19/src/dao_ai/genie/core.py +0 -35
  41. {dao_ai-0.1.19 → dao_ai-0.1.20}/.gitignore +0 -0
  42. {dao_ai-0.1.19 → dao_ai-0.1.20}/.python-version +0 -0
  43. {dao_ai-0.1.19 → dao_ai-0.1.20}/CHANGELOG.md +0 -0
  44. {dao_ai-0.1.19 → dao_ai-0.1.20}/CONTRIBUTING.md +0 -0
  45. {dao_ai-0.1.19 → dao_ai-0.1.20}/CONTRIBUTORS.md +0 -0
  46. {dao_ai-0.1.19 → dao_ai-0.1.20}/LICENSE +0 -0
  47. {dao_ai-0.1.19 → dao_ai-0.1.20}/Makefile +0 -0
  48. {dao_ai-0.1.19 → dao_ai-0.1.20}/README.md +0 -0
  49. {dao_ai-0.1.19 → dao_ai-0.1.20}/app.yaml +0 -0
  50. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/01_getting_started/README.md +0 -0
  51. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/01_getting_started/minimal.yaml +0 -0
  52. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/README.md +0 -0
  53. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/custom_mcp.yaml +0 -0
  54. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/external_mcp.yaml +0 -0
  55. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/filtered_mcp.yaml +0 -0
  56. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/managed_mcp.yaml +0 -0
  57. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/02_mcp/slack_integration.yaml +0 -0
  58. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/03_reranking/README.md +0 -0
  59. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/03_reranking/instruction_aware_reranking.yaml +0 -0
  60. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/03_reranking/vector_search_with_reranking.yaml +0 -0
  61. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_basic.yaml +0 -0
  62. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_in_memory_semantic_cache.yaml +0 -0
  63. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_lru_cache.yaml +0 -0
  64. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_semantic_cache.yaml +0 -0
  65. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/04_genie/genie_with_conversation_id.yaml +0 -0
  66. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/README.md +0 -0
  67. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/conversation_summarization.yaml +0 -0
  68. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/in_memory_basic.yaml +0 -0
  69. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/lakebase_persistence.yaml +0 -0
  70. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/05_memory/postgres_persistence.yaml +0 -0
  71. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/06_on_behalf_of_user/README.md +0 -0
  72. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/06_on_behalf_of_user/obo_basic.yaml +0 -0
  73. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/07_human_in_the_loop/README.md +0 -0
  74. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/07_human_in_the_loop/human_in_the_loop.yaml +0 -0
  75. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/08_guardrails/README.md +0 -0
  76. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/08_guardrails/guardrails_basic.yaml +0 -0
  77. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/09_structured_output/README.md +0 -0
  78. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/09_structured_output/structured_output.yaml +0 -0
  79. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/10_agent_integrations/README.md +0 -0
  80. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/10_agent_integrations/agent_bricks.yaml +0 -0
  81. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/10_agent_integrations/kasal.yaml +0 -0
  82. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/11_prompt_engineering/README.md +0 -0
  83. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/11_prompt_engineering/prompt_optimization.yaml +0 -0
  84. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/11_prompt_engineering/prompt_registry.yaml +0 -0
  85. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/README.md +0 -0
  86. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/combined_middleware.yaml +0 -0
  87. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/context_management.yaml +0 -0
  88. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/custom_field_validation.yaml +0 -0
  89. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/limit_middleware.yaml +0 -0
  90. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/logging_middleware.yaml +0 -0
  91. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/pii_middleware.yaml +0 -0
  92. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/retry_middleware.yaml +0 -0
  93. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/12_middleware/tool_selector_middleware.yaml +0 -0
  94. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/13_orchestration/README.md +0 -0
  95. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/13_orchestration/supervisor_pattern.yaml +0 -0
  96. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/13_orchestration/swarm_pattern.yaml +0 -0
  97. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/14_basic_tools/README.md +0 -0
  98. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/14_basic_tools/sql_tool_example.yaml +0 -0
  99. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/README.md +0 -0
  100. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/brick_store.yaml +0 -0
  101. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/deep_research.yaml +0 -0
  102. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/executive_assistant.yaml +0 -0
  103. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/genie_and_genie_mcp.yaml +0 -0
  104. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/genie_vector_search_hybrid.yaml +0 -0
  105. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/hardware_store.yaml +0 -0
  106. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/hardware_store_instructed.yaml +0 -0
  107. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/hardware_store_lakebase.yaml +0 -0
  108. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/hardware_store_swarm.yaml +0 -0
  109. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/quick_serve_restaurant.yaml +0 -0
  110. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/15_complete_applications/reservations_system.yaml +0 -0
  111. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/16_instructed_retriever/README.md +0 -0
  112. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/16_instructed_retriever/full_pipeline.yaml +0 -0
  113. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/16_instructed_retriever/instructed_retriever.yaml +0 -0
  114. {dao_ai-0.1.19 → dao_ai-0.1.20}/config/examples/README.md +0 -0
  115. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/appointments.sql +0 -0
  116. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/appointments_data.sql +0 -0
  117. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/brand_rep_demo_data.sql +0 -0
  118. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/brand_rep_demo_queries.sql +0 -0
  119. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/brand_rep_demo_tables.sql +0 -0
  120. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/brand_rep_demo_validation.sql +0 -0
  121. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/customers.sql +0 -0
  122. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/customers_data.sql +0 -0
  123. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/dim_stores.sql +0 -0
  124. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/dim_stores_data.sql +0 -0
  125. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/employee_performance.sql +0 -0
  126. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/employee_performance_data.sql +0 -0
  127. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/employee_tasks.sql +0 -0
  128. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/employee_tasks_data.sql +0 -0
  129. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/inventory.sql +0 -0
  130. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/inventory_data.sql +0 -0
  131. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/managers.sql +0 -0
  132. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/managers_data.sql +0 -0
  133. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/product_data.sql +0 -0
  134. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/products.sql +0 -0
  135. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/dais2025/task_assignments.sql +0 -0
  136. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/hardware_store/inventory.snappy.parquet +0 -0
  137. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/hardware_store/inventory.sql +0 -0
  138. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/hardware_store/products.snappy.parquet +0 -0
  139. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/hardware_store/products.sql +0 -0
  140. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/.gitkeep +0 -0
  141. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/fulfil_item_orders.sql +0 -0
  142. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/items_description.csv +0 -0
  143. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/items_description.sql +0 -0
  144. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/items_raw.csv +0 -0
  145. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/items_raw.sql +0 -0
  146. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/orders_raw.csv +0 -0
  147. {dao_ai-0.1.19 → dao_ai-0.1.20}/data/quick_serve_restaurant/orders_raw.sql +0 -0
  148. {dao_ai-0.1.19 → dao_ai-0.1.20}/databricks.yaml.template +0 -0
  149. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/architecture.md +0 -0
  150. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/cli-reference.md +0 -0
  151. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/configuration-reference.md +0 -0
  152. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/contributing.md +0 -0
  153. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/examples.md +0 -0
  154. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/faq.md +0 -0
  155. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/hardware_store/README.md +0 -0
  156. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/hardware_store/retail_supervisor.png +0 -0
  157. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/hardware_store/retail_swarm.png +0 -0
  158. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/images/genie.png +0 -0
  159. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/python-api.md +0 -0
  160. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/quick_serve_restaurant/.gitkeep +0 -0
  161. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/quick_serve_restaurant/quick-serve-restaurant.png +0 -0
  162. {dao_ai-0.1.19 → dao_ai-0.1.20}/docs/why-dao.md +0 -0
  163. {dao_ai-0.1.19 → dao_ai-0.1.20}/environment.yaml +0 -0
  164. {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/dais2025/examples.yaml +0 -0
  165. {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/deep_research/examples.yaml +0 -0
  166. {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/executive_assistant/examples.yaml +0 -0
  167. {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/hardware_store/examples.yaml +0 -0
  168. {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/quick_serve_restaurant/.gitkeep +0 -0
  169. {dao_ai-0.1.19 → dao_ai-0.1.20}/examples/quick_serve_restaurant/examples.yaml +0 -0
  170. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/extract_store_numbers.sql +0 -0
  171. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_inventory_by_sku.sql +0 -0
  172. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_inventory_by_upc.sql +0 -0
  173. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_product_by_sku.sql +0 -0
  174. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_product_by_upc.sql +0 -0
  175. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_store_by_number.sql +0 -0
  176. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_store_inventory_by_sku.sql +0 -0
  177. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/dais2025/find_store_inventory_by_upc.sql +0 -0
  178. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_inventory_by_sku.sql +0 -0
  179. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_inventory_by_upc.sql +0 -0
  180. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_product_by_sku.sql +0 -0
  181. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_product_by_upc.sql +0 -0
  182. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_store_inventory_by_sku.sql +0 -0
  183. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/hardware_store/find_store_inventory_by_upc.sql +0 -0
  184. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/.gitkeep +0 -0
  185. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/insert_coffee_order.sql +0 -0
  186. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/lookup_items_by_descriptions.sql +0 -0
  187. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/match_historical_item_order_by_date.sql +0 -0
  188. {dao_ai-0.1.19 → dao_ai-0.1.20}/functions/quick_serve_restaurant/match_item_by_description_and_price.sql +0 -0
  189. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/01_ingest_and_transform.py +0 -0
  190. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/02_provision_vector_search.py +0 -0
  191. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/03_provision_lakebase.py +0 -0
  192. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/04_unity_catalog_tools.py +0 -0
  193. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/05_deploy_agent.py +0 -0
  194. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/06_generate_evaluation_data.py +0 -0
  195. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/07_run_evaluation.py +0 -0
  196. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/08_run_examples.py +0 -0
  197. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/09_evaluate_inferences.py +0 -0
  198. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/10_optimize_prompts.py +0 -0
  199. {dao_ai-0.1.19 → dao_ai-0.1.20}/notebooks/99_scratchpad.py +0 -0
  200. {dao_ai-0.1.19 → dao_ai-0.1.20}/schemas/bundle_config_schema.json +0 -0
  201. {dao_ai-0.1.19 → dao_ai-0.1.20}/schemas/model_config_schema.json +0 -0
  202. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/__init__.py +0 -0
  203. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/__init__.py +0 -0
  204. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/handlers.py +0 -0
  205. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/model_serving.py +0 -0
  206. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/resources.py +0 -0
  207. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/apps/server.py +0 -0
  208. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/catalog.py +0 -0
  209. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/evaluation.py +0 -0
  210. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/genie/cache/core.py +0 -0
  211. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/graph.py +0 -0
  212. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/hooks/__init__.py +0 -0
  213. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/hooks/core.py +0 -0
  214. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/logging.py +0 -0
  215. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/__init__.py +0 -0
  216. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/base.py +0 -0
  217. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/core.py +0 -0
  218. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/databricks.py +0 -0
  219. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/memory/postgres.py +0 -0
  220. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/messages.py +0 -0
  221. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/__init__.py +0 -0
  222. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/assertions.py +0 -0
  223. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/base.py +0 -0
  224. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/context_editing.py +0 -0
  225. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/core.py +0 -0
  226. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/guardrails.py +0 -0
  227. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/human_in_the_loop.py +0 -0
  228. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/message_validation.py +0 -0
  229. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/model_call_limit.py +0 -0
  230. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/model_retry.py +0 -0
  231. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/pii.py +0 -0
  232. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/summarization.py +0 -0
  233. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/tool_call_limit.py +0 -0
  234. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/tool_retry.py +0 -0
  235. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/middleware/tool_selector.py +0 -0
  236. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/models.py +0 -0
  237. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/optimization.py +0 -0
  238. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/orchestration/__init__.py +0 -0
  239. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/orchestration/core.py +0 -0
  240. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/orchestration/supervisor.py +0 -0
  241. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/orchestration/swarm.py +0 -0
  242. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/__init__.py +0 -0
  243. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/instructed_retriever_decomposition.yaml +0 -0
  244. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/instruction_reranker.yaml +0 -0
  245. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/router.yaml +0 -0
  246. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/prompts/verifier.yaml +0 -0
  247. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/providers/__init__.py +0 -0
  248. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/providers/base.py +0 -0
  249. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/providers/databricks.py +0 -0
  250. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/state.py +0 -0
  251. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/agent.py +0 -0
  252. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/core.py +0 -0
  253. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/email.py +0 -0
  254. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/instructed_retriever.py +0 -0
  255. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/instruction_reranker.py +0 -0
  256. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/mcp.py +0 -0
  257. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/memory.py +0 -0
  258. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/python.py +0 -0
  259. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/router.py +0 -0
  260. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/search.py +0 -0
  261. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/slack.py +0 -0
  262. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/sql.py +0 -0
  263. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/time.py +0 -0
  264. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/unity_catalog.py +0 -0
  265. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/vector_search.py +0 -0
  266. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/tools/verifier.py +0 -0
  267. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/types.py +0 -0
  268. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/utils.py +0 -0
  269. {dao_ai-0.1.19 → dao_ai-0.1.20}/src/dao_ai/vector_search.py +0 -0
  270. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/config/test_model_config.yaml +0 -0
  271. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/conftest.py +0 -0
  272. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_context_editing.py +0 -0
  273. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_model_call_limit.py +0 -0
  274. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_model_retry.py +0 -0
  275. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_pii.py +0 -0
  276. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_tool_call_limit.py +0 -0
  277. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_tool_retry.py +0 -0
  278. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/middleware/test_tool_selector.py +0 -0
  279. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_agent_response_format.py +0 -0
  280. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_assertions_middleware.py +0 -0
  281. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_catalog.py +0 -0
  282. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_chat_history.py +0 -0
  283. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_config.py +0 -0
  284. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_databricks.py +0 -0
  285. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_evaluation.py +0 -0
  286. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_function_parsing.py +0 -0
  287. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_genie_conversation_ids_in_outputs.py +0 -0
  288. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_genie_databricks_integration.py +0 -0
  289. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_genie_room_model.py +0 -0
  290. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_guardrail_retry.py +0 -0
  291. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_hitl_config_model.py +0 -0
  292. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_hitl_responses_agent.py +0 -0
  293. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_hooks.py +0 -0
  294. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_human_in_the_loop.py +0 -0
  295. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_inference.py +0 -0
  296. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_inference_integration.py +0 -0
  297. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_input_output_structure.py +0 -0
  298. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_instructed_retriever.py +0 -0
  299. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_instruction_reranker.py +0 -0
  300. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_instruction_reranker_integration.py +0 -0
  301. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_interrupt_type.py +0 -0
  302. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_llm_interrupt_handling.py +0 -0
  303. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_mcp.py +0 -0
  304. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_mcp_filtering.py +0 -0
  305. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_mcp_filtering_integration.py +0 -0
  306. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_mcp_function_model.py +0 -0
  307. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_message_validation_middleware.py +0 -0
  308. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_messages.py +0 -0
  309. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_models.py +0 -0
  310. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_optimization.py +0 -0
  311. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_postgres_integration.py +0 -0
  312. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_prompt_optimizations.py +0 -0
  313. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_prompts.py +0 -0
  314. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_reranking.py +0 -0
  315. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_reranking_integration.py +0 -0
  316. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_resources_model_genie_integration.py +0 -0
  317. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_response_format.py +0 -0
  318. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_responses_agent_structured_output_unit.py +0 -0
  319. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_router.py +0 -0
  320. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_sql_tool.py +0 -0
  321. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_sql_tool_integration.py +0 -0
  322. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_state.py +0 -0
  323. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_summarization_inference.py +0 -0
  324. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_swarm_middleware.py +0 -0
  325. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_tools.py +0 -0
  326. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_types.py +0 -0
  327. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_unity_catalog.py +0 -0
  328. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_utils.py +0 -0
  329. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_utils_type_from_fqn.py +0 -0
  330. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_vector_search.py +0 -0
  331. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_verifier.py +0 -0
  332. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/test_warehouse_model.py +0 -0
  333. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/dao_ai/weather_server_mcp.py +0 -0
  334. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/hardware_store/.gitkeep +0 -0
  335. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/hardware_store/test_graph.py +0 -0
  336. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/images/doritos_upc.png +0 -0
  337. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/images/lays_upc.png +0 -0
  338. {dao_ai-0.1.19 → dao_ai-0.1.20}/tests/quick_serve_restaurant/.gitkeep +0 -0
  339. {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.19
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: 3
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: 3
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.