classifyre-cli 0.4.15__tar.gz → 0.4.17__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 (197) hide show
  1. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/.turbo/turbo-build.log +1 -1
  2. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/PKG-INFO +1 -1
  3. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/package.json +1 -1
  4. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/pyproject.toml +2 -1
  5. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_object_detection.py +1 -0
  6. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/main.py +14 -0
  7. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/outputs/rest.py +49 -0
  8. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/base.py +12 -0
  9. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/email/source.py +23 -0
  10. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/uv.lock +46 -25
  11. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/.gitignore +0 -0
  12. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/.python-version +0 -0
  13. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/README.md +0 -0
  14. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/main.py +0 -0
  15. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/scripts/generate_models.py +0 -0
  16. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/__init__.py +0 -0
  17. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/__init__.py +0 -0
  18. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/base.py +0 -0
  19. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/broken_links/__init__.py +0 -0
  20. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/broken_links/detector.py +0 -0
  21. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/config.py +0 -0
  22. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/content/__init__.py +0 -0
  23. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/__init__.py +0 -0
  24. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/detector.py +0 -0
  25. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/extractor.py +0 -0
  26. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/__init__.py +0 -0
  27. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_base.py +0 -0
  28. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_factory.py +0 -0
  29. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_feature_extraction.py +0 -0
  30. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_gliner2.py +0 -0
  31. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_image_classification.py +0 -0
  32. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_llm.py +0 -0
  33. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_regex.py +0 -0
  34. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/runners/_text_classification.py +0 -0
  35. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/custom/trainer.py +0 -0
  36. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/dependencies.py +0 -0
  37. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/pii/__init__.py +0 -0
  38. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/pii/detector.py +0 -0
  39. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/secrets/__init__.py +0 -0
  40. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/secrets/detector.py +0 -0
  41. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/threat/__init__.py +0 -0
  42. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/threat/code_security_detector.py +0 -0
  43. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/detectors/threat/yara_detector.py +0 -0
  44. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/models/generated_detectors.py +0 -0
  45. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/models/generated_input.py +0 -0
  46. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/models/generated_single_asset_scan_results.py +0 -0
  47. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/outputs/__init__.py +0 -0
  48. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/outputs/base.py +0 -0
  49. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/outputs/console.py +0 -0
  50. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/outputs/factory.py +0 -0
  51. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/outputs/file.py +0 -0
  52. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/pipeline/__init__.py +0 -0
  53. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/pipeline/content_provider.py +0 -0
  54. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/pipeline/detector_pipeline.py +0 -0
  55. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/pipeline/parsed_content_provider.py +0 -0
  56. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/pipeline/worker_pool.py +0 -0
  57. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sandbox/__init__.py +0 -0
  58. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sandbox/runner.py +0 -0
  59. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/__init__.py +0 -0
  60. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/asset_metadata.py +0 -0
  61. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/atlassian_common.py +0 -0
  62. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/azure_blob_storage/__init__.py +0 -0
  63. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/azure_blob_storage/source.py +0 -0
  64. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/confluence/__init__.py +0 -0
  65. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/confluence/source.py +0 -0
  66. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/databricks/__init__.py +0 -0
  67. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/databricks/source.py +0 -0
  68. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/dependencies.py +0 -0
  69. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/email/__init__.py +0 -0
  70. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/google_cloud_storage/__init__.py +0 -0
  71. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/google_cloud_storage/source.py +0 -0
  72. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/hive/__init__.py +0 -0
  73. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/hive/source.py +0 -0
  74. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/jira/__init__.py +0 -0
  75. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/jira/source.py +0 -0
  76. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/mongodb/__init__.py +0 -0
  77. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/mongodb/source.py +0 -0
  78. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/mssql/__init__.py +0 -0
  79. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/mssql/source.py +0 -0
  80. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/mysql/__init__.py +0 -0
  81. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/mysql/source.py +0 -0
  82. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/neo4j/__init__.py +0 -0
  83. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/neo4j/source.py +0 -0
  84. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/notion/__init__.py +0 -0
  85. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/notion/client.py +0 -0
  86. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/notion/source.py +0 -0
  87. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/object_storage/base.py +0 -0
  88. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/oracle/__init__.py +0 -0
  89. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/oracle/source.py +0 -0
  90. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/postgresql/__init__.py +0 -0
  91. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/postgresql/source.py +0 -0
  92. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/powerbi/__init__.py +0 -0
  93. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/powerbi/source.py +0 -0
  94. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/recipe_normalizer.py +0 -0
  95. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/s3_compatible_storage/README.md +0 -0
  96. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/s3_compatible_storage/__init__.py +0 -0
  97. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/s3_compatible_storage/source.py +0 -0
  98. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/servicedesk/__init__.py +0 -0
  99. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/servicedesk/source.py +0 -0
  100. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/slack/__init__.py +0 -0
  101. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/slack/source.py +0 -0
  102. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/snowflake/__init__.py +0 -0
  103. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/snowflake/source.py +0 -0
  104. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/sqlite/__init__.py +0 -0
  105. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/sqlite/source.py +0 -0
  106. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/tableau/__init__.py +0 -0
  107. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/tableau/source.py +0 -0
  108. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/tabular_base.py +0 -0
  109. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/tabular_utils.py +0 -0
  110. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/wordpress/__init__.py +0 -0
  111. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/sources/wordpress/source.py +0 -0
  112. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/telemetry.py +0 -0
  113. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/__init__.py +0 -0
  114. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/content_extraction.py +0 -0
  115. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/dependency_groups.py +0 -0
  116. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/embedded_images.py +0 -0
  117. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/file_metadata.py +0 -0
  118. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/file_parser.py +0 -0
  119. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/file_to_images.py +0 -0
  120. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/hashing.py +0 -0
  121. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/uv_sync.py +0 -0
  122. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/src/utils/validation.py +0 -0
  123. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/__init__.py +0 -0
  124. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/conftest.py +0 -0
  125. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/__init__.py +0 -0
  126. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/broken_links/test_broken_links_detector.py +0 -0
  127. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/conftest.py +0 -0
  128. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/content/__init__.py +0 -0
  129. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/custom/__init__.py +0 -0
  130. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/custom/conftest.py +0 -0
  131. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/custom/test_invoice_extraction.py +0 -0
  132. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/custom/test_llm_runner.py +0 -0
  133. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/custom/test_pipeline_integration.py +0 -0
  134. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/custom/test_regex_runner.py +0 -0
  135. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/custom/test_transformer_runners.py +0 -0
  136. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/pii/__init__.py +0 -0
  137. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/pii/conftest.py +0 -0
  138. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/pii/sample_invoice.pdf +0 -0
  139. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/pii/test_pii_detector.py +0 -0
  140. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/pii/test_pii_detector_extended.py +0 -0
  141. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/secrets/__init__.py +0 -0
  142. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/secrets/test_secrets_detector.py +0 -0
  143. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/secrets/test_secrets_detector_extended.py +0 -0
  144. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/test_base_detector.py +0 -0
  145. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/test_custom_detector_examples_runtime.py +0 -0
  146. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/test_detector_catalog_commercial.py +0 -0
  147. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/test_detector_pipeline_types.py +0 -0
  148. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/test_detector_schema_examples.py +0 -0
  149. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/test_detector_types.py +0 -0
  150. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/test_phase2_detectors.py +0 -0
  151. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/test_registry.py +0 -0
  152. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/threat/__init__.py +0 -0
  153. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/threat/test_code_security_detector.py +0 -0
  154. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/detectors/threat/test_yara_detector.py +0 -0
  155. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/integration/test_wordpress_broken_links_detector.py +0 -0
  156. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/integration/test_wordpress_links_assets.py +0 -0
  157. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/pipeline/test_detector_pipeline.py +0 -0
  158. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/pipeline/test_worker_pool.py +0 -0
  159. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_assets_metadata_catalog.py +0 -0
  160. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_azure_blob_storage_source.py +0 -0
  161. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_base_source_attachment.py +0 -0
  162. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_base_source_sampling.py +0 -0
  163. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_confluence_source.py +0 -0
  164. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_custom_extractor.py +0 -0
  165. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_databricks_source.py +0 -0
  166. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_dependency_groups.py +0 -0
  167. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_email_source.py +0 -0
  168. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_google_cloud_storage_source.py +0 -0
  169. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_hashing.py +0 -0
  170. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_hive_source.py +0 -0
  171. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_jira_source.py +0 -0
  172. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_mongodb_source.py +0 -0
  173. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_mssql_source.py +0 -0
  174. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_mysql_source.py +0 -0
  175. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_neo4j_source.py +0 -0
  176. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_notion_source.py +0 -0
  177. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_oracle_source.py +0 -0
  178. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_outputs.py +0 -0
  179. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_postgresql_source.py +0 -0
  180. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_powerbi_source.py +0 -0
  181. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_recipe_normalizer.py +0 -0
  182. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_s3_compatible_storage_source.py +0 -0
  183. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_sandbox_runner.py +0 -0
  184. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_servicedesk_source.py +0 -0
  185. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_slack_source.py +0 -0
  186. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_snowflake_source.py +0 -0
  187. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_source_dependency_groups.py +0 -0
  188. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_sqlite_source.py +0 -0
  189. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_tableau_source.py +0 -0
  190. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_tabular_utils.py +0 -0
  191. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_uv_sync.py +0 -0
  192. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/test_wordpress_source.py +0 -0
  193. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/utils/test_content_extraction.py +0 -0
  194. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/utils/test_embedded_images.py +0 -0
  195. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/utils/test_file_metadata.py +0 -0
  196. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/utils/test_file_parser.py +0 -0
  197. {classifyre_cli-0.4.15 → classifyre_cli-0.4.17}/tests/utils/test_file_to_images.py +0 -0
