unique_web_search 2026.34.0.dev5__tar.gz → 2026.34.0.dev6__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 (126) hide show
  1. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/PKG-INFO +2 -2
  2. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/pyproject.toml +2 -2
  3. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/schema.py +6 -0
  4. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/service.py +1 -0
  5. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/query_elicitation.py +15 -4
  6. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/README.md +0 -0
  7. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/__init__.py +0 -0
  8. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/client_settings.py +0 -0
  9. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/config.py +0 -0
  10. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/invocation_stats.py +0 -0
  11. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/metrics.py +0 -0
  12. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/prompts.py +0 -0
  13. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/_registry.py +0 -0
  14. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/__init__.py +0 -0
  15. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/config.py +0 -0
  16. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/exceptions.py +0 -0
  17. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/__init__.py +0 -0
  18. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/guidelines.j2 +0 -0
  19. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/guidelines_with_keywords.j2 +0 -0
  20. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/rejection_response.j2 +0 -0
  21. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/system_prompt.j2 +0 -0
  22. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/user_prompt.j2 +0 -0
  23. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/service.py +0 -0
  24. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/client/proxy_config.py +0 -0
  25. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/__init__.py +0 -0
  26. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/cleaning/__init__.py +0 -0
  27. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/cleaning/character_sanitize.py +0 -0
  28. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/cleaning/clean.py +0 -0
  29. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/cleaning/config.py +0 -0
  30. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/config.py +0 -0
  31. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/base.py +0 -0
  32. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/config.py +0 -0
  33. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/llm_guard_judge.py +0 -0
  34. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/llm_keyword_redact.py +0 -0
  35. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/llm_process.py +0 -0
  36. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/__init__.py +0 -0
  37. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/judge_and_sanitize_prompt.j2 +0 -0
  38. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/judge_prompt.j2 +0 -0
  39. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/keyword_extract_prompt.j2 +0 -0
  40. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/page_context.j2 +0 -0
  41. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/sanitize_rules.j2 +0 -0
  42. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/system_prompt.j2 +0 -0
  43. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/user_prompt.j2 +0 -0
  44. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/schema.py +0 -0
  45. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/settings.py +0 -0
  46. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/truncate.py +0 -0
  47. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/service.py +0 -0
  48. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/README.md +0 -0
  49. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/__init__.py +0 -0
  50. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/base.py +0 -0
  51. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/basic.py +0 -0
  52. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/firecrawl.py +0 -0
  53. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/jina.py +0 -0
  54. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/registry.py +0 -0
  55. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/tavily.py +0 -0
  56. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/url_safety/__init__.py +0 -0
  57. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/utils.py +0 -0
  58. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/README.md +0 -0
  59. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/__init__.py +0 -0
  60. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/base_config.py +0 -0
  61. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/base_executor.py +0 -0
  62. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/context.py +0 -0
  63. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/modes.py +0 -0
  64. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/__init__.py +0 -0
  65. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/config.py +0 -0
  66. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/executor.py +0 -0
  67. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/prompts/__init__.py +0 -0
  68. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/prompts/refine_query_system_prompt.j2 +0 -0
  69. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/prompts/tool_description.j2 +0 -0
  70. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/prompts/tool_description_for_system_prompt.j2 +0 -0
  71. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/schema.py +0 -0
  72. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/strategy.py +0 -0
  73. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/__init__.py +0 -0
  74. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/config.py +0 -0
  75. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/executor.py +0 -0
  76. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/prompts/__init__.py +0 -0
  77. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/prompts/step_query_description.j2 +0 -0
  78. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/prompts/tool_description.j2 +0 -0
  79. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/prompts/tool_description_for_system_prompt.j2 +0 -0
  80. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/schema.py +0 -0
  81. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/strategy.py +0 -0
  82. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/__init__.py +0 -0
  83. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/config.py +0 -0
  84. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/executor.py +0 -0
  85. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/prompts/__init__.py +0 -0
  86. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/prompts/tool_description.j2 +0 -0
  87. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/prompts/tool_description_for_system_prompt.j2 +0 -0
  88. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/schema.py +0 -0
  89. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/strategy.py +0 -0
  90. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/helpers.py +0 -0
  91. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/message_log.py +0 -0
  92. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/proxy/__init__.py +0 -0
  93. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/proxy/bridge.py +0 -0
  94. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/proxy/mappers.py +0 -0
  95. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/README.md +0 -0
  96. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/__init__.py +0 -0
  97. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/base.py +0 -0
  98. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/bing.py +0 -0
  99. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/brave.py +0 -0
  100. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/custom_api.py +0 -0
  101. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/google.py +0 -0
  102. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/perplexity.py +0 -0
  103. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/registry.py +0 -0
  104. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/schema.py +0 -0
  105. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/google/schema.py +0 -0
  106. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/__init__.py +0 -0
  107. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/bing/__init__.py +0 -0
  108. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/bing/client.py +0 -0
  109. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/bing/models.py +0 -0
  110. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/bing/runner.py +0 -0
  111. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/models.py +0 -0
  112. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/response_parsing.py +0 -0
  113. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/__init__.py +0 -0
  114. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/client.py +0 -0
  115. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/exceptions.py +0 -0
  116. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/gemini.py +0 -0
  117. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/response_handler.py +0 -0
  118. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/vertexai.py +0 -0
  119. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/snippet_judge/__init__.py +0 -0
  120. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/snippet_judge/prompts.py +0 -0
  121. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/snippet_judge/schema.py +0 -0
  122. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/snippet_judge/service.py +0 -0
  123. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/structured_llm.py +0 -0
  124. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/settings.py +0 -0
  125. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/skills/web-search-v3.md +0 -0
  126. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-web-search
