extralit-server 0.2.0__tar.gz → 0.2.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.
Files changed (426) hide show
  1. {extralit_server-0.2.0 → extralit_server-0.2.1}/PKG-INFO +1 -1
  2. {extralit_server-0.2.0 → extralit_server-0.2.1}/pyproject.toml +4 -3
  3. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/_version.py +1 -1
  4. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/3fc3c0839959_create_suggestions_table.py +2 -2
  5. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/7552df94427a_added_document_model_and_updated_record_.py +2 -2
  6. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/authentication.py +4 -1
  7. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/workspaces.py +3 -3
  8. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/datasets/records.py +45 -29
  9. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/documents.py +34 -15
  10. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/files.py +12 -6
  11. extralit_server-0.2.1/src/argilla_server/apis/v1/handlers/models.py +81 -0
  12. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/workspaces.py +7 -1
  13. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/users/create.py +3 -1
  14. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/search_engine/reindex.py +11 -3
  15. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/datasets.py +7 -14
  16. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/files.py +31 -28
  17. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/models/database.py +17 -6
  18. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/policies.py +5 -13
  19. extralit_server-0.2.1/src/argilla_server/schemas/v1/documents.py +32 -0
  20. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/files.py +1 -1
  21. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/questions.py +10 -1
  22. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/validators/responses.py +3 -4
  23. extralit_server-0.2.1/tests/.pytest_cache/.gitignore +2 -0
  24. extralit_server-0.2.1/tests/.pytest_cache/CACHEDIR.TAG +4 -0
  25. extralit_server-0.2.1/tests/.pytest_cache/README.md +8 -0
  26. extralit_server-0.2.1/tests/.pytest_cache/v/cache/stepwise +1 -0
  27. extralit_server-0.2.1/tests/.pytest_cache/v/randomly_seed +1 -0
  28. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/conftest.py +11 -0
  29. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/factories.py +72 -0
  30. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_workspaces.py +5 -3
  31. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/records/records_bulk/test_dataset_records_bulk_with_suggestions.py +1 -1
  32. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/test_questions.py +3 -3
  33. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/responses/test_update_response.py +69 -0
  34. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_datasets.py +225 -35
  35. extralit_server-0.2.1/tests/unit/api/v1/test_documents.py +166 -0
  36. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_fields.py +10 -8
  37. extralit_server-0.2.1/tests/unit/api/v1/test_files.py +159 -0
  38. extralit_server-0.2.1/tests/unit/api/v1/test_models.py +99 -0
  39. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_questions.py +6 -9
  40. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/daos/test_datasets.py +8 -3
  41. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/search_engine/test_commons.py +1 -1
  42. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/search_engine/test_elastisearch.py +5 -0
  43. extralit_server-0.2.0/src/argilla_server/apis/v1/handlers/models.py +0 -60
  44. extralit_server-0.2.0/src/argilla_server/schemas/v1/documents.py +0 -33
  45. {extralit_server-0.2.0 → extralit_server-0.2.1}/README.md +0 -0
  46. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/__init__.py +0 -0
  47. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/__main__.py +0 -0
  48. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/_app.py +0 -0
  49. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/_messages.py +0 -0
  50. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/env.py +0 -0
  51. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/script.py.mako +0 -0
  52. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/1769ee58fbb4_create_workspaces_users_table.py +0 -0
  53. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/1e629a913727_fix_suggestions_type_enum_values.py +0 -0
  54. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/3a8e2f9b5dea_create_questions_table.py +0 -0
  55. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/3ff6484f8b37_add_record_metadata_column.py +0 -0
  56. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/74694870197c_create_users_table.py +0 -0
  57. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/7850ab5b42d9_create_vectors_settings_table.py +0 -0
  58. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/7cbcccf8b57a_create_metadata_properties_table.py +0 -0
  59. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/82a5a88a3fa5_create_workspaces_table.py +0 -0
  60. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/84f6b9ff6076_add_last_activity_at_to_datasets_table.py +0 -0
  61. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/8be56284dac0_create_records_table.py +0 -0
  62. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/8c574ada5e5f_update_enum_columns.py +0 -0
  63. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/ae5522b4c674_create_fields_table.py +0 -0
  64. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/b8458008b60e_add_allow_extra_metadata_column_to_.py +0 -0
  65. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/b9099dc08489_create_datasets_table.py +0 -0
  66. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/bda6fe24314e_create_vectors_table.py +0 -0
  67. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/ca7293c38970_change_suggestions_score_column_to_json.py +0 -0
  68. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic/versions/e402e9d9245e_create_responses_table.py +0 -0
  69. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/alembic.ini +0 -0
  70. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/__init__.py +0 -0
  71. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/errors/__init__.py +0 -0
  72. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/errors/v1/__init__.py +0 -0
  73. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/errors/v1/exception_handlers.py +0 -0
  74. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/routes.py +0 -0
  75. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/__init__.py +0 -0
  76. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/__init__.py +0 -0
  77. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/datasets.py +0 -0
  78. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/info.py +0 -0
  79. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/metrics.py +0 -0
  80. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/records.py +0 -0
  81. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/records_search.py +0 -0
  82. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/records_update.py +0 -0
  83. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/text2text.py +0 -0
  84. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/text_classification.py +0 -0
  85. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/text_classification_dataset_settings.py +0 -0
  86. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/token_classification.py +0 -0
  87. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/token_classification_dataset_settings.py +0 -0
  88. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/handlers/users.py +0 -0
  89. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/helpers.py +0 -0
  90. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/models/__init__.py +0 -0
  91. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/models/commons/__init__.py +0 -0
  92. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/models/commons/model.py +0 -0
  93. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/models/commons/params.py +0 -0
  94. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/models/dataset_settings.py +0 -0
  95. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/models/text2text.py +0 -0
  96. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/models/text_classification.py +0 -0
  97. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/models/token_classification.py +0 -0
  98. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/validators/__init__.py +0 -0
  99. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/validators/commons.py +0 -0
  100. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/validators/text_classification.py +0 -0
  101. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v0/validators/token_classification.py +0 -0
  102. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/__init__.py +0 -0
  103. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/__init__.py +0 -0
  104. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/authentication.py +0 -0
  105. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/datasets/__init__.py +0 -0
  106. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/datasets/datasets.py +0 -0
  107. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/datasets/questions.py +0 -0
  108. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/datasets/records_bulk.py +0 -0
  109. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/fields.py +0 -0
  110. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/info.py +0 -0
  111. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/metadata_properties.py +0 -0
  112. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/oauth2.py +0 -0
  113. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/questions.py +0 -0
  114. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/records.py +0 -0
  115. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/responses.py +0 -0
  116. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/settings.py +0 -0
  117. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/suggestions.py +0 -0
  118. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/users.py +0 -0
  119. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/apis/v1/handlers/vectors_settings.py +0 -0
  120. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/bulk/__init__.py +0 -0
  121. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/bulk/records_bulk.py +0 -0
  122. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/__init__.py +0 -0
  123. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/__main__.py +0 -0
  124. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/__init__.py +0 -0
  125. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/__main__.py +0 -0
  126. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/migrate.py +0 -0
  127. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/revisions.py +0 -0
  128. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/users/__init__.py +0 -0
  129. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/users/__main__.py +0 -0
  130. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/users/create_default.py +0 -0
  131. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/users/migrate.py +0 -0
  132. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/users/update.py +0 -0
  133. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/users/utils.py +0 -0
  134. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/database/utils.py +0 -0
  135. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/rich.py +0 -0
  136. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/search_engine/__init__.py +0 -0
  137. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/search_engine/__main__.py +0 -0
  138. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/start.py +0 -0
  139. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/cli/typer_ext.py +0 -0
  140. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/commons/__init__.py +0 -0
  141. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/commons/config.py +0 -0
  142. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/commons/models.py +0 -0
  143. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/constants.py +0 -0
  144. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/__init__.py +0 -0
  145. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/accounts.py +0 -0
  146. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/info.py +0 -0
  147. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/questions.py +0 -0
  148. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/records.py +0 -0
  149. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/search.py +0 -0
  150. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/contexts/settings.py +0 -0
  151. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/__init__.py +0 -0
  152. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/__init__.py +0 -0
  153. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/base.py +0 -0
  154. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/client_adapters/__init__.py +0 -0
  155. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/client_adapters/base.py +0 -0
  156. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/client_adapters/elasticsearch.py +0 -0
  157. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/client_adapters/factory.py +0 -0
  158. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/client_adapters/opensearch.py +0 -0
  159. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/generic_elastic.py +0 -0
  160. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/mappings/__init__.py +0 -0
  161. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/mappings/datasets.py +0 -0
  162. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/mappings/helpers.py +0 -0
  163. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/mappings/stopwords/__init__.py +0 -0
  164. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/mappings/stopwords/english.py +0 -0
  165. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/mappings/text2text.py +0 -0
  166. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/mappings/text_classification.py +0 -0
  167. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/mappings/token_classification.py +0 -0
  168. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/metrics/__init__.py +0 -0
  169. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/metrics/base.py +0 -0
  170. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/metrics/commons.py +0 -0
  171. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/metrics/text_classification.py +0 -0
  172. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/metrics/token_classification.py +0 -0
  173. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/query_helpers.py +0 -0
  174. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/search/__init__.py +0 -0
  175. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/search/model.py +0 -0
  176. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/backend/search/query_builder.py +0 -0
  177. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/datasets.py +0 -0
  178. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/models/__init__.py +0 -0
  179. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/models/datasets.py +0 -0
  180. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/models/records.py +0 -0
  181. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/daos/records.py +0 -0
  182. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/database.py +0 -0
  183. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/enums.py +0 -0
  184. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/errors/__init__.py +0 -0
  185. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/errors/base_errors.py +0 -0
  186. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/errors/error_handler.py +0 -0
  187. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/errors/future/__init__.py +0 -0
  188. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/errors/future/base_errors.py +0 -0
  189. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/errors/task_errors.py +0 -0
  190. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/helpers.py +0 -0
  191. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/logging.py +0 -0
  192. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/models/__init__.py +0 -0
  193. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/models/base.py +0 -0
  194. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/models/metadata_properties.py +0 -0
  195. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/models/mixins.py +0 -0
  196. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/models/suggestions.py +0 -0
  197. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/pydantic_v1/__init__.py +0 -0
  198. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/pydantic_v1/errors.py +0 -0
  199. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/pydantic_v1/generics.py +0 -0
  200. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/pydantic_v1/utils.py +0 -0
  201. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/__init__.py +0 -0
  202. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/base.py +0 -0
  203. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v0/__init__.py +0 -0
  204. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v0/authentication.py +0 -0
  205. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v0/datasets.py +0 -0
  206. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v0/users.py +0 -0
  207. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v0/workspaces.py +0 -0
  208. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/__init__.py +0 -0
  209. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/datasets.py +0 -0
  210. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/fields.py +0 -0
  211. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/info.py +0 -0
  212. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/metadata_properties.py +0 -0
  213. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/oauth2.py +0 -0
  214. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/records.py +0 -0
  215. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/records_bulk.py +0 -0
  216. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/responses.py +0 -0
  217. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/settings.py +0 -0
  218. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/suggestions.py +0 -0
  219. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/users.py +0 -0
  220. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/vector_settings.py +0 -0
  221. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/vectors.py +0 -0
  222. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/schemas/v1/workspaces.py +0 -0
  223. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/search_engine/__init__.py +0 -0
  224. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/search_engine/base.py +0 -0
  225. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/search_engine/commons.py +0 -0
  226. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/search_engine/elasticsearch.py +0 -0
  227. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/search_engine/opensearch.py +0 -0
  228. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/__init__.py +0 -0
  229. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/__init__.py +0 -0
  230. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/claims.py +0 -0
  231. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/db/__init__.py +0 -0
  232. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/db/api_key_backend.py +0 -0
  233. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/db/bearer_token_backend.py +0 -0
  234. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/jwt.py +0 -0
  235. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/oauth2/__init__.py +0 -0
  236. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/oauth2/auth_backend.py +0 -0
  237. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/oauth2/client_provider.py +0 -0
  238. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/oauth2/settings.py +0 -0
  239. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/oauth2/supported_providers.py +0 -0
  240. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/provider.py +0 -0
  241. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/authentication/userinfo.py +0 -0
  242. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/model.py +0 -0
  243. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/security/settings.py +0 -0
  244. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/server.py +0 -0
  245. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/__init__.py +0 -0
  246. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/datasets.py +0 -0
  247. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/info.py +0 -0
  248. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/metrics/__init__.py +0 -0
  249. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/metrics/models.py +0 -0
  250. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/metrics/service.py +0 -0
  251. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/search/__init__.py +0 -0
  252. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/search/model.py +0 -0
  253. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/search/service.py +0 -0
  254. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/storage/__init__.py +0 -0
  255. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/storage/service.py +0 -0
  256. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/__init__.py +0 -0
  257. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/commons/__init__.py +0 -0
  258. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/commons/models.py +0 -0
  259. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/text2text/__init__.py +0 -0
  260. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/text2text/models.py +0 -0
  261. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/text2text/service.py +0 -0
  262. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/text_classification/__init__.py +0 -0
  263. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/text_classification/metrics.py +0 -0
  264. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/text_classification/model.py +0 -0
  265. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/text_classification/service.py +0 -0
  266. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/token_classification/__init__.py +0 -0
  267. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/token_classification/metrics.py +0 -0
  268. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/token_classification/model.py +0 -0
  269. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/services/tasks/token_classification/service.py +0 -0
  270. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/settings.py +0 -0
  271. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/static_rewrite.py +0 -0
  272. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/telemetry.py +0 -0
  273. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/use_cases/__init__.py +0 -0
  274. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/use_cases/responses/__init__.py +0 -0
  275. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/use_cases/responses/upsert_responses_in_bulk.py +0 -0
  276. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/utils/__init__.py +0 -0
  277. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/utils/_telemetry.py +0 -0
  278. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/utils/dependency.py +0 -0
  279. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/utils/params.py +0 -0
  280. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/utils/span_utils.py +0 -0
  281. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/utils/utils.py +0 -0
  282. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/utils.py +0 -0
  283. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/validators/__init__.py +0 -0
  284. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/validators/questions.py +0 -0
  285. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/validators/records.py +0 -0
  286. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/validators/response_values.py +0 -0
  287. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/validators/suggestions.py +0 -0
  288. {extralit_server-0.2.0 → extralit_server-0.2.1}/src/argilla_server/validators/vectors.py +0 -0
  289. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/__init__.py +0 -0
  290. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/database.py +0 -0
  291. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/pydantic_v1/__init__.py +0 -0
  292. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/pydantic_v1/generics.py +0 -0
  293. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/pydantic_v1/utils.py +0 -0
  294. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/__init__.py +0 -0
  295. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/__init__.py +0 -0
  296. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/test_docs.py +0 -0
  297. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/test_not_found_routes.py +0 -0
  298. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/__init__.py +0 -0
  299. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_authentication.py +0 -0
  300. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_datasets.py +0 -0
  301. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_info.py +0 -0
  302. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_metrics.py +0 -0
  303. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_records_get.py +0 -0
  304. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_records_update.py +0 -0
  305. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_security_token.py +0 -0
  306. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_text2text.py +0 -0
  307. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_text_classification.py +0 -0
  308. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_text_classification_api_rules.py +0 -0
  309. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_text_classification_dataset_settings.py +0 -0
  310. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_token_classification.py +0 -0
  311. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_token_classification_dataset_settings.py +0 -0
  312. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v0/test_users.py +0 -0
  313. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/__init__.py +0 -0
  314. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/authentication/__init__.py +0 -0
  315. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/authentication/test_create_token.py +0 -0
  316. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/__init__.py +0 -0
  317. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/questions/__init__.py +0 -0
  318. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/questions/test_create_dataset_question.py +0 -0
  319. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/questions/test_list_dataset_questions.py +0 -0
  320. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/records/__init__.py +0 -0
  321. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/records/records_bulk/__init__.py +0 -0
  322. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/records/records_bulk/test_dataset_records_bulk.py +0 -0
  323. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/records/records_bulk/test_dataset_records_bulk_with_responses.py +0 -0
  324. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/records/records_bulk/test_dataset_records_bulk_with_vectors.py +0 -0
  325. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/records/test_create_dataset_records.py +0 -0
  326. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/records/test_update_dataset_records.py +0 -0
  327. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/test_create_dataset_question.py +0 -0
  328. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/test_create_dataset_vector_settings.py +0 -0
  329. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/test_get_dataset_progress.py +0 -0
  330. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/test_list_dataset_records_search_suggestions_options.py +0 -0
  331. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/test_search_current_user_dataset_records.py +0 -0
  332. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/datasets/test_search_dataset_records.py +0 -0
  333. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/info/__init__.py +0 -0
  334. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/info/test_get_status.py +0 -0
  335. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/info/test_get_version.py +0 -0
  336. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/questions/__init__.py +0 -0
  337. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/questions/test_update_question.py +0 -0
  338. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/records/__init__.py +0 -0
  339. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/records/test_create_record_response.py +0 -0
  340. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/records/test_upsert_suggestion.py +0 -0
  341. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/responses/__init__.py +0 -0
  342. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/responses/test_create_current_user_responses_bulk.py +0 -0
  343. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/settings/__init__.py +0 -0
  344. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/settings/test_get_settings.py +0 -0
  345. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_list_dataset_records.py +0 -0
  346. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_metadata_properties.py +0 -0
  347. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_oauth2.py +0 -0
  348. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_records.py +0 -0
  349. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_responses.py +0 -0
  350. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_suggestions.py +0 -0
  351. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_users.py +0 -0
  352. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_vectors_settings.py +0 -0
  353. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/test_workspaces.py +0 -0
  354. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/users/__init__.py +0 -0
  355. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/users/test_create_user.py +0 -0
  356. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/users/test_delete_user.py +0 -0
  357. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/users/test_get_current_user.py +0 -0
  358. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/users/test_get_user.py +0 -0
  359. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/users/test_list_users.py +0 -0
  360. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/workspaces/__init__.py +0 -0
  361. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/workspaces/test_create_workspace.py +0 -0
  362. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/workspaces/test_create_workspace_user.py +0 -0
  363. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/workspaces/test_delete_workspace_user.py +0 -0
  364. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/api/v1/workspaces/test_list_workspace_users.py +0 -0
  365. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/__init__.py +0 -0
  366. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/conftest.py +0 -0
  367. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/__init__.py +0 -0
  368. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/__init__.py +0 -0
  369. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/conftest.py +0 -0
  370. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/test_create.py +0 -0
  371. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/test_create_default.py +0 -0
  372. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/test_migrate.py +0 -0
  373. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/test_update.py +0 -0
  374. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/test_user_files/users.yml +0 -0
  375. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/test_user_files/users_invalid_user.yml +0 -0
  376. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/test_user_files/users_invalid_workspace.yml +0 -0
  377. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/database/users/test_user_files/users_one.yml +0 -0
  378. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/search_engine/__init__.py +0 -0
  379. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/search_engine/conftest.py +0 -0
  380. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/search_engine/test_reindex.py +0 -0
  381. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/cli/test_start.py +0 -0
  382. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/commons/__init__.py +0 -0
  383. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/commons/test_records_dao.py +0 -0
  384. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/commons/test_settings.py +0 -0
  385. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/commons/test_telemetry.py +0 -0
  386. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/conftest.py +0 -0
  387. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/contexts/__init__.py +0 -0
  388. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/contexts/search/__init__.py +0 -0
  389. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/contexts/search/test_search_records_query_validator.py +0 -0
  390. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/daos/__init__.py +0 -0
  391. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/daos/backend/__init__.py +0 -0
  392. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/daos/backend/test_es_client.py +0 -0
  393. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/daos/backend/test_generic_elastic_engine.py +0 -0
  394. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/daos/backend/test_query_builder.py +0 -0
  395. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/daos/models/__init__.py +0 -0
  396. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/daos/models/test_records.py +0 -0
  397. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/errors/__init__.py +0 -0
  398. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/errors/test_api_errors.py +0 -0
  399. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/errors/test_errors.py +0 -0
  400. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/models/__init__.py +0 -0
  401. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/models/old_models/__init__.py +0 -0
  402. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/models/old_models/test_datasets.py +0 -0
  403. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/models/old_models/test_text2text.py +0 -0
  404. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/models/old_models/test_text_classification.py +0 -0
  405. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/models/old_models/test_token_classification.py +0 -0
  406. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/models/test_base.py +0 -0
  407. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/schemas/__init__.py +0 -0
  408. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/schemas/test_base.py +0 -0
  409. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/schemas/v1/responses/test_response_value_create.py +0 -0
  410. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/search_engine/__init__.py +0 -0
  411. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/search_engine/conftest.py +0 -0
  412. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/search_engine/test_opensearch.py +0 -0
  413. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/security/__init__.py +0 -0
  414. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/security/authentication/__init__.py +0 -0
  415. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/security/authentication/oauth2/__init__.py +0 -0
  416. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/security/authentication/oauth2/test_settings.py +0 -0
  417. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/security/test_model.py +0 -0
  418. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/security/test_settings.py +0 -0
  419. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/test_app.py +0 -0
  420. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/test_logging.py +0 -0
  421. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/test_utils.py +0 -0
  422. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/utils/__init__.py +0 -0
  423. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/utils/test_dependency.py +0 -0
  424. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/utils/test_span_utils.py +0 -0
  425. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/validators/__init__.py +0 -0
  426. {extralit_server-0.2.0 → extralit_server-0.2.1}/tests/unit/validators/test_records_bulk.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: extralit-server
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Open-source tool for accurate & fast scientific literature data extraction with LLM and human-in-the-loop.
5
5
  Keywords: literature-review,data-annotation,artificial-intelligence,machine-learning,human-in-the-loop,mlops