@@ -1,3 +1,3 @@
1
1
  $ uv sync
2
- Resolved 254 packages in 157ms
2
+ Resolved 255 packages in 180ms
3
3
  Checked 50 packages in 1ms
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: classifyre-cli
3
- Version: 0.4.15
3
+ Version: 0.4.17
4
4
  Summary: Classifyre CLI — scan and classify unstructured data sources
5
5
  License: MIT
6
6
  Keywords: data,ingestion,metadata,pii,secrets,unstructured
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@classifyre/cli",
3
- "version": "0.4.15",
3
+ "version": "0.4.17",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "build": "uv sync",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "classifyre-cli"
3
- version = "0.4.15"
3
+ version = "0.4.17"
4
4
  description = "Classifyre CLI — scan and classify unstructured data sources"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -94,6 +94,7 @@ custom = [
94
94
  "transformers>=4.50.0,<6.0.0",
95
95
  "torch>=2.12.0",
96
96
  "pillow>=12.2.0",
97
+ "timm>=1.0.27",
97
98
  "setfit>=1.1.3",
98
99
  "datasets>=4.8.5",
99
100
  "scikit-learn>=1.7.2",
@@ -48,6 +48,7 @@ class ObjectDetectionRunner(BaseRunner):
48
48
  raise MissingDependencyError(
49
49
  "object_detection",
50
50
  ["custom", "detectors"],
51
+ ["custom", "detectors"],
51
52
  f"ObjectDetectionRunner requires additional dependencies: {exc}",
52
53
  ) from exc
53
54
 
@@ -372,6 +372,20 @@ async def run_command_async(args: argparse.Namespace, recipe: dict[str, Any]) ->
372
372
  total_assets,
373
373
  output_batch_count,
374
374
  )
