unique-search-proxy-sdk 2026.44.0.dev3__tar.gz → 2026.44.0.dev5__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 (77) hide show
  1. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/PKG-INFO +2 -2
  2. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/pyproject.toml +2 -2
  3. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/__init__.py +2 -0
  4. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/agent_search_response.py +32 -3
  5. unique_search_proxy_sdk-2026.44.0.dev5/unique_search_proxy_sdk/_generated/models/answer_span_citation.py +132 -0
  6. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/errors.py +2 -0
  7. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/README.md +0 -0
  8. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/__init__.py +0 -0
  9. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_endpoint.py +0 -0
  10. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/__init__.py +0 -0
  11. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/__init__.py +0 -0
  12. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/agent_search/__init__.py +0 -0
  13. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/agent_search/agent_search_stream_v1_agent_search_stream_post.py +0 -0
  14. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/agent_search/agent_search_v1_agent_search_post.py +0 -0
  15. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/configuration/__init__.py +0 -0
  16. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/configuration/list_providers_v1_configuration_providers_get.py +0 -0
  17. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/crawl/__init__.py +0 -0
  18. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/crawl/crawl_v1_crawl_post.py +0 -0
  19. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/health/__init__.py +0 -0
  20. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/health/health_health_get.py +0 -0
  21. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/health/ready_ready_get.py +0 -0
  22. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/search/__init__.py +0 -0
  23. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/api/search/search_v1_search_post.py +0 -0
  24. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/client.py +0 -0
  25. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/errors.py +0 -0
  26. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/basic_crawl_request.py +0 -0
  27. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/bing_agent_search_request.py +0 -0
  28. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/bing_agent_search_request_freshness_type_0.py +0 -0
  29. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/bing_agent_search_request_market_type_0.py +0 -0
  30. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/brave_search_request.py +0 -0
  31. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/brave_search_request_country_type_0.py +0 -0
  32. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/brave_search_request_result_filter_type_0_item.py +0 -0
  33. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/brave_search_request_safe_search.py +0 -0
  34. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/brave_search_request_search_lang_type_0.py +0 -0
  35. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/brave_search_request_ui_language.py +0 -0
  36. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/brave_search_request_units_type_0.py +0 -0
  37. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/content_types.py +0 -0
  38. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/crawl_response.py +0 -0
  39. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/crawl_url_result.py +0 -0
  40. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/custom_api_request_method.py +0 -0
  41. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/custom_api_search_request.py +0 -0
  42. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/firecrawl_crawl_request.py +0 -0
  43. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/firecrawl_crawl_request_proxy_mode.py +0 -0
  44. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/firecrawl_crawl_request_scrape_headers_type_0.py +0 -0
  45. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/google_search_request.py +0 -0
  46. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/google_search_request_safe_search.py +0 -0
  47. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/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.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/health_health_get_response_health_health_get.py +0 -0
  49. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/http_validation_error.py +0 -0
  50. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/jina_crawl_request.py +0 -0
  51. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/jina_crawl_request_engine.py +0 -0
  52. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/jina_crawl_request_retain_images_type_0.py +0 -0
  53. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/jina_crawl_request_return_format.py +0 -0
  54. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/per_url_error.py +0 -0
  55. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/perplexity_search_request.py +0 -0
  56. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/perplexity_search_request_search_context_size.py +0 -0
  57. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/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.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/providers_list_response.py +0 -0
  59. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/ready_ready_get_response_ready_ready_get.py +0 -0
  60. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/search_response.py +0 -0
  61. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/tavily_crawl_request.py +0 -0
  62. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/tavily_crawl_request_extract_depth.py +0 -0
  63. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/tavily_crawl_request_output_format.py +0 -0
  64. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/validation_error.py +0 -0
  65. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/validation_error_context.py +0 -0
  66. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/vertex_ai_agent_search_request.py +0 -0
  67. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/models/web_search_result.py +0 -0
  68. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_generated/types.py +0 -0
  69. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_http.py +0 -0
  70. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_transport.py +0 -0
  71. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/_typed_endpoints.py +0 -0
  72. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/agent_search_client.py +0 -0
  73. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/client.py +0 -0
  74. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/converters.py +0 -0
  75. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/crawl_client.py +0 -0
  76. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/unique_search_proxy_sdk/search_client.py +0 -0
  77. {unique_search_proxy_sdk-2026.44.0.dev3 → unique_search_proxy_sdk-2026.44.0.dev5}/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.dev3
3
+ Version: 2026.44.0.dev5
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.dev5,<2026.44.0rc0
10
+ Requires-Dist: unique-search-proxy-core>=2026.44.0.dev10,<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.dev3"
3
+ version = "2026.44.0.dev5"
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.dev5,<2026.44.0rc0",
12
+ "unique-search-proxy-core>=2026.44.0.dev10,<2026.44.0rc0",
13
13
  ]
14
14
 
15
15
  [dependency-groups]
