unique-web-search 2026.28.0.dev2__tar.gz → 2026.28.0.dev3__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 (123) hide show
  1. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/PKG-INFO +2 -2
  2. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/pyproject.toml +2 -2
  3. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/custom_api.py +1 -2
  4. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/schema.py +6 -2
  5. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/README.md +0 -0
  6. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/__init__.py +0 -0
  7. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/client_settings.py +0 -0
  8. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/config.py +0 -0
  9. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/metrics.py +0 -0
  10. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/prompts.py +0 -0
  11. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/schema.py +0 -0
  12. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/service.py +0 -0
  13. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/__init__.py +0 -0
  14. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/config.py +0 -0
  15. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/exceptions.py +0 -0
  16. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/prompts/__init__.py +0 -0
  17. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/prompts/guidelines.j2 +0 -0
  18. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/prompts/guidelines_with_keywords.j2 +0 -0
  19. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/prompts/rejection_response.j2 +0 -0
  20. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/prompts/system_prompt.j2 +0 -0
  21. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/prompts/user_prompt.j2 +0 -0
  22. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/argument_screening/service.py +0 -0
  23. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/client/proxy_config.py +0 -0
  24. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/__init__.py +0 -0
  25. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/cleaning/__init__.py +0 -0
  26. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/cleaning/character_sanitize.py +0 -0
  27. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/cleaning/clean.py +0 -0
  28. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/cleaning/config.py +0 -0
  29. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/config.py +0 -0
  30. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/base.py +0 -0
  31. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/config.py +0 -0
  32. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/llm_guard_judge.py +0 -0
  33. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/llm_keyword_redact.py +0 -0
  34. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/llm_process.py +0 -0
  35. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/prompts/__init__.py +0 -0
  36. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/prompts/judge_and_sanitize_prompt.j2 +0 -0
  37. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/prompts/judge_prompt.j2 +0 -0
  38. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/prompts/keyword_extract_prompt.j2 +0 -0
  39. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/prompts/page_context.j2 +0 -0
  40. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/prompts/sanitize_rules.j2 +0 -0
  41. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/prompts/system_prompt.j2 +0 -0
  42. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/prompts/user_prompt.j2 +0 -0
  43. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/schema.py +0 -0
  44. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/settings.py +0 -0
  45. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/processing_strategies/truncate.py +0 -0
  46. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/content_processing/service.py +0 -0
  47. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/README.md +0 -0
  48. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/__init__.py +0 -0
  49. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/base.py +0 -0
  50. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/basic.py +0 -0
  51. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/crawl4ai.py +0 -0
  52. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/firecrawl.py +0 -0
  53. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/jina.py +0 -0
  54. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/tavily.py +0 -0
  55. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/url_safety/__init__.py +0 -0
  56. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/crawlers/utils.py +0 -0
  57. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/README.md +0 -0
  58. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/__init__.py +0 -0
  59. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/base_config.py +0 -0
  60. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/base_executor.py +0 -0
  61. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/context.py +0 -0
  62. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/__init__.py +0 -0
  63. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/config.py +0 -0
  64. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/executor.py +0 -0
  65. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/prompts/__init__.py +0 -0
  66. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/prompts/refine_query_system_prompt.j2 +0 -0
  67. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/prompts/restrict_date_description.j2 +0 -0
  68. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/prompts/tool_description.j2 +0 -0
  69. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/prompts/tool_description_for_system_prompt.j2 +0 -0
  70. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v1/schema.py +0 -0
  71. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v2/__init__.py +0 -0
  72. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v2/config.py +0 -0
  73. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v2/executor.py +0 -0
  74. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v2/prompts/__init__.py +0 -0
  75. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v2/prompts/step_query_description.j2 +0 -0
  76. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v2/prompts/tool_description.j2 +0 -0
  77. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v2/prompts/tool_description_for_system_prompt.j2 +0 -0
  78. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v2/schema.py +0 -0
  79. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v3/__init__.py +0 -0
  80. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v3/config.py +0 -0
  81. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v3/executor.py +0 -0
  82. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v3/prompts/__init__.py +0 -0
  83. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v3/prompts/tool_description.j2 +0 -0
  84. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v3/prompts/tool_description_for_system_prompt.j2 +0 -0
  85. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/executors/v3/schema.py +0 -0
  86. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/helpers.py +0 -0
  87. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/message_log.py +0 -0
  88. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/proxy/__init__.py +0 -0
  89. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/proxy/bridge.py +0 -0
  90. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/proxy/mappers.py +0 -0
  91. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/query_elicitation.py +0 -0
  92. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/README.md +0 -0
  93. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/__init__.py +0 -0
  94. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/base.py +0 -0
  95. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/bing.py +0 -0
  96. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/brave.py +0 -0
  97. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/firecrawl.py +0 -0
  98. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/google.py +0 -0
  99. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/jina.py +0 -0
  100. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/perplexity.py +0 -0
  101. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/tavily.py +0 -0
  102. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/google/schema.py +0 -0
  103. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/__init__.py +0 -0
  104. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/bing/__init__.py +0 -0
  105. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/bing/client.py +0 -0
  106. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/bing/models.py +0 -0
  107. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/bing/runner.py +0 -0
  108. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/models.py +0 -0
  109. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/response_parsing.py +0 -0
  110. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/__init__.py +0 -0
  111. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/client.py +0 -0
  112. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/exceptions.py +0 -0
  113. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/gemini.py +0 -0
  114. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/response_handler.py +0 -0
  115. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/search_engine/vertexai.py +0 -0
  116. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/snippet_judge/__init__.py +0 -0
  117. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/snippet_judge/prompts.py +0 -0
  118. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/snippet_judge/schema.py +0 -0
  119. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/snippet_judge/service.py +0 -0
  120. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/services/structured_llm.py +0 -0
  121. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/settings.py +0 -0
  122. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/src/unique_web_search/skills/web-search-v3.md +0 -0
  123. {unique_web_search-2026.28.0.dev2 → unique_web_search-2026.28.0.dev3}/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.28.0.dev2