375
+
376
+ # Phase 1: emit source-derived relationship edges (best-effort).
377
+ if hasattr(source, "collect_relationships") and hasattr(sink, "emit_edges"):
378
+ try:
379
+ edges = await source.collect_relationships()
380
+ if edges:
381
+ await sink.emit_edges(edges)
382
+ logger.info(
383
+ "Emitted %d source-derived relationship edges", len(edges)
384
+ )
385
+ except Exception as rel_error:
386
+ logger.warning(
387
+ "Relationship emission failed (non-fatal): %s", rel_error
388
+ )
375
389
  except Exception as extraction_error:
376
390
  if _is_timeout_error(extraction_error):
377
391
  logger.warning(
@@ -97,6 +97,31 @@ class BulkIngestAssetsRequest(BaseModel):
97
97
  skip_findings: bool = Field(False, serialization_alias="skipFindings")
98
98
 
99
99
 
100
+ class IngestEdge(BaseModel):
101
+ """A source-derived relationship edge for the investigation graph.
102
+
103
+ Identify endpoints by UUID (from_id / to_id) or by asset hash
104
+ (from_hash / to_hash — the API resolves hashes to UUIDs).
105
+ """
106
+
107
+ model_config = ConfigDict(populate_by_name=True)
108
+
109
+ from_type: str = Field(serialization_alias="fromType")
110
+ from_id: str | None = Field(None, serialization_alias="fromId")
111
+ from_hash: str | None = Field(None, serialization_alias="fromHash")
112
+ to_type: str = Field(serialization_alias="toType")
113
+ to_id: str | None = Field(None, serialization_alias="toId")
114
+ to_hash: str | None = Field(None, serialization_alias="toHash")
115
+ relation_type: str = Field(serialization_alias="relationType")
116
+ confidence: float = 1.0
117
+
118
+
119
+ class BulkIngestEdgesRequest(BaseModel):
120
+ model_config = ConfigDict(populate_by_name=True)
121
+
122
+ edges: list[IngestEdge]
123
+
124
+
100
125
  class FinalizeIngestRunRequest(BaseModel):
101
126
  model_config = ConfigDict(populate_by_name=True)
102
127
 
@@ -252,6 +277,30 @@ class RestOutputSink:
252
277
  update_error,
253
278
  )
254
279
 
280
+ async def emit_edges(self, edges: list[IngestEdge]) -> None:
281
+ """Bulk-upsert source-derived relationship edges to the investigation graph.
282
+
283
+ Idempotent — safe to call multiple times with overlapping data.
284
+ Silently skips if the list is empty.
285
+ """
286
+ if not edges:
287
+ return
288
+
289
+ _edge_batch = 500
290
+ for i in range(0, len(edges), _edge_batch):
291
+ chunk = edges[i : i + _edge_batch]
292
+ payload = BulkIngestEdgesRequest(edges=chunk)
293
+ try:
294
+ self._request_json(
295
+ "POST",
296
+ "/graph/edges",
297
+ payload.model_dump(mode="json", by_alias=True),
298
+ )
299
+ logger.debug("Emitted %d source-derived edges to graph", len(chunk))
300
+ except Exception as exc:
301
+ # Edge emission is best-effort: log and continue.
302
+ logger.warning("Failed to emit edges to graph: %s", exc)
303
+
255
304
  async def register_discovered_assets(self, hashes: list[str]) -> None:
256
305
  runner_id = self._require_runner_id()
