unique_web_search 2026.34.0.dev4__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.
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/PKG-INFO +2 -2
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/pyproject.toml +2 -2
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/schema.py +6 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/service.py +1 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/query_elicitation.py +15 -4
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/bing.py +29 -6
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/README.md +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/client_settings.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/invocation_stats.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/metrics.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/prompts.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/_registry.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/exceptions.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/guidelines.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/guidelines_with_keywords.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/rejection_response.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/system_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/prompts/user_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/argument_screening/service.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/client/proxy_config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/cleaning/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/cleaning/character_sanitize.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/cleaning/clean.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/cleaning/config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/base.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/llm_guard_judge.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/llm_keyword_redact.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/llm_process.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/judge_and_sanitize_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/judge_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/keyword_extract_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/page_context.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/sanitize_rules.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/system_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/prompts/user_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/schema.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/settings.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/processing_strategies/truncate.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/content_processing/service.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/README.md +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/base.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/basic.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/firecrawl.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/jina.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/registry.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/tavily.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/url_safety/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/crawlers/utils.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/README.md +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/base_config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/base_executor.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/context.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/modes.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/executor.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/prompts/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/prompts/refine_query_system_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/prompts/tool_description.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/prompts/tool_description_for_system_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/schema.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v1/strategy.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/executor.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/prompts/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/prompts/step_query_description.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/prompts/tool_description.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/prompts/tool_description_for_system_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/schema.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v2/strategy.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/config.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/executor.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/prompts/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/prompts/tool_description.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/prompts/tool_description_for_system_prompt.j2 +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/schema.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/executors/v3/strategy.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/helpers.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/message_log.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/proxy/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/proxy/bridge.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/proxy/mappers.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/README.md +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/base.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/brave.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/custom_api.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/google.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/perplexity.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/registry.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/schema.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/google/schema.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/bing/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/bing/client.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/bing/models.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/bing/runner.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/models.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/response_parsing.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/client.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/exceptions.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/gemini.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/utils/grounding/vertexai/response_handler.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/search_engine/vertexai.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/snippet_judge/__init__.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/snippet_judge/prompts.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/snippet_judge/schema.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/snippet_judge/service.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/services/structured_llm.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/settings.py +0 -0
- {unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/skills/web-search-v3.md +0 -0
- {unique_web_search-2026.34.0.dev4 → 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
"""
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
158
|
+
return submitted_queries
|
|
148
159
|
|
|
149
160
|
elif elicitation.status == ElicitationStatus.DECLINED:
|
|
150
161
|
_LOGGER.info(f"Query elicitation {elicitation.id} declined")
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
from typing import override
|
|
2
|
+
from typing import Annotated, Any, override
|
|
3
3
|
|
|
4
|
-
from pydantic import Field
|
|
4
|
+
from pydantic import BeforeValidator, Field
|
|
5
5
|
from unique_search_proxy_core.agent_engines.base import AgentEngineType
|
|
6
6
|
from unique_search_proxy_core.agent_engines.bing.schema import BingAgentConfig
|
|
7
7
|
from unique_search_proxy_core.context import LOCAL_REQUEST_CONTEXT, RequestContext
|
|
8
8
|
from unique_search_proxy_core.param_policy.exposed_params import ExposedParams
|
|
9
9
|
from unique_toolkit._common.default_language_model import DEFAULT_LANGUAGE_MODEL
|
|
10
|
+
from unique_toolkit._common.pydantic.rjsf_tags import RJSFMetaTag
|
|
10
11
|
from unique_toolkit._common.validators import LMI, get_LMI_default_field
|
|
11
12
|
from unique_toolkit.language_model import LanguageModelService
|
|
12
13
|
|
|
@@ -31,13 +32,35 @@ from unique_web_search.services.search_engine.utils.grounding.bing import (
|
|
|
31
32
|
from unique_web_search.settings import env_settings
|
|
32
33
|
|
|
33
34
|
|
|
35
|
+
def _none_as_empty(value: Any) -> Any:
|
|
36
|
+
"""Accept the ``null`` written by previously stored configs."""
|
|
37
|
+
return "" if value is None else value
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# Plain ``str`` instead of ``str | None`` so the config form renders a single
|
|
41
|
+
# text input; a union would render an RJSF branch selector ("… option 1/2").
|
|
42
|
+
_OptionalText = Annotated[str, BeforeValidator(_none_as_empty)]
|
|
43
|
+
|
|
44
|
+
|
|
34
45
|
class BingSearchConfig(BingAgentConfig):
|
|
35
|
-
agent_id:
|
|
36
|
-
|
|
46
|
+
agent_id: Annotated[ # pyright: ignore[reportIncompatibleVariableOverride]
|
|
47
|
+
_OptionalText,
|
|
48
|
+
RJSFMetaTag.StringWidget.textfield(
|
|
49
|
+
placeholder="Leave empty to use the auto-provisioned agent",
|
|
50
|
+
empty_value="",
|
|
51
|
+
),
|
|
52
|
+
] = Field(
|
|
53
|
+
default=env_settings.azure_ai_assistant_id or "",
|
|
37
54
|
description="The ID of the agent to use for the search. **This parameter is temporary and will be auto-provisioned in future versions.**",
|
|
38
55
|
)
|
|
39
|
-
endpoint:
|
|
40
|
-
|
|
56
|
+
endpoint: Annotated[
|
|
57
|
+
_OptionalText,
|
|
58
|
+
RJSFMetaTag.StringWidget.textfield(
|
|
59
|
+
placeholder="Leave empty to use the auto-provisioned resource",
|
|
60
|
+
empty_value="",
|
|
61
|
+
),
|
|
62
|
+
] = Field(
|
|
63
|
+
default=env_settings.azure_ai_project_endpoint or "",
|
|
41
64
|
description="The endpoint to use for the search. **This parameter is not required to be set. It's loaded automatically from auto-provisioned resource**",
|
|
42
65
|
)
|
|
43
66
|
language_model: LMI = get_LMI_default_field(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_web_search-2026.34.0.dev4 → unique_web_search-2026.34.0.dev6}/src/unique_web_search/utils.py
RENAMED
|
File without changes
|