arbi 0.2.1__tar.gz → 0.3.1__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.

Potentially problematic release.


This version of arbi might be problematic. Click here for more details.

Files changed (206) hide show
  1. arbi-0.3.1/.release-please-manifest.json +3 -0
  2. {arbi-0.2.1 → arbi-0.3.1}/CHANGELOG.md +22 -0
  3. {arbi-0.2.1 → arbi-0.3.1}/PKG-INFO +1 -1
  4. {arbi-0.2.1 → arbi-0.3.1}/api.md +13 -20
  5. {arbi-0.2.1 → arbi-0.3.1}/pyproject.toml +1 -1
  6. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_streaming.py +4 -6
  7. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_version.py +1 -1
  8. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/__init__.py +0 -14
  9. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/api.py +0 -32
  10. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/assistant.py +9 -1
  11. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/conversation/conversation.py +87 -2
  12. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/document/annotation.py +9 -1
  13. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/document/document.py +39 -1
  14. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/tag.py +13 -1
  15. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/user/user.py +397 -134
  16. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/workspace.py +202 -12
  17. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/__init__.py +12 -7
  18. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/assistant_query_params.py +22 -2
  19. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/assistant_retrieve_params.py +22 -2
  20. arbi-0.3.1/src/arbi/types/api/conversation_retrieve_message_response.py +99 -0
  21. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation_retrieve_threads_response.py +16 -0
  22. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document/annotation_create_params.py +5 -1
  23. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document/annotation_update_params.py +5 -1
  24. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_update_params.py +2 -0
  25. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_upload_from_url_params.py +4 -1
  26. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_upload_params.py +4 -1
  27. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_view_params.py +5 -1
  28. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_create_params.py +5 -1
  29. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_update_params.py +5 -1
  30. arbi-0.3.1/src/arbi/types/api/user_change_password_params.py +16 -0
  31. arbi-0.2.1/src/arbi/types/api/sso_rotate_passcode_response.py → arbi-0.3.1/src/arbi/types/api/user_change_password_response.py +3 -3
  32. arbi-0.2.1/src/arbi/types/api/sso_login_params.py → arbi-0.3.1/src/arbi/types/api/user_check_sso_status_params.py +3 -6
  33. arbi-0.2.1/src/arbi/types/api/user_response.py → arbi-0.3.1/src/arbi/types/api/user_check_sso_status_response.py +4 -6
  34. arbi-0.2.1/src/arbi/types/api/sso_invite_params.py → arbi-0.3.1/src/arbi/types/api/user_invite_params.py +2 -2
  35. arbi-0.3.1/src/arbi/types/api/user_invite_response.py +9 -0
  36. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user_login_params.py +4 -1
  37. arbi-0.3.1/src/arbi/types/api/user_login_response.py +8 -0
  38. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user_register_params.py +5 -4
  39. arbi-0.3.1/src/arbi/types/api/workspace_copy_params.py +21 -0
  40. arbi-0.3.1/src/arbi/types/api/workspace_copy_response.py +25 -0
  41. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_get_stats_response.py +6 -2
  42. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_get_users_response.py +5 -1
  43. arbi-0.3.1/src/arbi/types/api/workspace_response.py +48 -0
  44. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_share_params.py +5 -1
  45. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_update_params.py +5 -1
  46. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/document/test_annotation.py +4 -0
  47. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/test_assistant.py +4 -0
  48. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/test_conversation.py +103 -0
  49. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/test_document.py +106 -24
  50. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/test_tag.py +30 -8
  51. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/test_user.py +281 -137
  52. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/test_workspace.py +225 -24
  53. {arbi-0.2.1 → arbi-0.3.1}/tests/test_client.py +198 -164
  54. arbi-0.2.1/.release-please-manifest.json +0 -3
  55. arbi-0.2.1/src/arbi/resources/api/sso.py +0 -333
  56. arbi-0.2.1/src/arbi/types/api/sso_invite_response.py +0 -11
  57. arbi-0.2.1/src/arbi/types/api/sso_login_response.py +0 -15
  58. arbi-0.2.1/src/arbi/types/api/token.py +0 -13
  59. arbi-0.2.1/src/arbi/types/api/workspace_response.py +0 -26
  60. arbi-0.2.1/tests/api_resources/api/test_sso.py +0 -246
  61. {arbi-0.2.1 → arbi-0.3.1}/.gitignore +0 -0
  62. {arbi-0.2.1 → arbi-0.3.1}/CONTRIBUTING.md +0 -0
  63. {arbi-0.2.1 → arbi-0.3.1}/LICENSE +0 -0
  64. {arbi-0.2.1 → arbi-0.3.1}/README.md +0 -0
  65. {arbi-0.2.1 → arbi-0.3.1}/SECURITY.md +0 -0
  66. {arbi-0.2.1 → arbi-0.3.1}/bin/check-release-environment +0 -0
  67. {arbi-0.2.1 → arbi-0.3.1}/bin/publish-pypi +0 -0
  68. {arbi-0.2.1 → arbi-0.3.1}/examples/.keep +0 -0
  69. {arbi-0.2.1 → arbi-0.3.1}/noxfile.py +0 -0
  70. {arbi-0.2.1 → arbi-0.3.1}/release-please-config.json +0 -0
  71. {arbi-0.2.1 → arbi-0.3.1}/requirements-dev.lock +0 -0
  72. {arbi-0.2.1 → arbi-0.3.1}/requirements.lock +0 -0
  73. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/__init__.py +0 -0
  74. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_base_client.py +0 -0
  75. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_client.py +0 -0
  76. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_compat.py +0 -0
  77. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_constants.py +0 -0
  78. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_exceptions.py +0 -0
  79. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_files.py +0 -0
  80. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_models.py +0 -0
  81. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_qs.py +0 -0
  82. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_resource.py +0 -0
  83. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_response.py +0 -0
  84. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_types.py +0 -0
  85. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/__init__.py +0 -0
  86. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_compat.py +0 -0
  87. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_datetime_parse.py +0 -0
  88. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_logs.py +0 -0
  89. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_proxy.py +0 -0
  90. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_reflection.py +0 -0
  91. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_resources_proxy.py +0 -0
  92. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_streams.py +0 -0
  93. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_sync.py +0 -0
  94. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_transform.py +0 -0
  95. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_typing.py +0 -0
  96. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/_utils/_utils.py +0 -0
  97. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/lib/.keep +0 -0
  98. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/py.typed +0 -0
  99. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/__init__.py +0 -0
  100. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/configs.py +0 -0
  101. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/conversation/__init__.py +0 -0
  102. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/conversation/user.py +0 -0
  103. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/document/__init__.py +0 -0
  104. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/health.py +0 -0
  105. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/user/__init__.py +0 -0
  106. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/resources/api/user/settings.py +0 -0
  107. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/__init__.py +0 -0
  108. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/chunker_config_param.py +0 -0
  109. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/config_create_params.py +0 -0
  110. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/config_create_response.py +0 -0
  111. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/config_delete_response.py +0 -0
  112. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/config_get_versions_response.py +0 -0
  113. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/config_retrieve_response.py +0 -0
  114. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation/__init__.py +0 -0
  115. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation/user_add_params.py +0 -0
  116. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation/user_add_response.py +0 -0
  117. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation/user_remove_params.py +0 -0
  118. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation/user_remove_response.py +0 -0
  119. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation_delete_message_response.py +0 -0
  120. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation_delete_response.py +0 -0
  121. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation_share_response.py +0 -0
  122. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation_update_title_params.py +0 -0
  123. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/conversation_update_title_response.py +0 -0
  124. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/doc_response.py +0 -0
  125. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document/__init__.py +0 -0
  126. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document/annotation_delete_response.py +0 -0
  127. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document/doc_tag_response.py +0 -0
  128. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_date_extractor_llm_config.py +0 -0
  129. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_date_extractor_llm_config_param.py +0 -0
  130. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_delete_response.py +0 -0
  131. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_get_parsed_response.py +0 -0
  132. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_get_tags_response.py +0 -0
  133. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/document_update_response.py +0 -0
  134. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/embedder_config.py +0 -0
  135. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/embedder_config_param.py +0 -0
  136. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/health_check_app_response.py +0 -0
  137. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/health_check_models_response.py +0 -0
  138. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/health_check_services_response.py +0 -0
  139. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/health_get_models_response.py +0 -0
  140. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/health_retrieve_status_response.py +0 -0
  141. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/health_retrieve_version_response.py +0 -0
  142. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/model_citation_config.py +0 -0
  143. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/model_citation_config_param.py +0 -0
  144. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/parser_config_param.py +0 -0
  145. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/query_llm_config.py +0 -0
  146. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/query_llm_config_param.py +0 -0
  147. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/reranker_config.py +0 -0
  148. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/reranker_config_param.py +0 -0
  149. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/retriever_config.py +0 -0
  150. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/retriever_config_param.py +0 -0
  151. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_apply_to_docs_params.py +0 -0
  152. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_apply_to_docs_response.py +0 -0
  153. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_create_response.py +0 -0
  154. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_delete_response.py +0 -0
  155. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_get_docs_response.py +0 -0
  156. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_remove_from_docs_params.py +0 -0
  157. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_remove_from_docs_response.py +0 -0
  158. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/tag_update_response.py +0 -0
  159. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/title_llm_config.py +0 -0
  160. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/title_llm_config_param.py +0 -0
  161. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user/__init__.py +0 -0
  162. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user/setting_retrieve_response.py +0 -0
  163. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user/setting_update_params.py +0 -0
  164. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user_list_workspaces_response.py +0 -0
  165. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user_logout_response.py +0 -0
  166. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user_verify_email_params.py +0 -0
  167. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/user_verify_email_response.py +0 -0
  168. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_create_protected_params.py +0 -0
  169. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_delete_response.py +0 -0
  170. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_get_conversations_response.py +0 -0
  171. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_get_doctags_response.py +0 -0
  172. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_get_documents_response.py +0 -0
  173. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_get_tags_response.py +0 -0
  174. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_remove_user_params.py +0 -0
  175. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_remove_user_response.py +0 -0
  176. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/api/workspace_share_response.py +0 -0
  177. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/chunk.py +0 -0
  178. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/chunk_metadata.py +0 -0
  179. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/chunk_metadata_param.py +0 -0
  180. {arbi-0.2.1 → arbi-0.3.1}/src/arbi/types/chunk_param.py +0 -0
  181. {arbi-0.2.1 → arbi-0.3.1}/tests/__init__.py +0 -0
  182. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/__init__.py +0 -0
  183. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/__init__.py +0 -0
  184. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/conversation/__init__.py +0 -0
  185. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/conversation/test_user.py +0 -0
  186. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/document/__init__.py +0 -0
  187. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/test_configs.py +0 -0
  188. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/test_health.py +0 -0
  189. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/user/__init__.py +0 -0
  190. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/api/user/test_settings.py +0 -0
  191. {arbi-0.2.1 → arbi-0.3.1}/tests/api_resources/test_api.py +0 -0
  192. {arbi-0.2.1 → arbi-0.3.1}/tests/conftest.py +0 -0
  193. {arbi-0.2.1 → arbi-0.3.1}/tests/sample_file.txt +0 -0
  194. {arbi-0.2.1 → arbi-0.3.1}/tests/test_deepcopy.py +0 -0
  195. {arbi-0.2.1 → arbi-0.3.1}/tests/test_extract_files.py +0 -0
  196. {arbi-0.2.1 → arbi-0.3.1}/tests/test_files.py +0 -0
  197. {arbi-0.2.1 → arbi-0.3.1}/tests/test_models.py +0 -0
  198. {arbi-0.2.1 → arbi-0.3.1}/tests/test_qs.py +0 -0
  199. {arbi-0.2.1 → arbi-0.3.1}/tests/test_required_args.py +0 -0
  200. {arbi-0.2.1 → arbi-0.3.1}/tests/test_response.py +0 -0
  201. {arbi-0.2.1 → arbi-0.3.1}/tests/test_streaming.py +0 -0
  202. {arbi-0.2.1 → arbi-0.3.1}/tests/test_transform.py +0 -0
  203. {arbi-0.2.1 → arbi-0.3.1}/tests/test_utils/test_datetime_parse.py +0 -0
  204. {arbi-0.2.1 → arbi-0.3.1}/tests/test_utils/test_proxy.py +0 -0
  205. {arbi-0.2.1 → arbi-0.3.1}/tests/test_utils/test_typing.py +0 -0
  206. {arbi-0.2.1 → arbi-0.3.1}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.3.1"