6
6
  Home-page: https://www.argilla.io
@@ -48,7 +48,7 @@ dependencies = [
48
48
  "packaging>=23.2",
49
49
  "minio>=7.2.7",
50
50
  ]
51
- version = "0.2.0"
51
+ version = "0.2.1"
52
52
 
53
53
  [project.license]
54
54
  text = "Apache-2.0"
@@ -91,6 +91,7 @@ test = [
91
91
  "pytest>=7.4.4",
92
92
  "pytest-cov>=4.1.0",
93
93
  "pytest-mock>=3.12.0",
94
+ "pytest-xdist>=3.6.0",
94
95
  "pytest-asyncio~=0.21.1",
95
96
  "pytest-env>=1.1.3",
96
97
  "factory-boy~=3.2.1",
@@ -117,10 +118,10 @@ cmd = "pytest"
117
118
  env_file = ".env.test"
118
119
 
119
120
  [tool.pdm.scripts.build-server-image]
120
- shell = "cp -R dist docker/server && docker build -t extralit/extralit-server:local docker/server"
121
+ shell = "cp -R dist docker/server && docker build -t extralit/argilla-server:local docker/server"
121
122
 
122
123
  [tool.pdm.scripts.build-quickstart-image]
123
- shell = "docker build --build-arg ARGILLA_VERSION=local -t extralit/extralit-quickstart:local docker/quickstart"
124
+ shell = "docker build --build-arg ARGILLA_VERSION=local -t extralit/argilla-quickstart:local docker/quickstart"
124
125
 
125
126
  [tool.pytest.ini_options]
126
127
  log_format = "%(asctime)s %(name)s %(levelname)s %(message)s"
@@ -13,4 +13,4 @@
13
13
  # limitations under the License.
14
14
 
15
15
  # coding: utf-8
16
- __version__ = "0.2.0"
16
+ __version__ = "0.2.1"
@@ -28,7 +28,7 @@ down_revision = "8c574ada5e5f"
28
28
  branch_labels = None
29
29
  depends_on = None
30
30
 
31
- suggestion_type_enum = sa.Enum("model", "human", name="suggestion_type_enum")
31
+ suggestion_type_enum = sa.Enum("model", "human", "selection", name="suggestion_type_enum")
32
32
 
33
33
 
34
34
  def upgrade() -> None:
@@ -47,7 +47,7 @@ def upgrade() -> None:
47
47
  sa.ForeignKeyConstraint(["question_id"], ["questions.id"], ondelete="CASCADE"),
48
48
  sa.ForeignKeyConstraint(["record_id"], ["records.id"], ondelete="CASCADE"),
49
49
  sa.PrimaryKeyConstraint("id"),
50
- sa.UniqueConstraint("record_id", "question_id", "type", "agent", name="suggestion_record_id_question_id_uq"),
50
+ sa.UniqueConstraint("record_id", "question_id", name="suggestion_record_id_question_id_uq"),
51
51
  )
