unique-search-proxy-sdk 2026.44.0.dev1__tar.gz → 2026.44.0.dev2__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 (76) hide show
  1. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/PKG-INFO +2 -2
  2. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/pyproject.toml +2 -2
  3. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/search/search_v1_search_post.py +31 -9
  4. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/__init__.py +4 -0
  5. unique_search_proxy_sdk-2026.44.0.dev2/unique_search_proxy_sdk/_generated/models/custom_api_request_method.py +9 -0
  6. unique_search_proxy_sdk-2026.44.0.dev2/unique_search_proxy_sdk/_generated/models/custom_api_search_request.py +144 -0
  7. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_typed_endpoints.py +29 -0
  8. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/search_client.py +16 -1
  9. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/README.md +0 -0
  10. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/__init__.py +0 -0
  11. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_endpoint.py +0 -0
  12. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/__init__.py +0 -0
  13. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/__init__.py +0 -0
  14. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/agent_search/__init__.py +0 -0
  15. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/agent_search/agent_search_stream_v1_agent_search_stream_post.py +0 -0
  16. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/agent_search/agent_search_v1_agent_search_post.py +0 -0
  17. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/configuration/__init__.py +0 -0
  18. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/configuration/list_providers_v1_configuration_providers_get.py +0 -0
  19. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/crawl/__init__.py +0 -0
  20. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/crawl/crawl_v1_crawl_post.py +0 -0
  21. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/health/__init__.py +0 -0
  22. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/health/health_health_get.py +0 -0
  23. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/health/ready_ready_get.py +0 -0
  24. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/api/search/__init__.py +0 -0
  25. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/client.py +0 -0
  26. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/errors.py +0 -0
  27. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/agent_search_response.py +0 -0
  28. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/basic_crawl_request.py +0 -0
  29. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/bing_agent_search_request.py +0 -0
  30. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/bing_agent_search_request_freshness_type_0.py +0 -0
  31. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/bing_agent_search_request_market_type_0.py +0 -0
  32. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/brave_search_request.py +0 -0
  33. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/brave_search_request_country_type_0.py +0 -0
  34. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/brave_search_request_result_filter_type_0_item.py +0 -0
  35. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/brave_search_request_safe_search.py +0 -0
  36. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/brave_search_request_search_lang_type_0.py +0 -0
  37. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/brave_search_request_ui_language.py +0 -0
  38. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/brave_search_request_units_type_0.py +0 -0
  39. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/content_types.py +0 -0
  40. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/crawl_response.py +0 -0
  41. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/crawl_url_result.py +0 -0
  42. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/firecrawl_crawl_request.py +0 -0
  43. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/firecrawl_crawl_request_proxy_mode.py +0 -0
  44. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/firecrawl_crawl_request_scrape_headers_type_0.py +0 -0
  45. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/google_search_request.py +0 -0
  46. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/google_search_request_safe_search.py +0 -0
  47. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/google_search_request_site_search_filter_type_0.py +0 -0
  48. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/health_health_get_response_health_health_get.py +0 -0
  49. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/http_validation_error.py +0 -0
  50. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/jina_crawl_request.py +0 -0
  51. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/jina_crawl_request_engine.py +0 -0
  52. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/jina_crawl_request_retain_images_type_0.py +0 -0
  53. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/jina_crawl_request_return_format.py +0 -0
  54. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/per_url_error.py +0 -0
  55. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/perplexity_search_request.py +0 -0
  56. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/perplexity_search_request_search_context_size.py +0 -0
  57. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/perplexity_search_request_search_recency_filter_type_0.py +0 -0
  58. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/providers_list_response.py +0 -0
  59. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/ready_ready_get_response_ready_ready_get.py +0 -0
  60. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/search_response.py +0 -0
  61. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/tavily_crawl_request.py +0 -0
  62. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/tavily_crawl_request_extract_depth.py +0 -0
  63. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/tavily_crawl_request_output_format.py +0 -0
  64. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/validation_error.py +0 -0
  65. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/validation_error_context.py +0 -0
  66. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/vertex_ai_agent_search_request.py +0 -0
  67. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/models/web_search_result.py +0 -0
  68. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_generated/types.py +0 -0
  69. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_http.py +0 -0
  70. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/_transport.py +0 -0
  71. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/agent_search_client.py +0 -0
  72. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/client.py +0 -0
  73. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/converters.py +0 -0
  74. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/crawl_client.py +0 -0
  75. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/errors.py +0 -0
  76. {unique_search_proxy_sdk-2026.44.0.dev1 → unique_search_proxy_sdk-2026.44.0.dev2}/unique_search_proxy_sdk/typing_checks.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-search-proxy-sdk