3
+ Version: 2026.28.0.dev3
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>
@@ -17,7 +17,7 @@ Requires-Dist: tavily-python>=0.7.11,<1
17
17
  Requires-Dist: unidecode>=1.4.0,<2
18
18
  Requires-Dist: azure-ai-projects>=1.0.0,<2
19
19
  Requires-Dist: azure-identity>=1.25.0,<2
20
- Requires-Dist: unique-toolkit[monitoring]>=2026.28.0.dev5,<2026.28.0rc0
20
+ Requires-Dist: unique-toolkit[monitoring]>=2026.28.0.dev6,<2026.28.0rc0
21
21
  Requires-Dist: azure-core>=1.36.0,<2
22
22
  Requires-Dist: google-cloud-aiplatform>=1.128.0,<2
23
23
  Requires-Dist: google-auth>=2.43.0,<3
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_web_search"
3
- version = "2026.28.0.dev2"
3
+ version = "2026.28.0.dev3"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<4.0"
@@ -23,7 +23,7 @@ dependencies = [
23
23
  "unidecode>=1.4.0,<2",
24
24
  "azure-ai-projects>=1.0.0,<2",
25
25
  "azure-identity>=1.25.0,<2",
26
- "unique-toolkit[monitoring]>=2026.28.0.dev5,<2026.28.0rc0",
26
+ "unique-toolkit[monitoring]>=2026.28.0.dev6,<2026.28.0rc0",
27
27
  "azure-core>=1.36.0,<2",
28
28
  "google-cloud-aiplatform>=1.128.0,<2",
29
29
  "google-auth>=2.43.0,<3",
@@ -95,12 +95,11 @@ class CustomAPI(SearchEngine[CustomAPIConfig]):
95
95
 
96
96
  @override
97
97
  async def _proxy_search(self, query: str, **kwargs) -> list[WebSearchResult]:
98
- raise NotImplementedError("CustomAPI does not support proxy search")
98
+ return await self._legacy_search(query=query, **kwargs)
99
99
 
100
100
  @override
101
101
  async def _legacy_search(self, query: str, **kwargs) -> list[WebSearchResult]:
102
102
  params, body = self._prepare_request_params_and_body(query)
103
-
104
103
  async_client_params = self._client_config | {
105
104
  "timeout": self.config.timeout,
106
105
  }
@@ -1,4 +1,4 @@
1
- from pydantic import BaseModel, Field
1
+ from pydantic import AliasChoices, BaseModel, Field
2
2
  from unique_toolkit.content import ContentReference
3
3
 
4
4
  from unique_web_search.services.helpers import extract_root_domain
@@ -37,4 +37,8 @@ class WebSearchResult(BaseModel):
37
37
 
38
38
 
39
39
  class WebSearchResults(BaseModel):
40
- results: list[WebSearchResult]
40
+ results: list[WebSearchResult] = Field(
41
+ validation_alias=AliasChoices("results", "curated"),
42
+ serialization_alias="results",
43
+ description="Normalized search results (accepts `results` or `curated` in input JSON).",
44
+ )