parallel-web 0.4.1__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 (192) hide show
  1. {parallel_web-0.4.1 → 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.1 → parallel_web-0.5.0}/CHANGELOG.md +73 -0
  4. {parallel_web-0.4.1 → parallel_web-0.5.0}/CONTRIBUTING.md +2 -3
  5. {parallel_web-0.4.1 → parallel_web-0.5.0}/PKG-INFO +4 -3
  6. {parallel_web-0.4.1 → parallel_web-0.5.0}/README.md +2 -1
  7. parallel_web-0.5.0/api.md +62 -0
  8. {parallel_web-0.4.1 → parallel_web-0.5.0}/pyproject.toml +3 -3
  9. {parallel_web-0.4.1 → parallel_web-0.5.0}/requirements-dev.lock +10 -10
  10. {parallel_web-0.4.1 → parallel_web-0.5.0}/requirements.lock +4 -4
  11. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_base_client.py +9 -2
  12. parallel_web-0.5.0/src/parallel/_client.py +920 -0
  13. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_compat.py +11 -4
  14. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_files.py +53 -3
  15. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_qs.py +4 -1
  16. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_response.py +3 -0
  17. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_streaming.py +8 -3
  18. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/__init__.py +1 -1
  19. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_compat.py +1 -1
  20. parallel_web-0.5.0/src/parallel/_utils/_json.py +35 -0
  21. parallel_web-0.5.0/src/parallel/_utils/_path.py +127 -0
  22. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_utils.py +3 -17
  23. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_version.py +1 -1
  24. {parallel_web-0.4.1 → parallel_web-0.5.0/src/parallel/resources/beta}/api.md +6 -40
  25. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/resources/beta/beta.py +215 -21
  26. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/resources/beta/findall.py +145 -17
  27. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/resources/beta/task_group.py +55 -13
  28. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/resources/beta/task_run.py +121 -56
  29. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/resources/task_run.py +211 -6
  30. parallel_web-0.5.0/src/parallel/types/__init__.py +49 -0
  31. parallel_web-0.5.0/src/parallel/types/advanced_extract_settings_param.py +46 -0
  32. parallel_web-0.5.0/src/parallel/types/advanced_search_settings_param.py +38 -0
  33. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/__init__.py +2 -0
  34. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/beta_extract_params.py +8 -1
  35. parallel_web-0.5.0/src/parallel/types/beta/beta_run_input.py +8 -0
  36. parallel_web-0.5.0/src/parallel/types/beta/beta_run_input_param.py +7 -0
  37. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/beta_search_params.py +19 -9
  38. parallel_web-0.5.0/src/parallel/types/beta/beta_task_run_result.py +31 -0
  39. parallel_web-0.5.0/src/parallel/types/beta/error_event.py +8 -0
  40. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/excerpt_settings_param.py +3 -3
  41. parallel_web-0.5.0/src/parallel/types/beta/extract_error.py +7 -0
  42. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/extract_response.py +2 -2
  43. parallel_web-0.5.0/src/parallel/types/beta/fetch_policy_param.py +7 -0
  44. parallel_web-0.5.0/src/parallel/types/beta/findall_candidates_params.py +22 -0
  45. parallel_web-0.5.0/src/parallel/types/beta/findall_candidates_response.py +29 -0
  46. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_create_params.py +2 -2
  47. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_enrich_input.py +1 -1
  48. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_enrich_params.py +1 -1
  49. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_events_response.py +1 -2
  50. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_run.py +7 -1
  51. parallel_web-0.5.0/src/parallel/types/beta/mcp_server.py +8 -0
  52. parallel_web-0.5.0/src/parallel/types/beta/mcp_server_param.py +7 -0
  53. parallel_web-0.5.0/src/parallel/types/beta/mcp_tool_call.py +8 -0
  54. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/search_result.py +1 -1
  55. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_add_runs_params.py +9 -3
  56. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_events_response.py +2 -2
  57. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_get_runs_response.py +2 -2
  58. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_run_create_params.py +21 -14
  59. parallel_web-0.5.0/src/parallel/types/beta/task_run_event.py +11 -0
  60. parallel_web-0.5.0/src/parallel/types/beta/task_run_events_response.py +70 -0
  61. parallel_web-0.5.0/src/parallel/types/beta/usage_item.py +7 -0
  62. parallel_web-0.5.0/src/parallel/types/beta/webhook.py +8 -0
  63. parallel_web-0.5.0/src/parallel/types/beta/webhook_param.py +7 -0
  64. parallel_web-0.5.0/src/parallel/types/client_extract_params.py +52 -0
  65. parallel_web-0.5.0/src/parallel/types/client_search_params.py +59 -0
  66. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/error_event.py +2 -2
  67. parallel_web-0.5.0/src/parallel/types/excerpt_settings_param.py +19 -0
  68. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/extract_error.py +1 -1
  69. parallel_web-0.5.0/src/parallel/types/extract_response.py +38 -0
  70. parallel_web-0.5.0/src/parallel/types/extract_result.py +26 -0
  71. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/mcp_server.py +1 -1
  72. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/mcp_server_param.py +1 -1
  73. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/mcp_tool_call.py +1 -1
  74. parallel_web-0.4.1/src/parallel/types/beta/beta_run_input.py → parallel_web-0.5.0/src/parallel/types/run_input.py +24 -17
  75. parallel_web-0.4.1/src/parallel/types/beta/beta_run_input_param.py → parallel_web-0.5.0/src/parallel/types/run_input_param.py +23 -16
  76. parallel_web-0.5.0/src/parallel/types/search_result.py +33 -0
  77. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/shared/source_policy.py +4 -2
  78. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/shared_params/source_policy.py +4 -2
  79. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/task_run.py +8 -4
  80. parallel_web-0.5.0/src/parallel/types/task_run_create_params.py +77 -0
  81. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/task_run_event.py +8 -8
  82. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/task_run_events_response.py +2 -2
  83. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/task_run_json_output.py +8 -11
  84. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/task_run_result.py +0 -1
  85. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/task_run_result_params.py +5 -0
  86. parallel_web-0.5.0/src/parallel/types/task_run_text_output.py +36 -0
  87. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/usage_item.py +1 -1
  88. parallel_web-0.5.0/src/parallel/types/web_search_result.py +23 -0
  89. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/webhook.py +1 -1
  90. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/api_resources/beta/test_findall.py +87 -10
  91. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/api_resources/beta/test_task_group.py +6 -20
  92. parallel_web-0.5.0/tests/api_resources/beta/test_task_run.py +385 -0
  93. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/api_resources/test_beta.py +7 -4
  94. parallel_web-0.5.0/tests/api_resources/test_client.py +248 -0
  95. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/api_resources/test_task_run.py +114 -1
  96. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_client.py +64 -0
  97. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_extract_files.py +9 -0
  98. parallel_web-0.5.0/tests/test_files.py +148 -0
  99. parallel_web-0.5.0/tests/test_utils/test_json.py +126 -0
  100. parallel_web-0.5.0/tests/test_utils/test_path.py +89 -0
  101. parallel_web-0.4.1/.release-please-manifest.json +0 -3
  102. parallel_web-0.4.1/src/parallel/_client.py +0 -488
  103. parallel_web-0.4.1/src/parallel/types/__init__.py +0 -27
  104. parallel_web-0.4.1/src/parallel/types/beta/beta_task_run_result.py +0 -88
  105. parallel_web-0.4.1/src/parallel/types/task_run_create_params.py +0 -41
  106. parallel_web-0.4.1/src/parallel/types/task_run_text_output.py +0 -39
  107. parallel_web-0.4.1/tests/api_resources/beta/test_task_run.py +0 -352
  108. parallel_web-0.4.1/tests/test_deepcopy.py +0 -58
  109. parallel_web-0.4.1/tests/test_files.py +0 -51
  110. {parallel_web-0.4.1 → parallel_web-0.5.0}/LICENSE +0 -0
  111. {parallel_web-0.4.1 → parallel_web-0.5.0}/SECURITY.md +0 -0
  112. {parallel_web-0.4.1 → parallel_web-0.5.0}/bin/check-release-environment +0 -0
  113. {parallel_web-0.4.1 → parallel_web-0.5.0}/bin/publish-pypi +0 -0
  114. {parallel_web-0.4.1 → parallel_web-0.5.0}/examples/.keep +0 -0
  115. {parallel_web-0.4.1 → parallel_web-0.5.0}/noxfile.py +0 -0
  116. {parallel_web-0.4.1 → parallel_web-0.5.0}/release-please-config.json +0 -0
  117. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/__init__.py +0 -0
  118. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_constants.py +0 -0
  119. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_exceptions.py +0 -0
  120. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_models.py +0 -0
  121. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_resource.py +0 -0
  122. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_types.py +0 -0
  123. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_datetime_parse.py +0 -0
  124. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_logs.py +0 -0
  125. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_proxy.py +0 -0
  126. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_reflection.py +0 -0
  127. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_resources_proxy.py +0 -0
  128. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_streams.py +0 -0
  129. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_sync.py +0 -0
  130. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_transform.py +0 -0
  131. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/_utils/_typing.py +0 -0
  132. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/lib/.keep +0 -0
  133. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/lib/__init__.py +0 -0
  134. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/lib/_parsing/__init__.py +0 -0
  135. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/lib/_parsing/_task_run_result.py +0 -0
  136. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/lib/_parsing/_task_spec.py +0 -0
  137. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/lib/_pydantic.py +0 -0
  138. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/lib/_time.py +0 -0
  139. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/py.typed +0 -0
  140. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/resources/__init__.py +0 -0
  141. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/resources/beta/__init__.py +0 -0
  142. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/auto_schema.py +0 -0
  143. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/auto_schema_param.py +0 -0
  144. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/extract_result.py +0 -0
  145. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_candidate_match_status_event.py +0 -0
  146. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_events_params.py +0 -0
  147. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_extend_params.py +0 -0
  148. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_ingest_params.py +0 -0
  149. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_run_result.py +0 -0
  150. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_run_status_event.py +0 -0
  151. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_schema.py +0 -0
  152. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/findall_schema_updated_event.py +0 -0
  153. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/parallel_beta_param.py +0 -0
  154. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group.py +0 -0
  155. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_create_params.py +0 -0
  156. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_events_params.py +0 -0
  157. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_get_runs_params.py +0 -0
  158. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_run_response.py +0 -0
  159. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_group_status.py +0 -0
  160. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/task_run_result_params.py +0 -0
  161. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/beta/web_search_result.py +0 -0
  162. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/citation.py +0 -0
  163. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/fetch_policy_param.py +0 -0
  164. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/field_basis.py +0 -0
  165. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/json_schema.py +0 -0
  166. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/json_schema_param.py +0 -0
  167. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/parsed_task_run_result.py +0 -0
  168. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/shared/__init__.py +0 -0
  169. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/shared/error_object.py +0 -0
  170. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/shared/error_response.py +0 -0
  171. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/shared/warning.py +0 -0
  172. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/shared_params/__init__.py +0 -0
  173. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/task_spec.py +0 -0
  174. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/task_spec_param.py +0 -0
  175. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/text_schema.py +0 -0
  176. {parallel_web-0.4.1 → parallel_web-0.5.0}/src/parallel/types/text_schema_param.py +0 -0
  177. {parallel_web-0.4.1/src/parallel/types/beta → parallel_web-0.5.0/src/parallel/types}/webhook_param.py +0 -0
  178. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/__init__.py +0 -0
  179. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/api_resources/__init__.py +0 -0
  180. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/api_resources/beta/__init__.py +0 -0
  181. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/conftest.py +0 -0
  182. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/sample_file.txt +0 -0
  183. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_models.py +0 -0
  184. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_qs.py +0 -0
  185. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_required_args.py +0 -0
  186. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_response.py +0 -0
  187. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_streaming.py +0 -0
  188. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_transform.py +0 -0
  189. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_utils/test_datetime_parse.py +0 -0
  190. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_utils/test_proxy.py +0 -0
  191. {parallel_web-0.4.1 → parallel_web-0.5.0}/tests/test_utils/test_typing.py +0 -0
  192. {parallel_web-0.4.1 → 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,78 @@
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
+
52
+ ## 0.4.2 (2026-03-09)
53
+
54
+ Full Changelog: [v0.4.1...v0.4.2](https://github.com/parallel-web/parallel-sdk-python/compare/v0.4.1...v0.4.2)
55
+
56
+ ### Features
57
+
58
+ * **api:** add betas back in for search ([23493c6](https://github.com/parallel-web/parallel-sdk-python/commit/23493c6ae666649f7ac2af185bb6caf49b9fefee))
59
+ * **api:** sync openapi spec ([e00288b](https://github.com/parallel-web/parallel-sdk-python/commit/e00288bd8ed2a250c9a0d7935a52fd40b9d1bec5))
60
+ * **client:** add custom JSON encoder for extended type support ([b2c8bf9](https://github.com/parallel-web/parallel-sdk-python/commit/b2c8bf9b8246e2e8f1d53a7c8e238dd19b727a77))
61
+
62
+
63
+ ### Chores
64
+
65
+ * **ci:** skip uploading artifacts on stainless-internal branches ([bb389c0](https://github.com/parallel-web/parallel-sdk-python/commit/bb389c0078e00e615c1aa650674c006c6e906c81))
66
+ * format all `api.md` files ([b74b93b](https://github.com/parallel-web/parallel-sdk-python/commit/b74b93bf04d678cc283b8f312a3a4c5bb314c468))
67
+ * **internal:** add request options to SSE classes ([00dbc30](https://github.com/parallel-web/parallel-sdk-python/commit/00dbc3027e59adda51eb623d6a724501f70a7720))
68
+ * **internal:** bump dependencies ([f49c841](https://github.com/parallel-web/parallel-sdk-python/commit/f49c841670d88f8fc38e0a17f19242f7570a9aad))
69
+ * **internal:** codegen related update ([1b7c8ff](https://github.com/parallel-web/parallel-sdk-python/commit/1b7c8ff1969c65a422d6bcfcdc01c5b0c477b45b))
70
+ * **internal:** fix lint error on Python 3.14 ([cb3f364](https://github.com/parallel-web/parallel-sdk-python/commit/cb3f3645bc67b98235a732f357d8a24fdf164032))
71
+ * **internal:** make `test_proxy_environment_variables` more resilient ([d3ba149](https://github.com/parallel-web/parallel-sdk-python/commit/d3ba149917deab7ee28a3f38bd7b1f3f4bd2b9c6))
72
+ * **internal:** make `test_proxy_environment_variables` more resilient to env ([1e1d858](https://github.com/parallel-web/parallel-sdk-python/commit/1e1d858e7c21785744d94ceef33e655dcf75eacc))
73
+ * **test:** do not count install time for mock server timeout ([9766097](https://github.com/parallel-web/parallel-sdk-python/commit/9766097052cc86f0081cfe38b25d7dbf90232438))
74
+ * update mock server docs ([028965c](https://github.com/parallel-web/parallel-sdk-python/commit/028965c0b2868051617b266493466f9fc7816705))
75
+
3
76
  ## 0.4.1 (2026-01-28)
4
77
 
5
78
  Full Changelog: [v0.4.0...v0.4.1](https://github.com/parallel-web/parallel-sdk-python/compare/v0.4.0...v0.4.1)
@@ -85,11 +85,10 @@ $ 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
- # you will need npm installed
92
- $ npx prism mock path/to/your/openapi.yml
91
+ $ ./scripts/mock
93
92
  ```
94
93
 
95
94
  ```sh
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: parallel-web
3
- Version: 0.4.1
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'
@@ -133,6 +133,7 @@ All beta parameters are accessible via the `client.beta` namespace in the SDK.
133
133
 
134
134
  Yes, all methods support a timeout. For more information, see [Timeouts](https://github.com/parallel-web/parallel-sdk-python/tree/main/#timeouts).
135
135
 
136
+
136
137
  **Can I specify retries via the SDK?**
137
138
 
138
139
  Yes, errors can be retried via the SDK — the default retry count is 2. The maximum number
@@ -327,7 +328,7 @@ response = client.task_run.with_raw_response.create(
327
328
  print(response.headers.get('X-My-Header'))
328
329
 
329
330
  task_run = response.parse()
330
- print(task_run.run_id)
331
+ print(task_run.interaction_id)
331
332
  ```
332
333
 
333
334
  These methods return an [`APIResponse`](https://github.com/parallel-web/parallel-sdk-python/tree/main/src/parallel/_response.py) object.
@@ -98,6 +98,7 @@ All beta parameters are accessible via the `client.beta` namespace in the SDK.
98
98
 
99
99
  Yes, all methods support a timeout. For more information, see [Timeouts](#timeouts).
100
100
 
101
+
101
102
  **Can I specify retries via the SDK?**
102
103
 
103
104
  Yes, errors can be retried via the SDK — the default retry count is 2. The maximum number
@@ -292,7 +293,7 @@ response = client.task_run.with_raw_response.create(
292
293
  print(response.headers.get('X-My-Header'))
293
294
 
294
295
  task_run = response.parse()
295
- print(task_run.run_id)
296
+ print(task_run.interaction_id)
296
297
  ```
297
298
 
298
299
  These methods return an [`APIResponse`](https://github.com/parallel-web/parallel-sdk-python/tree/main/src/parallel/_response.py) object.
@@ -0,0 +1,62 @@
1
+ # Shared Types
2
+
3
+ ```python
4
+ from parallel.types import ErrorObject, ErrorResponse, SourcePolicy, Warning
5
+ ```
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
+
31
+ # TaskRun
32
+
33
+ Types:
34
+
35
+ ```python
36
+ from parallel.types import (
37
+ AutoSchema,
38
+ Citation,
39
+ FieldBasis,
40
+ JsonSchema,
41
+ ParsedTaskRunResult,
42
+ RunInput,
43
+ TaskRun,
44
+ TaskRunJsonOutput,
45
+ TaskRunResult,
46
+ TaskRunTextOutput,
47
+ TaskSpec,
48
+ TextSchema,
49
+ )
50
+ ```
51
+
52
+ Methods:
53
+
54
+ - <code title="post /v1/tasks/runs">client.task_run.<a href="./src/parallel/resources/task_run.py">create</a>(\*\*<a href="src/parallel/types/task_run_create_params.py">params</a>) -> <a href="./src/parallel/types/task_run.py">TaskRun</a></code>
55
+ - <code title="get /v1/tasks/runs/{run_id}">client.task_run.<a href="./src/parallel/resources/task_run.py">retrieve</a>(run_id) -> <a href="./src/parallel/types/task_run.py">TaskRun</a></code>
56
+ - <code title="get /v1/tasks/runs/{run_id}/result">client.task_run.<a href="./src/parallel/resources/task_run.py">result</a>(run_id, \*\*<a href="src/parallel/types/task_run_result_params.py">params</a>) -> <a href="./src/parallel/types/task_run_result.py">TaskRunResult</a></code>
57
+
58
+ Convenience methods:
59
+
60
+ - <code title="post /v1/tasks/runs">client.task_run.<a href="./src/parallel/resources/task_run.py">execute</a>(input, processor, output: <a href="./src/parallel/types/task_spec_param.py">OutputSchema</a>) -> <a href="./src/parallel/types/task_run_result.py">TaskRunResult</a></code>
61
+ - <code title="post /v1/tasks/runs">client.task_run.<a href="./src/parallel/resources/task_run.py">execute</a>(input, processor, output: Type[OutputT]) -> <a href="./src/parallel/types/parsed_task_run_result.py">ParsedTaskRunResult[OutputT]</a></code>
62
+ # [Beta](src/parallel/resources/beta/api.md)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "parallel-web"
3
- version = "0.4.1"
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",
@@ -70,7 +70,7 @@ format = { chain = [
70
70
  # run formatting again to fix any inconsistencies when imports are stripped
71
71
  "format:ruff",
72
72
  ]}
73
- "format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
73
+ "format:docs" = "bash -c 'python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md)'"
74
74
  "format:ruff" = "ruff format"
75
75
 
76
76
  "lint" = { chain = [
@@ -12,14 +12,14 @@
12
12
  -e file:.
13
13
  aiohappyeyeballs==2.6.1
14
14
  # via aiohttp
15
- aiohttp==3.13.2
15
+ aiohttp==3.13.3
16
16
  # via httpx-aiohttp
17
17
  # via parallel-web
18
18
  aiosignal==1.4.0
19
19
  # via aiohttp
20
20
  annotated-types==0.7.0
21
21
  # via pydantic
22
- anyio==4.12.0
22
+ anyio==4.12.1
23
23
  # via httpx
24
24
  # via parallel-web
25
25
  argcomplete==3.6.3
@@ -31,7 +31,7 @@ attrs==25.4.0
31
31
  # via nox
32
32
  backports-asyncio-runner==1.2.0
33
33
  # via pytest-asyncio
34
- certifi==2025.11.12
34
+ certifi==2026.1.4
35
35
  # via httpcore
36
36
  # via httpx
37
37
  colorama==0.4.6
@@ -64,7 +64,7 @@ httpx==0.28.1
64
64
  # via httpx-aiohttp
65
65
  # via parallel-web
66
66
  # via respx
67
- httpx-aiohttp==0.1.9
67
+ httpx-aiohttp==0.1.12
68
68
  # via parallel-web
69
69
  humanize==4.13.0
70
70
  # via nox
@@ -72,7 +72,7 @@ idna==3.11
72
72
  # via anyio
73
73
  # via httpx
74
74
  # via yarl
75
- importlib-metadata==8.7.0
75
+ importlib-metadata==8.7.1
76
76
  iniconfig==2.1.0
77
77
  # via pytest
78
78
  markdown-it-py==3.0.0
@@ -85,14 +85,14 @@ multidict==6.7.0
85
85
  mypy==1.17.0
86
86
  mypy-extensions==1.1.0
87
87
  # via mypy
88
- nodeenv==1.9.1
88
+ nodeenv==1.10.0
89
89
  # via pyright
90
90
  nox==2025.11.12
91
91
  packaging==25.0
92
92
  # via dependency-groups
93
93
  # via nox
94
94
  # via pytest
95
- pathspec==0.12.1
95
+ pathspec==1.0.3
96
96
  # via mypy
97
97
  platformdirs==4.4.0
98
98
  # via virtualenv
@@ -118,13 +118,13 @@ python-dateutil==2.9.0.post0
118
118
  # via time-machine
119
119
  respx==0.22.0
120
120
  rich==14.2.0
121
- ruff==0.14.7
121
+ ruff==0.14.13
122
122
  six==1.17.0
123
123
  # via python-dateutil
124
124
  sniffio==1.3.1
125
125
  # via parallel-web
126
126
  time-machine==2.19.0
127
- tomli==2.3.0
127
+ tomli==2.4.0
128
128
  # via dependency-groups
129
129
  # via mypy
130
130
  # via nox
@@ -144,7 +144,7 @@ typing-extensions==4.15.0
144
144
  # via virtualenv
145
145
  typing-inspection==0.4.2
146
146
  # via pydantic
147
- virtualenv==20.35.4
147
+ virtualenv==20.36.1
148
148
  # via nox
149
149
  yarl==1.22.0
150
150
  # via aiohttp
@@ -12,21 +12,21 @@
12
12
  -e file:.
13
13
  aiohappyeyeballs==2.6.1
14
14
  # via aiohttp
15
- aiohttp==3.13.2
15
+ aiohttp==3.13.3
16
16
  # via httpx-aiohttp
17
17
  # via parallel-web
18
18
  aiosignal==1.4.0
19
19
  # via aiohttp
20
20
  annotated-types==0.7.0
21
21
  # via pydantic
22
- anyio==4.12.0
22
+ anyio==4.12.1
23
23
  # via httpx
24
24
  # via parallel-web
25
25
  async-timeout==5.0.1
26
26
  # via aiohttp
27
27
  attrs==25.4.0
28
28
  # via aiohttp
29
- certifi==2025.11.12
29
+ certifi==2026.1.4
30
30
  # via httpcore
31
31
  # via httpx
32
32
  distro==1.9.0
@@ -43,7 +43,7 @@ httpcore==1.0.9
43
43
  httpx==0.28.1
44
44
  # via httpx-aiohttp
45
45
  # via parallel-web
46
- httpx-aiohttp==0.1.9
46
+ httpx-aiohttp==0.1.12
47
47
  # via parallel-web
48
48
  idna==3.11
49
49
  # via anyio
@@ -86,6 +86,7 @@ from ._exceptions import (
86
86
  APIConnectionError,
87
87
  APIResponseValidationError,
88
88
  )
89
+ from ._utils._json import openapi_dumps
89
90
 
90
91
  log: logging.Logger = logging.getLogger(__name__)
91
92
 
@@ -539,6 +540,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
539
540
  files = cast(HttpxRequestFiles, ForceMultipartDict())
540
541
 
541
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])
542
547
  if "_" in prepared_url.host:
543
548
  # work around https://github.com/encode/httpx/discussions/2880
544
549
  kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
@@ -554,8 +559,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
554
559
  kwargs["content"] = options.content
555
560
  elif isinstance(json_data, bytes):
556
561
  kwargs["content"] = json_data
557
- else:
558
- kwargs["json"] = json_data if is_given(json_data) else None
562
+ elif not files:
563
+ # Don't set content when JSON is sent as multipart/form-data,
564
+ # since httpx's content param overrides other body arguments
565
+ kwargs["content"] = openapi_dumps(json_data) if is_given(json_data) and json_data is not None else None
559
566
  kwargs["files"] = files
560
567
  else:
561
568
  headers.pop("Content-Type", None)