3
- Version: 2026.44.0.dev1
3
+ Version: 2026.44.0.dev2
4
4
  Summary: Async HTTP client for the Unique Search Proxy API
5
5
  Author: ThePhilAz
6
6
  Author-email: ThePhilAz <rami.azouz@philico.com>
7
7
  Requires-Dist: attrs>=24.3.0,<26
8
8
  Requires-Dist: httpx>=0.28.0,<0.29.0
9
9
  Requires-Dist: pydantic>=2.12.5,<3.0.0
10
- Requires-Dist: unique-search-proxy-core>=2026.44.0.dev2,<2026.44.0rc0
10
+ Requires-Dist: unique-search-proxy-core>=2026.44.0.dev3,<2026.44.0rc0
11
11
  Requires-Python: >=3.12
12
12
  Description-Content-Type: text/markdown
13
13
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique-search-proxy-sdk"
3
- version = "2026.44.0.dev1"
3
+ version = "2026.44.0.dev2"
4
4
  description = "Async HTTP client for the Unique Search Proxy API"
5
5
  authors = [{ name = "ThePhilAz", email = "rami.azouz@philico.com" }]
6
6
  readme = "README.md"
@@ -9,7 +9,7 @@ dependencies = [
9
9
  "attrs>=24.3.0,<26",
10
10
  "httpx>=0.28.0,<0.29.0",
11
11
  "pydantic>=2.12.5,<3.0.0",
12
- "unique-search-proxy-core>=2026.44.0.dev2,<2026.44.0rc0",
12
+ "unique-search-proxy-core>=2026.44.0.dev3,<2026.44.0rc0",
13
13
  ]
14
14
 
15
15
  [dependency-groups]
@@ -6,6 +6,7 @@ import httpx
6
6
  from ... import errors
7
7
  from ...client import AuthenticatedClient, Client
8
8
  from ...models.brave_search_request import BraveSearchRequest
9
+ from ...models.custom_api_search_request import CustomApiSearchRequest
9
10
  from ...models.google_search_request import GoogleSearchRequest
10
11
  from ...models.http_validation_error import HTTPValidationError
11
12
  from ...models.perplexity_search_request import PerplexitySearchRequest
@@ -15,7 +16,10 @@ from ...types import Response, Unset
15
16
 