52
52
  op.create_index(op.f("ix_suggestions_question_id"), "suggestions", ["question_id"], unique=False)
53
53
  op.create_index(op.f("ix_suggestions_record_id"), "suggestions", ["record_id"], unique=False)
@@ -1,4 +1,4 @@
1
- """Added Document model and updated Record model
1
+ """add Document model and update Record model
2
2
 
3
3
  Revision ID: 7552df94427a
4
4
  Revises: ca7293c38970
@@ -11,7 +11,7 @@ from sqlalchemy.dialects import postgresql
11
11
 
12
12
 
13
13
  revision = '7552df94427a'
14
- down_revision = 'ca7293c38970' # set to latest revision identifiers on updates from from argilla-io/argilla upstream repo.
14
+ down_revision = 'ca7293c38970' # TODO set to latest revision identifiers on updates from from argilla-io/argilla upstream repo.
15
15
  branch_labels = None
16
16
  depends_on = None
17
17
 
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from fastapi import APIRouter, Depends
15
+ from fastapi import APIRouter, Depends, HTTPException, status
16
16
  from sqlalchemy.ext.asyncio import AsyncSession
17
17
 
18
18
  from argilla_server.contexts import accounts
@@ -29,6 +29,9 @@ router = APIRouter(tags=["Authentication"])
29
29
  async def create_access_token(
30
30
  db: AsyncSession = Depends(get_async_db), form: UserPasswordRequestForm = Depends()
31
31
  ) -> Token:
32
+ if not form.username or not form.password:
33
+ raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Password cannot be empty")
34
+
32
35
  user = await accounts.authenticate_user(db, form.username, form.password)
33
36
  if not user:
34
37
  raise UnauthorizedError()
@@ -22,7 +22,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
22
22
 
23
23
  from argilla_server.contexts import accounts, files
24
24
  from argilla_server.database import get_async_db
25
- from argilla_server.errors import EntityAlreadyExistsError, EntityNotFoundError
25
+ from argilla_server.errors import EntityAlreadyExistsError, EntityNotFoundError, GenericServerError
26
26
  from argilla_server.errors.future import NotUniqueError
27
27
  from argilla_server.policies import WorkspacePolicy, WorkspaceUserPolicy, authorize
28
28
  from argilla_server.pydantic_v1 import parse_obj_as
@@ -46,11 +46,11 @@ async def create_workspace(
46
46
  try:
47
47
  files.create_bucket(minio_client, workspace_create.name)
48
48
  except Exception as e:
49
- raise e
49
+ raise GenericServerError(e)
50
50
 
51
51
  try:
52
52
  workspace = await accounts.create_workspace(db, workspace_create.dict())
53
- except NotUniqueError:
53
+ except NotUniqueError as e:
54
54
  _LOGGER.error(f"Could not create workspace '{workspace_create.name}': {e}")
55
55
  raise EntityAlreadyExistsError(name=workspace_create.name, type=Workspace)
56
56
 
@@ -29,7 +29,7 @@ from argilla_server.database import get_async_db
29
29
  from argilla_server.enums import MetadataPropertyType, RecordSortField, ResponseStatus, ResponseStatusFilter, SortOrder
30
30
  from argilla_server.errors.future.base_errors import MISSING_VECTOR_ERROR_CODE
31
31
  from argilla_server.models import Dataset as DatasetModel
32
- from argilla_server.models import Record, User, Suggestion
32
+ from argilla_server.models import Record, User, Suggestion, Response, Question
33
33
  from argilla_server.policies import DatasetPolicyV1, RecordPolicyV1, authorize, is_authorized
34
34
  from argilla_server.schemas.v1.datasets import Dataset
35
35
  from argilla_server.schemas.v1.records import (
@@ -128,7 +128,7 @@ async def _filter_records_using_search_engine(
128
128
  user=user,
129
129
  parsed_metadata=parsed_metadata,
130
130
  response_statuses=response_statuses,
131
- sort_by_query_param=sort_by_query_param or LIST_DATASET_RECORDS_DEFAULT_SORT_BY,
131
+ sort_by_query_param=sort_by_query_param,
132
132
  )
133
133
 
134
134
  record_ids = [response.record_id for response in search_responses.items]
@@ -397,43 +397,59 @@ async def _get_vector_settings_by_name_or_raise(
397
397
  return vector_settings
398
398
 
399
399
 
400
- def convert_workspace_users_response_suggestions(
401
- records: Records,
400
+ def add_suggestions_from_responses(
401
+ records: List[Record],
402
402
  current_user: User,
403
403
  workspace_users: List[User],
404
404
  dataset: Dataset,
405
- ):
405
+ ) -> Records:
406
406
  user_id2name = {user.id: user.username for user in workspace_users.items}
407
- question_name2id = {question.name: question for question in dataset.questions}
407
+ questions_name_map = {question.name: question for question in dataset.questions}
408
408
 
409
409
  for record in records:
410
410
  suggestion_responses = [response for response in record.responses \
411
411
  if response.user_id != current_user.id]
412
412
 
413
413
  for response in suggestion_responses:
414
- if response.status == ResponseStatus.discarded: continue
415
-
416
- for question_name, suggestion_value in response.values.items():
417
- if question_name not in question_name2id or \
418
- not suggestion_value or not suggestion_value.get("value"): continue
419
- question = question_name2id.get(question_name)
420
-
421
- suggestion = Suggestion(
422
- id=response.id,
423
- question_id=question.id,
424
- type="human",
425
- value=suggestion_value.get("value"),
426
- agent=user_id2name.get(response.user_id),
427
- score=None,
428
- inserted_at=response.inserted_at,
429
- updated_at=response.updated_at
430
- )
431
- record.suggestions.append(suggestion)
414
+ suggestions = generate_suggestions_from_response(response, current_user, questions_name_map, user_id2name)
415
+ record.suggestions.extend(suggestions)
432
416
 
433
417
  if record.responses and record.responses[0].user_id == current_user.id:
434
418
  record.responses = [record.responses[0]]
435
419
  else:
436
420
  record.responses = []
421
+
422
+ return records
423
+
424
+
425
+ def generate_suggestions_from_response(
426
+ response: Response,
427
+ current_user: User,
428
+ questions_name_map: Dict[str, Question],
429
+ workspace_users_id2name: Dict[UUID, str]
430
+ ) -> List[Suggestion]:
431
+ suggestions = []
432
+ if response.user_id == current_user.id or response.status == ResponseStatus.discarded:
433
+ return suggestions
434
+
435
+ for question_name, suggestion_value in response.values.items():
436
+ if question_name not in questions_name_map or not suggestion_value or not suggestion_value.get("value"):
437
+ continue
438
+ question = questions_name_map.get(question_name)
439
+
440
+ suggestion = Suggestion(
441
+ id=response.id,
442
+ question_id=question.id,
443
+ type="human",
444
+ value=suggestion_value.get("value"),
445
+ agent=workspace_users_id2name.get(response.user_id),
446
+ score=None,
447
+ inserted_at=response.inserted_at,
448
+ updated_at=response.updated_at
449
+ )
450
+ suggestions.append(suggestion)
451
+
452
+ return suggestions
437
453
 
438
454
 
439
455
  @router.get("/me/datasets/{dataset_id}/records", response_model=Records, response_model_exclude_unset=True)
@@ -469,7 +485,7 @@ async def list_current_user_dataset_records(
469
485
  user=current_user,
470
486
  response_statuses=response_statuses,
471
487
  include=include,
472
- sort_by_query_param=sort_by_query_param or LIST_DATASET_RECORDS_DEFAULT_SORT_BY,
488
+ sort_by_query_param=sort_by_query_param,
473
489
  workspace_user_ids=workspace_user_ids,
474
490
  )
475
491
 
@@ -478,7 +494,7 @@ async def list_current_user_dataset_records(
478
494
  record.metadata_ = await _filter_record_metadata_for_user(record, current_user)
479
495
 
480
496
  if include and include.with_response_suggestions:
481
- convert_workspace_users_response_suggestions(records, current_user, workspace_users, dataset)
497
+ records = add_suggestions_from_responses(records, current_user, workspace_users, dataset)
482
498
 
483
499
  return Records(items=records, total=total)
484
500
 
@@ -645,7 +661,7 @@ async def search_current_user_dataset_records(
645
661
  offset=offset,
646
662
  user=current_user,
647
663
  response_statuses=response_statuses,
648
- sort_by_query_param=sort_by_query_param or LIST_DATASET_RECORDS_DEFAULT_SORT_BY,
664
+ sort_by_query_param=sort_by_query_param,
649
665
  )
650
666
 
651
667
  record_id_score_map: Dict[UUID, Dict[str, Union[float, SearchRecord, None]]] = {
@@ -663,7 +679,7 @@ async def search_current_user_dataset_records(
663
679
  )
664
680
 
665
681
  if include and include.with_response_suggestions:
666
- convert_workspace_users_response_suggestions(records, current_user, workspace_users, dataset)
682
+ records = add_suggestions_from_responses(records, current_user, workspace_users, dataset)
667
683
 
668
684
  for record in records:
669
685
  record.dataset = dataset
@@ -713,7 +729,7 @@ async def search_dataset_records(
713
729
  offset=offset,
714
730
  parsed_metadata=metadata.metadata_parsed,
715
731
  response_statuses=response_statuses,
716
- sort_by_query_param=sort_by_query_param or LIST_DATASET_RECORDS_DEFAULT_SORT_BY
732
+ sort_by_query_param=sort_by_query_param,
717
733
  )
718
734
 
719
735
  record_id_score_map = {
@@ -5,7 +5,7 @@ from uuid import UUID
5
5
  from typing import TYPE_CHECKING, Optional, List, Union
6
6
 
7
7
  from argilla_server.schemas.v1.files import ObjectMetadata
8
- from fastapi import APIRouter, Body, Depends, HTTPException, UploadFile, Path, status, Security
8
+ from fastapi import APIRouter, Body, Depends, File, HTTPException, UploadFile, Path, status, Security
9
9
  from fastapi.responses import StreamingResponse
10
10
  from minio import Minio
11
11
  from sqlalchemy.ext.asyncio import AsyncSession
@@ -17,7 +17,7 @@ from argilla_server.security import auth
17
17
  from argilla_server.policies import DocumentPolicy, authorize, is_authorized
18
18
  from argilla_server.models import User
19
19
  from argilla_server.contexts import accounts, datasets, files
20
- from argilla_server.schemas.v1.documents import DocumentCreate, DocumentDelete, DocumentListItem
20
+ from argilla_server.schemas.v1.documents import DocumentCreateRequest, DocumentDeleteRequest, DocumentListItem
21
21
 
22
22
  if TYPE_CHECKING:
23
23
  from argilla_server.models import Document
@@ -26,7 +26,7 @@ _LOGGER = logging.getLogger("documents")
26
26
 
27
27
  router = APIRouter(tags=["documents"])
28
28
 
29
- async def check_existing_document(db: AsyncSession, document_create: DocumentCreate):
29
+ async def check_existing_document(db: AsyncSession, document_create: DocumentCreateRequest):
30
30
  # Add conditions for non-empty attributes
31
31
  conditions = []
32
32
  if document_create.pmid:
@@ -37,6 +37,8 @@ async def check_existing_document(db: AsyncSession, document_create: DocumentCre
37
37
  conditions.append(Document.doi == document_create.doi)
38
38
  if document_create.id:
39
39
  conditions.append(Document.id == document_create.id)
40
+ if document_create.reference:
41
+ conditions.append(Document.reference == document_create.reference)
40
42
 
41
43
  if not conditions:
42
44
  return None
@@ -58,7 +60,8 @@ async def check_existing_document(db: AsyncSession, document_create: DocumentCre
58
60
  @router.post("/documents", status_code=status.HTTP_201_CREATED, response_model=UUID)
59
61
  async def upload_document(
60
62
  *,
61
- document_create: DocumentCreate,
63
+ document_create: DocumentCreateRequest = Depends(),
64
+ file_data: UploadFile = File(None),
62
65
  db: AsyncSession = Depends(get_async_db),
63
66
  client: Minio = Depends(files.get_minio_client),
64
67
  current_user: User = Security(auth.get_current_user)
@@ -72,17 +75,33 @@ async def upload_document(
72
75
  detail=f"Workspace with id `{document_create.workspace_id}` not found",
73
76
  )
74
77
 
75
- object_path = files.get_pdf_s3_object_path(document_create.id)
76
- existing_files = files.list_objects(client, workspace.name, prefix=object_path, include_version=False)
77
- if not existing_files.objects and document_create.file_data is not None:
78
- file_data_bytes = base64.b64decode(document_create.file_data)
79
- response = files.put_object(
80
- client, bucket=workspace.name, object=object_path, data=file_data_bytes,
81
- size=len(file_data_bytes), content_type="application/pdf",
82
- metadata=document_create.dict(include={"file_name": True, "pmid": True, "doi": True}))
78
+ if file_data is not None:
79
+ object_path = files.get_pdf_s3_object_path(document_create.id)
80
+ existing_files = files.list_objects(client, workspace.name, prefix=object_path, include_version=False, recursive=False)
81
+ # file_data_bytes = base64.b64decode(file_data)
82
+ file_data_bytes = await file_data.read()
83
+
84
+ put_object = False
85
+
86
+ if existing_files.objects:
87
+ new_file_hash = files.compute_hash(file_data_bytes)
88
+ existing_hashes = [existing_file.etag.strip('"') for existing_file in existing_files.objects if existing_file.etag is not None]
89
+
90
+ if new_file_hash not in existing_hashes:
91
+ put_object = True
92
+ else:
93
+ put_object = True
83
94
 
84
- if not document_create.url:
95
+ if put_object:
96
+
97
+ response = files.put_object(
98
+ client, bucket=workspace.name, object=object_path, data=file_data_bytes,
99
+ size=len(file_data_bytes), content_type="application/pdf",
100
+ metadata=document_create.dict(include={"file_name": True, "pmid": True, "doi": True}))
101
+
85
102
  document_create.url = files.get_s3_object_url(response.bucket_name, response.object_name)
103
+ if file_data.filename and not document_create.file_name:
104
+ document_create.file_name = file_data.filename
86
105
 
87
106
  existing_document = await check_existing_document(db, document_create)
88
107
  if existing_document is not None:
@@ -159,10 +178,10 @@ async def get_document_by_id(
159
178
  return DocumentListItem.from_orm(document)
160
179
 
161
180
 
162
- @router.delete("/documents/workspace/{workspace_id}", status_code=status.HTTP_200_OK)
181
+ @router.delete("/documents/workspace/{workspace_id}", status_code=status.HTTP_200_OK, response_model=int, description="Delete all documents by workspace_id, or a specific document by id, pmid, doi, or url")
163
182
  async def delete_documents_by_workspace_id(*,
164
183
  workspace_id: Union[UUID, str],
165
- document_delete: DocumentDelete = Body(None),
184
+ document_delete: DocumentDeleteRequest = Body(None),
166
185
  db: AsyncSession = Depends(get_async_db),
167
186
  client: Minio = Depends(files.get_minio_client),
168
187
  current_user: User = Security(auth.get_current_user)
@@ -39,11 +39,11 @@ async def get_file(
39
39
  )
40
40
  except S3Error as se:
41
41
  _LOGGER.error(f"Error getting object '{bucket}/{object}': {se}")
42
- raise HTTPException(status_code=404, detail=f"No object at path '{bucket}/{object}' was found")
42
+ raise HTTPException(status_code=404, detail=f"No object at path '{bucket}/{object}' was found") from se
43
43
 
44
44
  except Exception as e:
45
45
  _LOGGER.error(f"Error getting object '{bucket}/{object}': {e}")
46
- raise HTTPException(status_code=500, detail=str(e))
46
+ raise HTTPException(status_code=500, detail=str(e)) from e
47
47
 
48
48
 
49
49
  @router.post("/file/{bucket}/{object:path}", response_model=ObjectMetadata)
@@ -64,7 +64,7 @@ async def put_file(
64
64
  data=file.file, size=file.size, content_type=file.content_type)
65
65
  return response
66
66
  except S3Error as se:
67
- raise HTTPException(status_code=500, detail="Internal server error")
67
+ raise HTTPException(status_code=500, detail="Internal server error") from se
68
68
 
69
69
 
70
70
  @router.get("/files/{bucket}/{prefix:path}", response_model=ListObjectsResponse)
@@ -73,6 +73,8 @@ async def list_objects(
73
73
  bucket: str,
74
74
  prefix: str,
75
75
  include_version=True,
76
+ recursive = True,
77
+ start_after: Optional[str] = None,
76
78
  client: Minio = Depends(files.get_minio_client),
77
79
  current_user: User = Security(auth.get_current_user),
78
80
  ):
@@ -80,10 +82,14 @@ async def list_objects(
80
82
  await authorize(current_user, FilePolicy.list(bucket))
81
83
 
82
84
  try:
83
- objects = files.list_objects(client, bucket, prefix=prefix, include_version=include_version)
85
+ objects = files.list_objects(client, bucket, prefix=prefix, include_version=include_version, recursive=recursive, start_after=start_after)
84
86
  return objects
85
87
  except S3Error as se:
86
- raise HTTPException(status_code=404, detail=f"No objects at prefix '{bucket}/{prefix}' were found")
88
+ _LOGGER.error(f"Error listing objects in '{bucket}/{prefix}': {se}")
89
+ if se.code == "NoSuchBucket":
90
+ raise HTTPException(status_code=404, detail=f"Bucket '{bucket}' not found, please run `rg.Workspace.create('{bucket}')` to create the S3 bucket.") from se
91
+ else:
92
+ raise HTTPException(status_code=404, detail=f"Cannot list objects as '{bucket}/{prefix}' is not found") from se
87
93
  except Exception as e:
88
94
  raise e
89
95
 
@@ -106,7 +112,7 @@ async def delete_files(
106
112
  files.delete_object(client, bucket, object, version_id=version_id)
107
113
  return {"message": "File deleted"}
108
114
  except S3Error as se:
109
- raise HTTPException(status_code=500, detail="Internal server error")
115
+ raise HTTPException(status_code=500, detail="Internal server error") from se
110
116
  except Exception as e:
111
117
  raise e
112
118
 
@@ -0,0 +1,81 @@
1
+ import logging
2
+ from urllib.parse import urljoin
3
+
4
+ import httpx
5
+ from fastapi import APIRouter, Depends, HTTPException
6
+ from starlette.requests import Request
7
+ from starlette.responses import StreamingResponse
8
+
9
+ from argilla_server.models import User
10
+ from argilla_server.policies import _exists_workspace_user_by_user_and_workspace_name
11
+ from argilla_server.security import auth
12
+ from argilla_server.settings import settings
13
+ from argilla_server.errors import UnauthorizedError, BadRequestError
14
+
15
+ _LOGGER = logging.getLogger("models")
16
+
17
+ router = APIRouter(tags=["models"])
18
+
19
+ client = httpx.AsyncClient(timeout=10.0)
20
+
21
+ @router.api_route("/models/{rest_of_path:path}",
22
+ methods=["GET", "POST", "PUT", "DELETE"],
23
+ response_class=StreamingResponse)
24
+ async def proxy(request: Request, rest_of_path: str,
25
+ current_user: User = Depends(auth.get_current_user)):
26
+ url = urljoin(settings.extralit_url, rest_of_path)
27
+ params = dict(request.query_params)
28
+
29
+ print(f'PROXY {url} {params}', end='')
30
+ _LOGGER.info('PROXY %s %s', url, params)
31
+
32
+ if 'workspace' not in params or not params['workspace']:
33
+ raise BadRequestError("`workspace` is required in query parameters")
34
+
35
+ if current_user:
36
+ params['username'] = current_user.username
37
+
38
+ if current_user.role != "owner" and not await _exists_workspace_user_by_user_and_workspace_name(current_user, params['workspace']):
39
+ raise UnauthorizedError(f"{current_user.username} is not authorized to access workspace {params['workspace']}")
40
+
41
+ if request.method == "GET":
42
+ proxy_request = client.build_request("GET", url, params=params)
43
+ elif request.method == "POST":
44
+ data = await request.json()
45
+ print(data)
46
+ proxy_request = client.build_request("POST", url, json=data, params=params)
47
+ elif request.method == "PUT":
48
+ data = await request.json()
49
+ print(data)
50
+ proxy_request = client.build_request("PUT", url, data=data, params=params)
51
+ elif request.method == "DELETE":
52
+ proxy_request = client.build_request("DELETE", url, params=params)
53
+ else:
54
+ return {"message": "Method not supported"}
55
+
56
+ async def stream_response():
57
+ try:
58
+ response = await client.send(proxy_request, stream=True)
59
+ async for chunk in response.aiter_raw():
60
+ yield chunk
61
+ except httpx.ReadTimeout as exc:
62
+ _LOGGER.error("Request to %s timed out.", exc.request.url)
63
+ yield b"Request timed out."
64
+ except httpx.TimeoutException as exc:
65
+ _LOGGER.error("Request to %s timed out.", exc.request.url)
66
+ yield b"Request timed out."
67
+ except httpx.RequestError as exc:
68
+ _LOGGER.error("An error occurred while requesting %s: %s", exc.request.url, exc)
69
+ yield b"An error occurred while processing the request."
70
+
71
+ return StreamingResponse(stream_response(), media_type="text/event-stream")
72
+
73
+ @router.on_event("startup")
74
+ async def startup_event():
75
+ global client
76
+ if client is None:
77
+ client = httpx.AsyncClient(timeout=10.0)
78
+
79
+ @router.on_event("shutdown")
80
+ async def shutdown():
81
+ await client.aclose()
@@ -21,7 +21,7 @@ from minio import Minio
21
21
  from argilla_server import models
22
22
  from argilla_server.contexts import accounts, datasets, files
23
23
  from argilla_server.database import get_async_db
24
- from argilla_server.errors import EntityAlreadyExistsError
24
+ from argilla_server.errors import EntityAlreadyExistsError, GenericServerError
25
25
  from argilla_server.errors.future import NotUniqueError
26
26
  from argilla_server.models import User
27
27
  from argilla_server.policies import WorkspacePolicyV1, WorkspaceUserPolicyV1, authorize
@@ -58,9 +58,15 @@ async def create_workspace(
58
58
  db: AsyncSession = Depends(get_async_db),
59
59
  workspace_create: WorkspaceCreate,
60
60
  current_user: models.User = Security(auth.get_current_user),
61
+ minio_client: Minio = Depends(files.get_minio_client),
61
62
  ):
62
63
  await authorize(current_user, WorkspacePolicyV1.create)
63
64
 
65
+ try:
66
+ files.create_bucket(minio_client, workspace_create.name)
67
+ except Exception as e:
68
+ raise GenericServerError(e)
69
+
64
70
  try:
65
71
  workspace = await accounts.create_workspace(db, workspace_create.dict())
66
72
  except NotUniqueError as e:
@@ -72,7 +72,9 @@ async def _create(
72
72
  typer.echo(f"User with username {username!r} already exists in database. Skipping...")
73
73
  return
74
74
 
75
- if await accounts.get_user_by_api_key(session, api_key):
75
+ if not api_key:
76
+ api_key = None
77
+ elif await accounts.get_user_by_api_key(session, api_key):
76
78
  typer.echo(f"User with api_key {api_key!r} already exists in database. Skipping...")
77
79
  return
78
80
 
@@ -132,9 +132,17 @@ async def _reindex_datasets(db: AsyncSession, search_engine: SearchEngine, progr
132
132
  task = progress.add_task(f"reindexing feedback datasets...", total=await Reindexer.count_datasets(db))
133
133
 
134
134
  async for dataset in Reindexer.reindex_datasets(db, search_engine):
135
- await _reindex_dataset_records(db, search_engine, progress, dataset)
136
-
137
- progress.advance(task)
135
+ try:
136
+ await _reindex_dataset_records(db, search_engine, progress, dataset)
137
+ except Exception as e:
138
+ echo_in_panel(
139
+ f"Failed to reindex dataset `{dataset.name}`: {str(e)}",
140
+ title="Reindexing Error",
141
+ title_align="left",
142
+ success=False,
143
+ )
144
+ finally:
145
+ progress.advance(task)
138
146
 
139
147
 
140
148
  async def _reindex_dataset_records(
@@ -81,7 +81,7 @@ from argilla_server.schemas.v1.vector_settings import (
81
81
  from argilla_server.schemas.v1.vector_settings import (
82
82
  VectorSettingsCreate,
83
83
  )
84
- from argilla_server.schemas.v1.documents import DocumentCreate, DocumentListItem
84
+ from argilla_server.schemas.v1.documents import DocumentCreateRequest, DocumentListItem
85
85
  from argilla_server.schemas.v1.vectors import Vector as VectorSchema
86
86
  from argilla_server.search_engine import SearchEngine
87
87
  from argilla_server.validators.responses import (
@@ -807,6 +807,9 @@ async def _build_record_update(
807
807
 
808
808
  if record_update.suggestions is not None:
809
809
  params.pop("suggestions")
810
+ questions_ids = [suggestion.question_id for suggestion in record_update.suggestions]
811
+ if len(questions_ids) != len(set(questions_ids)):
812
+ raise ValueError("found duplicate suggestions question IDs")
810
813
  suggestions = await _build_record_suggestions(db, record, record_update.suggestions, caches["questions"])
811
814
 
812
815
  if record_update.vectors is not None:
@@ -1050,8 +1053,8 @@ async def update_response(
1050
1053
  ):
1051
1054
  ResponseUpdateValidator(response_update).validate_for(response.record)
1052
1055
 
1053
- if 'duration' in response.values:
1054
- if 'duration' in response_update.values:
1056
+ if response.values and 'duration' in response.values:
1057
+ if response_update.values and 'duration' in response_update.values:
1055
1058
  response_update.values['duration'].value = \
1056
1059
  response.values['duration']['value'] + response_update.values['duration'].value
1057
1060
  else:
@@ -1080,14 +1083,6 @@ async def upsert_response(
1080
1083
  ) -> Response:
1081
1084
  ResponseUpsertValidator(response_upsert).validate_for(record)
1082
1085
 
1083
- if 'duration' in response.values:
1084
- if 'duration' in response_update.values:
1085
- response_update.values['duration'].value = \
1086
- response.values['duration']['value'] + response_update.values['duration'].value
1087
- else:
1088
- response_update.values['duration'] = ResponseValueUpdate(value=response.values['duration']['value'])
1089
-
1090
-
1091
1086
  schema = {
1092
1087
  "values": jsonable_encoder(response_upsert.values),
1093
1088
  "status": response_upsert.status,
@@ -1203,7 +1198,6 @@ async def get_suggestion_by_id(db: AsyncSession, suggestion_id: "UUID") -> Union
1203
1198
  .options(
1204
1199
  selectinload(Suggestion.record).selectinload(Record.dataset),
1205
1200
  selectinload(Suggestion.question),
1206
- selectinload(Suggestion.type),
1207
1201
  )
1208
1202
  )
1209
1203
 
@@ -1219,7 +1213,6 @@ async def list_suggestions_by_id_and_record_id(
1219
1213
  .options(
1220
1214
  selectinload(Suggestion.record).selectinload(Record.dataset),
1221
1215
  selectinload(Suggestion.question),
1222
- selectinload(Suggestion.type),
1223
1216
  )
1224
1217
  )
1225
1218
 
@@ -1243,7 +1236,7 @@ async def get_metadata_property_by_id(db: AsyncSession, metadata_property_id: UU
1243
1236
  return result.scalar_one_or_none()
1244
1237
 
1245
1238
 
1246
- async def create_document(db: "AsyncSession", dataset_create: DocumentCreate) -> DocumentListItem:
1239
+ async def create_document(db: "AsyncSession", dataset_create: DocumentCreateRequest) -> DocumentListItem:
1247
1240
  document = await Document.create(
1248
1241
  db,
1249
1242
  id=dataset_create.id,