@@ -1,6 +1,7 @@
1
1
  """Contains all the data models used in inputs/outputs"""
2
2
 
3
3
  from .agent_search_response import AgentSearchResponse
4
+ from .answer_span_citation import AnswerSpanCitation
4
5
  from .basic_crawl_request import BasicCrawlRequest
5
6
  from .bing_agent_search_request import BingAgentSearchRequest
6
7
  from .bing_agent_search_request_freshness_type_0 import (
@@ -60,6 +61,7 @@ from .web_search_result import WebSearchResult
60
61
 
61
62
  __all__ = (
62
63
  "AgentSearchResponse",
64
+ "AnswerSpanCitation",
63
65
  "BasicCrawlRequest",
64
66
  "BingAgentSearchRequest",
65
67
  "BingAgentSearchRequestFreshnessType0",
@@ -1,13 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from collections.abc import Mapping
4
- from typing import Any, TypeVar
4
+ from typing import TYPE_CHECKING, Any, TypeVar
5
5
 
6
6
  from attrs import define as _attrs_define
7
7
  from attrs import field as _attrs_field
8
8
 
9
9
  from ..types import UNSET, Unset
10
10
 
11
+ if TYPE_CHECKING:
12
+ from ..models.answer_span_citation import AnswerSpanCitation
13
+
14
+
11
15
  T = TypeVar("T", bound="AgentSearchResponse")
12
16
 
13
17
 
@@ -15,19 +19,23 @@ T = TypeVar("T", bound="AgentSearchResponse")
15
19
  class AgentSearchResponse:
16
20
  """Result of an agent-based (grounded) search.
17
21
 
18
- Thin egress contract: opaque ``answer`` text from the provider plus ``raw``
19
- for debugging. Consumers interpret ``answer`` (JSON parsing, citations, etc.).
22
+ Thin egress contract: opaque ``answer`` text from the provider, the
23
+ citations the provider attached to it, and ``raw`` for debugging. Consumers
24
+ interpret ``answer`` (JSON parsing, mapping citations, etc.).
20
25
 
21
26
  Attributes:
22
27
  engine (str):
23
28
  query (str):
24
29
  answer (str | Unset): Agent response text as returned by the provider (opaque to the proxy) Default: ''.
30
+ citations (list[AnswerSpanCitation] | Unset): Sources cited in the answer. Only Grounding with Bing Search
31
+ reports citations; other engines return an empty list.
25
32
  raw (Any | Unset): Opaque provider payload
26
33
  """
27
34
 
28
35
  engine: str
29
36
  query: str
30
37
  answer: str | Unset = ""
38
+ citations: list[AnswerSpanCitation] | Unset = UNSET
31
39
  raw: Any | Unset = UNSET
32
40
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
33
41
 
@@ -38,6 +46,13 @@ class AgentSearchResponse:
38
46
 
39
47
  answer = self.answer
40
48
 
49
+ citations: list[dict[str, Any]] | Unset = UNSET
50
+ if not isinstance(self.citations, Unset):
51
+ citations = []
52
+ for citations_item_data in self.citations:
53
+ citations_item = citations_item_data.to_dict()
54
+ citations.append(citations_item)
55
+
41
56
  raw = self.raw
42
57
 
43
58
  field_dict: dict[str, Any] = {}
@@ -50,6 +65,8 @@ class AgentSearchResponse:
50
65
  )
51
66
  if answer is not UNSET:
52
67
  field_dict["answer"] = answer
68
+ if citations is not UNSET:
69
+ field_dict["citations"] = citations
53
70
  if raw is not UNSET:
54
71
  field_dict["raw"] = raw
55
72
 
@@ -57,6 +74,8 @@ class AgentSearchResponse:
57
74
 
58
75
  @classmethod
59
76
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
77
+ from ..models.answer_span_citation import AnswerSpanCitation
78
+
60
79
  d = dict(src_dict)
61
80
  engine = d.pop("engine")
62
81
 
@@ -64,12 +83,22 @@ class AgentSearchResponse:
64
83
 
65
84
  answer = d.pop("answer", UNSET)
66
85
 
86
+ _citations = d.pop("citations", UNSET)
87
+ citations: list[AnswerSpanCitation] | Unset = UNSET
88
+ if _citations is not UNSET:
89
+ citations = []
90
+ for citations_item_data in _citations:
91
+ citations_item = AnswerSpanCitation.from_dict(citations_item_data)
92
+
93
+ citations.append(citations_item)
94
+
67
95
  raw = d.pop("raw", UNSET)
68
96
 
69
97
  agent_search_response = cls(
70
98
  engine=engine,
71
99
  query=query,
72
100
  answer=answer,
101
+ citations=citations,
73
102
  raw=raw,
74
103
  )
75
104
 
@@ -0,0 +1,132 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ T = TypeVar("T", bound="AnswerSpanCitation")
12
+
13
+
14
+ @_attrs_define
15
+ class AnswerSpanCitation:
16
+ """A source cited at a specific span of the answer text.
17
+
18
+ Grounding with Bing Search reports these as ``url_citation`` annotations:
19
+ the agent writes a marker such as ``【4:0†source】`` into its answer, and
20
+ Foundry attaches the source to that marker's character span.
21
+
22
+ Attributes:
23
+ url (str): URL of the cited source
24
+ marker (str): Answer text between start_index and end_index
25
+ start_index (int): Character offset in the answer where the marker starts
26
+ end_index (int): Character offset in the answer just past the marker
27
+ title (None | str | Unset): Title of the cited source
28
+ output_item_id (None | str | Unset): Output item the citation is attached to, if the provider reports one
29
+ """
30
+
31
+ url: str
32
+ marker: str
33
+ start_index: int
34
+ end_index: int
35
+ title: None | str | Unset = UNSET
36
+ output_item_id: None | str | Unset = UNSET
37
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
38
+
39
+ def to_dict(self) -> dict[str, Any]:
40
+ url = self.url
41
+
42
+ marker = self.marker
43
+
44
+ start_index = self.start_index
45
+
46
+ end_index = self.end_index
47
+
48
+ title: None | str | Unset
49
+ if isinstance(self.title, Unset):
50
+ title = UNSET
51
+ else:
52
+ title = self.title
53
+
54
+ output_item_id: None | str | Unset
55
+ if isinstance(self.output_item_id, Unset):
56
+ output_item_id = UNSET
57
+ else:
58
+ output_item_id = self.output_item_id
59
+
60
+ field_dict: dict[str, Any] = {}
61
+ field_dict.update(self.additional_properties)
62
+ field_dict.update(
63
+ {
64
+ "url": url,
65
+ "marker": marker,
66
+ "startIndex": start_index,
67
+ "endIndex": end_index,
68
+ }
69
+ )
70
+ if title is not UNSET:
71
+ field_dict["title"] = title
72
+ if output_item_id is not UNSET:
73
+ field_dict["outputItemId"] = output_item_id
74
+
75
+ return field_dict
76
+
77
+ @classmethod
78
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
79
+ d = dict(src_dict)
80
+ url = d.pop("url")
81
+
82
+ marker = d.pop("marker")
83
+
84
+ start_index = d.pop("startIndex")
85
+
86
+ end_index = d.pop("endIndex")
87
+
88
+ def _parse_title(data: object) -> None | str | Unset:
89
+ if data is None:
90
+ return data
91
+ if isinstance(data, Unset):
92
+ return data
93
+ return cast(None | str | Unset, data)
94
+
95
+ title = _parse_title(d.pop("title", UNSET))
96
+
97
+ def _parse_output_item_id(data: object) -> None | str | Unset:
98
+ if data is None:
99
+ return data
100
+ if isinstance(data, Unset):
101
+ return data
102
+ return cast(None | str | Unset, data)
103
+
104
+ output_item_id = _parse_output_item_id(d.pop("outputItemId", UNSET))
105
+
106
+ answer_span_citation = cls(
107
+ url=url,
108
+ marker=marker,
109
+ start_index=start_index,
110
+ end_index=end_index,
111
+ title=title,
112
+ output_item_id=output_item_id,
113
+ )
114
+
115
+ answer_span_citation.additional_properties = d
116
+ return answer_span_citation
117
+
118
+ @property
119
+ def additional_keys(self) -> list[str]:
120
+ return list(self.additional_properties.keys())
121
+
122
+ def __getitem__(self, key: str) -> Any:
123
+ return self.additional_properties[key]
124
+
125
+ def __setitem__(self, key: str, value: Any) -> None:
126
+ self.additional_properties[key] = value
127
+
128
+ def __delitem__(self, key: str) -> None:
129
+ del self.additional_properties[key]
130
+
131
+ def __contains__(self, key: str) -> bool:
132
+ return key in self.additional_properties
@@ -12,6 +12,7 @@ from unique_search_proxy_core.errors import (
12
12
  ForbiddenTargetError,
13
13
  ProxyError,
14
14
  RateLimitedError,
15
+ ResponseTooLargeError,
15
16
  UpstreamError,
16
17
  UpstreamTimeoutError,
17
18
  ValidationProxyError,
@@ -28,6 +29,7 @@ _CODE_TO_EXCEPTION: dict[str, type[ProxyError]] = {
28
29
  ProxyErrorCode.ENGINE_NOT_CONFIGURED.value: EngineNotConfiguredError,
29
30
  ProxyErrorCode.UPSTREAM_TIMEOUT.value: UpstreamTimeoutError,
30
31
  ProxyErrorCode.EMPTY_SEARCH_RESULTS.value: EmptySearchResultsError,
32
+ ProxyErrorCode.RESPONSE_TOO_LARGE.value: ResponseTooLargeError,
31
33
  }
32
34
 
33
35