16
17
  def _get_kwargs(
17
18
  *,
18
- body: BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest,
19
+ body: BraveSearchRequest
20
+ | CustomApiSearchRequest
21
+ | GoogleSearchRequest
22
+ | PerplexitySearchRequest,
19
23
  x_unique_company_id: str | Unset = "local",
20
24
  x_unique_user_id: str | Unset = "local",
21
25
  x_unique_chat_id: str | Unset = "local",
@@ -39,6 +43,8 @@ def _get_kwargs(
39
43
  _kwargs["json"] = body.to_dict()
40
44
  elif isinstance(body, BraveSearchRequest):
41
45
  _kwargs["json"] = body.to_dict()
46
+ elif isinstance(body, PerplexitySearchRequest):
47
+ _kwargs["json"] = body.to_dict()
42
48
  else:
43
49
  _kwargs["json"] = body.to_dict()
44
50
 
@@ -81,7 +87,10 @@ def _build_response(
81
87
  def sync_detailed(
82
88
  *,
83
89
  client: AuthenticatedClient | Client,
84
- body: BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest,
90
+ body: BraveSearchRequest
91
+ | CustomApiSearchRequest
92
+ | GoogleSearchRequest
93
+ | PerplexitySearchRequest,
85
94
  x_unique_company_id: str | Unset = "local",
86
95
  x_unique_user_id: str | Unset = "local",
87
96
  x_unique_chat_id: str | Unset = "local",
@@ -92,7 +101,8 @@ def sync_detailed(
92
101
  x_unique_company_id (str | Unset): Tenant company identifier. Default: 'local'.
93
102
  x_unique_user_id (str | Unset): Tenant user identifier. Default: 'local'.
94
103
  x_unique_chat_id (str | Unset): Tenant chat or session identifier. Default: 'local'.
95
- body (BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest):
104
+ body (BraveSearchRequest | CustomApiSearchRequest | GoogleSearchRequest |
105
+ PerplexitySearchRequest):
96
106
 
97
107
  Raises:
98
108
  errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -119,7 +129,10 @@ def sync_detailed(
119
129
  def sync(
120
130
  *,
121
131
  client: AuthenticatedClient | Client,
122
- body: BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest,
132
+ body: BraveSearchRequest
133
+ | CustomApiSearchRequest
134
+ | GoogleSearchRequest
135
+ | PerplexitySearchRequest,
123
136
  x_unique_company_id: str | Unset = "local",
124
137
  x_unique_user_id: str | Unset = "local",
125
138
  x_unique_chat_id: str | Unset = "local",
@@ -130,7 +143,8 @@ def sync(
130
143
  x_unique_company_id (str | Unset): Tenant company identifier. Default: 'local'.
131
144
  x_unique_user_id (str | Unset): Tenant user identifier. Default: 'local'.
132
145
  x_unique_chat_id (str | Unset): Tenant chat or session identifier. Default: 'local'.
133
- body (BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest):
146
+ body (BraveSearchRequest | CustomApiSearchRequest | GoogleSearchRequest |
147
+ PerplexitySearchRequest):
134
148
 
135
149
  Raises:
136
150
  errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -152,7 +166,10 @@ def sync(
152
166
  async def asyncio_detailed(
153
167
  *,
154
168
  client: AuthenticatedClient | Client,
155
- body: BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest,
169
+ body: BraveSearchRequest
170
+ | CustomApiSearchRequest
171
+ | GoogleSearchRequest
172
+ | PerplexitySearchRequest,
156
173
  x_unique_company_id: str | Unset = "local",
157
174
  x_unique_user_id: str | Unset = "local",
158
175
  x_unique_chat_id: str | Unset = "local",
@@ -163,7 +180,8 @@ async def asyncio_detailed(
163
180
  x_unique_company_id (str | Unset): Tenant company identifier. Default: 'local'.
164
181
  x_unique_user_id (str | Unset): Tenant user identifier. Default: 'local'.
165
182
  x_unique_chat_id (str | Unset): Tenant chat or session identifier. Default: 'local'.
166
- body (BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest):
183
+ body (BraveSearchRequest | CustomApiSearchRequest | GoogleSearchRequest |
184
+ PerplexitySearchRequest):
167
185
 
168
186
  Raises:
169
187
  errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -188,7 +206,10 @@ async def asyncio_detailed(
188
206
  async def asyncio(
189
207
  *,
190
208
  client: AuthenticatedClient | Client,
191
- body: BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest,
209
+ body: BraveSearchRequest
210
+ | CustomApiSearchRequest
211
+ | GoogleSearchRequest
212
+ | PerplexitySearchRequest,
192
213
  x_unique_company_id: str | Unset = "local",
193
214
  x_unique_user_id: str | Unset = "local",
194
215
  x_unique_chat_id: str | Unset = "local",
@@ -199,7 +220,8 @@ async def asyncio(
199
220
  x_unique_company_id (str | Unset): Tenant company identifier. Default: 'local'.
200
221
  x_unique_user_id (str | Unset): Tenant user identifier. Default: 'local'.
201
222
  x_unique_chat_id (str | Unset): Tenant chat or session identifier. Default: 'local'.
202
- body (BraveSearchRequest | GoogleSearchRequest | PerplexitySearchRequest):
223
+ body (BraveSearchRequest | CustomApiSearchRequest | GoogleSearchRequest |
224
+ PerplexitySearchRequest):
203
225
 
204
226
  Raises:
205
227
  errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -19,6 +19,8 @@ from .brave_search_request_units_type_0 import BraveSearchRequestUnitsType0
19
19
  from .content_types import ContentTypes
20
20
  from .crawl_response import CrawlResponse
21
21
  from .crawl_url_result import CrawlUrlResult
22
+ from .custom_api_request_method import CustomApiRequestMethod
23
+ from .custom_api_search_request import CustomApiSearchRequest
22
24
  from .firecrawl_crawl_request import FirecrawlCrawlRequest
23
25
  from .firecrawl_crawl_request_proxy_mode import FirecrawlCrawlRequestProxyMode
24
26
  from .firecrawl_crawl_request_scrape_headers_type_0 import (
@@ -72,6 +74,8 @@ __all__ = (
72
74
  "ContentTypes",
73
75
  "CrawlResponse",
74
76
  "CrawlUrlResult",
77
+ "CustomApiRequestMethod",
78
+ "CustomApiSearchRequest",
75
79
  "FirecrawlCrawlRequest",
76
80
  "FirecrawlCrawlRequestProxyMode",
77
81
  "FirecrawlCrawlRequestScrapeHeadersType0",
@@ -0,0 +1,9 @@
1
+ from enum import Enum
2
+
3
+
4
+ class CustomApiRequestMethod(str, Enum):
5
+ GET = "GET"
6
+ POST = "POST"
7
+
8
+ def __str__(self) -> str:
9
+ return str(self.value)
@@ -0,0 +1,144 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import (
5
+ Any,
6
+ Literal,
7
+ TypeVar,
8
+ cast,
9
+ )
10
+
11
+ from attrs import define as _attrs_define
12
+ from attrs import field as _attrs_field
13
+
14
+ from ..models.custom_api_request_method import CustomApiRequestMethod
15
+ from ..types import UNSET, Unset
16
+
17
+ T = TypeVar("T", bound="CustomApiSearchRequest")
18
+
19
+
20
+ @_attrs_define
21
+ class CustomApiSearchRequest:
22
+ r"""
23
+ Attributes:
24
+ query (str): Search query string
25
+ engine (Literal['custom_api'] | Unset): Provider discriminator; must be `custom_api` for this config. Default:
26
+ 'custom_api'.
27
+ api_endpoint (str | Unset): HTTP(S) endpoint called by Search Proxy. Default: 'https://api.example.com/search'.
28
+ api_headers (str | Unset): JSON object containing headers sent to the custom API. Default: '{\\"Content-Type\\":
29
+ \\"application/json\\"}'.
30
+ api_additional_query_params (str | Unset): JSON object merged into the custom API query parameters. Default:
31
+ '{}'.
32
+ api_additional_body_params (str | Unset): JSON object merged into the custom API JSON body. Default: '{}'.
33
+ api_request_method (CustomApiRequestMethod | Unset):
34
+ timeout (int | Unset): Custom API request timeout in seconds. Default: 120.
35
+ """
36
+
37
+ query: str
38
+ engine: Literal["custom_api"] | Unset = "custom_api"
39
+ api_endpoint: str | Unset = "https://api.example.com/search"
40
+ api_headers: str | Unset = '{\\"Content-Type\\": \\"application/json\\"}'
41
+ api_additional_query_params: str | Unset = "{}"
42
+ api_additional_body_params: str | Unset = "{}"
43
+ api_request_method: CustomApiRequestMethod | Unset = UNSET
44
+ timeout: int | Unset = 120
45
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
46
+
47
+ def to_dict(self) -> dict[str, Any]:
48
+ query = self.query
49
+
50
+ engine = self.engine
51
+
52
+ api_endpoint = self.api_endpoint
53
+
54
+ api_headers = self.api_headers
55
+
56
+ api_additional_query_params = self.api_additional_query_params
57
+
58
+ api_additional_body_params = self.api_additional_body_params
59
+
60
+ api_request_method: str | Unset = UNSET
61
+ if not isinstance(self.api_request_method, Unset):
62
+ api_request_method = self.api_request_method.value
63
+
64
+ timeout = self.timeout
65
+
66
+ field_dict: dict[str, Any] = {}
67
+ field_dict.update(self.additional_properties)
68
+ field_dict.update(
69
+ {
70
+ "query": query,
71
+ }
72
+ )
73
+ if engine is not UNSET:
74
+ field_dict["engine"] = engine
75
+ if api_endpoint is not UNSET:
76
+ field_dict["apiEndpoint"] = api_endpoint
77
+ if api_headers is not UNSET:
78
+ field_dict["apiHeaders"] = api_headers
79
+ if api_additional_query_params is not UNSET:
80
+ field_dict["apiAdditionalQueryParams"] = api_additional_query_params
81
+ if api_additional_body_params is not UNSET:
82
+ field_dict["apiAdditionalBodyParams"] = api_additional_body_params
83
+ if api_request_method is not UNSET:
84
+ field_dict["apiRequestMethod"] = api_request_method
85
+ if timeout is not UNSET:
86
+ field_dict["timeout"] = timeout
87
+
88
+ return field_dict
89
+
90
+ @classmethod
91
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
92
+ d = dict(src_dict)
93
+ query = d.pop("query")
94
+
95
+ engine = cast(Literal["custom_api"] | Unset, d.pop("engine", UNSET))
96
+ if engine != "custom_api" and not isinstance(engine, Unset):
97
+ raise ValueError(f"engine must match const 'custom_api', got '{engine}'")
98
+
99
+ api_endpoint = d.pop("apiEndpoint", UNSET)
100
+
101
+ api_headers = d.pop("apiHeaders", UNSET)
102
+
103
+ api_additional_query_params = d.pop("apiAdditionalQueryParams", UNSET)
104
+
105
+ api_additional_body_params = d.pop("apiAdditionalBodyParams", UNSET)
106
+
107
+ _api_request_method = d.pop("apiRequestMethod", UNSET)
108
+ api_request_method: CustomApiRequestMethod | Unset
109
+ if isinstance(_api_request_method, Unset):
110
+ api_request_method = UNSET
111
+ else:
112
+ api_request_method = CustomApiRequestMethod(_api_request_method)
113
+
114
+ timeout = d.pop("timeout", UNSET)
115
+
116
+ custom_api_search_request = cls(
117
+ query=query,
118
+ engine=engine,
119
+ api_endpoint=api_endpoint,
120
+ api_headers=api_headers,
121
+ api_additional_query_params=api_additional_query_params,
122
+ api_additional_body_params=api_additional_body_params,
123
+ api_request_method=api_request_method,
124
+ timeout=timeout,
125
+ )
126
+
127
+ custom_api_search_request.additional_properties = d
128
+ return custom_api_search_request
129
+
130
+ @property
131
+ def additional_keys(self) -> list[str]:
132
+ return list(self.additional_properties.keys())
133
+
134
+ def __getitem__(self, key: str) -> Any:
135
+ return self.additional_properties[key]
136
+
137
+ def __setitem__(self, key: str, value: Any) -> None:
138
+ self.additional_properties[key] = value
139
+
140
+ def __delitem__(self, key: str) -> None:
141
+ del self.additional_properties[key]
142
+
143
+ def __contains__(self, key: str) -> bool:
144
+ return key in self.additional_properties
@@ -24,6 +24,9 @@ from unique_search_proxy_core.search_engines.brave.schema import (
24
24
  BraveSafesearch,
25
25
  BraveUnits,
26
26
  )
27
+ from unique_search_proxy_core.search_engines.custom_api.schema import (
28
+ CustomApiRequestMethod,
29
+ )
27
30
  from unique_search_proxy_core.search_engines.google.schema import (
28
31
  GoogleSafeDefault,
29
32
  GoogleSiteSearchFilter,
@@ -174,6 +177,31 @@ class PerplexitySearchEndpoint(_TypedPostEndpoint[SearchResponse]):
174
177
  )
175
178
 
176
179
 
180
+ class CustomApiSearchEndpoint(_TypedPostEndpoint[SearchResponse]):
181
+ async def __call__(
182
+ self,
183
+ *,
184
+ query: str,
185
+ api_endpoint: str,
186
+ engine: Literal["custom_api"] = "custom_api",
187
+ timeout: int = 120,
188
+ api_headers: str = '{"Content-Type": "application/json"}',
189
+ api_additional_query_params: str = "{}",
190
+ api_additional_body_params: str = "{}",
191
+ api_request_method: CustomApiRequestMethod = CustomApiRequestMethod.GET,
192
+ ) -> SearchResponse:
193
+ return await self._call(
194
+ query=query,
195
+ api_endpoint=api_endpoint,
196
+ engine=engine,
197
+ timeout=timeout,
198
+ api_headers=api_headers,
199
+ api_additional_query_params=api_additional_query_params,
200
+ api_additional_body_params=api_additional_body_params,
201
+ api_request_method=api_request_method,
202
+ )
203
+
204
+
177
205
  class BingAgentSearchEndpoint(_TypedPostEndpoint[AgentSearchResponse]):
178
206
  async def __call__(
179
207
  self,
@@ -417,6 +445,7 @@ __all__ = [
417
445
  "BingAgentSearchEndpoint",
418
446
  "BingAgentSearchStreamEndpoint",
419
447
  "BraveSearchEndpoint",
448
+ "CustomApiSearchEndpoint",
420
449
  "FirecrawlCrawlEndpoint",
421
450
  "GoogleSearchEndpoint",
422
451
  "JinaCrawlEndpoint",
@@ -6,6 +6,9 @@ from typing import Any
6
6
 
7
7
  from unique_search_proxy_core.search_engines.brave.schema import BraveSearchRequest
8
8
  from unique_search_proxy_core.search_engines.config_types import parse_search_request
9
+ from unique_search_proxy_core.search_engines.custom_api.schema import (
10
+ CustomApiSearchRequest,
11
+ )
9
12
  from unique_search_proxy_core.search_engines.google.schema import GoogleSearchRequest
10
13
  from unique_search_proxy_core.search_engines.perplexity.schema import (
11
14
  PerplexitySearchRequest,
@@ -17,12 +20,13 @@ from unique_search_proxy_sdk._generated.models.search_response import SearchResp
17
20
  from unique_search_proxy_sdk._transport import OpenapiTransport
18
21
  from unique_search_proxy_sdk._typed_endpoints import (
19
22
  BraveSearchEndpoint,
23
+ CustomApiSearchEndpoint,
20
24
  GoogleSearchEndpoint,
21
25
  PerplexitySearchEndpoint,
22
26
  )
23
27
  from unique_search_proxy_sdk.converters import to_sdk_search_request
24
28
 
25
- _SEARCH_PROVIDERS = frozenset({"google", "brave", "perplexity"})
29
+ _SEARCH_PROVIDERS = frozenset({"google", "brave", "perplexity", "custom_api"})
26
30
 
27
31
 
28
32
  class SearchClient:
@@ -31,6 +35,7 @@ class SearchClient:
31
35
  google: GoogleSearchEndpoint
32
36
  brave: BraveSearchEndpoint
33
37
  perplexity: PerplexitySearchEndpoint
38
+ custom_api: CustomApiSearchEndpoint
34
39
 
35
40
  def __init__(self, transport: OpenapiTransport) -> None:
36
41
  self._transport = transport
@@ -64,6 +69,16 @@ class SearchClient:
64
69
  response_type=SearchResponse,
65
70
  ),
66
71
  )
72
+ self.custom_api = CustomApiSearchEndpoint(
73
+ async_post_endpoint(
74
+ transport,
75
+ CustomApiSearchRequest,
76
+ parse=parse_search_request,
77
+ to_sdk=to_sdk_search_request,
78
+ post=search_v1_search_post.asyncio_detailed,
79
+ response_type=SearchResponse,
80
+ ),
81
+ )
67
82
 
68
83
  async def search(
69
84
  self,