3
- Version: 2026.34.0.dev5
3
+ Version: 2026.34.0.dev6
4
4
  Summary:
5
5
  Author: Andreas Hauri, Gustav Hartz, Rami Azouz
6
6
  Author-email: Andreas Hauri <andreas@unique.ch>, Gustav Hartz <gustav.hartz.ext@unique.ch>, Rami Azouz <rami.ext@unique.ch>
@@ -16,7 +16,7 @@ Requires-Dist: tavily-python>=0.7.11,<1
16
16
  Requires-Dist: unidecode>=1.4.0,<2
17
17
  Requires-Dist: azure-ai-projects>=2.3,<3
18
18
  Requires-Dist: azure-identity>=1.25.0,<2
19
- Requires-Dist: unique-toolkit[monitoring]>=2026.34.0.dev6,<2026.34.0rc0
19
+ Requires-Dist: unique-toolkit[monitoring]>=2026.34.0.dev16,<2026.34.0rc0
20
20
  Requires-Dist: azure-core>=1.36.0,<2
21
21
  Requires-Dist: google-cloud-aiplatform>=1.128.0,<2
22
22
  Requires-Dist: google-auth>=2.43.0,<3
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_web_search"
3
- version = "2026.34.0.dev5"
3
+ version = "2026.34.0.dev6"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<4.0"
@@ -22,7 +22,7 @@ dependencies = [
22
22
  "unidecode>=1.4.0,<2",
23
23
  "azure-ai-projects>=2.3,<3",
24
24
  "azure-identity>=1.25.0,<2",
25
- "unique-toolkit[monitoring]>=2026.34.0.dev6,<2026.34.0rc0",
25
+ "unique-toolkit[monitoring]>=2026.34.0.dev16,<2026.34.0rc0",
26
26
  "azure-core>=1.36.0,<2",
27
27
  "google-cloud-aiplatform>=1.128.0,<2",
28
28
  "google-auth>=2.43.0,<3",
@@ -53,6 +53,12 @@ class WebSearchDebugInfo(BaseModel):
53
53
  web_page_chunks: list[WebPageChunk] = []
54
54
  execution_time: float | None = None
55
55
  num_chunks_in_final_prompts: int = 0
56
+ elicitation_approval: bool | None = Field(
57
+ default=None, exclude_if=lambda value: value is None
58
+ )
59
+ elicitation_prompt_change: bool | None = Field(
60
+ default=None, exclude_if=lambda value: value is None
61
+ )
56
62
 
57
63
  def model_dump(self, *, with_debug_details: bool = True, **kwargs):
58
64
  """
@@ -281,6 +281,7 @@ class WebSearchTool(Tool[WebSearchConfig]):
281
281
  chat_service=self._chat_service,
282
282
  display_name=self.display_name(),
283
283
  config=self.config.query_elicitation_config,
284
+ debug_info=debug_info,
284
285
  )
285
286
 
286
287
  services = ExecutorServiceContext(
@@ -20,6 +20,8 @@ from unique_toolkit.elicitation import (
20
20
  ElicitationStatus,
21
21
  )
22
22
 
23
+ from unique_web_search.schema import WebSearchDebugInfo
24
+
23
25
  _LOGGER = logging.getLogger(__name__)
24
26
 
25
27
 
@@ -92,17 +94,20 @@ class QueryElicitationService:
92
94
  chat_service: ChatService,
93
95
  display_name: str,
94
96
  config: QueryElicitationConfig,
97
+ debug_info: WebSearchDebugInfo,
95
98
  ):
96
99
  """Initialize the query elicitation service.
97
100
 
98
101
  Args:
99
102
  chat_service: Service for interacting with chat/elicitation APIs
100
103
  display_name: Display name for the tool in elicitation UI
101
- timeout_seconds: Timeout in seconds for waiting for user approval
104
+ config: Elicitation configuration
105
+ debug_info: Web search debug information updated with the outcome
102
106
  """
103
107
  self._chat_service = chat_service
104
108
  self._display_name = display_name
105
109
  self._config = config
110
+ self._debug_info = debug_info
106
111
 
107
112
  async def __call__(self, queries: list[str]) -> list[str]:
108
113
  if not self._config.enable_elicitation:
@@ -118,6 +123,8 @@ class QueryElicitationService:
118
123
  json_schema=model.model_json_schema(),
119
124
  expires_in_seconds=self._config.timeout_seconds,
120
125
  )
126
+ self._debug_info.elicitation_approval = False
127
+ self._debug_info.elicitation_prompt_change = False
121
128
  _LOGGER.info(
122
129
  f"Elicitation created: {elicitation.id}. Waiting for user response for {self._config.timeout_seconds} seconds..."
123
130
  )
@@ -129,11 +136,15 @@ class QueryElicitationService:
129
136
  )
130
137
  if elicitation.status == ElicitationStatus.ACCEPTED:
131
138
  _LOGGER.info(f"Query elicitation {elicitation.id} accepted")
132
- queries = QueryElicitationModel.model_validate(
139
+ self._debug_info.elicitation_approval = True
140
+ submitted_queries = QueryElicitationModel.model_validate(
133
141
  elicitation.response_content
134
142
  ).queries
143
+ self._debug_info.elicitation_prompt_change = (
144
+ submitted_queries != queries
145
+ )
135
146
 
136
- if len(queries) == 0:
147
+ if len(submitted_queries) == 0:
137
148
  raise ElicitationFailedException(
138
149
  context="The user approved the web search request but removed all search queries from the form, resulting in zero queries to execute.",
139
150
  instruction="The web search tool did not execute because no search queries were provided. "
@@ -144,7 +155,7 @@ class QueryElicitationService:
144
155
  "Ask if they would like to retry the search with specific queries, or if they can describe what information they're looking for so you can help formulate appropriate search queries for the next approval.",
145
156
  )
146
157
 
147
- return queries
158
+ return submitted_queries
148
159
 
149
160
  elif elicitation.status == ElicitationStatus.DECLINED:
150
161
  _LOGGER.info(f"Query elicitation {elicitation.id} declined")