257
306
  for i in range(0, len(hashes), 500):
@@ -4,6 +4,7 @@ from collections.abc import AsyncGenerator, Generator
4
4
  from typing import TYPE_CHECKING, Any
5
5
 
6
6
  from ..models.generated_single_asset_scan_results import DetectionResult, SingleAssetScanResults
7
+ from ..outputs.rest import IngestEdge
7
8
 
8
9
  if TYPE_CHECKING:
9
10
  from ..utils.file_parser import ParsedBytes
@@ -315,3 +316,14 @@ class BaseSource(ABC):
315
316
  this and map those identifiers back to their original URLs.
316
317
  """
317
318
  return normalize_http_url(link)
319
+
320
+ async def collect_relationships(self) -> list[IngestEdge]:
321
+ """Return source-derived relationship edges for the investigation graph.
322
+
323
+ Connectors override this to emit typed edges (READS, ATTACHED_TO,
324
+ SENT_TO, OWNS, ACCESSED, etc.) discovered during extraction. The caller
325
+ (main.py) will forward these to ``RestOutputSink.emit_edges()``.
326
+
327
+ Default: no relationships (empty list).
328
+ """
329
+ return []
@@ -102,6 +102,8 @@ class EmailSource(BaseSource):
102
102
  self._email_locator_by_hash: dict[str, tuple[str, str]] = {}
103
103
  self._hash_by_url: dict[str, str] = {}
104
104
  self._attachment_name_by_hash = {}
105
+ # Phase 1: tracks (email_hash → [attachment_hash, ...]) for relationship emission.
106
+ self._email_attachment_links: dict[str, list[str]] = {}
105
107
 
106
108
  self._mailbox: Any = None
107
109
 
@@ -303,6 +305,9 @@ class EmailSource(BaseSource):
303
305
  runner_id=self.runner_id,
304
306
  **self.metadata_fields("email", metadata),
305
307
  )
308
+ # Track for Phase 1 relationship emission.
309
+ if attachment_hashes:
310
+ self._email_attachment_links[email_hash] = attachment_hashes
306
311
  return [email_asset, *attachment_assets]
307
312
 
308
313
  def _attachment_to_asset(
@@ -515,6 +520,24 @@ class EmailSource(BaseSource):
515
520
  # ------------------------------------------------------------------
516
521
  # Lifecycle
517
522
  # ------------------------------------------------------------------
523
+ async def collect_relationships(self) -> list[Any]:
524
+ """Emit ATTACHED_TO edges: email → attachment for each extracted message."""
525
+ from ...outputs.rest import IngestEdge
526
+
527
+ edges: list[IngestEdge] = []
528
+ for email_hash, attachment_hashes in self._email_attachment_links.items():
529
+ for att_hash in attachment_hashes:
530
+ edges.append(
531
+ IngestEdge(
532
+ from_type="asset",
533
+ from_hash=email_hash,
534
+ to_type="asset",
535
+ to_hash=att_hash,
536
+ relation_type="ATTACHED_TO",
537
+ )
538
+ )
539
+ return edges
540
+
518
541
  def abort(self) -> None:
519
542
  logger.info("Aborting email extraction...")
520
543
  super().abort()
@@ -399,30 +399,30 @@ wheels = [
399
399
 
400
400
  [[package]]
401
401
  name = "boto3"
402
- version = "1.43.28"
402
+ version = "1.43.29"
403
403
  source = { registry = "https://pypi.org/simple" }
404
404
  dependencies = [
405
405
  { name = "botocore" },
406
406
  { name = "jmespath" },
407
407
  { name = "s3transfer" },
408
408
  ]
409
- sdist = { url = "https://files.pythonhosted.org/packages/4e/f2/a976b2a81d8dc7ff675f4b614367a185727061130184a28da0f53f446b97/boto3-1.43.28.tar.gz", hash = "sha256:8391fdcc4d8e1d4e0bf96575a7e5610964a4d401dafa4dccb0a5bade8dd3fbb0", size = 113202, upload-time = "2026-06-11T19:29:01.464Z" }
409
+ sdist = { url = "https://files.pythonhosted.org/packages/85/a6/9c02ff00d08ea87908934351d244e35bb6fb5cbc169e1a14fc5bd80d124b/boto3-1.43.29.tar.gz", hash = "sha256:354006c512cdb87ef8214a095f2ade961c8145734475cd7a7e6b39260ff5494a", size = 113198, upload-time = "2026-06-12T19:32:23.442Z" }
410
410
  wheels = [
411
- { url = "https://files.pythonhosted.org/packages/c3/a5/47db150ea6380f11569b87d3ad064e3c929e5abe227a549d472fab6f5f3a/boto3-1.43.28-py3-none-any.whl", hash = "sha256:4fe6df2163aea02b561eca0d685e2f41a059d71f03721a3e79c3b522e79a3b56", size = 140536, upload-time = "2026-06-11T19:29:00.143Z" },
411
+ { url = "https://files.pythonhosted.org/packages/07/5c/f12a9978526c7068c873ccf9788161fc6af338c6a025f1354a46134a6e46/boto3-1.43.29-py3-none-any.whl", hash = "sha256:77c27ada27cdbf619a3bbc41fa9e991caef818d3a2988cf92ea722e107d90108", size = 140537, upload-time = "2026-06-12T19:32:21.682Z" },
412
412
  ]
413
413
 
414
414
  [[package]]
415
415
  name = "botocore"
416
- version = "1.43.28"
416
+ version = "1.43.29"
417
417
  source = { registry = "https://pypi.org/simple" }
418
418
  dependencies = [
419
419
  { name = "jmespath" },
420
420
  { name = "python-dateutil" },
421
421
  { name = "urllib3" },
422
422
  ]
423
- sdist = { url = "https://files.pythonhosted.org/packages/02/dc/1b01808003f88f8a328732c979f20cb0456791048b4440fc4abcae08c1a0/botocore-1.43.28.tar.gz", hash = "sha256:9bbad501a68e4ffdbeff76a382507f5d7827abc316f34a218ab76f5293e6c78d", size = 15503514, upload-time = "2026-06-11T19:28:50.989Z" }
423
+ sdist = { url = "https://files.pythonhosted.org/packages/6f/54/df99c5ca5c9ef275e34b87e177782e3ca054fc35f1f462c40fe180936c81/botocore-1.43.29.tar.gz", hash = "sha256:dce39d33b707aa162aa3820975f99d7f8f746d46576169fb42ce4f2b3b56b261", size = 15512384, upload-time = "2026-06-12T19:32:13.754Z" }
424
424
  wheels = [
425
- { url = "https://files.pythonhosted.org/packages/fa/8c/14916c353ce8a29d14cf6308c2bef842bbb25dde6defc620e26e28063331/botocore-1.43.28-py3-none-any.whl", hash = "sha256:8147adea89b4c9324e842cd8c01ea1a0e17c92cb6ebeaa8cb774f821cb5a7629", size = 15188401, upload-time = "2026-06-11T19:28:47.244Z" },
425
+ { url = "https://files.pythonhosted.org/packages/91/b1/aa410c22355f8f6c4ac2433db6a1c557dd959acf2953ccae4bfc37488119/botocore-1.43.29-py3-none-any.whl", hash = "sha256:5d62f2a03ed279a50207ca2824e009313df15f082b6bb591a095a4f04c7faef3", size = 15194135, upload-time = "2026-06-12T19:32:09.463Z" },
426
426
  ]
427
427
 
428
428
  [[package]]
@@ -606,7 +606,7 @@ wheels = [
606
606
 
607
607
  [[package]]
608
608
  name = "classifyre-cli"
609
- version = "0.4.15"
609
+ version = "0.4.17"
610
610
  source = { editable = "." }
611
611
  dependencies = [
612
612
  { name = "beautifulsoup4" },
@@ -643,6 +643,7 @@ custom = [
643
643
  { name = "scikit-learn" },
644
644
  { name = "sentence-transformers" },
645
645
  { name = "setfit" },
646
+ { name = "timm" },
646
647
  { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux'" },
647
648
  { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform == 'linux'" },
648
649
  { name = "transformers" },
@@ -678,6 +679,7 @@ detectors = [
678
679
  { name = "setfit" },
679
680
  { name = "spacy" },
680
681
  { name = "textstat" },
682
+ { name = "timm" },
681
683
  { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux'" },
682
684
  { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform == 'linux'" },
683
685
  { name = "transformers" },
@@ -730,7 +732,7 @@ neo4j = [
730
732
  ocr = [
731
733
  { name = "chardet" },
732
734
  { name = "docling", version = "2.99.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" },
733
- { name = "docling", version = "2.101.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'darwin'" },
735
+ { name = "docling", version = "2.102.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'darwin'" },
734
736
  { name = "filetype" },
735
737
  { name = "openpyxl" },
736
738
  { name = "pdfplumber" },
@@ -821,6 +823,7 @@ custom = [
821
823
  { name = "scikit-learn", specifier = ">=1.7.2" },
822
824
  { name = "sentence-transformers", specifier = ">=5.5.0" },
823
825
  { name = "setfit", specifier = ">=1.1.3" },
826
+ { name = "timm", specifier = ">=1.0.27" },
824
827
  { name = "torch", marker = "sys_platform != 'linux'", specifier = ">=2.12.0" },
825
828
  { name = "torch", marker = "sys_platform == 'linux'", specifier = ">=2.12.0", index = "https://download.pytorch.org/whl/cpu" },
826
829
  { name = "transformers", specifier = ">=4.50.0,<6.0.0" },
@@ -856,6 +859,7 @@ detectors = [
856
859
  { name = "setfit", specifier = ">=1.1.3" },
857
860
  { name = "spacy", specifier = ">=3.8.14" },
858
861
  { name = "textstat", specifier = ">=0.7.13" },
862
+ { name = "timm", specifier = ">=1.0.27" },
859
863
  { name = "torch", marker = "sys_platform != 'linux'", specifier = ">=2.12.0" },
860
864
  { name = "torch", marker = "sys_platform == 'linux'", specifier = ">=2.12.0", index = "https://download.pytorch.org/whl/cpu" },
861
865
  { name = "transformers", specifier = ">=4.50.0,<6.0.0" },
@@ -942,7 +946,7 @@ threat-ml = [
942
946
 
943
947
  [[package]]
944
948
  name = "classifyre-schemas"
945
- version = "0.4.15"
949
+ version = "0.4.17"
946
950
  source = { editable = "../../packages/schemas" }
947
951
  dependencies = [
948
952
  { name = "fastjsonschema" },
@@ -1250,7 +1254,7 @@ wheels = [
1250
1254
 
1251
1255
  [[package]]
1252
1256
  name = "docling"
1253
- version = "2.101.0"
1257
+ version = "2.102.1"
1254
1258
  source = { registry = "https://pypi.org/simple" }
1255
1259
  resolution-markers = [
1256
1260
  "python_full_version >= '3.15' and sys_platform == 'linux'",
@@ -1263,11 +1267,11 @@ resolution-markers = [
1263
1267
  "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux'",
1264
1268
  ]
1265
1269
  dependencies = [
1266
- { name = "docling-slim", version = "2.101.0", source = { registry = "https://pypi.org/simple" }, extra = ["standard"], marker = "sys_platform != 'darwin'" },
1270
+ { name = "docling-slim", version = "2.102.1", source = { registry = "https://pypi.org/simple" }, extra = ["standard"], marker = "sys_platform != 'darwin'" },
1267
1271
  ]
1268
- sdist = { url = "https://files.pythonhosted.org/packages/a8/03/3fc134bd4255397960df9c2adcfd48318e221f33588137d20322441d5fca/docling-2.101.0.tar.gz", hash = "sha256:7d50eeee0c73b206e433b7e45bd42b74f688557293ebdfb8cec8a79ff267abc9", size = 8845, upload-time = "2026-06-10T16:04:07.053Z" }
1272
+ sdist = { url = "https://files.pythonhosted.org/packages/2d/02/850594f939348b5d9ef6b8521c3ac821c3c8ee98e76784f5d0412fb61e44/docling-2.102.1.tar.gz", hash = "sha256:aecaa07df4077d6e62e9545f1ea415e8e73c8c3e8f7c5a2874c6535f55413723", size = 8842, upload-time = "2026-06-12T15:55:24.538Z" }
1269
1273
  wheels = [
1270
- { url = "https://files.pythonhosted.org/packages/ae/2e/90efdee1d0c3d329b347b5810c007bb19f822873455c4bd61acacee3cbfa/docling-2.101.0-py3-none-any.whl", hash = "sha256:f3cd3e1b5e2daeb7c06bcef6ea7cb2596537fd2e7b44174a952956c7a0715888", size = 5015, upload-time = "2026-06-10T16:04:05.911Z" },
1274
+ { url = "https://files.pythonhosted.org/packages/46/05/ce8b976f0949dc7b7fa3a87e20e750ab915665266a4a3ff6a97174f0bac0/docling-2.102.1-py3-none-any.whl", hash = "sha256:529458b2a95e457fa23aa148a55c73b1ba8cc56f73a852a8fa07e233f20b80e9", size = 5016, upload-time = "2026-06-12T15:55:23.33Z" },
1271
1275
  ]
1272
1276
 
1273
1277
  [[package]]
@@ -1505,7 +1509,7 @@ standard = [
1505
1509
 
1506
1510
  [[package]]
1507
1511
  name = "docling-slim"
1508
- version = "2.101.0"
1512
+ version = "2.102.1"
1509
1513
  source = { registry = "https://pypi.org/simple" }
1510
1514
  resolution-markers = [
1511
1515
  "python_full_version >= '3.15' and sys_platform == 'linux'",
@@ -1527,9 +1531,9 @@ dependencies = [
1527
1531
  { name = "requests", marker = "sys_platform != 'darwin'" },
1528
1532
  { name = "tqdm", marker = "sys_platform != 'darwin'" },
1529
1533
  ]
1530
- sdist = { url = "https://files.pythonhosted.org/packages/d8/1d/1f7b82f1a9a2116accc215fcefe79d0c8ddd6757c6496b0f3eb02989e45a/docling_slim-2.101.0.tar.gz", hash = "sha256:7c2f098885892ca74522130ffcbabe62cbdc26afd483249a841798387fb49235", size = 415777, upload-time = "2026-06-10T16:02:45.835Z" }
1534
+ sdist = { url = "https://files.pythonhosted.org/packages/4b/e6/92a6cbb904af69cd82f7c92914b4633c35501a281a1f025a7cd1e393534f/docling_slim-2.102.1.tar.gz", hash = "sha256:95a59ce7f3a067d592c9addb25849eb7ea4898fa3ddbf3276f9989cda23101d4", size = 420218, upload-time = "2026-06-12T15:54:01.595Z" }
1531
1535
  wheels = [
1532
- { url = "https://files.pythonhosted.org/packages/31/4b/cce1670a139a74f9e8505ac4ef2c84d1125661307336b0d3dc4aa93ae590/docling_slim-2.101.0-py3-none-any.whl", hash = "sha256:3b8f2acf0aeb30b2c0e5245e4663e76500d513ea2bf3555ecb68e46aa30a5276", size = 537763, upload-time = "2026-06-10T16:02:44.016Z" },
1536
+ { url = "https://files.pythonhosted.org/packages/e0/78/4e57bdda64c6c68372e1ab6d032e2677e77913c8afa12a9e5abee53469e3/docling_slim-2.102.1-py3-none-any.whl", hash = "sha256:f6dd21dc84b5c0c62da8eb2f043788ba938be6ded2dcb91b23d27f39ef20fe48", size = 542248, upload-time = "2026-06-12T15:53:59.721Z" },
1533
1537
  ]
1534
1538
 
1535
1539
  [package.optional-dependencies]
@@ -1877,15 +1881,15 @@ wheels = [
1877
1881
 
1878
1882
  [[package]]
1879
1883
  name = "google-auth"
1880
- version = "2.53.0"
1884
+ version = "2.54.0"
1881
1885
  source = { registry = "https://pypi.org/simple" }
1882
1886
  dependencies = [
1883
1887
  { name = "cryptography" },
1884
1888
  { name = "pyasn1-modules" },
1885
1889
  ]
1886
- sdist = { url = "https://files.pythonhosted.org/packages/c6/ad/ff781329bbbdc0974a098d996e89c9e1f7024262f9e3eec442fbb9ad1ac6/google_auth-2.53.0.tar.gz", hash = "sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c", size = 335844, upload-time = "2026-05-15T20:53:07.928Z" }
1890
+ sdist = { url = "https://files.pythonhosted.org/packages/15/f6/494e18317546d7def90c957b71d68b025d24f0e22e486c2606bc57765c48/google_auth-2.54.0.tar.gz", hash = "sha256:130f6fd5e3f497fdad897a23ed9489973437edf561238c4b92a4d02c435f8af9", size = 343161, upload-time = "2026-06-12T18:03:17.606Z" }
1887
1891
  wheels = [
1888
- { url = "https://files.pythonhosted.org/packages/4a/c9/db44165ba7c581268c6d46017ef63339110378305062830104fc7fa144cb/google_auth-2.53.0-py3-none-any.whl", hash = "sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68", size = 246071, upload-time = "2026-05-15T20:53:05.609Z" },
1892
+ { url = "https://files.pythonhosted.org/packages/70/c5/d53bddd2c0949833fcb4ea06f9d5dd1c40575a1a4214cd1021eff57ba301/google_auth-2.54.0-py3-none-any.whl", hash = "sha256:784e9837f92244141250470d47c893df50cbab485ce491aca5e9deb558ad2b48", size = 249878, upload-time = "2026-06-12T18:02:57.58Z" },
1889
1893
  ]
1890
1894
 
1891
1895
  [[package]]
@@ -1903,7 +1907,7 @@ wheels = [
1903
1907
 
1904
1908
  [[package]]
1905
1909
  name = "google-cloud-storage"
1906
- version = "3.11.0"
1910
+ version = "3.12.0"
1907
1911
  source = { registry = "https://pypi.org/simple" }
1908
1912
  dependencies = [
1909
1913
  { name = "google-api-core" },
@@ -1913,9 +1917,9 @@ dependencies = [
1913
1917
  { name = "google-resumable-media" },
1914
1918
  { name = "requests" },
1915
1919
  ]
1916
- sdist = { url = "https://files.pythonhosted.org/packages/22/09/8953e2993e604c8882fd441b5b2de624a2dfe7e6144c6166d7b477509596/google_cloud_storage-3.11.0.tar.gz", hash = "sha256:498bf37c999028f69a245f586b5e50d89f59df1fafc0e3a93783ac56be2a456b", size = 17335639, upload-time = "2026-06-03T16:14:04.649Z" }
1920
+ sdist = { url = "https://files.pythonhosted.org/packages/58/72/86f94e1639a8bcd9d33e8e01b49afcaa1c3a13bda7683c681717e0901e15/google_cloud_storage-3.12.0.tar.gz", hash = "sha256:03ae9847c6babb368f35f054126b8a08cbc0e3266efb990eb17b9926a45cf3be", size = 17338620, upload-time = "2026-06-12T18:03:29.215Z" }
1917
1921
  wheels = [
1918
- { url = "https://files.pythonhosted.org/packages/09/7e/ee0dd1a67ac75d29d0c438969d85d4fadbc4bcab47b0a8ccfa7eb22f643c/google_cloud_storage-3.11.0-py3-none-any.whl", hash = "sha256:cfcc33aa6b899ec9dd1771286f8e79fbed5c35c1c174718071b079aa827f37c2", size = 339654, upload-time = "2026-06-03T16:12:46.052Z" },
1922
+ { url = "https://files.pythonhosted.org/packages/1b/bd/a89eaebd2f9db5f92ddcc8e4f23c266be1dbd11058bb83451d8dd029f34c/google_cloud_storage-3.12.0-py3-none-any.whl", hash = "sha256:3880773754ddf7c27567b04e2a4d193950b6b99429f37b9097d873686e95b09c", size = 340605, upload-time = "2026-06-12T18:03:12.677Z" },
1919
1923
  ]
1920
1924
 
1921
1925
  [[package]]
@@ -5349,6 +5353,23 @@ wheels = [
5349
5353
  { url = "https://files.pythonhosted.org/packages/16/5b/f2aa703a4fc5d2dff73460a7d46cc2f3f44aa0f3dd8eeb20d2a0ecf68862/tiktoken-0.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:85b78cc3a2c3d48723ca751fa981f1fedccd54194ca0471b957364353a898b07", size = 918110, upload-time = "2026-05-15T04:51:17.237Z" },
5350
5354
  ]
5351
5355
 
5356
+ [[package]]
5357
+ name = "timm"
5358
+ version = "1.0.27"
5359
+ source = { registry = "https://pypi.org/simple" }
5360
+ dependencies = [
5361
+ { name = "huggingface-hub" },
5362
+ { name = "pyyaml" },
5363
+ { name = "safetensors" },
5364
+ { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux'" },
5365
+ { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform == 'linux'" },
5366
+ { name = "torchvision" },
5367
+ ]
5368
+ sdist = { url = "https://files.pythonhosted.org/packages/08/54/ece85b0eef3700c90db8271a43669b05a0ebbe2edb1962329c34374a297e/timm-1.0.27.tar.gz", hash = "sha256:315dfe63186ca9fb7ff941268941231fd5be259f2b4bb4afa28560ae1015cb9a", size = 2439861, upload-time = "2026-05-08T19:38:36.844Z" }
5369
+ wheels = [
5370
+ { url = "https://files.pythonhosted.org/packages/1f/2e/26bab7686ff4aed48f8f5f6c23e2aa37b7a37ddd9effe3aa61e908fd518f/timm-1.0.27-py3-none-any.whl", hash = "sha256:5ff07c9ddf53cbada88eab1c93ff175c64cab683b5a2fddf863bcee985926f89", size = 2589280, upload-time = "2026-05-08T19:38:35.034Z" },
5371
+ ]
5372
+
5352
5373
  [[package]]
5353
5374
  name = "tldextract"
5354
5375
  version = "5.3.1"
@@ -5519,7 +5540,7 @@ wheels = [
5519
5540
 
5520
5541
  [[package]]
5521
5542
  name = "transformers"
5522
- version = "5.11.0"
5543
+ version = "5.12.0"
5523
5544
  source = { registry = "https://pypi.org/simple" }
5524
5545
  dependencies = [
5525
5546
  { name = "huggingface-hub" },
@@ -5532,9 +5553,9 @@ dependencies = [
5532
5553
  { name = "tqdm" },
5533
5554
  { name = "typer" },
5534
5555
  ]
5535
- sdist = { url = "https://files.pythonhosted.org/packages/7d/4a/2ee05f9a06bb2dd34cac951548553738a826762fb7adfa7ce256daeaeac8/transformers-5.11.0.tar.gz", hash = "sha256:1dbecade5b8a09bdf3e9e8fdfc9d312cb9eccf5a201080dc894b373f0f3eb5f4", size = 8874363, upload-time = "2026-06-10T16:31:52.441Z" }
5556
+ sdist = { url = "https://files.pythonhosted.org/packages/0c/f9/4552e2ba55db1c943aea0d4c09a32e9cbe5445b9eabe9856900de503dc8f/transformers-5.12.0.tar.gz", hash = "sha256:f0cf42ae1464c2eb41e7e0e66d7fd4b66145f48af17093b4cc0b2e9781faa7f4", size = 8923020, upload-time = "2026-06-12T14:39:20.43Z" }
5536
5557
  wheels = [
5537
- { url = "https://files.pythonhosted.org/packages/9b/40/30fdefda9b8aff8d36054dbb37d8e1464cc1130c29623403c3c2147bdee1/transformers-5.11.0-py3-none-any.whl", hash = "sha256:06d0a34eab529955f8e704b530663c7d6bd6f9c7a9e47a05cddb4a44e7b6566b", size = 11094597, upload-time = "2026-06-10T16:31:49.08Z" },
5558
+ { url = "https://files.pythonhosted.org/packages/ff/1f/d385913c38e900d23b728a4188fee625f2fccb306aeebc59be9d91404a5a/transformers-5.12.0-py3-none-any.whl", hash = "sha256:500be9eb644ede81c3103eee7687fc36d05dd75d1c76686c3820b26396fe7c7c", size = 11150246, upload-time = "2026-06-12T14:39:17.009Z" },
5538
5559
  ]
5539
5560
 
5540
5561
  [[package]]
File without changes