3
+ }
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.1 (2025-10-31)
4
+
5
+ Full Changelog: [v0.3.0...v0.3.1](https://github.com/arbitrationcity/arbi-python/compare/v0.3.0...v0.3.1)
6
+
7
+ ### Chores
8
+
9
+ * **internal/tests:** avoid race condition with implicit client cleanup ([8bd34d5](https://github.com/arbitrationcity/arbi-python/commit/8bd34d51fcfa6975cf8034617b13dd3024a13f1f))
10
+
11
+ ## 0.3.0 (2025-10-30)
12
+
13
+ Full Changelog: [v0.2.1...v0.3.0](https://github.com/arbitrationcity/arbi-python/compare/v0.2.1...v0.3.0)
14
+
15
+ ### Features
16
+
17
+ * Add workspace document copy endpoint ([1c9fd95](https://github.com/arbitrationcity/arbi-python/commit/1c9fd95ebd51302eb2d39a526d1cfdf8d29c3feb))
18
+ * DRAFT: Client-side key generation with JWE encryption ([8ab2fa9](https://github.com/arbitrationcity/arbi-python/commit/8ab2fa931309cec57317aa6894bce47025da447f))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * **client:** close streams without requiring full consumption ([9b32ba6](https://github.com/arbitrationcity/arbi-python/commit/9b32ba6c3335273feaed012dbf0d8d7b147e5342))
24
+
3
25
  ## 0.2.1 (2025-10-18)
4
26
 
5
27
  Full Changelog: [v0.2.0...v0.2.1](https://github.com/arbitrationcity/arbi-python/compare/v0.2.0...v0.2.1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arbi
3
- Version: 0.2.1
3
+ Version: 0.3.1
4
4
  Summary: The official Python library for the arbi API
5
5
  Project-URL: Homepage, https://github.com/arbitrationcity/arbi-python
6
6
  Project-URL: Repository, https://github.com/arbitrationcity/arbi-python
@@ -16,9 +16,11 @@ Types:
16
16
 
17
17
  ```python
18
18
  from arbi.types.api import (
19
- Token,
20
- UserResponse,
19
+ UserChangePasswordResponse,
20
+ UserCheckSSOStatusResponse,
21
+ UserInviteResponse,
21
22
  UserListWorkspacesResponse,
23
+ UserLoginResponse,
22
24
  UserLogoutResponse,
23
25
  UserVerifyEmailResponse,
24
26
  )
@@ -26,12 +28,13 @@ from arbi.types.api import (
26
28
 
27
29
  Methods:
28
30
 
31
+ - <code title="post /api/user/change_password">client.api.user.<a href="./src/arbi/resources/api/user/user.py">change_password</a>(\*\*<a href="src/arbi/types/api/user_change_password_params.py">params</a>) -> <a href="./src/arbi/types/api/user_change_password_response.py">UserChangePasswordResponse</a></code>
32
+ - <code title="post /api/user/sso-status">client.api.user.<a href="./src/arbi/resources/api/user/user.py">check_sso_status</a>(\*\*<a href="src/arbi/types/api/user_check_sso_status_params.py">params</a>) -> <a href="./src/arbi/types/api/user_check_sso_status_response.py">UserCheckSSOStatusResponse</a></code>
33
+ - <code title="post /api/user/invite">client.api.user.<a href="./src/arbi/resources/api/user/user.py">invite</a>(\*\*<a href="src/arbi/types/api/user_invite_params.py">params</a>) -> <a href="./src/arbi/types/api/user_invite_response.py">UserInviteResponse</a></code>
29
34
  - <code title="get /api/user/workspaces">client.api.user.<a href="./src/arbi/resources/api/user/user.py">list_workspaces</a>() -> <a href="./src/arbi/types/api/user_list_workspaces_response.py">UserListWorkspacesResponse</a></code>
30
- - <code title="post /api/user/login">client.api.user.<a href="./src/arbi/resources/api/user/user.py">login</a>(\*\*<a href="src/arbi/types/api/user_login_params.py">params</a>) -> <a href="./src/arbi/types/api/token.py">Token</a></code>
35
+ - <code title="post /api/user/login">client.api.user.<a href="./src/arbi/resources/api/user/user.py">login</a>(\*\*<a href="src/arbi/types/api/user_login_params.py">params</a>) -> <a href="./src/arbi/types/api/user_login_response.py">UserLoginResponse</a></code>
31
36
  - <code title="post /api/user/logout">client.api.user.<a href="./src/arbi/resources/api/user/user.py">logout</a>() -> <a href="./src/arbi/types/api/user_logout_response.py">UserLogoutResponse</a></code>
32
- - <code title="post /api/user/token_refresh">client.api.user.<a href="./src/arbi/resources/api/user/user.py">refresh_token</a>() -> <a href="./src/arbi/types/api/token.py">Token</a></code>
33
- - <code title="post /api/user/register">client.api.user.<a href="./src/arbi/resources/api/user/user.py">register</a>(\*\*<a href="src/arbi/types/api/user_register_params.py">params</a>) -> <a href="./src/arbi/types/api/user_response.py">UserResponse</a></code>
34
- - <code title="get /api/user/me">client.api.user.<a href="./src/arbi/resources/api/user/user.py">retrieve_me</a>() -> <a href="./src/arbi/types/api/user_response.py">UserResponse</a></code>
37
+ - <code title="post /api/user/register">client.api.user.<a href="./src/arbi/resources/api/user/user.py">register</a>(\*\*<a href="src/arbi/types/api/user_register_params.py">params</a>) -> object</code>
35
38
  - <code title="post /api/user/verify-email">client.api.user.<a href="./src/arbi/resources/api/user/user.py">verify_email</a>(\*\*<a href="src/arbi/types/api/user_verify_email_params.py">params</a>) -> <a href="./src/arbi/types/api/user_verify_email_response.py">UserVerifyEmailResponse</a></code>
36
39
 
37
40
  ### Settings
@@ -47,20 +50,6 @@ Methods:
47
50
  - <code title="get /api/user/settings">client.api.user.settings.<a href="./src/arbi/resources/api/user/settings.py">retrieve</a>() -> <a href="./src/arbi/types/api/user/setting_retrieve_response.py">SettingRetrieveResponse</a></code>
48
51
  - <code title="patch /api/user/settings">client.api.user.settings.<a href="./src/arbi/resources/api/user/settings.py">update</a>(\*\*<a href="src/arbi/types/api/user/setting_update_params.py">params</a>) -> None</code>
49
52
 
50
- ## SSO
51
-
52
- Types:
53
-
54
- ```python
55
- from arbi.types.api import SSOInviteResponse, SSOLoginResponse, SSORotatePasscodeResponse
56
- ```
57
-
58
- Methods:
59
-
60
- - <code title="post /api/sso/invite">client.api.sso.<a href="./src/arbi/resources/api/sso.py">invite</a>(\*\*<a href="src/arbi/types/api/sso_invite_params.py">params</a>) -> <a href="./src/arbi/types/api/sso_invite_response.py">SSOInviteResponse</a></code>
61
- - <code title="post /api/sso/login">client.api.sso.<a href="./src/arbi/resources/api/sso.py">login</a>(\*\*<a href="src/arbi/types/api/sso_login_params.py">params</a>) -> <a href="./src/arbi/types/api/sso_login_response.py">SSOLoginResponse</a></code>
62
- - <code title="post /api/sso/rotate_passcode">client.api.sso.<a href="./src/arbi/resources/api/sso.py">rotate_passcode</a>() -> <a href="./src/arbi/types/api/sso_rotate_passcode_response.py">SSORotatePasscodeResponse</a></code>
63
-
64
53
  ## Workspace
65
54
 
66
55
  Types:
@@ -69,6 +58,7 @@ Types:
69
58
  from arbi.types.api import (
70
59
  WorkspaceResponse,
71
60
  WorkspaceDeleteResponse,
61
+ WorkspaceCopyResponse,
72
62
  WorkspaceGetConversationsResponse,
73
63
  WorkspaceGetDoctagsResponse,
74
64
  WorkspaceGetDocumentsResponse,
@@ -84,6 +74,7 @@ Methods:
84
74
 
85
75
  - <code title="patch /api/workspace/{workspace_ext_id}">client.api.workspace.<a href="./src/arbi/resources/api/workspace.py">update</a>(workspace_ext_id, \*\*<a href="src/arbi/types/api/workspace_update_params.py">params</a>) -> <a href="./src/arbi/types/api/workspace_response.py">WorkspaceResponse</a></code>
86
76
  - <code title="delete /api/workspace/{workspace_ext_id}">client.api.workspace.<a href="./src/arbi/resources/api/workspace.py">delete</a>(workspace_ext_id) -> <a href="./src/arbi/types/api/workspace_delete_response.py">WorkspaceDeleteResponse</a></code>
77
+ - <code title="post /api/workspace/{workspace_ext_id}/copy">client.api.workspace.<a href="./src/arbi/resources/api/workspace.py">copy</a>(workspace_ext_id, \*\*<a href="src/arbi/types/api/workspace_copy_params.py">params</a>) -> <a href="./src/arbi/types/api/workspace_copy_response.py">WorkspaceCopyResponse</a></code>
87
78
  - <code title="post /api/workspace/create_protected">client.api.workspace.<a href="./src/arbi/resources/api/workspace.py">create_protected</a>(\*\*<a href="src/arbi/types/api/workspace_create_protected_params.py">params</a>) -> <a href="./src/arbi/types/api/workspace_response.py">WorkspaceResponse</a></code>
88
79
  - <code title="get /api/workspace/{workspace_ext_id}/conversations">client.api.workspace.<a href="./src/arbi/resources/api/workspace.py">get_conversations</a>(workspace_ext_id) -> <a href="./src/arbi/types/api/workspace_get_conversations_response.py">WorkspaceGetConversationsResponse</a></code>
89
80
  - <code title="get /api/workspace/{workspace_ext_id}/doctags">client.api.workspace.<a href="./src/arbi/resources/api/workspace.py">get_doctags</a>(workspace_ext_id) -> <a href="./src/arbi/types/api/workspace_get_doctags_response.py">WorkspaceGetDoctagsResponse</a></code>
@@ -142,6 +133,7 @@ Types:
142
133
  from arbi.types.api import (
143
134
  ConversationDeleteResponse,
144
135
  ConversationDeleteMessageResponse,
136
+ ConversationRetrieveMessageResponse,
145
137
  ConversationRetrieveThreadsResponse,
146
138
  ConversationShareResponse,
147
139
  ConversationUpdateTitleResponse,
@@ -152,6 +144,7 @@ Methods:
152
144
 
153
145
  - <code title="delete /api/conversation/{conversation_ext_id}">client.api.conversation.<a href="./src/arbi/resources/api/conversation/conversation.py">delete</a>(conversation_ext_id) -> <a href="./src/arbi/types/api/conversation_delete_response.py">ConversationDeleteResponse</a></code>
154
146
  - <code title="delete /api/conversation/message/{message_ext_id}">client.api.conversation.<a href="./src/arbi/resources/api/conversation/conversation.py">delete_message</a>(message_ext_id) -> <a href="./src/arbi/types/api/conversation_delete_message_response.py">ConversationDeleteMessageResponse</a></code>
147
+ - <code title="get /api/conversation/message/{message_ext_id}">client.api.conversation.<a href="./src/arbi/resources/api/conversation/conversation.py">retrieve_message</a>(message_ext_id) -> <a href="./src/arbi/types/api/conversation_retrieve_message_response.py">ConversationRetrieveMessageResponse</a></code>
155
148
  - <code title="get /api/conversation/{conversation_ext_id}/threads">client.api.conversation.<a href="./src/arbi/resources/api/conversation/conversation.py">retrieve_threads</a>(conversation_ext_id) -> <a href="./src/arbi/types/api/conversation_retrieve_threads_response.py">ConversationRetrieveThreadsResponse</a></code>
156
149
  - <code title="post /api/conversation/{conversation_ext_id}/share">client.api.conversation.<a href="./src/arbi/resources/api/conversation/conversation.py">share</a>(conversation_ext_id) -> <a href="./src/arbi/types/api/conversation_share_response.py">ConversationShareResponse</a></code>
157
150
  - <code title="patch /api/conversation/{conversation_ext_id}/title">client.api.conversation.<a href="./src/arbi/resources/api/conversation/conversation.py">update_title</a>(conversation_ext_id, \*\*<a href="src/arbi/types/api/conversation_update_title_params.py">params</a>) -> <a href="./src/arbi/types/api/conversation_update_title_response.py">ConversationUpdateTitleResponse</a></code>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arbi"
3
- version = "0.2.1"
3
+ version = "0.3.1"
4
4
  description = "The official Python library for the arbi API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -57,9 +57,8 @@ class Stream(Generic[_T]):
57
57
  for sse in iterator:
58
58
  yield process_data(data=sse.json(), cast_to=cast_to, response=response)
59
59
 
60
- # Ensure the entire stream is consumed
61
- for _sse in iterator:
62
- ...
60
+ # As we might not fully consume the response stream, we need to close it explicitly
61
+ response.close()
63
62
 
64
63
  def __enter__(self) -> Self:
65
64
  return self
@@ -121,9 +120,8 @@ class AsyncStream(Generic[_T]):
121
120
  async for sse in iterator:
122
121
  yield process_data(data=sse.json(), cast_to=cast_to, response=response)
123
122
 
124
- # Ensure the entire stream is consumed
125
- async for _sse in iterator:
126
- ...
123
+ # As we might not fully consume the response stream, we need to close it explicitly
124
+ await response.aclose()
127
125
 
128
126
  async def __aenter__(self) -> Self:
129
127
  return self
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "arbi"
4
- __version__ = "0.2.1" # x-release-please-version
4
+ __version__ = "0.3.1" # x-release-please-version
@@ -8,14 +8,6 @@ from .api import (
8
8
  APIResourceWithStreamingResponse,
9
9
  AsyncAPIResourceWithStreamingResponse,
10
10
  )
11
- from .sso import (
12
- SSOResource,
13
- AsyncSSOResource,
14
- SSOResourceWithRawResponse,
15
- AsyncSSOResourceWithRawResponse,
16
- SSOResourceWithStreamingResponse,
17
- AsyncSSOResourceWithStreamingResponse,
18
- )
19
11
  from .tag import (
20
12
  TagResource,
21
13
  AsyncTagResource,
@@ -88,12 +80,6 @@ __all__ = [
88
80
  "AsyncUserResourceWithRawResponse",
89
81
  "UserResourceWithStreamingResponse",
90
82
  "AsyncUserResourceWithStreamingResponse",
91
- "SSOResource",
92
- "AsyncSSOResource",
93
- "SSOResourceWithRawResponse",
94
- "AsyncSSOResourceWithRawResponse",
95
- "SSOResourceWithStreamingResponse",
96
- "AsyncSSOResourceWithStreamingResponse",
97
83
  "WorkspaceResource",
98
84
  "AsyncWorkspaceResource",
99
85
  "WorkspaceResourceWithRawResponse",
@@ -5,14 +5,6 @@ from __future__ import annotations
5
5
  import httpx
6
6
 
7
7
  from ... import _resource
8
- from .sso import (
9
- SSOResource,
10
- AsyncSSOResource,
11
- SSOResourceWithRawResponse,
12
- AsyncSSOResourceWithRawResponse,
13
- SSOResourceWithStreamingResponse,
14
- AsyncSSOResourceWithStreamingResponse,
15
- )
16
8
  from .tag import (
17
9
  TagResource,
18
10
  AsyncTagResource,
@@ -95,10 +87,6 @@ class APIResource(_resource.SyncAPIResource):
95
87
  def user(self) -> UserResource:
96
88
  return UserResource(self._client)
97
89
 
98
- @cached_property
99
- def sso(self) -> SSOResource:
100
- return SSOResource(self._client)
101
-
102
90
  @cached_property
103
91
  def workspace(self) -> WorkspaceResource:
104
92
  return WorkspaceResource(self._client)
@@ -171,10 +159,6 @@ class AsyncAPIResource(_resource.AsyncAPIResource):
171
159
  def user(self) -> AsyncUserResource:
172
160
  return AsyncUserResource(self._client)
173
161
 
174
- @cached_property
175
- def sso(self) -> AsyncSSOResource:
176
- return AsyncSSOResource(self._client)
177
-
178
162
  @cached_property
179
163
  def workspace(self) -> AsyncWorkspaceResource:
180
164
  return AsyncWorkspaceResource(self._client)
@@ -254,10 +238,6 @@ class APIResourceWithRawResponse:
254
238
  def user(self) -> UserResourceWithRawResponse:
255
239
  return UserResourceWithRawResponse(self._api.user)
256
240
 
257
- @cached_property
258
- def sso(self) -> SSOResourceWithRawResponse:
259
- return SSOResourceWithRawResponse(self._api.sso)
260
-
261
241
  @cached_property
262
242
  def workspace(self) -> WorkspaceResourceWithRawResponse:
263
243
  return WorkspaceResourceWithRawResponse(self._api.workspace)
@@ -299,10 +279,6 @@ class AsyncAPIResourceWithRawResponse:
299
279
  def user(self) -> AsyncUserResourceWithRawResponse:
300
280
  return AsyncUserResourceWithRawResponse(self._api.user)
301
281
 
302
- @cached_property
303
- def sso(self) -> AsyncSSOResourceWithRawResponse:
304
- return AsyncSSOResourceWithRawResponse(self._api.sso)
305
-
306
282
  @cached_property
307
283
  def workspace(self) -> AsyncWorkspaceResourceWithRawResponse:
308
284
  return AsyncWorkspaceResourceWithRawResponse(self._api.workspace)
@@ -344,10 +320,6 @@ class APIResourceWithStreamingResponse:
344
320
  def user(self) -> UserResourceWithStreamingResponse:
345
321
  return UserResourceWithStreamingResponse(self._api.user)
346
322
 
347
- @cached_property
348
- def sso(self) -> SSOResourceWithStreamingResponse:
349
- return SSOResourceWithStreamingResponse(self._api.sso)
350
-
351
323
  @cached_property
352
324
  def workspace(self) -> WorkspaceResourceWithStreamingResponse:
353
325
  return WorkspaceResourceWithStreamingResponse(self._api.workspace)
@@ -389,10 +361,6 @@ class AsyncAPIResourceWithStreamingResponse:
389
361
  def user(self) -> AsyncUserResourceWithStreamingResponse:
390
362
  return AsyncUserResourceWithStreamingResponse(self._api.user)
391
363
 
392
- @cached_property
393
- def sso(self) -> AsyncSSOResourceWithStreamingResponse:
394
- return AsyncSSOResourceWithStreamingResponse(self._api.sso)
395
-
396
364
  @cached_property
397
365
  def workspace(self) -> AsyncWorkspaceResourceWithStreamingResponse:
398
366
  return AsyncWorkspaceResourceWithStreamingResponse(self._api.workspace)
@@ -7,7 +7,7 @@ from typing import Dict, Optional
7
7
  import httpx
8
8
 
9
9
  from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
10
- from ..._utils import maybe_transform, async_maybe_transform
10
+ from ..._utils import maybe_transform, strip_not_given, async_maybe_transform
11
11
  from ..._compat import cached_property
12
12
  from ..._resource import SyncAPIResource, AsyncAPIResource
13
13
  from ..._response import (
@@ -50,6 +50,7 @@ class AssistantResource(SyncAPIResource):
50
50
  config_ext_id: Optional[str] | Omit = omit,
51
51
  parent_message_ext_id: Optional[str] | Omit = omit,
52
52
  tools: Dict[str, assistant_retrieve_params.Tools] | Omit = omit,
53
+ workspace_key: str | Omit = omit,
53
54
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
54
55
  # The extra values given here take precedence over values defined on the client or passed to this method.
55
56
  extra_headers: Headers | None = None,
@@ -71,6 +72,7 @@ class AssistantResource(SyncAPIResource):
71
72
 
72
73
  timeout: Override the client-level default timeout for this request, in seconds
73
74
  """
75
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
74
76
  return self._post(
75
77
  "/api/assistant/retrieve",
76
78
  body=maybe_transform(
@@ -97,6 +99,7 @@ class AssistantResource(SyncAPIResource):
97
99
  config_ext_id: Optional[str] | Omit = omit,
98
100
  parent_message_ext_id: Optional[str] | Omit = omit,
99
101
  tools: Dict[str, assistant_query_params.Tools] | Omit = omit,
102
+ workspace_key: str | Omit = omit,
100
103
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
101
104
  # The extra values given here take precedence over values defined on the client or passed to this method.
102
105
  extra_headers: Headers | None = None,
@@ -118,6 +121,7 @@ class AssistantResource(SyncAPIResource):
118
121
 
119
122
  timeout: Override the client-level default timeout for this request, in seconds
120
123
  """
124
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
121
125
  return self._post(
122
126
  "/api/assistant/query",
123
127
  body=maybe_transform(
@@ -165,6 +169,7 @@ class AsyncAssistantResource(AsyncAPIResource):
165
169
  config_ext_id: Optional[str] | Omit = omit,
166
170
  parent_message_ext_id: Optional[str] | Omit = omit,
167
171
  tools: Dict[str, assistant_retrieve_params.Tools] | Omit = omit,
172
+ workspace_key: str | Omit = omit,
168
173
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
169
174
  # The extra values given here take precedence over values defined on the client or passed to this method.
170
175
  extra_headers: Headers | None = None,
@@ -186,6 +191,7 @@ class AsyncAssistantResource(AsyncAPIResource):
186
191
 
187
192
  timeout: Override the client-level default timeout for this request, in seconds
188
193
  """
194
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
189
195
  return await self._post(
190
196
  "/api/assistant/retrieve",
191
197
  body=await async_maybe_transform(
@@ -212,6 +218,7 @@ class AsyncAssistantResource(AsyncAPIResource):
212
218
  config_ext_id: Optional[str] | Omit = omit,
213
219
  parent_message_ext_id: Optional[str] | Omit = omit,
214
220
  tools: Dict[str, assistant_query_params.Tools] | Omit = omit,
221
+ workspace_key: str | Omit = omit,
215
222
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
216
223
  # The extra values given here take precedence over values defined on the client or passed to this method.
217
224
  extra_headers: Headers | None = None,
@@ -233,6 +240,7 @@ class AsyncAssistantResource(AsyncAPIResource):
233
240
 
234
241
  timeout: Override the client-level default timeout for this request, in seconds
235
242
  """
243
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
236
244
  return await self._post(
237
245
  "/api/assistant/query",
238
246
  body=await async_maybe_transform(
@@ -12,8 +12,8 @@ from .user import (
12
12
  UserResourceWithStreamingResponse,
13
13
  AsyncUserResourceWithStreamingResponse,
14
14
  )
15
- from ...._types import Body, Query, Headers, NotGiven, not_given
16
- from ...._utils import maybe_transform, async_maybe_transform
15
+ from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
16
+ from ...._utils import maybe_transform, strip_not_given, async_maybe_transform
17
17
  from ...._compat import cached_property
18
18
  from ...._resource import SyncAPIResource, AsyncAPIResource
19
19
  from ...._response import (
@@ -28,6 +28,7 @@ from ....types.api.conversation_share_response import ConversationShareResponse
28
28
  from ....types.api.conversation_delete_response import ConversationDeleteResponse
29
29
  from ....types.api.conversation_update_title_response import ConversationUpdateTitleResponse
30
30
  from ....types.api.conversation_delete_message_response import ConversationDeleteMessageResponse
31
+ from ....types.api.conversation_retrieve_message_response import ConversationRetrieveMessageResponse
31
32
  from ....types.api.conversation_retrieve_threads_response import ConversationRetrieveThreadsResponse
32
33
 
33
34
  __all__ = ["ConversationResource", "AsyncConversationResource"]
@@ -128,6 +129,42 @@ class ConversationResource(SyncAPIResource):
128
129
  cast_to=ConversationDeleteMessageResponse,
129
130
  )
130
131
 
132
+ def retrieve_message(
133
+ self,
134
+ message_ext_id: str,
135
+ *,
136
+ workspace_key: str | Omit = omit,
137
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
138
+ # The extra values given here take precedence over values defined on the client or passed to this method.
139
+ extra_headers: Headers | None = None,
140
+ extra_query: Query | None = None,
141
+ extra_body: Body | None = None,
142
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
143
+ ) -> ConversationRetrieveMessageResponse:
144
+ """
145
+ Get a single message with full details including decrypted execution trace.
146
+ Always includes the trace with decrypted sensitive fields.
147
+
148
+ Args:
149
+ extra_headers: Send extra headers
150
+
151
+ extra_query: Add additional query parameters to the request
152
+
153
+ extra_body: Add additional JSON properties to the request
154
+
155
+ timeout: Override the client-level default timeout for this request, in seconds
156
+ """
157
+ if not message_ext_id:
158
+ raise ValueError(f"Expected a non-empty value for `message_ext_id` but received {message_ext_id!r}")
159
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
160
+ return self._get(
161
+ f"/api/conversation/message/{message_ext_id}",
162
+ options=make_request_options(
163
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
164
+ ),
165
+ cast_to=ConversationRetrieveMessageResponse,
166
+ )
167
+
131
168
  def retrieve_threads(
132
169
  self,
133
170
  conversation_ext_id: str,
@@ -338,6 +375,42 @@ class AsyncConversationResource(AsyncAPIResource):
338
375
  cast_to=ConversationDeleteMessageResponse,
339
376
  )
340
377
 
378
+ async def retrieve_message(
379
+ self,
380
+ message_ext_id: str,
381
+ *,
382
+ workspace_key: str | Omit = omit,
383
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
384
+ # The extra values given here take precedence over values defined on the client or passed to this method.
385
+ extra_headers: Headers | None = None,
386
+ extra_query: Query | None = None,
387
+ extra_body: Body | None = None,
388
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
389
+ ) -> ConversationRetrieveMessageResponse:
390
+ """
391
+ Get a single message with full details including decrypted execution trace.
392
+ Always includes the trace with decrypted sensitive fields.
393
+
394
+ Args:
395
+ extra_headers: Send extra headers
396
+
397
+ extra_query: Add additional query parameters to the request
398
+
399
+ extra_body: Add additional JSON properties to the request
400
+
401
+ timeout: Override the client-level default timeout for this request, in seconds
402
+ """
403
+ if not message_ext_id:
404
+ raise ValueError(f"Expected a non-empty value for `message_ext_id` but received {message_ext_id!r}")
405
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
406
+ return await self._get(
407
+ f"/api/conversation/message/{message_ext_id}",
408
+ options=make_request_options(
409
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
410
+ ),
411
+ cast_to=ConversationRetrieveMessageResponse,
412
+ )
413
+
341
414
  async def retrieve_threads(
342
415
  self,
343
416
  conversation_ext_id: str,
@@ -465,6 +538,9 @@ class ConversationResourceWithRawResponse:
465
538
  self.delete_message = to_raw_response_wrapper(
466
539
  conversation.delete_message,
467
540
  )
541
+ self.retrieve_message = to_raw_response_wrapper(
542
+ conversation.retrieve_message,
543
+ )
468
544
  self.retrieve_threads = to_raw_response_wrapper(
469
545
  conversation.retrieve_threads,
470
546
  )
@@ -490,6 +566,9 @@ class AsyncConversationResourceWithRawResponse:
490
566
  self.delete_message = async_to_raw_response_wrapper(
491
567
  conversation.delete_message,
492
568
  )
569
+ self.retrieve_message = async_to_raw_response_wrapper(
570
+ conversation.retrieve_message,
571
+ )
493
572
  self.retrieve_threads = async_to_raw_response_wrapper(
494
573
  conversation.retrieve_threads,
495
574
  )
@@ -515,6 +594,9 @@ class ConversationResourceWithStreamingResponse:
515
594
  self.delete_message = to_streamed_response_wrapper(
516
595
  conversation.delete_message,
517
596
  )
597
+ self.retrieve_message = to_streamed_response_wrapper(
598
+ conversation.retrieve_message,
599
+ )
518
600
  self.retrieve_threads = to_streamed_response_wrapper(
519
601
  conversation.retrieve_threads,
520
602
  )
@@ -540,6 +622,9 @@ class AsyncConversationResourceWithStreamingResponse:
540
622
  self.delete_message = async_to_streamed_response_wrapper(
541
623
  conversation.delete_message,
542
624
  )
625
+ self.retrieve_message = async_to_streamed_response_wrapper(
626
+ conversation.retrieve_message,
627
+ )
543
628
  self.retrieve_threads = async_to_streamed_response_wrapper(
544
629
  conversation.retrieve_threads,
545
630
  )
@@ -7,7 +7,7 @@ from typing import Optional
7
7
  import httpx
8
8
 
9
9
  from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
10
- from ...._utils import maybe_transform, async_maybe_transform
10
+ from ...._utils import maybe_transform, strip_not_given, async_maybe_transform
11
11
  from ...._compat import cached_property
12
12
  from ...._resource import SyncAPIResource, AsyncAPIResource
13
13
  from ...._response import (
@@ -51,6 +51,7 @@ class AnnotationResource(SyncAPIResource):
51
51
  note: Optional[str] | Omit = omit,
52
52
  page_ref: Optional[int] | Omit = omit,
53
53
  tag_name: Optional[str] | Omit = omit,
54
+ workspace_key: str | Omit = omit,
54
55
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
55
56
  # The extra values given here take precedence over values defined on the client or passed to this method.
56
57
  extra_headers: Headers | None = None,
@@ -76,6 +77,7 @@ class AnnotationResource(SyncAPIResource):
76
77
  """
77
78
  if not doc_ext_id:
78
79
  raise ValueError(f"Expected a non-empty value for `doc_ext_id` but received {doc_ext_id!r}")
80
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
79
81
  return self._post(
80
82
  f"/api/document/{doc_ext_id}/annotation",
81
83
  body=maybe_transform(
@@ -99,6 +101,7 @@ class AnnotationResource(SyncAPIResource):
99
101
  doc_ext_id: str,
100
102
  note: Optional[str] | Omit = omit,
101
103
  page_ref: Optional[int] | Omit = omit,
104
+ workspace_key: str | Omit = omit,
102
105
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
103
106
  # The extra values given here take precedence over values defined on the client or passed to this method.
104
107
  extra_headers: Headers | None = None,
@@ -122,6 +125,7 @@ class AnnotationResource(SyncAPIResource):
122
125
  raise ValueError(f"Expected a non-empty value for `doc_ext_id` but received {doc_ext_id!r}")
123
126
  if not doctag_ext_id:
124
127
  raise ValueError(f"Expected a non-empty value for `doctag_ext_id` but received {doctag_ext_id!r}")
128
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
125
129
  return self._patch(
126
130
  f"/api/document/{doc_ext_id}/annotation/{doctag_ext_id}",
127
131
  body=maybe_transform(
@@ -201,6 +205,7 @@ class AsyncAnnotationResource(AsyncAPIResource):
201
205
  note: Optional[str] | Omit = omit,
202
206
  page_ref: Optional[int] | Omit = omit,
203
207
  tag_name: Optional[str] | Omit = omit,
208
+ workspace_key: str | Omit = omit,
204
209
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
205
210
  # The extra values given here take precedence over values defined on the client or passed to this method.
206
211
  extra_headers: Headers | None = None,
@@ -226,6 +231,7 @@ class AsyncAnnotationResource(AsyncAPIResource):
226
231
  """
227
232
  if not doc_ext_id:
228
233
  raise ValueError(f"Expected a non-empty value for `doc_ext_id` but received {doc_ext_id!r}")
234
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
229
235
  return await self._post(
230
236
  f"/api/document/{doc_ext_id}/annotation",
231
237
  body=await async_maybe_transform(
@@ -249,6 +255,7 @@ class AsyncAnnotationResource(AsyncAPIResource):
249
255
  doc_ext_id: str,
250
256
  note: Optional[str] | Omit = omit,
251
257
  page_ref: Optional[int] | Omit = omit,
258
+ workspace_key: str | Omit = omit,
252
259
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
253
260
  # The extra values given here take precedence over values defined on the client or passed to this method.
254
261
  extra_headers: Headers | None = None,
@@ -272,6 +279,7 @@ class AsyncAnnotationResource(AsyncAPIResource):
272
279
  raise ValueError(f"Expected a non-empty value for `doc_ext_id` but received {doc_ext_id!r}")
273
280
  if not doctag_ext_id:
274
281
  raise ValueError(f"Expected a non-empty value for `doctag_ext_id` but received {doctag_ext_id!r}")
282
+ extra_headers = {**strip_not_given({"workspace-key": workspace_key}), **(extra_headers or {})}
275
283
  return await self._patch(
276
284
  f"/api/document/{doc_ext_id}/annotation/{doctag_ext_id}",
277
285
  body=await async_maybe_transform(