unique_web_search 2026.34.0.dev5__tar.gz → 2026.34.0.dev7__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.dev7}/PKG-INFO +4 -4
  2. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/pyproject.toml +4 -4
  3. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/schema.py +6 -0
  4. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/service.py +1 -0
  5. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/query_elicitation.py +15 -4
  6. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/README.md +0 -0
  7. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/__init__.py +0 -0
  8. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/client_settings.py +0 -0
  9. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/config.py +0 -0
  10. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/invocation_stats.py +0 -0
  11. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/metrics.py +0 -0
  12. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/prompts.py +0 -0
  13. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/_registry.py +0 -0
  14. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/src/unique_web_search/services/crawlers/README.md +0 -0
  49. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/crawlers/__init__.py +0 -0
  50. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/crawlers/base.py +0 -0
  51. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/crawlers/basic.py +0 -0
  52. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/crawlers/firecrawl.py +0 -0
  53. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/crawlers/jina.py +0 -0
  54. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/crawlers/registry.py +0 -0
  55. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/crawlers/tavily.py +0 -0
  56. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/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.dev7}/src/unique_web_search/services/crawlers/utils.py +0 -0
  58. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/executors/README.md +0 -0
  59. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/executors/__init__.py +0 -0
  60. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/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.dev7}/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.dev7}/src/unique_web_search/services/executors/context.py +0 -0
  63. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/executors/modes.py +0 -0
  64. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/src/unique_web_search/services/helpers.py +0 -0
  91. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/message_log.py +0 -0
  92. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/proxy/__init__.py +0 -0
  93. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/proxy/bridge.py +0 -0
  94. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/services/proxy/mappers.py +0 -0
  95. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/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.dev7}/src/unique_web_search/services/structured_llm.py +0 -0
  124. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/src/unique_web_search/settings.py +0 -0
  125. {unique_web_search-2026.34.0.dev5 → unique_web_search-2026.34.0.dev7}/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.dev7}/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.dev7
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.dev19,<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
@@ -25,8 +25,8 @@ Requires-Dist: rapidfuzz>=3.0.0,<4
25
25
  Requires-Dist: httpx>=0.28.1
26
26
  Requires-Dist: certifi>=2025.11.12
27
27
  Requires-Dist: jinja2>=3.1.6
28
- Requires-Dist: unique-search-proxy-core>=2026.34.0.dev3,<2026.34.0rc0
29
- Requires-Dist: unique-search-proxy-sdk>=2026.34.0.dev3,<2026.34.0rc0
28
+ Requires-Dist: unique-search-proxy-core>=2026.34.0.dev4,<2026.34.0rc0
29
+ Requires-Dist: unique-search-proxy-sdk>=2026.34.0.dev4,<2026.34.0rc0
30
30
  Requires-Dist: openai>=1.105.0,<3
31
31
  Requires-Python: >=3.12, <4.0
32
32
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_web_search"
3
- version = "2026.34.0.dev5"
3
+ version = "2026.34.0.dev7"
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.dev19,<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",
@@ -31,8 +31,8 @@ dependencies = [
31
31
  "httpx>=0.28.1",
32
32
  "certifi>=2025.11.12",
33
33
  "jinja2>=3.1.6",
34
- "unique-search-proxy-core>=2026.34.0.dev3,<2026.34.0rc0",
35
- "unique-search-proxy-sdk>=2026.34.0.dev3,<2026.34.0rc0",
34
+ "unique-search-proxy-core>=2026.34.0.dev4,<2026.34.0rc0",
35
+ "unique-search-proxy-sdk>=2026.34.0.dev4,<2026.34.0rc0",
36
36
  "openai>=1.105.0,<3",
37
37
  ]
38
38
 
@@ -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")