unique-search-proxy 2026.44.0.dev5__tar.gz → 2026.44.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_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/PKG-INFO +2 -2
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/pyproject.toml +2 -2
- unique_search_proxy-2026.44.0.dev6/unique_search_proxy_client/web/core/agent_engines/vertexai/redirects.py +30 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/vertexai/service.py +13 -3
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/README.md +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/health.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/v1/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/v1/agent_search.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/v1/configuration.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/v1/context_headers.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/v1/crawl.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/v1/openapi_examples.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/api/v1/search.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/app.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/context.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/bing/cleanup.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/bing/client.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/bing/runner.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/bing/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/factory.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/service_base.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/structured_output.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/vertexai/client.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/agent_engines/vertexai/gemini.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/client/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/client/azure_transport.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/client/credentials.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/client/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/processing/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/processing/errors.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/processing/html_markdown.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/processing/processors/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/processing/processors/html.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/processing/processors/pdf.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/processing/processors/plain_text.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/processing/registry.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/settings.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/basic/user_agent.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/factory.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/firecrawl/polling.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/firecrawl/request_body.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/firecrawl/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/jina/request_body.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/jina/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/pinned_egress.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/tavily/request_body.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/crawlers/tavily/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/provider_response.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/providers.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/registry.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/brave/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/brave/pagination.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/brave/query_params.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/brave/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/custom_api/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/custom_api/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/descriptor.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/factory.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/google/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/google/pagination.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/google/query_params.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/google/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/pagination.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/perplexity/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/perplexity/request_body.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/perplexity/service.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/search_engines/service_base.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/url_safety/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/core/url_safety/gate.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/error_handlers.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/generator/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/generator/introspect.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/generator/schema.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/generator/template.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/generator/templates/provider_values_yaml.j2 +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/generator/values_yaml.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/metadata.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/registry.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/helm/url_safety_registration.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/logging_config.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/middleware/context.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/monitoring/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/monitoring/metrics.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/monitoring/setup.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/presets/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/presets/common.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/presets/crawl.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/presets/search.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/presets/types.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/app.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/base.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/client.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/monitoring.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/base.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/bing_agent.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/brave.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/firecrawl.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/google.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/jina.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/perplexity.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/tavily.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/providers/vertexai_agent.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/settings/secret_str.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/startup_report.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/utils/__init__.py +0 -0
- {unique_search_proxy-2026.44.0.dev5 → unique_search_proxy-2026.44.0.dev6}/unique_search_proxy_client/web/utils/url.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: unique-search-proxy
|
|
3
|
-
Version: 2026.44.0.
|
|
3
|
+
Version: 2026.44.0.dev6
|
|
4
4
|
Summary: Web Search Proxy implementation
|
|
5
5
|
Author: ThePhilAz
|
|
6
6
|
Author-email: ThePhilAz <rami.azouz@philico.com>
|
|
@@ -21,7 +21,7 @@ Requires-Dist: google-genai>=1.73.0,<2
|
|
|
21
21
|
Requires-Dist: google-auth>=2.43.0,<3
|
|
22
22
|
Requires-Dist: jinja2>=3.1.6,<4
|
|
23
23
|
Requires-Dist: unique-toolkit[monitoring]>=2026.44.0.dev9,<2026.44.0rc0
|
|
24
|
-
Requires-Dist: unique-search-proxy-core>=2026.44.0.
|
|
24
|
+
Requires-Dist: unique-search-proxy-core>=2026.44.0.dev5,<2026.44.0rc0
|
|
25
25
|
Requires-Dist: openai>=1.105.0,<3
|
|
26
26
|
Requires-Python: >=3.12
|
|
27
27
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique-search-proxy"
|
|
3
|
-
version = "2026.44.0.
|
|
3
|
+
version = "2026.44.0.dev6"
|
|
4
4
|
description = "Web Search Proxy implementation"
|
|
5
5
|
authors = [{ name = "ThePhilAz", email = "rami.azouz@philico.com" }]
|
|
6
6
|
readme = "README.md"
|
|
@@ -23,7 +23,7 @@ dependencies = [
|
|
|
23
23
|
"google-auth>=2.43.0,<3",
|
|
24
24
|
"jinja2>=3.1.6,<4",
|
|
25
25
|
"unique-toolkit[monitoring]>=2026.44.0.dev9,<2026.44.0rc0",
|
|
26
|
-
"unique-search-proxy-core>=2026.44.0.
|
|
26
|
+
"unique-search-proxy-core>=2026.44.0.dev5,<2026.44.0rc0",
|
|
27
27
|
"openai>=1.105.0,<3",
|
|
28
28
|
]
|
|
29
29
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from httpx import AsyncClient
|
|
4
|
+
from unique_search_proxy_core.agent_engines.output_schema import AgentSearchOutput
|
|
5
|
+
from unique_search_proxy_core.url_safety import UrlSafetyService
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
async def resolve_vertex_result_urls(
|
|
9
|
+
answer: str,
|
|
10
|
+
*,
|
|
11
|
+
http_client: AsyncClient,
|
|
12
|
+
) -> str:
|
|
13
|
+
"""Resolve structured Vertex result URLs through Search Proxy URL safety."""
|
|
14
|
+
try:
|
|
15
|
+
output = AgentSearchOutput.model_validate_json(answer)
|
|
16
|
+
except ValueError:
|
|
17
|
+
return answer
|
|
18
|
+
|
|
19
|
+
outcomes = await UrlSafetyService.validate_urls_individually(
|
|
20
|
+
[result.source_url for result in output.results],
|
|
21
|
+
redirect_http_client=http_client,
|
|
22
|
+
)
|
|
23
|
+
for result, outcome in zip(output.results, outcomes, strict=True):
|
|
24
|
+
if outcome.resolved is not None:
|
|
25
|
+
result.source_url = outcome.resolved.normalized_url
|
|
26
|
+
|
|
27
|
+
return output.model_dump_json()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
__all__ = ["resolve_vertex_result_urls"]
|
|
@@ -4,6 +4,7 @@ import logging
|
|
|
4
4
|
from collections.abc import AsyncIterator
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
|
+
from httpx import AsyncClient
|
|
7
8
|
from unique_search_proxy_core.agent_engines.base import AgentEngineType
|
|
8
9
|
from unique_search_proxy_core.agent_engines.resolve import (
|
|
9
10
|
resolve_output_schema_for_engine,
|
|
@@ -30,6 +31,9 @@ from unique_search_proxy_client.web.core.agent_engines.vertexai.gemini import (
|
|
|
30
31
|
serialize_vertex_response,
|
|
31
32
|
stream_vertexai_response,
|
|
32
33
|
)
|
|
34
|
+
from unique_search_proxy_client.web.core.agent_engines.vertexai.redirects import (
|
|
35
|
+
resolve_vertex_result_urls,
|
|
36
|
+
)
|
|
33
37
|
from unique_search_proxy_client.web.core.provider_response import transport_error_raw
|
|
34
38
|
|
|
35
39
|
_LOGGER = logging.getLogger(__name__)
|
|
@@ -40,9 +44,10 @@ class VertexAIAgentSearchService(
|
|
|
40
44
|
):
|
|
41
45
|
engine_id = AgentEngineType.VERTEXAI.value
|
|
42
46
|
|
|
43
|
-
def __init__(self,
|
|
44
|
-
super().__init__(
|
|
45
|
-
self.
|
|
47
|
+
def __init__(self, *, http_client: AsyncClient) -> None:
|
|
48
|
+
super().__init__(http_client=http_client)
|
|
49
|
+
self._egress_http_client = http_client
|
|
50
|
+
self._client = get_vertex_client(http_client)
|
|
46
51
|
|
|
47
52
|
async def search(self, request: VertexAIAgentSearchRequest) -> AgentSearchResponse: # type: ignore[override]
|
|
48
53
|
response: AgentSearchResponse | None = None
|
|
@@ -52,6 +57,11 @@ class VertexAIAgentSearchService(
|
|
|
52
57
|
if response is None:
|
|
53
58
|
msg = "VertexAI agent search stream ended without a done event"
|
|
54
59
|
raise UpstreamError(msg)
|
|
60
|
+
if request.enable_redirect_resolution:
|
|
61
|
+
response.answer = await resolve_vertex_result_urls(
|
|
62
|
+
response.answer,
|
|
63
|
+
http_client=self._egress_http_client,
|
|
64
|
+
)
|
|
55
65
|
return response
|
|
56
66
|
|
|
57
67
|
async def stream(
|
|
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
|