mixedbread 0.50.0__tar.gz → 0.52.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 (253) hide show
  1. mixedbread-0.52.0/.release-please-manifest.json +3 -0
  2. {mixedbread-0.50.0 → mixedbread-0.52.0}/CHANGELOG.md +33 -0
  3. {mixedbread-0.50.0 → mixedbread-0.52.0}/PKG-INFO +1 -1
  4. {mixedbread-0.50.0 → mixedbread-0.52.0}/api.md +3 -1
  5. {mixedbread-0.50.0 → mixedbread-0.52.0}/pyproject.toml +2 -2
  6. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_client.py +19 -0
  7. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_files.py +1 -1
  8. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_models.py +80 -0
  9. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_qs.py +2 -6
  10. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_types.py +3 -0
  11. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_utils.py +34 -8
  12. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_version.py +1 -1
  13. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/stores/stores.py +252 -39
  14. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/__init__.py +3 -12
  15. mixedbread-0.52.0/src/mixedbread/types/agentic_search_config_param.py +41 -0
  16. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/scored_audio_url_input_chunk.py +3 -0
  17. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/shared/__init__.py +0 -1
  18. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/shared_params/__init__.py +0 -1
  19. mixedbread-0.52.0/src/mixedbread/types/store_grep_params.py +98 -0
  20. mixedbread-0.50.0/src/mixedbread/types/store_search_response.py → mixedbread-0.52.0/src/mixedbread/types/store_grep_response.py +3 -3
  21. mixedbread-0.52.0/src/mixedbread/types/store_metadata_facets_params.py +101 -0
  22. mixedbread-0.52.0/src/mixedbread/types/store_question_answering_params.py +115 -0
  23. mixedbread-0.52.0/src/mixedbread/types/store_search_params.py +94 -0
  24. mixedbread-0.52.0/src/mixedbread/types/store_search_response.py +41 -0
  25. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/audio_url_input_chunk.py +3 -0
  26. mixedbread-0.52.0/src/mixedbread/types/stores/file_list_params.py +99 -0
  27. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/stores/test_files.py +72 -6
  28. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/test_stores.py +405 -30
  29. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_extract_files.py +23 -5
  30. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_files.py +1 -1
  31. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_models.py +57 -3
  32. mixedbread-0.50.0/.release-please-manifest.json +0 -3
  33. mixedbread-0.50.0/src/mixedbread/types/agentic_search_config_param.py +0 -24
  34. mixedbread-0.50.0/src/mixedbread/types/shared/search_filter.py +0 -40
  35. mixedbread-0.50.0/src/mixedbread/types/shared_params/search_filter.py +0 -39
  36. mixedbread-0.50.0/src/mixedbread/types/store_metadata_facets_params.py +0 -42
  37. mixedbread-0.50.0/src/mixedbread/types/store_question_answering_params.py +0 -65
  38. mixedbread-0.50.0/src/mixedbread/types/store_search_params.py +0 -43
  39. mixedbread-0.50.0/src/mixedbread/types/stores/file_list_params.py +0 -47
  40. {mixedbread-0.50.0 → mixedbread-0.52.0}/.gitignore +0 -0
  41. {mixedbread-0.50.0 → mixedbread-0.52.0}/CONTRIBUTING.md +0 -0
  42. {mixedbread-0.50.0 → mixedbread-0.52.0}/LICENSE +0 -0
  43. {mixedbread-0.50.0 → mixedbread-0.52.0}/README.md +0 -0
  44. {mixedbread-0.50.0 → mixedbread-0.52.0}/SECURITY.md +0 -0
  45. {mixedbread-0.50.0 → mixedbread-0.52.0}/bin/check-release-environment +0 -0
  46. {mixedbread-0.50.0 → mixedbread-0.52.0}/bin/publish-pypi +0 -0
  47. {mixedbread-0.50.0 → mixedbread-0.52.0}/examples/.keep +0 -0
  48. {mixedbread-0.50.0 → mixedbread-0.52.0}/noxfile.py +0 -0
  49. {mixedbread-0.50.0 → mixedbread-0.52.0}/release-please-config.json +0 -0
  50. {mixedbread-0.50.0 → mixedbread-0.52.0}/requirements-dev.lock +0 -0
  51. {mixedbread-0.50.0 → mixedbread-0.52.0}/requirements.lock +0 -0
  52. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/__init__.py +0 -0
  53. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_base_client.py +0 -0
  54. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_compat.py +0 -0
  55. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_constants.py +0 -0
  56. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_exceptions.py +0 -0
  57. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_resource.py +0 -0
  58. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_response.py +0 -0
  59. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_streaming.py +0 -0
  60. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/__init__.py +0 -0
  61. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_compat.py +0 -0
  62. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_datetime_parse.py +0 -0
  63. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_json.py +0 -0
  64. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_logs.py +0 -0
  65. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_path.py +0 -0
  66. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_proxy.py +0 -0
  67. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_reflection.py +0 -0
  68. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_resources_proxy.py +0 -0
  69. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_streams.py +0 -0
  70. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_sync.py +0 -0
  71. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_transform.py +0 -0
  72. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/_utils/_typing.py +0 -0
  73. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/lib/.keep +0 -0
  74. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/lib/__init__.py +0 -0
  75. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/lib/multipart_upload.py +0 -0
  76. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/lib/polling.py +0 -0
  77. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/pagination.py +0 -0
  78. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/py.typed +0 -0
  79. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/__init__.py +0 -0
  80. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/api_keys.py +0 -0
  81. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/chat.py +0 -0
  82. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/data_sources/__init__.py +0 -0
  83. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/data_sources/connectors.py +0 -0
  84. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/data_sources/data_sources.py +0 -0
  85. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/embeddings.py +0 -0
  86. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/extractions/__init__.py +0 -0
  87. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/extractions/content.py +0 -0
  88. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/extractions/extractions.py +0 -0
  89. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/extractions/jobs.py +0 -0
  90. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/extractions/schema.py +0 -0
  91. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/files/__init__.py +0 -0
  92. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/files/files.py +0 -0
  93. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/files/uploads.py +0 -0
  94. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/parsing/__init__.py +0 -0
  95. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/parsing/jobs.py +0 -0
  96. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/parsing/parsing.py +0 -0
  97. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/stores/__init__.py +0 -0
  98. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/resources/stores/files.py +0 -0
  99. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/api_key.py +0 -0
  100. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/api_key_create_or_update_params.py +0 -0
  101. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/api_key_create_params.py +0 -0
  102. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/api_key_created.py +0 -0
  103. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/api_key_delete_response.py +0 -0
  104. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/api_key_list_params.py +0 -0
  105. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/audio_chunk_generated_metadata.py +0 -0
  106. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/audio_url.py +0 -0
  107. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/client_embed_params.py +0 -0
  108. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/client_rerank_params.py +0 -0
  109. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/code_chunk_generated_metadata.py +0 -0
  110. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/contextualization_config.py +0 -0
  111. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/contextualization_config_param.py +0 -0
  112. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_source.py +0 -0
  113. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_source_api_key_params.py +0 -0
  114. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_source_create_params.py +0 -0
  115. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_source_delete_response.py +0 -0
  116. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_source_list_params.py +0 -0
  117. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_source_oauth2_params.py +0 -0
  118. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_source_type.py +0 -0
  119. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_source_update_params.py +0 -0
  120. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_sources/__init__.py +0 -0
  121. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_sources/connector_create_params.py +0 -0
  122. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_sources/connector_delete_response.py +0 -0
  123. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_sources/connector_list_params.py +0 -0
  124. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_sources/connector_update_params.py +0 -0
  125. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/data_sources/data_source_connector.py +0 -0
  126. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/embedding.py +0 -0
  127. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/embedding_create_params.py +0 -0
  128. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/embedding_create_response.py +0 -0
  129. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/encoding_format.py +0 -0
  130. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/expires_after.py +0 -0
  131. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/expires_after_param.py +0 -0
  132. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/__init__.py +0 -0
  133. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/content_create_params.py +0 -0
  134. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/created_json_schema.py +0 -0
  135. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/enhanced_json_schema.py +0 -0
  136. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/extraction_job.py +0 -0
  137. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/extraction_result.py +0 -0
  138. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/image_url_input_param.py +0 -0
  139. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/job_create_params.py +0 -0
  140. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/schema_create_params.py +0 -0
  141. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/schema_enhance_params.py +0 -0
  142. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/schema_validate_params.py +0 -0
  143. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/text_input_param.py +0 -0
  144. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/extractions/validated_json_schema.py +0 -0
  145. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/file_counts.py +0 -0
  146. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/file_create_params.py +0 -0
  147. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/file_delete_response.py +0 -0
  148. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/file_list_params.py +0 -0
  149. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/file_object.py +0 -0
  150. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/file_update_params.py +0 -0
  151. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/__init__.py +0 -0
  152. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/multipart_upload_part.py +0 -0
  153. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/multipart_upload_part_param.py +0 -0
  154. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/multipart_upload_part_url.py +0 -0
  155. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/upload_abort_response.py +0 -0
  156. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/upload_complete_params.py +0 -0
  157. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/upload_create_params.py +0 -0
  158. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/upload_create_response.py +0 -0
  159. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/upload_list_response.py +0 -0
  160. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/files/upload_retrieve_response.py +0 -0
  161. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/image_chunk_generated_metadata.py +0 -0
  162. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/image_url_output.py +0 -0
  163. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/info_response.py +0 -0
  164. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/linear_data_source_param.py +0 -0
  165. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/markdown_chunk_generated_metadata.py +0 -0
  166. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/markdown_heading.py +0 -0
  167. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/multi_encoding_embedding.py +0 -0
  168. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/notion_data_source_param.py +0 -0
  169. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/oauth2_params.py +0 -0
  170. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/pagination_with_total.py +0 -0
  171. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/__init__.py +0 -0
  172. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/chunk.py +0 -0
  173. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/chunk_element.py +0 -0
  174. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/chunking_strategy.py +0 -0
  175. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/document_parser_result.py +0 -0
  176. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/element_type.py +0 -0
  177. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/job_create_params.py +0 -0
  178. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/job_delete_response.py +0 -0
  179. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/job_list_params.py +0 -0
  180. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/job_list_response.py +0 -0
  181. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/parsing_job.py +0 -0
  182. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/parsing_job_status.py +0 -0
  183. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/parsing/return_format.py +0 -0
  184. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/pdf_chunk_generated_metadata.py +0 -0
  185. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/rerank_config_param.py +0 -0
  186. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/rerank_response.py +0 -0
  187. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/scope.py +0 -0
  188. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/scope_param.py +0 -0
  189. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/scored_image_url_input_chunk.py +0 -0
  190. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/scored_text_input_chunk.py +0 -0
  191. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/scored_video_url_input_chunk.py +0 -0
  192. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/shared/search_filter_condition.py +0 -0
  193. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/shared/usage.py +0 -0
  194. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/shared_params/search_filter_condition.py +0 -0
  195. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store.py +0 -0
  196. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_chunk_search_options_param.py +0 -0
  197. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_config.py +0 -0
  198. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_config_param.py +0 -0
  199. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_create_params.py +0 -0
  200. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_delete_response.py +0 -0
  201. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_list_params.py +0 -0
  202. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_metadata_facets_response.py +0 -0
  203. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_question_answering_response.py +0 -0
  204. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/store_update_params.py +0 -0
  205. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/__init__.py +0 -0
  206. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/file_create_params.py +0 -0
  207. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/file_delete_response.py +0 -0
  208. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/file_list_response.py +0 -0
  209. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/file_retrieve_params.py +0 -0
  210. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/file_update_params.py +0 -0
  211. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/image_url_input_chunk.py +0 -0
  212. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/store_file.py +0 -0
  213. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/store_file_config.py +0 -0
  214. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/store_file_config_param.py +0 -0
  215. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/store_file_status.py +0 -0
  216. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/text_input_chunk.py +0 -0
  217. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/stores/video_url_input_chunk.py +0 -0
  218. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/text_chunk_generated_metadata.py +0 -0
  219. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/video_chunk_generated_metadata.py +0 -0
  220. {mixedbread-0.50.0 → mixedbread-0.52.0}/src/mixedbread/types/video_url.py +0 -0
  221. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/__init__.py +0 -0
  222. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/__init__.py +0 -0
  223. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/data_sources/__init__.py +0 -0
  224. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/data_sources/test_connectors.py +0 -0
  225. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/extractions/__init__.py +0 -0
  226. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/extractions/test_content.py +0 -0
  227. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/extractions/test_jobs.py +0 -0
  228. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/extractions/test_schema.py +0 -0
  229. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/files/__init__.py +0 -0
  230. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/files/test_uploads.py +0 -0
  231. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/parsing/__init__.py +0 -0
  232. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/parsing/test_jobs.py +0 -0
  233. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/stores/__init__.py +0 -0
  234. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/test_api_keys.py +0 -0
  235. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/test_chat.py +0 -0
  236. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/test_client.py +0 -0
  237. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/test_data_sources.py +0 -0
  238. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/test_embeddings.py +0 -0
  239. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/api_resources/test_files.py +0 -0
  240. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/conftest.py +0 -0
  241. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/sample_file.txt +0 -0
  242. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_client.py +0 -0
  243. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_qs.py +0 -0
  244. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_required_args.py +0 -0
  245. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_response.py +0 -0
  246. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_streaming.py +0 -0
  247. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_transform.py +0 -0
  248. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_utils/test_datetime_parse.py +0 -0
  249. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_utils/test_json.py +0 -0
  250. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_utils/test_path.py +0 -0
  251. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_utils/test_proxy.py +0 -0
  252. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/test_utils/test_typing.py +0 -0
  253. {mixedbread-0.50.0 → mixedbread-0.52.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.52.0"
3
+ }
@@ -1,5 +1,38 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.52.0 (2026-05-20)
4
+
5
+ Full Changelog: [v0.51.0...v0.52.0](https://github.com/mixedbread-ai/mixedbread-python/compare/v0.51.0...v0.52.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** add grep ([3b53a40](https://github.com/mixedbread-ai/mixedbread-python/commit/3b53a40d4edb99c688ec00efafefcb2a46f008cc))
10
+
11
+ ## 0.51.0 (2026-05-20)
12
+
13
+ Full Changelog: [v0.50.0...v0.51.0](https://github.com/mixedbread-ai/mixedbread-python/compare/v0.50.0...v0.51.0)
14
+
15
+ ### Features
16
+
17
+ * **api:** api update ([c59f556](https://github.com/mixedbread-ai/mixedbread-python/commit/c59f5561b5e782ae7e35b9cbfb498f357856c8f8))
18
+ * **api:** api update ([842efa8](https://github.com/mixedbread-ai/mixedbread-python/commit/842efa840415d1a6d8f754f9c1594655283858c9))
19
+ * **api:** api update ([6fe066e](https://github.com/mixedbread-ai/mixedbread-python/commit/6fe066e17443211a47a21f677344bf8c349e6fde))
20
+ * **api:** api update ([eac4b8f](https://github.com/mixedbread-ai/mixedbread-python/commit/eac4b8f34275c9377765cfe62f677d5ca36cf061))
21
+ * **api:** api update ([66aa7dc](https://github.com/mixedbread-ai/mixedbread-python/commit/66aa7dc394357766b869a3d067e4c130cdf482e8))
22
+ * **internal/types:** support eagerly validating pydantic iterators ([3e9c5ac](https://github.com/mixedbread-ai/mixedbread-python/commit/3e9c5ac9ab56db4eddf8a6a2f219a8789c9c45ac))
23
+ * support setting headers via env ([38de0ee](https://github.com/mixedbread-ai/mixedbread-python/commit/38de0ee2781d9e27d6aecafe89f5a5b5baaed75c))
24
+
25
+
26
+ ### Bug Fixes
27
+
28
+ * **client:** add missing f-string prefix in file type error message ([fe74792](https://github.com/mixedbread-ai/mixedbread-python/commit/fe74792cd81bb58bd62e58c086d6d1ee6c233c25))
29
+ * use correct field name format for multipart file arrays ([361fcd6](https://github.com/mixedbread-ai/mixedbread-python/commit/361fcd66f8422020375b076d4c70a83c2b82241d))
30
+
31
+
32
+ ### Chores
33
+
34
+ * **internal:** reformat pyproject.toml ([8802c53](https://github.com/mixedbread-ai/mixedbread-python/commit/8802c53023895e9248f03b92477c9a17013ec7b7))
35
+
3
36
  ## 0.50.0 (2026-04-23)
4
37
 
5
38
  Full Changelog: [v0.49.0...v0.50.0](https://github.com/mixedbread-ai/mixedbread-python/compare/v0.49.0...v0.50.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mixedbread
3
- Version: 0.50.0
3
+ Version: 0.52.0
4
4
  Summary: The official Python library for the Mixedbread API
5
5
  Project-URL: Homepage, https://github.com/mixedbread-ai/mixedbread-python
6
6
  Project-URL: Repository, https://github.com/mixedbread-ai/mixedbread-python
@@ -1,7 +1,7 @@
1
1
  # Shared Types
2
2
 
3
3
  ```python
4
- from mixedbread.types import SearchFilter, SearchFilterCondition, Usage
4
+ from mixedbread.types import SearchFilterCondition, Usage
5
5
  ```
6
6
 
7
7
  # Mixedbread
@@ -54,6 +54,7 @@ from mixedbread.types import (
54
54
  VideoChunkGeneratedMetadata,
55
55
  VideoURL,
56
56
  StoreDeleteResponse,
57
+ StoreGrepResponse,
57
58
  StoreMetadataFacetsResponse,
58
59
  StoreQuestionAnsweringResponse,
59
60
  StoreSearchResponse,
@@ -67,6 +68,7 @@ Methods:
67
68
  - <code title="put /v1/stores/{store_identifier}">client.stores.<a href="./src/mixedbread/resources/stores/stores.py">update</a>(store_identifier, \*\*<a href="src/mixedbread/types/store_update_params.py">params</a>) -> <a href="./src/mixedbread/types/store.py">Store</a></code>
68
69
  - <code title="get /v1/stores">client.stores.<a href="./src/mixedbread/resources/stores/stores.py">list</a>(\*\*<a href="src/mixedbread/types/store_list_params.py">params</a>) -> <a href="./src/mixedbread/types/store.py">SyncCursor[Store]</a></code>
69
70
  - <code title="delete /v1/stores/{store_identifier}">client.stores.<a href="./src/mixedbread/resources/stores/stores.py">delete</a>(store_identifier) -> <a href="./src/mixedbread/types/store_delete_response.py">StoreDeleteResponse</a></code>
71
+ - <code title="post /v1/stores/grep">client.stores.<a href="./src/mixedbread/resources/stores/stores.py">grep</a>(\*\*<a href="src/mixedbread/types/store_grep_params.py">params</a>) -> <a href="./src/mixedbread/types/store_grep_response.py">StoreGrepResponse</a></code>
70
72
  - <code title="post /v1/stores/metadata-facets">client.stores.<a href="./src/mixedbread/resources/stores/stores.py">metadata_facets</a>(\*\*<a href="src/mixedbread/types/store_metadata_facets_params.py">params</a>) -> <a href="./src/mixedbread/types/store_metadata_facets_response.py">StoreMetadataFacetsResponse</a></code>
71
73
  - <code title="post /v1/stores/question-answering">client.stores.<a href="./src/mixedbread/resources/stores/stores.py">question_answering</a>(\*\*<a href="src/mixedbread/types/store_question_answering_params.py">params</a>) -> <a href="./src/mixedbread/types/store_question_answering_response.py">StoreQuestionAnsweringResponse</a></code>
72
74
  - <code title="post /v1/stores/search">client.stores.<a href="./src/mixedbread/resources/stores/stores.py">search</a>(\*\*<a href="src/mixedbread/types/store_search_params.py">params</a>) -> <a href="./src/mixedbread/types/store_search_response.py">StoreSearchResponse</a></code>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mixedbread"
3
- version = "0.50.0"
3
+ version = "0.52.0"
4
4
  description = "The official Python library for the Mixedbread API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -168,7 +168,7 @@ show_error_codes = true
168
168
  #
169
169
  # We also exclude our `tests` as mypy doesn't always infer
170
170
  # types correctly and Pyright will still catch any type errors.
171
- exclude = ['src/mixedbread/_files.py', '_dev/.*.py', 'tests/.*']
171
+ exclude = ["src/mixedbread/_files.py", "_dev/.*.py", "tests/.*"]
172
172
 
173
173
  strict_equality = true
174
174
  implicit_reexport = true
@@ -27,6 +27,7 @@ from ._types import (
27
27
  )
28
28
  from ._utils import (
29
29
  is_given,
30
+ is_mapping_t,
30
31
  maybe_transform,
31
32
  get_async_library,
32
33
  async_maybe_transform,
@@ -150,6 +151,15 @@ class Mixedbread(SyncAPIClient):
150
151
  except KeyError as exc:
151
152
  raise ValueError(f"Unknown environment: {environment}") from exc
152
153
 
154
+ custom_headers_env = os.environ.get("MIXEDBREAD_CUSTOM_HEADERS")
155
+ if custom_headers_env is not None:
156
+ parsed: dict[str, str] = {}
157
+ for line in custom_headers_env.split("\n"):
158
+ colon = line.find(":")
159
+ if colon >= 0:
160
+ parsed[line[:colon].strip()] = line[colon + 1 :].strip()
161
+ default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
162
+
153
163
  super().__init__(
154
164
  version=__version__,
155
165
  base_url=base_url,
@@ -547,6 +557,15 @@ class AsyncMixedbread(AsyncAPIClient):
547
557
  except KeyError as exc:
548
558
  raise ValueError(f"Unknown environment: {environment}") from exc
549
559
 
560
+ custom_headers_env = os.environ.get("MIXEDBREAD_CUSTOM_HEADERS")
561
+ if custom_headers_env is not None:
562
+ parsed: dict[str, str] = {}
563
+ for line in custom_headers_env.split("\n"):
564
+ colon = line.find(":")
565
+ if colon >= 0:
566
+ parsed[line[:colon].strip()] = line[colon + 1 :].strip()
567
+ default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
568
+
550
569
  super().__init__(
551
570
  version=__version__,
552
571
  base_url=base_url,
@@ -99,7 +99,7 @@ async def async_to_httpx_files(files: RequestFiles | None) -> HttpxRequestFiles
99
99
  elif is_sequence_t(files):
100
100
  files = [(key, await _async_transform_file(file)) for key, file in files]
101
101
  else:
102
- raise TypeError("Unexpected file type input {type(files)}, expected mapping or sequence")
102
+ raise TypeError(f"Unexpected file type input {type(files)}, expected mapping or sequence")
103
103
 
104
104
  return files
105
105
 
@@ -25,7 +25,9 @@ from typing_extensions import (
25
25
  ClassVar,
26
26
  Protocol,
27
27
  Required,
28
+ Annotated,
28
29
  ParamSpec,
30
+ TypeAlias,
29
31
  TypedDict,
30
32
  TypeGuard,
31
33
  final,
@@ -79,7 +81,15 @@ from ._compat import (
79
81
  from ._constants import RAW_RESPONSE_HEADER
80
82
 
81
83
  if TYPE_CHECKING:
84
+ from pydantic import GetCoreSchemaHandler, ValidatorFunctionWrapHandler
85
+ from pydantic_core import CoreSchema, core_schema
82
86
  from pydantic_core.core_schema import ModelField, ModelSchema, LiteralSchema, ModelFieldsSchema
87
+ else:
88
+ try:
89
+ from pydantic_core import CoreSchema, core_schema
90
+ except ImportError:
91
+ CoreSchema = None
92
+ core_schema = None
83
93
 
84
94
  __all__ = ["BaseModel", "GenericModel"]
85
95
 
@@ -396,6 +406,76 @@ class BaseModel(pydantic.BaseModel):
396
406
  )
397
407
 
398
408
 
409
+ class _EagerIterable(list[_T], Generic[_T]):
410
+ """
411
+ Accepts any Iterable[T] input (including generators), consumes it
412
+ eagerly, and validates all items upfront.
413
+
414
+ Validation preserves the original container type where possible
415
+ (e.g. a set[T] stays a set[T]). Serialization (model_dump / JSON)
416
+ always emits a list — round-tripping through model_dump() will not
417
+ restore the original container type.
418
+ """
419
+
420
+ @classmethod
421
+ def __get_pydantic_core_schema__(
422
+ cls,
423
+ source_type: Any,
424
+ handler: GetCoreSchemaHandler,
425
+ ) -> CoreSchema:
426
+ (item_type,) = get_args(source_type) or (Any,)
427
+ item_schema: CoreSchema = handler.generate_schema(item_type)
428
+ list_of_items_schema: CoreSchema = core_schema.list_schema(item_schema)
429
+
430
+ return core_schema.no_info_wrap_validator_function(
431
+ cls._validate,
432
+ list_of_items_schema,
433
+ serialization=core_schema.plain_serializer_function_ser_schema(
434
+ cls._serialize,
435
+ info_arg=False,
436
+ ),
437
+ )
438
+
439
+ @staticmethod
440
+ def _validate(v: Iterable[_T], handler: "ValidatorFunctionWrapHandler") -> Any:
441
+ original_type: type[Any] = type(v)
442
+
443
+ # Normalize to list so list_schema can validate each item
444
+ if isinstance(v, list):
445
+ items: list[_T] = v
446
+ else:
447
+ try:
448
+ items = list(v)
449
+ except TypeError as e:
450
+ raise TypeError("Value is not iterable") from e
451
+
452
+ # Validate items against the inner schema
453
+ validated: list[_T] = handler(items)
454
+
455
+ # Reconstruct original container type
456
+ if original_type is list:
457
+ return validated
458
+ # str(list) produces the list's repr, not a string built from items,
459
+ # so skip reconstruction for str and its subclasses.
460
+ if issubclass(original_type, str):
461
+ return validated
462
+ try:
463
+ return original_type(validated)
464
+ except (TypeError, ValueError):
465
+ # If the type cannot be reconstructed, just return the validated list
466
+ return validated
467
+
468
+ @staticmethod
469
+ def _serialize(v: Iterable[_T]) -> list[_T]:
470
+ """Always serialize as a list so Pydantic's JSON encoder is happy."""
471
+ if isinstance(v, list):
472
+ return v
473
+ return list(v)
474
+
475
+
476
+ EagerIterable: TypeAlias = Annotated[Iterable[_T], _EagerIterable]
477
+
478
+
399
479
  def _construct_field(value: object, field: FieldInfo, key: str) -> object:
400
480
  if value is None:
401
481
  return field_get_default(field)
@@ -2,17 +2,13 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Any, List, Tuple, Union, Mapping, TypeVar
4
4
  from urllib.parse import parse_qs, urlencode
5
- from typing_extensions import Literal, get_args
5
+ from typing_extensions import get_args
6
6
 
7
- from ._types import NotGiven, not_given
7
+ from ._types import NotGiven, ArrayFormat, NestedFormat, not_given
8
8
  from ._utils import flatten
9
9
 
10
10
  _T = TypeVar("_T")
11
11
 
12
-
13
- ArrayFormat = Literal["comma", "repeat", "indices", "brackets"]
14
- NestedFormat = Literal["dots", "brackets"]
15
-
16
12
  PrimitiveData = Union[str, int, float, bool, None]
17
13
  # this should be Data = Union[PrimitiveData, "List[Data]", "Tuple[Data]", "Mapping[str, Data]"]
18
14
  # https://github.com/microsoft/pyright/issues/3555
@@ -47,6 +47,9 @@ AnyMapping = Mapping[str, object]
47
47
  ModelT = TypeVar("ModelT", bound=pydantic.BaseModel)
48
48
  _T = TypeVar("_T")
49
49
 
50
+ ArrayFormat = Literal["comma", "repeat", "indices", "brackets"]
51
+ NestedFormat = Literal["dots", "brackets"]
52
+
50
53
 
51
54
  # Approximates httpx internal ProxiesTypes and RequestFiles types
52
55
  # while adding support for `PathLike` instances
@@ -17,11 +17,11 @@ from typing import (
17
17
  )
18
18
  from pathlib import Path
19
19
  from datetime import date, datetime
20
- from typing_extensions import TypeGuard
20
+ from typing_extensions import TypeGuard, get_args
21
21
 
22
22
  import sniffio
23
23
 
24
- from .._types import Omit, NotGiven, FileTypes, HeadersLike
24
+ from .._types import Omit, NotGiven, FileTypes, ArrayFormat, HeadersLike
25
25
 
26
26
  _T = TypeVar("_T")
27
27
  _TupleT = TypeVar("_TupleT", bound=Tuple[object, ...])
@@ -40,25 +40,45 @@ def extract_files(
40
40
  query: Mapping[str, object],
41
41
  *,
42
42
  paths: Sequence[Sequence[str]],
43
+ array_format: ArrayFormat = "brackets",
43
44
  ) -> list[tuple[str, FileTypes]]:
44
45
  """Recursively extract files from the given dictionary based on specified paths.
45
46
 
46
47
  A path may look like this ['foo', 'files', '<array>', 'data'].
47
48
 
49
+ ``array_format`` controls how ``<array>`` segments contribute to the emitted
50
+ field name. Supported values: ``"brackets"`` (``foo[]``), ``"repeat"`` and
51
+ ``"comma"`` (``foo``), ``"indices"`` (``foo[0]``, ``foo[1]``).
52
+
48
53
  Note: this mutates the given dictionary.
49
54
  """
50
55
  files: list[tuple[str, FileTypes]] = []
51
56
  for path in paths:
52
- files.extend(_extract_items(query, path, index=0, flattened_key=None))
57
+ files.extend(_extract_items(query, path, index=0, flattened_key=None, array_format=array_format))
53
58
  return files
54
59
 
55
60
 
61
+ def _array_suffix(array_format: ArrayFormat, array_index: int) -> str:
62
+ if array_format == "brackets":
63
+ return "[]"
64
+ if array_format == "indices":
65
+ return f"[{array_index}]"
66
+ if array_format == "repeat" or array_format == "comma":
67
+ # Both repeat the bare field name for each file part; there is no
68
+ # meaningful way to comma-join binary parts.
69
+ return ""
70
+ raise NotImplementedError(
71
+ f"Unknown array_format value: {array_format}, choose from {', '.join(get_args(ArrayFormat))}"
72
+ )
73
+
74
+
56
75
  def _extract_items(
57
76
  obj: object,
58
77
  path: Sequence[str],
59
78
  *,
60
79
  index: int,
61
80
  flattened_key: str | None,
81
+ array_format: ArrayFormat,
62
82
  ) -> list[tuple[str, FileTypes]]:
63
83
  try:
64
84
  key = path[index]
@@ -75,9 +95,11 @@ def _extract_items(
75
95
 
76
96
  if is_list(obj):
77
97
  files: list[tuple[str, FileTypes]] = []
78
- for entry in obj:
79
- assert_is_file_content(entry, key=flattened_key + "[]" if flattened_key else "")
80
- files.append((flattened_key + "[]", cast(FileTypes, entry)))
98
+ for array_index, entry in enumerate(obj):
99
+ suffix = _array_suffix(array_format, array_index)
100
+ emitted_key = (flattened_key + suffix) if flattened_key else suffix
101
+ assert_is_file_content(entry, key=emitted_key)
102
+ files.append((emitted_key, cast(FileTypes, entry)))
81
103
  return files
82
104
 
83
105
  assert_is_file_content(obj, key=flattened_key)
@@ -106,6 +128,7 @@ def _extract_items(
106
128
  path,
107
129
  index=index,
108
130
  flattened_key=flattened_key,
131
+ array_format=array_format,
109
132
  )
110
133
  elif is_list(obj):
111
134
  if key != "<array>":
@@ -117,9 +140,12 @@ def _extract_items(
117
140
  item,
118
141
  path,
119
142
  index=index,
120
- flattened_key=flattened_key + "[]" if flattened_key is not None else "[]",
143
+ flattened_key=(
144
+ (flattened_key if flattened_key is not None else "") + _array_suffix(array_format, array_index)
145
+ ),
146
+ array_format=array_format,
121
147
  )
122
- for item in obj
148
+ for array_index, item in enumerate(obj)
123
149
  ]
124
150
  )
125
151
 
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "mixedbread"
4
- __version__ = "0.50.0" # x-release-please-version
4
+ __version__ = "0.52.0" # x-release-please-version