parallel-web 0.4.2__tar.gz → 0.5.0__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 (191) hide show
  1. {parallel_web-0.4.2 → parallel_web-0.5.0}/.gitignore +1 -0
  2. parallel_web-0.5.0/.release-please-manifest.json +3 -0
  3. {parallel_web-0.4.2 → parallel_web-0.5.0}/CHANGELOG.md +49 -0
  4. {parallel_web-0.4.2 → parallel_web-0.5.0}/CONTRIBUTING.md +1 -1
  5. {parallel_web-0.4.2 → parallel_web-0.5.0}/PKG-INFO +2 -2
  6. {parallel_web-0.4.2 → parallel_web-0.5.0}/api.md +24 -0
  7. {parallel_web-0.4.2 → parallel_web-0.5.0}/pyproject.toml +2 -2
  8. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_base_client.py +4 -0
  9. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_client.py +405 -3
  10. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_compat.py +9 -2
  11. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_files.py +53 -3
  12. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_qs.py +4 -1
  13. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/__init__.py +1 -1
  14. parallel_web-0.5.0/src/parallel/_utils/_path.py +127 -0
  15. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_utils.py +3 -17
  16. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_version.py +1 -1
  17. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/resources/beta/api.md +6 -3
  18. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/resources/beta/beta.py +111 -19
  19. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/resources/beta/findall.py +137 -17
  20. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/resources/beta/task_group.py +37 -17
  21. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/resources/beta/task_run.py +101 -56
  22. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/resources/task_run.py +191 -6
  23. parallel_web-0.5.0/src/parallel/types/__init__.py +49 -0
  24. parallel_web-0.5.0/src/parallel/types/advanced_extract_settings_param.py +46 -0
  25. parallel_web-0.5.0/src/parallel/types/advanced_search_settings_param.py +38 -0
  26. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/__init__.py +2 -0
  27. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/beta_extract_params.py +8 -1
  28. parallel_web-0.5.0/src/parallel/types/beta/beta_run_input.py +8 -0
  29. parallel_web-0.5.0/src/parallel/types/beta/beta_run_input_param.py +7 -0
  30. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/beta_search_params.py +11 -1
  31. parallel_web-0.5.0/src/parallel/types/beta/beta_task_run_result.py +31 -0
  32. parallel_web-0.5.0/src/parallel/types/beta/error_event.py +8 -0
  33. parallel_web-0.5.0/src/parallel/types/beta/extract_error.py +7 -0
  34. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/extract_response.py +2 -2
  35. parallel_web-0.5.0/src/parallel/types/beta/fetch_policy_param.py +7 -0
  36. parallel_web-0.5.0/src/parallel/types/beta/findall_candidates_params.py +22 -0
  37. parallel_web-0.5.0/src/parallel/types/beta/findall_candidates_response.py +29 -0
  38. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_create_params.py +2 -2
  39. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_enrich_input.py +1 -1
  40. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_enrich_params.py +1 -1
  41. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_events_response.py +1 -2
  42. parallel_web-0.5.0/src/parallel/types/beta/mcp_server.py +8 -0
  43. parallel_web-0.5.0/src/parallel/types/beta/mcp_server_param.py +7 -0
  44. parallel_web-0.5.0/src/parallel/types/beta/mcp_tool_call.py +8 -0
  45. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/search_result.py +1 -1
  46. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_add_runs_params.py +4 -2
  47. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_events_response.py +2 -2
  48. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_get_runs_response.py +2 -2
  49. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_run_create_params.py +18 -14
  50. parallel_web-0.5.0/src/parallel/types/beta/task_run_event.py +11 -0
  51. parallel_web-0.5.0/src/parallel/types/beta/task_run_events_response.py +70 -0
  52. parallel_web-0.5.0/src/parallel/types/beta/usage_item.py +7 -0
  53. parallel_web-0.5.0/src/parallel/types/beta/webhook.py +8 -0
  54. parallel_web-0.5.0/src/parallel/types/beta/webhook_param.py +7 -0
  55. parallel_web-0.5.0/src/parallel/types/client_extract_params.py +52 -0
  56. parallel_web-0.5.0/src/parallel/types/client_search_params.py +59 -0
  57. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/error_event.py +2 -2
  58. parallel_web-0.5.0/src/parallel/types/excerpt_settings_param.py +19 -0
  59. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/extract_error.py +1 -1
  60. parallel_web-0.5.0/src/parallel/types/extract_response.py +38 -0
  61. parallel_web-0.5.0/src/parallel/types/extract_result.py +26 -0
  62. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/mcp_server.py +1 -1
  63. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/mcp_server_param.py +1 -1
  64. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/mcp_tool_call.py +1 -1
  65. parallel_web-0.4.2/src/parallel/types/beta/beta_run_input.py → parallel_web-0.5.0/src/parallel/types/run_input.py +21 -17
  66. parallel_web-0.4.2/src/parallel/types/beta/beta_run_input_param.py → parallel_web-0.5.0/src/parallel/types/run_input_param.py +20 -16
  67. parallel_web-0.5.0/src/parallel/types/search_result.py +33 -0
  68. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/shared/source_policy.py +4 -2
  69. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/shared_params/source_policy.py +4 -2
  70. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/task_run.py +1 -4
  71. parallel_web-0.5.0/src/parallel/types/task_run_create_params.py +77 -0
  72. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/task_run_event.py +8 -8
  73. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/task_run_events_response.py +2 -2
  74. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/task_run_json_output.py +8 -11
  75. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/task_run_result.py +0 -1
  76. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/task_run_result_params.py +5 -0
  77. parallel_web-0.5.0/src/parallel/types/task_run_text_output.py +36 -0
  78. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/usage_item.py +1 -1
  79. parallel_web-0.5.0/src/parallel/types/web_search_result.py +23 -0
  80. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/webhook.py +1 -1
  81. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/api_resources/beta/test_findall.py +87 -10
  82. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/api_resources/beta/test_task_group.py +4 -20
  83. parallel_web-0.5.0/tests/api_resources/beta/test_task_run.py +385 -0
  84. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/api_resources/test_beta.py +7 -4
  85. parallel_web-0.5.0/tests/api_resources/test_client.py +248 -0
  86. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/api_resources/test_task_run.py +112 -1
  87. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_client.py +48 -0
  88. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_extract_files.py +9 -0
  89. parallel_web-0.5.0/tests/test_files.py +148 -0
  90. parallel_web-0.5.0/tests/test_utils/test_path.py +89 -0
  91. parallel_web-0.4.2/.release-please-manifest.json +0 -3
  92. parallel_web-0.4.2/src/parallel/types/__init__.py +0 -27
  93. parallel_web-0.4.2/src/parallel/types/beta/beta_task_run_result.py +0 -88
  94. parallel_web-0.4.2/src/parallel/types/task_run_create_params.py +0 -44
  95. parallel_web-0.4.2/src/parallel/types/task_run_text_output.py +0 -39
  96. parallel_web-0.4.2/tests/api_resources/beta/test_task_run.py +0 -354
  97. parallel_web-0.4.2/tests/test_deepcopy.py +0 -58
  98. parallel_web-0.4.2/tests/test_files.py +0 -51
  99. {parallel_web-0.4.2 → parallel_web-0.5.0}/LICENSE +0 -0
  100. {parallel_web-0.4.2 → parallel_web-0.5.0}/README.md +0 -0
  101. {parallel_web-0.4.2 → parallel_web-0.5.0}/SECURITY.md +0 -0
  102. {parallel_web-0.4.2 → parallel_web-0.5.0}/bin/check-release-environment +0 -0
  103. {parallel_web-0.4.2 → parallel_web-0.5.0}/bin/publish-pypi +0 -0
  104. {parallel_web-0.4.2 → parallel_web-0.5.0}/examples/.keep +0 -0
  105. {parallel_web-0.4.2 → parallel_web-0.5.0}/noxfile.py +0 -0
  106. {parallel_web-0.4.2 → parallel_web-0.5.0}/release-please-config.json +0 -0
  107. {parallel_web-0.4.2 → parallel_web-0.5.0}/requirements-dev.lock +0 -0
  108. {parallel_web-0.4.2 → parallel_web-0.5.0}/requirements.lock +0 -0
  109. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/__init__.py +0 -0
  110. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_constants.py +0 -0
  111. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_exceptions.py +0 -0
  112. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_models.py +0 -0
  113. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_resource.py +0 -0
  114. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_response.py +0 -0
  115. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_streaming.py +0 -0
  116. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_types.py +0 -0
  117. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_compat.py +0 -0
  118. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_datetime_parse.py +0 -0
  119. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_json.py +0 -0
  120. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_logs.py +0 -0
  121. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_proxy.py +0 -0
  122. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_reflection.py +0 -0
  123. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_resources_proxy.py +0 -0
  124. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_streams.py +0 -0
  125. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_sync.py +0 -0
  126. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_transform.py +0 -0
  127. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/_utils/_typing.py +0 -0
  128. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/lib/.keep +0 -0
  129. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/lib/__init__.py +0 -0
  130. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/lib/_parsing/__init__.py +0 -0
  131. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/lib/_parsing/_task_run_result.py +0 -0
  132. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/lib/_parsing/_task_spec.py +0 -0
  133. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/lib/_pydantic.py +0 -0
  134. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/lib/_time.py +0 -0
  135. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/py.typed +0 -0
  136. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/resources/__init__.py +0 -0
  137. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/resources/beta/__init__.py +0 -0
  138. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/auto_schema.py +0 -0
  139. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/auto_schema_param.py +0 -0
  140. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/excerpt_settings_param.py +0 -0
  141. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/extract_result.py +0 -0
  142. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_candidate_match_status_event.py +0 -0
  143. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_events_params.py +0 -0
  144. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_extend_params.py +0 -0
  145. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_ingest_params.py +0 -0
  146. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_run.py +0 -0
  147. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_run_result.py +0 -0
  148. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_run_status_event.py +0 -0
  149. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_schema.py +0 -0
  150. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/findall_schema_updated_event.py +0 -0
  151. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/parallel_beta_param.py +0 -0
  152. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group.py +0 -0
  153. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_create_params.py +0 -0
  154. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_events_params.py +0 -0
  155. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_get_runs_params.py +0 -0
  156. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_run_response.py +0 -0
  157. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_status.py +0 -0
  158. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/task_run_result_params.py +0 -0
  159. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/beta/web_search_result.py +0 -0
  160. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/citation.py +0 -0
  161. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/fetch_policy_param.py +0 -0
  162. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/field_basis.py +0 -0
  163. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/json_schema.py +0 -0
  164. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/json_schema_param.py +0 -0
  165. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/parsed_task_run_result.py +0 -0
  166. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/shared/__init__.py +0 -0
  167. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/shared/error_object.py +0 -0
  168. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/shared/error_response.py +0 -0
  169. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/shared/warning.py +0 -0
  170. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/shared_params/__init__.py +0 -0
  171. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/task_spec.py +0 -0
  172. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/task_spec_param.py +0 -0
  173. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/text_schema.py +0 -0
  174. {parallel_web-0.4.2 → parallel_web-0.5.0}/src/parallel/types/text_schema_param.py +0 -0
  175. {parallel_web-0.4.2/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/webhook_param.py +0 -0
  176. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/__init__.py +0 -0
  177. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/api_resources/__init__.py +0 -0
  178. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/api_resources/beta/__init__.py +0 -0
  179. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/conftest.py +0 -0
  180. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/sample_file.txt +0 -0
  181. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_models.py +0 -0
  182. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_qs.py +0 -0
  183. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_required_args.py +0 -0
  184. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_response.py +0 -0
  185. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_streaming.py +0 -0
  186. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_transform.py +0 -0
  187. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_utils/test_datetime_parse.py +0 -0
  188. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_utils/test_json.py +0 -0
  189. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_utils/test_proxy.py +0 -0
  190. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/test_utils/test_typing.py +0 -0
  191. {parallel_web-0.4.2 → parallel_web-0.5.0}/tests/utils.py +0 -0
@@ -1,4 +1,5 @@
1
1
  .prism.log
2
+ .stdy.log
2
3
  _dev
3
4
 
4
5
  __pycache__
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.5.0"
3
+ }
@@ -1,5 +1,54 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0 (2026-04-21)
4
+
5
+ Full Changelog: [v0.4.2...v0.5.0](https://github.com/parallel-web/parallel-sdk-python/compare/v0.4.2...v0.5.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** Add Findall Candidates ([57c4ae2](https://github.com/parallel-web/parallel-sdk-python/commit/57c4ae25d77a8627c6be3673312bfd7f373e17da))
10
+ * **api:** Add Search and Extract v1 and associated types ([ea487f3](https://github.com/parallel-web/parallel-sdk-python/commit/ea487f32b73aee955f662d1fa225841421ce1ba3))
11
+ * **api:** manual - add AdvancedSearchSettings and AdvancedExtractSettings models ([5836a6f](https://github.com/parallel-web/parallel-sdk-python/commit/5836a6fbe8db3a3509556442067f087918edb2bb))
12
+ * **api:** manual updates - update openapi spec ([02db6c0](https://github.com/parallel-web/parallel-sdk-python/commit/02db6c07ec5eb254b18732fcb6f7dc43e31de471))
13
+ * **api:** Remove full_content from OpenAPI Spec ([7a4d651](https://github.com/parallel-web/parallel-sdk-python/commit/7a4d651c3e9f35334175f82daaf6392e9f76dee5))
14
+ * **api:** Search/Extract v1 with advanced_settings and max_results ([4ded29c](https://github.com/parallel-web/parallel-sdk-python/commit/4ded29c2382594f1735101753a0b09a2f7c6972e))
15
+ * **api:** Update OpenAPI spec ([58f19f3](https://github.com/parallel-web/parallel-sdk-python/commit/58f19f38174fb71dc906049c0aef6610ac67971e))
16
+ * **api:** Update OpenAPI spec ([fae95f4](https://github.com/parallel-web/parallel-sdk-python/commit/fae95f4f2c7cb60ebc0babc4fe540617e3334b2d))
17
+ * **internal:** implement indices array format for query and form serialization ([3df5972](https://github.com/parallel-web/parallel-sdk-python/commit/3df5972e34c9aa1709eabc4eb5b8cbbc0adccae2))
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **client:** preserve hardcoded query params when merging with user params ([08080bc](https://github.com/parallel-web/parallel-sdk-python/commit/08080bc22c415881cc9f9b05bc22f09ab83c7e8d))
23
+ * **deps:** bump minimum typing-extensions version ([964a46d](https://github.com/parallel-web/parallel-sdk-python/commit/964a46ddfc9ead64e4105e42192a780bc91716b0))
24
+ * ensure file data are only sent as 1 parameter ([1c15cc0](https://github.com/parallel-web/parallel-sdk-python/commit/1c15cc00b1ae223db8e51893ce23b9a2193e3ae7))
25
+ * **pydantic:** do not pass `by_alias` unless set ([f0793c1](https://github.com/parallel-web/parallel-sdk-python/commit/f0793c171465dd57d0fbf82a3bb2281d046f500e))
26
+ * sanitize endpoint path params ([5931597](https://github.com/parallel-web/parallel-sdk-python/commit/59315972d27246485be5cb52671aecaa3aa46253))
27
+
28
+
29
+ ### Performance Improvements
30
+
31
+ * **client:** optimize file structure copying in multipart requests ([00e8564](https://github.com/parallel-web/parallel-sdk-python/commit/00e856464a2828693483a704de83ee5d6c4fe19e))
32
+
33
+
34
+ ### Chores
35
+
36
+ * **ci:** skip lint on metadata-only changes ([403448c](https://github.com/parallel-web/parallel-sdk-python/commit/403448c7760e70fe0f4b3998a20f048910e91cd6))
37
+ * **internal:** tweak CI branches ([014c802](https://github.com/parallel-web/parallel-sdk-python/commit/014c80287318df0db6207df1579be00c4717f24d))
38
+ * **internal:** update gitignore ([1f4f6b0](https://github.com/parallel-web/parallel-sdk-python/commit/1f4f6b0e5d2a46e1a5457879e937ea5aa551073c))
39
+ * **tests:** bump steady to v0.19.4 ([ebee2e7](https://github.com/parallel-web/parallel-sdk-python/commit/ebee2e761e2a8587cc6aa4c2decfd6310092b039))
40
+ * **tests:** bump steady to v0.19.5 ([2774099](https://github.com/parallel-web/parallel-sdk-python/commit/2774099f753bc0826e9c6b6e9fbb40d4e72e3405))
41
+ * **tests:** bump steady to v0.19.6 ([8e3ee3d](https://github.com/parallel-web/parallel-sdk-python/commit/8e3ee3d04dc149b2bcedb0e4acd92474fafd8d05))
42
+ * **tests:** bump steady to v0.19.7 ([4bcf12e](https://github.com/parallel-web/parallel-sdk-python/commit/4bcf12e670b7997e23ade3d991711fe1ef741e35))
43
+ * **tests:** bump steady to v0.20.1 ([d82ce60](https://github.com/parallel-web/parallel-sdk-python/commit/d82ce601c5687553b0e96990e418289fd8a14e00))
44
+ * **tests:** bump steady to v0.20.2 ([746ca39](https://github.com/parallel-web/parallel-sdk-python/commit/746ca39c749f899dc9137a2f9be5de9aa39210c6))
45
+ * **tests:** bump steady to v0.22.1 ([dec81af](https://github.com/parallel-web/parallel-sdk-python/commit/dec81afb89f46850635daa89e64debe15717d053))
46
+
47
+
48
+ ### Refactors
49
+
50
+ * **tests:** switch from prism to steady ([032745e](https://github.com/parallel-web/parallel-sdk-python/commit/032745ea1a03b3d2516b789a28a3c8b8034660d8))
51
+
3
52
  ## 0.4.2 (2026-03-09)
4
53
 
5
54
  Full Changelog: [v0.4.1...v0.4.2](https://github.com/parallel-web/parallel-sdk-python/compare/v0.4.1...v0.4.2)
@@ -85,7 +85,7 @@ $ pip install ./path-to-wheel-file.whl
85
85
 
86
86
  ## Running tests
87
87
 
88
- Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
88
+ Most tests require you to [set up a mock server](https://github.com/dgellow/steady) against the OpenAPI spec to run the tests.
89
89
 
90
90
  ```sh
91
91
  $ ./scripts/mock
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: parallel-web
3
- Version: 0.4.2
3
+ Version: 0.5.0
4
4
  Summary: The official Python library for the Parallel API
5
5
  Project-URL: Homepage, https://github.com/parallel-web/parallel-sdk-python
6
6
  Project-URL: Repository, https://github.com/parallel-web/parallel-sdk-python
@@ -27,7 +27,7 @@ Requires-Dist: distro<2,>=1.7.0
27
27
  Requires-Dist: httpx<1,>=0.23.0
28
28
  Requires-Dist: pydantic<3,>=1.9.0
29
29
  Requires-Dist: sniffio
30
- Requires-Dist: typing-extensions<5,>=4.10
30
+ Requires-Dist: typing-extensions<5,>=4.14
31
31
  Provides-Extra: aiohttp
32
32
  Requires-Dist: aiohttp; extra == 'aiohttp'
33
33
  Requires-Dist: httpx-aiohttp>=0.1.9; extra == 'aiohttp'
@@ -4,6 +4,30 @@
4
4
  from parallel.types import ErrorObject, ErrorResponse, SourcePolicy, Warning
5
5
  ```
6
6
 
7
+ # Parallel
8
+
9
+ Types:
10
+
11
+ ```python
12
+ from parallel.types import (
13
+ AdvancedExtractSettings,
14
+ AdvancedSearchSettings,
15
+ ExcerptSettings,
16
+ ExtractError,
17
+ ExtractResponse,
18
+ ExtractResult,
19
+ FetchPolicy,
20
+ SearchResult,
21
+ UsageItem,
22
+ WebSearchResult,
23
+ )
24
+ ```
25
+
26
+ Methods:
27
+
28
+ - <code title="post /v1/extract">client.<a href="./src/parallel/_client.py">extract</a>(\*\*<a href="src/parallel/types/client_extract_params.py">params</a>) -> <a href="./src/parallel/types/extract_response.py">ExtractResponse</a></code>
29
+ - <code title="post /v1/search">client.<a href="./src/parallel/_client.py">search</a>(\*\*<a href="src/parallel/types/client_search_params.py">params</a>) -> <a href="./src/parallel/types/search_result.py">SearchResult</a></code>
30
+
7
31
  # TaskRun
8
32
 
9
33
  Types:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "parallel-web"
3
- version = "0.4.2"
3
+ version = "0.5.0"
4
4
  description = "The official Python library for the Parallel API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -11,7 +11,7 @@ authors = [
11
11
  dependencies = [
12
12
  "httpx>=0.23.0, <1",
13
13
  "pydantic>=1.9.0, <3",
14
- "typing-extensions>=4.10, <5",
14
+ "typing-extensions>=4.14, <5",
15
15
  "anyio>=3.5.0, <5",
16
16
  "distro>=1.7.0, <2",
17
17
  "sniffio",
@@ -540,6 +540,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
540
540
  files = cast(HttpxRequestFiles, ForceMultipartDict())
541
541
 
542
542
  prepared_url = self._prepare_url(options.url)
543
+ # preserve hard-coded query params from the url
544
+ if params and prepared_url.query:
545
+ params = {**dict(prepared_url.params.items()), **params}
546
+ prepared_url = prepared_url.copy_with(raw_path=prepared_url.raw_path.split(b"?", 1)[0])
543
547
  if "_" in prepared_url.host:
544
548
  # work around https://github.com/encode/httpx/discussions/2880
545
549
  kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
@@ -3,32 +3,54 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import os
6
- from typing import TYPE_CHECKING, Any, Mapping
7
- from typing_extensions import Self, override
6
+ from typing import TYPE_CHECKING, Any, Mapping, Optional
7
+ from typing_extensions import Self, Literal, override
8
8
 
9
9
  import httpx
10
10
 
11
11
  from . import _exceptions
12
12
  from ._qs import Querystring
13
+ from .types import client_search_params, client_extract_params
13
14
  from ._types import (
15
+ Body,
14
16
  Omit,
17
+ Query,
18
+ Headers,
15
19
  Timeout,
16
20
  NotGiven,
17
21
  Transport,
18
22
  ProxiesTypes,
19
23
  RequestOptions,
24
+ SequenceNotStr,
25
+ omit,
20
26
  not_given,
21
27
  )
22
- from ._utils import is_given, get_async_library
28
+ from ._utils import (
29
+ is_given,
30
+ maybe_transform,
31
+ get_async_library,
32
+ async_maybe_transform,
33
+ )
23
34
  from ._compat import cached_property
24
35
  from ._version import __version__
36
+ from ._response import (
37
+ to_raw_response_wrapper,
38
+ to_streamed_response_wrapper,
39
+ async_to_raw_response_wrapper,
40
+ async_to_streamed_response_wrapper,
41
+ )
25
42
  from ._streaming import Stream as Stream, AsyncStream as AsyncStream
26
43
  from ._exceptions import ParallelError, APIStatusError
27
44
  from ._base_client import (
28
45
  DEFAULT_MAX_RETRIES,
29
46
  SyncAPIClient,
30
47
  AsyncAPIClient,
48
+ make_request_options,
31
49
  )
50
+ from .types.search_result import SearchResult
51
+ from .types.extract_response import ExtractResponse
52
+ from .types.advanced_search_settings_param import AdvancedSearchSettingsParam
53
+ from .types.advanced_extract_settings_param import AdvancedExtractSettingsParam
32
54
 
33
55
  if TYPE_CHECKING:
34
56
  from .resources import beta, task_run
@@ -108,6 +130,13 @@ class Parallel(SyncAPIClient):
108
130
 
109
131
  Clients submit a natural-language objective with an optional input schema; the service plans retrieval, fetches relevant URLs, and returns outputs that conform to a provided or inferred JSON schema. Supports deep research style queries and can return rich structured JSON outputs. Processors trade-off between cost, latency, and quality. Each processor supports calibrated confidences.
110
132
  - Output metadata: citations, excerpts, reasoning, and confidence per field
133
+
134
+ Task Groups enable batch execution of many independent Task runs with group-level monitoring and failure handling.
135
+ - Submit hundreds or thousands of Tasks as a single group
136
+ - Observe group progress and receive results as they complete
137
+ - Real-time updates via Server-Sent Events (SSE)
138
+ - Add tasks to an existing group while it is running
139
+ - Group-level retry and error aggregation
111
140
  """
112
141
  from .resources.task_run import TaskRunResource
113
142
 
@@ -198,6 +227,161 @@ class Parallel(SyncAPIClient):
198
227
  # client.with_options(timeout=10).foo.create(...)
199
228
  with_options = copy
200
229
 
230
+ def extract(
231
+ self,
232
+ *,
233
+ urls: SequenceNotStr[str],
234
+ advanced_settings: Optional[AdvancedExtractSettingsParam] | Omit = omit,
235
+ client_model: Optional[str] | Omit = omit,
236
+ max_chars_total: Optional[int] | Omit = omit,
237
+ objective: Optional[str] | Omit = omit,
238
+ search_queries: Optional[SequenceNotStr[str]] | Omit = omit,
239
+ session_id: Optional[str] | Omit = omit,
240
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
241
+ # The extra values given here take precedence over values defined on the client or passed to this method.
242
+ extra_headers: Headers | None = None,
243
+ extra_query: Query | None = None,
244
+ extra_body: Body | None = None,
245
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
246
+ ) -> ExtractResponse:
247
+ """
248
+ Extracts relevant content from specific web URLs.
249
+
250
+ The legacy Extract API reference is available
251
+ [here](https://docs.parallel.ai/api-reference/legacy/extract-beta/extract).
252
+
253
+ Args:
254
+ urls: URLs to extract content from. Up to 20 URLs.
255
+
256
+ advanced_settings: Advanced extract configuration.
257
+
258
+ These settings may impact result quality and latency unless used carefully. See
259
+ https://docs.parallel.ai/search/advanced-extract-settings for more info.
260
+
261
+ client_model: The model generating this request and consuming the results. Enables
262
+ optimizations and tailors default settings for the model's capabilities.
263
+
264
+ max_chars_total: Upper bound on total characters across excerpts from all extracted results.
265
+
266
+ objective: As in SearchRequest, a natural-language description of the underlying question
267
+ or goal driving the request. Used together with search_queries to focus excerpts
268
+ on the most relevant content.
269
+
270
+ search_queries: Optional keyword search queries, as in SearchRequest. Used together with
271
+ objective to focus excerpts on the most relevant content.
272
+
273
+ session_id: Session identifier to track calls across separate search and extract calls, to
274
+ be used as part of a larger task. Specifying it may give better contextual
275
+ results for subsequent API calls.
276
+
277
+ extra_headers: Send extra headers
278
+
279
+ extra_query: Add additional query parameters to the request
280
+
281
+ extra_body: Add additional JSON properties to the request
282
+
283
+ timeout: Override the client-level default timeout for this request, in seconds
284
+ """
285
+ return self.post(
286
+ "/v1/extract",
287
+ body=maybe_transform(
288
+ {
289
+ "urls": urls,
290
+ "advanced_settings": advanced_settings,
291
+ "client_model": client_model,
292
+ "max_chars_total": max_chars_total,
293
+ "objective": objective,
294
+ "search_queries": search_queries,
295
+ "session_id": session_id,
296
+ },
297
+ client_extract_params.ClientExtractParams,
298
+ ),
299
+ options=make_request_options(
300
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
301
+ ),
302
+ cast_to=ExtractResponse,
303
+ )
304
+
305
+ def search(
306
+ self,
307
+ *,
308
+ search_queries: SequenceNotStr[str],
309
+ advanced_settings: Optional[AdvancedSearchSettingsParam] | Omit = omit,
310
+ client_model: Optional[str] | Omit = omit,
311
+ max_chars_total: Optional[int] | Omit = omit,
312
+ mode: Optional[Literal["basic", "advanced"]] | Omit = omit,
313
+ objective: Optional[str] | Omit = omit,
314
+ session_id: Optional[str] | Omit = omit,
315
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
316
+ # The extra values given here take precedence over values defined on the client or passed to this method.
317
+ extra_headers: Headers | None = None,
318
+ extra_query: Query | None = None,
319
+ extra_body: Body | None = None,
320
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
321
+ ) -> SearchResult:
322
+ """
323
+ Searches the web.
324
+
325
+ The legacy Search API reference is available
326
+ [here](https://docs.parallel.ai/api-reference/legacy/search-beta/search).
327
+
328
+ Args:
329
+ search_queries: Concise keyword search queries, 3-6 words each. At least one query is required,
330
+ provide 2-3 for best results. Used together with objective to focus results on
331
+ the most relevant content.
332
+
333
+ advanced_settings: Advanced search configuration.
334
+
335
+ These settings may impact result quality and latency unless used carefully. See
336
+ https://docs.parallel.ai/search/advanced-search-settings for more info.
337
+
338
+ client_model: The model generating this request and consuming the results. Enables
339
+ optimizations and tailors default settings for the model's capabilities.
340
+
341
+ max_chars_total: Upper bound on total characters across excerpts from all results.
342
+
343
+ mode: Search mode preset: supported values are `basic` and `advanced`. Basic mode
344
+ offers the lowest latency and works best with 2-3 high-quality search_queries.
345
+ Advanced mode provides higher quality with more advanced retrieval and
346
+ compression. Defaults to `advanced` when omitted.
347
+
348
+ objective: Natural-language description of the underlying question or goal driving the
349
+ search. Used together with search_queries to focus results on the most relevant
350
+ content. Should be self-contained with enough context to understand the intent
351
+ of the search.
352
+
353
+ session_id: Session identifier to track calls across separate search and extract calls, to
354
+ be used as part of a larger task. Specifying it may give better contextual
355
+ results for subsequent API calls.
356
+
357
+ extra_headers: Send extra headers
358
+
359
+ extra_query: Add additional query parameters to the request
360
+
361
+ extra_body: Add additional JSON properties to the request
362
+
363
+ timeout: Override the client-level default timeout for this request, in seconds
364
+ """
365
+ return self.post(
366
+ "/v1/search",
367
+ body=maybe_transform(
368
+ {
369
+ "search_queries": search_queries,
370
+ "advanced_settings": advanced_settings,
371
+ "client_model": client_model,
372
+ "max_chars_total": max_chars_total,
373
+ "mode": mode,
374
+ "objective": objective,
375
+ "session_id": session_id,
376
+ },
377
+ client_search_params.ClientSearchParams,
378
+ ),
379
+ options=make_request_options(
380
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
381
+ ),
382
+ cast_to=SearchResult,
383
+ )
384
+
201
385
  @override
202
386
  def _make_status_error(
203
387
  self,
@@ -293,6 +477,13 @@ class AsyncParallel(AsyncAPIClient):
293
477
 
294
478
  Clients submit a natural-language objective with an optional input schema; the service plans retrieval, fetches relevant URLs, and returns outputs that conform to a provided or inferred JSON schema. Supports deep research style queries and can return rich structured JSON outputs. Processors trade-off between cost, latency, and quality. Each processor supports calibrated confidences.
295
479
  - Output metadata: citations, excerpts, reasoning, and confidence per field
480
+
481
+ Task Groups enable batch execution of many independent Task runs with group-level monitoring and failure handling.
482
+ - Submit hundreds or thousands of Tasks as a single group
483
+ - Observe group progress and receive results as they complete
484
+ - Real-time updates via Server-Sent Events (SSE)
485
+ - Add tasks to an existing group while it is running
486
+ - Group-level retry and error aggregation
296
487
  """
297
488
  from .resources.task_run import AsyncTaskRunResource
298
489
 
@@ -383,6 +574,161 @@ class AsyncParallel(AsyncAPIClient):
383
574
  # client.with_options(timeout=10).foo.create(...)
384
575
  with_options = copy
385
576
 
577
+ async def extract(
578
+ self,
579
+ *,
580
+ urls: SequenceNotStr[str],
581
+ advanced_settings: Optional[AdvancedExtractSettingsParam] | Omit = omit,
582
+ client_model: Optional[str] | Omit = omit,
583
+ max_chars_total: Optional[int] | Omit = omit,
584
+ objective: Optional[str] | Omit = omit,
585
+ search_queries: Optional[SequenceNotStr[str]] | Omit = omit,
586
+ session_id: Optional[str] | Omit = omit,
587
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
588
+ # The extra values given here take precedence over values defined on the client or passed to this method.
589
+ extra_headers: Headers | None = None,
590
+ extra_query: Query | None = None,
591
+ extra_body: Body | None = None,
592
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
593
+ ) -> ExtractResponse:
594
+ """
595
+ Extracts relevant content from specific web URLs.
596
+
597
+ The legacy Extract API reference is available
598
+ [here](https://docs.parallel.ai/api-reference/legacy/extract-beta/extract).
599
+
600
+ Args:
601
+ urls: URLs to extract content from. Up to 20 URLs.
602
+
603
+ advanced_settings: Advanced extract configuration.
604
+
605
+ These settings may impact result quality and latency unless used carefully. See
606
+ https://docs.parallel.ai/search/advanced-extract-settings for more info.
607
+
608
+ client_model: The model generating this request and consuming the results. Enables
609
+ optimizations and tailors default settings for the model's capabilities.
610
+
611
+ max_chars_total: Upper bound on total characters across excerpts from all extracted results.
612
+
613
+ objective: As in SearchRequest, a natural-language description of the underlying question
614
+ or goal driving the request. Used together with search_queries to focus excerpts
615
+ on the most relevant content.
616
+
617
+ search_queries: Optional keyword search queries, as in SearchRequest. Used together with
618
+ objective to focus excerpts on the most relevant content.
619
+
620
+ session_id: Session identifier to track calls across separate search and extract calls, to
621
+ be used as part of a larger task. Specifying it may give better contextual
622
+ results for subsequent API calls.
623
+
624
+ extra_headers: Send extra headers
625
+
626
+ extra_query: Add additional query parameters to the request
627
+
628
+ extra_body: Add additional JSON properties to the request
629
+
630
+ timeout: Override the client-level default timeout for this request, in seconds
631
+ """
632
+ return await self.post(
633
+ "/v1/extract",
634
+ body=await async_maybe_transform(
635
+ {
636
+ "urls": urls,
637
+ "advanced_settings": advanced_settings,
638
+ "client_model": client_model,
639
+ "max_chars_total": max_chars_total,
640
+ "objective": objective,
641
+ "search_queries": search_queries,
642
+ "session_id": session_id,
643
+ },
644
+ client_extract_params.ClientExtractParams,
645
+ ),
646
+ options=make_request_options(
647
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
648
+ ),
649
+ cast_to=ExtractResponse,
650
+ )
651
+
652
+ async def search(
653
+ self,
654
+ *,
655
+ search_queries: SequenceNotStr[str],
656
+ advanced_settings: Optional[AdvancedSearchSettingsParam] | Omit = omit,
657
+ client_model: Optional[str] | Omit = omit,
658
+ max_chars_total: Optional[int] | Omit = omit,
659
+ mode: Optional[Literal["basic", "advanced"]] | Omit = omit,
660
+ objective: Optional[str] | Omit = omit,
661
+ session_id: Optional[str] | Omit = omit,
662
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
663
+ # The extra values given here take precedence over values defined on the client or passed to this method.
664
+ extra_headers: Headers | None = None,
665
+ extra_query: Query | None = None,
666
+ extra_body: Body | None = None,
667
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
668
+ ) -> SearchResult:
669
+ """
670
+ Searches the web.
671
+
672
+ The legacy Search API reference is available
673
+ [here](https://docs.parallel.ai/api-reference/legacy/search-beta/search).
674
+
675
+ Args:
676
+ search_queries: Concise keyword search queries, 3-6 words each. At least one query is required,
677
+ provide 2-3 for best results. Used together with objective to focus results on
678
+ the most relevant content.
679
+
680
+ advanced_settings: Advanced search configuration.
681
+
682
+ These settings may impact result quality and latency unless used carefully. See
683
+ https://docs.parallel.ai/search/advanced-search-settings for more info.
684
+
685
+ client_model: The model generating this request and consuming the results. Enables
686
+ optimizations and tailors default settings for the model's capabilities.
687
+
688
+ max_chars_total: Upper bound on total characters across excerpts from all results.
689
+
690
+ mode: Search mode preset: supported values are `basic` and `advanced`. Basic mode
691
+ offers the lowest latency and works best with 2-3 high-quality search_queries.
692
+ Advanced mode provides higher quality with more advanced retrieval and
693
+ compression. Defaults to `advanced` when omitted.
694
+
695
+ objective: Natural-language description of the underlying question or goal driving the
696
+ search. Used together with search_queries to focus results on the most relevant
697
+ content. Should be self-contained with enough context to understand the intent
698
+ of the search.
699
+
700
+ session_id: Session identifier to track calls across separate search and extract calls, to
701
+ be used as part of a larger task. Specifying it may give better contextual
702
+ results for subsequent API calls.
703
+
704
+ extra_headers: Send extra headers
705
+
706
+ extra_query: Add additional query parameters to the request
707
+
708
+ extra_body: Add additional JSON properties to the request
709
+
710
+ timeout: Override the client-level default timeout for this request, in seconds
711
+ """
712
+ return await self.post(
713
+ "/v1/search",
714
+ body=await async_maybe_transform(
715
+ {
716
+ "search_queries": search_queries,
717
+ "advanced_settings": advanced_settings,
718
+ "client_model": client_model,
719
+ "max_chars_total": max_chars_total,
720
+ "mode": mode,
721
+ "objective": objective,
722
+ "session_id": session_id,
723
+ },
724
+ client_search_params.ClientSearchParams,
725
+ ),
726
+ options=make_request_options(
727
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
728
+ ),
729
+ cast_to=SearchResult,
730
+ )
731
+
386
732
  @override
387
733
  def _make_status_error(
388
734
  self,
@@ -423,12 +769,26 @@ class ParallelWithRawResponse:
423
769
  def __init__(self, client: Parallel) -> None:
424
770
  self._client = client
425
771
 
772
+ self.extract = to_raw_response_wrapper(
773
+ client.extract,
774
+ )
775
+ self.search = to_raw_response_wrapper(
776
+ client.search,
777
+ )
778
+
426
779
  @cached_property
427
780
  def task_run(self) -> task_run.TaskRunResourceWithRawResponse:
428
781
  """The Task API executes web research and extraction tasks.
429
782
 
430
783
  Clients submit a natural-language objective with an optional input schema; the service plans retrieval, fetches relevant URLs, and returns outputs that conform to a provided or inferred JSON schema. Supports deep research style queries and can return rich structured JSON outputs. Processors trade-off between cost, latency, and quality. Each processor supports calibrated confidences.
431
784
  - Output metadata: citations, excerpts, reasoning, and confidence per field
785
+
786
+ Task Groups enable batch execution of many independent Task runs with group-level monitoring and failure handling.
787
+ - Submit hundreds or thousands of Tasks as a single group
788
+ - Observe group progress and receive results as they complete
789
+ - Real-time updates via Server-Sent Events (SSE)
790
+ - Add tasks to an existing group while it is running
791
+ - Group-level retry and error aggregation
432
792
  """
433
793
  from .resources.task_run import TaskRunResourceWithRawResponse
434
794
 
@@ -447,12 +807,26 @@ class AsyncParallelWithRawResponse:
447
807
  def __init__(self, client: AsyncParallel) -> None:
448
808
  self._client = client
449
809
 
810
+ self.extract = async_to_raw_response_wrapper(
811
+ client.extract,
812
+ )
813
+ self.search = async_to_raw_response_wrapper(
814
+ client.search,
815
+ )
816
+
450
817
  @cached_property
451
818
  def task_run(self) -> task_run.AsyncTaskRunResourceWithRawResponse:
452
819
  """The Task API executes web research and extraction tasks.
453
820
 
454
821
  Clients submit a natural-language objective with an optional input schema; the service plans retrieval, fetches relevant URLs, and returns outputs that conform to a provided or inferred JSON schema. Supports deep research style queries and can return rich structured JSON outputs. Processors trade-off between cost, latency, and quality. Each processor supports calibrated confidences.
455
822
  - Output metadata: citations, excerpts, reasoning, and confidence per field
823
+
824
+ Task Groups enable batch execution of many independent Task runs with group-level monitoring and failure handling.
825
+ - Submit hundreds or thousands of Tasks as a single group
826
+ - Observe group progress and receive results as they complete
827
+ - Real-time updates via Server-Sent Events (SSE)
828
+ - Add tasks to an existing group while it is running
829
+ - Group-level retry and error aggregation
456
830
  """
457
831
  from .resources.task_run import AsyncTaskRunResourceWithRawResponse
458
832
 
@@ -471,12 +845,26 @@ class ParallelWithStreamedResponse:
471
845
  def __init__(self, client: Parallel) -> None:
472
846
  self._client = client
473
847
 
848
+ self.extract = to_streamed_response_wrapper(
849
+ client.extract,
850
+ )
851
+ self.search = to_streamed_response_wrapper(
852
+ client.search,
853
+ )
854
+
474
855
  @cached_property
475
856
  def task_run(self) -> task_run.TaskRunResourceWithStreamingResponse:
476
857
  """The Task API executes web research and extraction tasks.
477
858
 
478
859
  Clients submit a natural-language objective with an optional input schema; the service plans retrieval, fetches relevant URLs, and returns outputs that conform to a provided or inferred JSON schema. Supports deep research style queries and can return rich structured JSON outputs. Processors trade-off between cost, latency, and quality. Each processor supports calibrated confidences.
479
860
  - Output metadata: citations, excerpts, reasoning, and confidence per field
861
+
862
+ Task Groups enable batch execution of many independent Task runs with group-level monitoring and failure handling.
863
+ - Submit hundreds or thousands of Tasks as a single group
864
+ - Observe group progress and receive results as they complete
865
+ - Real-time updates via Server-Sent Events (SSE)
866
+ - Add tasks to an existing group while it is running
867
+ - Group-level retry and error aggregation
480
868
  """
481
869
  from .resources.task_run import TaskRunResourceWithStreamingResponse
482
870
 
@@ -495,12 +883,26 @@ class AsyncParallelWithStreamedResponse:
495
883
  def __init__(self, client: AsyncParallel) -> None:
496
884
  self._client = client
497
885
 
886
+ self.extract = async_to_streamed_response_wrapper(
887
+ client.extract,
888
+ )
889
+ self.search = async_to_streamed_response_wrapper(
890
+ client.search,
891
+ )
892
+
498
893
  @cached_property
499
894
  def task_run(self) -> task_run.AsyncTaskRunResourceWithStreamingResponse:
500
895
  """The Task API executes web research and extraction tasks.
501
896
 
502
897
  Clients submit a natural-language objective with an optional input schema; the service plans retrieval, fetches relevant URLs, and returns outputs that conform to a provided or inferred JSON schema. Supports deep research style queries and can return rich structured JSON outputs. Processors trade-off between cost, latency, and quality. Each processor supports calibrated confidences.
503
898
  - Output metadata: citations, excerpts, reasoning, and confidence per field
899
+
900
+ Task Groups enable batch execution of many independent Task runs with group-level monitoring and failure handling.
901
+ - Submit hundreds or thousands of Tasks as a single group
902
+ - Observe group progress and receive results as they complete
903
+ - Real-time updates via Server-Sent Events (SSE)
904
+ - Add tasks to an existing group while it is running
905
+ - Group-level retry and error aggregation
504
906
  """
505
907
  from .resources.task_run import AsyncTaskRunResourceWithStreamingResponse
506
908