corvic-engine 0.3.0rc85__tar.gz → 0.3.0rc87__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 (217) hide show
  1. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/Cargo.lock +6 -6
  2. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/Cargo.toml +1 -1
  3. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/PKG-INFO +1 -1
  4. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/pyproject.toml +2 -2
  5. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_base_model.py +2 -3
  6. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_completion_model.py +2 -4
  7. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_feature_view.py +2 -2
  8. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_pipeline.py +2 -2
  9. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_proto_orm_convert.py +15 -15
  10. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_resource.py +2 -2
  11. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_source.py +2 -2
  12. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_space.py +6 -4
  13. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/__init__.py +2 -0
  14. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/_soft_delete.py +12 -3
  15. corvic_engine-0.3.0rc87/python/corvic/orm/errors.py +54 -0
  16. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/_embedder.py +35 -12
  17. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/_text_embedder.py +8 -0
  18. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/transfer/_orm_backed_proto.py +6 -22
  19. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/embedding/v1/models_pb2.py +4 -4
  20. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/embedding/v1/models_pb2.pyi +4 -0
  21. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/resource_pb2.py +11 -5
  22. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/resource_pb2.pyi +12 -0
  23. corvic_engine-0.3.0rc85/python/corvic/orm/errors.py +0 -18
  24. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/LICENSE +0 -0
  25. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/README.md +0 -0
  26. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/Cargo.toml +0 -0
  27. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/buf/validate/validate_pb2.py +0 -0
  28. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/buf/validate/validate_pb2.pyi +0 -0
  29. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/buf/validate/validate_pb2_grpc.py +0 -0
  30. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/buf/validate/validate_pb2_grpc.pyi +0 -0
  31. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/context/__init__.py +0 -0
  32. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/context/py.typed +0 -0
  33. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/embed/__init__.py +0 -0
  34. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/embed/node2vec.py +0 -0
  35. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/embed/py.typed +0 -0
  36. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/embedding_metric/__init__.py +0 -0
  37. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/embedding_metric/embeddings.py +0 -0
  38. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/embedding_metric/py.typed +0 -0
  39. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/__init__.py +0 -0
  40. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_defaults.py +0 -0
  41. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_errors.py +0 -0
  42. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_feature_type.py +0 -0
  43. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/_room.py +0 -0
  44. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/emodel/py.typed +0 -0
  45. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/engine/__init__.py +0 -0
  46. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/engine/_native.pyi +0 -0
  47. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/engine/py.typed +0 -0
  48. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/eorm/__init__.py +0 -0
  49. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/__init__.py +0 -0
  50. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/_schema.py +0 -0
  51. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/_transformations.py +0 -0
  52. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/aggregation.py +0 -0
  53. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/encoders.py +0 -0
  54. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/errors.py +0 -0
  55. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/feature_types.py +0 -0
  56. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/ops.py +0 -0
  57. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/py.typed +0 -0
  58. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/row_filters/__init__.py +0 -0
  59. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/row_filters/_jsonlogic.py +0 -0
  60. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/row_filters/_row_filters.py +0 -0
  61. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/op_graph/sample_strategy.py +0 -0
  62. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/_proto_columns.py +0 -0
  63. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/func/__init__.py +0 -0
  64. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/func/utc_func.py +0 -0
  65. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/func/uuid_func.py +0 -0
  66. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/ids.py +0 -0
  67. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/keys.py +0 -0
  68. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/orm/py.typed +0 -0
  69. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/pa_scalar/__init__.py +0 -0
  70. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/pa_scalar/_const.py +0 -0
  71. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/pa_scalar/_from_value.py +0 -0
  72. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/pa_scalar/_temporal.py +0 -0
  73. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/pa_scalar/_to_value.py +0 -0
  74. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/pa_scalar/_types.py +0 -0
  75. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/pa_scalar/py.typed +0 -0
  76. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/proto_wrapper/__init__.py +0 -0
  77. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/proto_wrapper/_errors.py +0 -0
  78. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/proto_wrapper/_wrappers.py +0 -0
  79. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/proto_wrapper/py.typed +0 -0
  80. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/result/__init__.py +0 -0
  81. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/result/py.typed +0 -0
  82. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/sql/__init__.py +0 -0
  83. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/sql/parse_ops.py +0 -0
  84. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/sql/py.typed +0 -0
  85. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/__init__.py +0 -0
  86. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/_column_encoding.py +0 -0
  87. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/_dimension_reduction.py +0 -0
  88. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/_image_embedder.py +0 -0
  89. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/_planner.py +0 -0
  90. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/client.py +0 -0
  91. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/in_memory_executor.py +0 -0
  92. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/op_graph_executor.py +0 -0
  93. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/py.typed +0 -0
  94. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/staging.py +0 -0
  95. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system/storage.py +0 -0
  96. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system_sqlite/__init__.py +0 -0
  97. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system_sqlite/client.py +0 -0
  98. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system_sqlite/fs_blob_store.py +0 -0
  99. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system_sqlite/py.typed +0 -0
  100. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system_sqlite/rdbms_blob_store.py +0 -0
  101. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/system_sqlite/staging.py +0 -0
  102. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/table/__init__.py +0 -0
  103. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/table/py.typed +0 -0
  104. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/table/table.py +0 -0
  105. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/transfer/__init__.py +0 -0
  106. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/transfer/_common_transformations.py +0 -0
  107. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/transfer/py.typed +0 -0
  108. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/version/__init__.py +0 -0
  109. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/version/py.typed +0 -0
  110. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/well_known_types/__init__.py +0 -0
  111. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic/well_known_types/py.typed +0 -0
  112. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/__init__.py +0 -0
  113. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/algorithm/__init__.py +0 -0
  114. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/algorithm/graph/__init__.py +0 -0
  115. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/algorithm/graph/v1/__init__.py +0 -0
  116. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/algorithm/graph/v1/graph_pb2.py +0 -0
  117. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/algorithm/graph/v1/graph_pb2.pyi +0 -0
  118. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.py +0 -0
  119. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.pyi +0 -0
  120. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/embedding/__init__.py +0 -0
  121. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/embedding/v1/__init__.py +0 -0
  122. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/embedding/v1/models_pb2_grpc.py +0 -0
  123. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/embedding/v1/models_pb2_grpc.pyi +0 -0
  124. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/__init__.py +0 -0
  125. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/__init__.py +0 -0
  126. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/experiment_pb2.py +0 -0
  127. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/experiment_pb2.pyi +0 -0
  128. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/experiment_pb2_grpc.py +0 -0
  129. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/experiment_pb2_grpc.pyi +0 -0
  130. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/space_pb2.py +0 -0
  131. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/space_pb2.pyi +0 -0
  132. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/space_pb2_grpc.py +0 -0
  133. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v1/space_pb2_grpc.pyi +0 -0
  134. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/__init__.py +0 -0
  135. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/feature_view_pb2.py +0 -0
  136. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/feature_view_pb2.pyi +0 -0
  137. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.py +0 -0
  138. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.pyi +0 -0
  139. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/space_pb2.py +0 -0
  140. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/space_pb2.pyi +0 -0
  141. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/space_pb2_grpc.py +0 -0
  142. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/feature/v2/space_pb2_grpc.pyi +0 -0
  143. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/__init__.py +0 -0
  144. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v1/__init__.py +0 -0
  145. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v1/service_pb2.py +0 -0
  146. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v1/service_pb2.pyi +0 -0
  147. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v1/service_pb2_grpc.py +0 -0
  148. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v1/service_pb2_grpc.pyi +0 -0
  149. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/__init__.py +0 -0
  150. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/pipeline_pb2.py +0 -0
  151. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/pipeline_pb2.pyi +0 -0
  152. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.py +0 -0
  153. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.pyi +0 -0
  154. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/quick_mode_pb2.py +0 -0
  155. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/quick_mode_pb2.pyi +0 -0
  156. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.py +0 -0
  157. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.pyi +0 -0
  158. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/resource_pb2_grpc.py +0 -0
  159. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/resource_pb2_grpc.pyi +0 -0
  160. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/room_pb2.py +0 -0
  161. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/room_pb2.pyi +0 -0
  162. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/room_pb2_grpc.py +0 -0
  163. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/room_pb2_grpc.pyi +0 -0
  164. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/source_pb2.py +0 -0
  165. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/source_pb2.pyi +0 -0
  166. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/source_pb2_grpc.py +0 -0
  167. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/source_pb2_grpc.pyi +0 -0
  168. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/table_pb2.py +0 -0
  169. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/table_pb2.pyi +0 -0
  170. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/table_pb2_grpc.py +0 -0
  171. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/ingest/v2/table_pb2_grpc.pyi +0 -0
  172. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/model/__init__.py +0 -0
  173. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/model/v1alpha/__init__.py +0 -0
  174. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/model/v1alpha/models_pb2.py +0 -0
  175. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/model/v1alpha/models_pb2.pyi +0 -0
  176. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/model/v1alpha/models_pb2_grpc.py +0 -0
  177. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/model/v1alpha/models_pb2_grpc.pyi +0 -0
  178. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/__init__.py +0 -0
  179. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/__init__.py +0 -0
  180. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/agent_pb2.py +0 -0
  181. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/agent_pb2.pyi +0 -0
  182. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/agent_pb2_grpc.py +0 -0
  183. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/agent_pb2_grpc.pyi +0 -0
  184. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/common_pb2.py +0 -0
  185. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/common_pb2.pyi +0 -0
  186. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/common_pb2_grpc.py +0 -0
  187. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/common_pb2_grpc.pyi +0 -0
  188. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/completion_model_pb2.py +0 -0
  189. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/completion_model_pb2.pyi +0 -0
  190. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.py +0 -0
  191. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.pyi +0 -0
  192. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/feature_view_pb2.py +0 -0
  193. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/feature_view_pb2.pyi +0 -0
  194. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.py +0 -0
  195. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.pyi +0 -0
  196. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/pipeline_pb2.py +0 -0
  197. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/pipeline_pb2.pyi +0 -0
  198. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.py +0 -0
  199. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.pyi +0 -0
  200. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/space_pb2.py +0 -0
  201. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/space_pb2.pyi +0 -0
  202. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/space_pb2_grpc.py +0 -0
  203. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/space_pb2_grpc.pyi +0 -0
  204. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/table_pb2.py +0 -0
  205. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/table_pb2.pyi +0 -0
  206. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/table_pb2_grpc.py +0 -0
  207. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/orm/v1/table_pb2_grpc.pyi +0 -0
  208. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/__init__.py +0 -0
  209. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/__init__.py +0 -0
  210. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/event_pb2.py +0 -0
  211. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/event_pb2.pyi +0 -0
  212. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/event_pb2_grpc.py +0 -0
  213. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/event_pb2_grpc.pyi +0 -0
  214. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/service_pb2.py +0 -0
  215. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/service_pb2.pyi +0 -0
  216. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/service_pb2_grpc.py +0 -0
  217. {corvic_engine-0.3.0rc85 → corvic_engine-0.3.0rc87}/python/corvic_generated/status/v1/service_pb2_grpc.pyi +0 -0
@@ -10,13 +10,13 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
10
10
 
11
11
  [[package]]
12
12
  name = "cfg-if"
13
- version = "1.0.0"
13
+ version = "1.0.1"
14
14
  source = "registry+https://github.com/rust-lang/crates.io-index"
15
- checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
15
+ checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
16
16
 
17
17
  [[package]]
18
18
  name = "corvic-engine"
19
- version = "0.3.0-rc.85"
19
+ version = "0.3.0-rc.87"
20
20
  dependencies = [
21
21
  "numpy",
22
22
  "pyo3",
@@ -57,7 +57,7 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
57
57
 
58
58
  [[package]]
59
59
  name = "engine-walk"
60
- version = "0.3.0-rc.85"
60
+ version = "0.3.0-rc.87"
61
61
  dependencies = [
62
62
  "version_check",
63
63
  ]
@@ -293,9 +293,9 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
293
293
 
294
294
  [[package]]
295
295
  name = "syn"
296
- version = "2.0.101"
296
+ version = "2.0.102"
297
297
  source = "registry+https://github.com/rust-lang/crates.io-index"
298
- checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
298
+ checksum = "f6397daf94fa90f058bd0fd88429dd9e5738999cca8d701813c80723add80462"
299
299
  dependencies = [
300
300
  "proc-macro2",
301
301
  "quote",
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.0-rc.85"
6
+ version = "0.3.0-rc.87"
7
7
  edition = "2021"
8
8
  publish = false
9
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: corvic-engine
3
- Version: 0.3.0rc85
3
+ Version: 0.3.0rc87
4
4
  Classifier: Environment :: Console
5
5
  Classifier: License :: Other/Proprietary License
6
6
  Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -18,7 +18,7 @@ authors = [
18
18
  ]
19
19
  readme = "README.md"
20
20
  description = "Seamless embedding generation and retrieval."
21
- version = "0.3.0-rc.85" # sync this with tool.poetry.version below
21
+ version = "0.3.0-rc.87" # sync this with tool.poetry.version below
22
22
 
23
23
  # TODO(ddn): Pull dependencies from tool.poetry.dependencies. We use maturin as
24
24
  # the build system but poetry for the development environment.
@@ -73,7 +73,7 @@ packages = [
73
73
  ]
74
74
  description = ""
75
75
  authors = []
76
- version = "0.3.0-rc.85"
76
+ version = "0.3.0-rc.87"
77
77
 
78
78
  [tool.poetry.scripts]
79
79
  check = "corvic_check.cli:main"
@@ -3,7 +3,6 @@ from collections.abc import Callable, Iterable
3
3
  from typing import Generic
4
4
 
5
5
  import sqlalchemy as sa
6
- import sqlalchemy.orm as sa_orm
7
6
 
8
7
  from corvic import eorm, system, transfer
9
8
  from corvic.emodel._proto_orm_convert import (
@@ -59,7 +58,7 @@ class OrmBackedModel(
59
58
  [sa.Select[tuple[transfer.OrmT]]], sa.Select[tuple[transfer.OrmT]]
60
59
  ]
61
60
  | None = None,
62
- existing_session: sa_orm.Session | None = None,
61
+ existing_session: eorm.Session | None = None,
63
62
  ) -> Ok[list[transfer.ProtoT]] | NotFoundError | InvalidArgumentError:
64
63
  return super().list_as_proto(
65
64
  client,
@@ -91,7 +90,7 @@ class HasIdOrmBackedModel(
91
90
  [sa.Select[tuple[transfer.OrmHasIdT]]], sa.Select[tuple[transfer.OrmHasIdT]]
92
91
  ]
93
92
  | None = None,
94
- existing_session: sa_orm.Session | None = None,
93
+ existing_session: eorm.Session | None = None,
95
94
  ) -> Ok[list[transfer.ProtoHasIdT]] | NotFoundError | InvalidArgumentError:
96
95
  return super().list_as_proto(
97
96
  client,
@@ -7,8 +7,6 @@ import datetime
7
7
  from collections.abc import Iterable, Sequence
8
8
  from typing import Literal, TypeAlias
9
9
 
10
- from sqlalchemy import orm as sa_orm
11
-
12
10
  from corvic import eorm, system, transfer
13
11
  from corvic.emodel._base_model import OrgWideStandardModel
14
12
  from corvic.emodel._defaults import Defaults
@@ -151,7 +149,7 @@ class CompletionModel(
151
149
  created_before: datetime.datetime | None = None,
152
150
  client: system.Client | None = None,
153
151
  ids: Iterable[CompletionModelID] | None = None,
154
- existing_session: sa_orm.Session | None = None,
152
+ existing_session: eorm.Session | None = None,
155
153
  ) -> Ok[list[CompletionModel]] | NotFoundError | InvalidArgumentError:
156
154
  """List completion models."""
157
155
  client = client or Defaults.get_default_client()
@@ -179,7 +177,7 @@ class CompletionModel(
179
177
  cls,
180
178
  completion_model_id: CompletionModelID,
181
179
  client: system.Client | None = None,
182
- session: sa_orm.Session | None = None,
180
+ session: eorm.Session | None = None,
183
181
  ) -> Ok[CompletionModel] | NotFoundError:
184
182
  client = client or Defaults.get_default_client()
185
183
  return cls.load_proto_for(completion_model_id, client, session).map(
@@ -691,7 +691,7 @@ class FeatureView(
691
691
  cls,
692
692
  feature_view_id: FeatureViewID,
693
693
  client: system.Client | None = None,
694
- session: sa_orm.Session | None = None,
694
+ session: eorm.Session | None = None,
695
695
  ) -> Ok[Self] | NotFoundError:
696
696
  client = client or Defaults.get_default_client()
697
697
  return cls.load_proto_for(feature_view_id, client, session).map(
@@ -723,7 +723,7 @@ class FeatureView(
723
723
  created_before: datetime.datetime | None = None,
724
724
  client: system.Client | None = None,
725
725
  ids: Iterable[FeatureViewID] | None = None,
726
- existing_session: sa_orm.Session | None = None,
726
+ existing_session: eorm.Session | None = None,
727
727
  ) -> Ok[list[FeatureView]] | NotFoundError | InvalidArgumentError:
728
728
  """List resources."""
729
729
  client = client or Defaults.get_default_client()
@@ -100,7 +100,7 @@ class Pipeline(StandardModel[PipelineID, models_pb2.Pipeline, eorm.Pipeline]):
100
100
  cls,
101
101
  obj_id: PipelineID,
102
102
  client: system.Client | None = None,
103
- session: sa_orm.Session | None = None,
103
+ session: eorm.Session | None = None,
104
104
  ) -> Ok[SpecificPipeline] | NotFoundError:
105
105
  client = client or Defaults.get_default_client()
106
106
  match cls.list_as_proto(
@@ -134,7 +134,7 @@ class Pipeline(StandardModel[PipelineID, models_pb2.Pipeline, eorm.Pipeline]):
134
134
  created_before: datetime.datetime | None = None,
135
135
  client: system.Client | None = None,
136
136
  ids: Iterable[PipelineID] | None = None,
137
- existing_session: sa_orm.Session | None = None,
137
+ existing_session: eorm.Session | None = None,
138
138
  ) -> Ok[list[SpecificPipeline]] | InvalidArgumentError | NotFoundError:
139
139
  client = client or Defaults.get_default_client()
140
140
 
@@ -231,7 +231,7 @@ def add_orm_org_mixin_to_session(
231
231
  orm_obj: OrmHasIdBelongsToOrgT,
232
232
  proto_obj: _ModelHasIdBelongsToOrgProto,
233
233
  id_class: type[transfer.OrmIdT],
234
- session: sa_orm.Session,
234
+ session: eorm.Session,
235
235
  ) -> Ok[OrmHasIdBelongsToOrgT] | orm.InvalidORMIdentifierError:
236
236
  match transfer.translate_orm_id(proto_obj.id, id_class):
237
237
  case Ok(orm_id):
@@ -257,7 +257,7 @@ def add_orm_room_mixin_to_session(
257
257
  orm_obj: OrmHasIdBelongsToRoomT,
258
258
  proto_obj: _ModelHasIdBelongsToRoomProto,
259
259
  id_class: type[transfer.OrmIdT],
260
- session: sa_orm.Session,
260
+ session: eorm.Session,
261
261
  ) -> Ok[OrmHasIdBelongsToRoomT] | orm.InvalidORMIdentifierError:
262
262
  room_id = eorm.RoomID(proto_obj.room_id)
263
263
  match room_id.to_db():
@@ -270,7 +270,7 @@ def add_orm_room_mixin_to_session(
270
270
 
271
271
 
272
272
  def _resource_pipeline_to_orm(
273
- proto_obj: models_pb2.Resource, orm_obj: eorm.Resource, session: sa_orm.Session
273
+ proto_obj: models_pb2.Resource, orm_obj: eorm.Resource, session: eorm.Session
274
274
  ) -> Ok[None] | InvalidArgumentError:
275
275
  if proto_obj.pipeline_id:
276
276
  match transfer.translate_orm_id(proto_obj.pipeline_id, eorm.PipelineID):
@@ -296,7 +296,7 @@ def _resource_pipeline_to_orm(
296
296
 
297
297
 
298
298
  def resource_proto_to_orm(
299
- proto_obj: models_pb2.Resource, session: sa_orm.Session
299
+ proto_obj: models_pb2.Resource, session: eorm.Session
300
300
  ) -> Ok[eorm.Resource] | InvalidArgumentError:
301
301
  orm_obj = eorm.Resource(
302
302
  name=proto_obj.name,
@@ -321,11 +321,11 @@ def resource_proto_to_orm(
321
321
  def _ensure_id(
322
322
  proto_obj: transfer.ProtoHasIdT,
323
323
  proto_to_orm: Callable[
324
- [transfer.ProtoHasIdT, sa_orm.Session],
324
+ [transfer.ProtoHasIdT, eorm.Session],
325
325
  Ok[transfer.OrmHasIdT] | InvalidArgumentError,
326
326
  ],
327
327
  id_type: type[transfer.OrmIdT],
328
- session: sa_orm.Session,
328
+ session: eorm.Session,
329
329
  ) -> Ok[transfer.OrmIdT] | orm.InvalidORMIdentifierError | InvalidArgumentError:
330
330
  match transfer.translate_orm_id(proto_obj.id, id_type):
331
331
  case orm.InvalidORMIdentifierError() as err:
@@ -344,7 +344,7 @@ def _ensure_id(
344
344
 
345
345
 
346
346
  def pipeline_proto_to_orm( # noqa: C901
347
- proto_obj: models_pb2.Pipeline, session: sa_orm.Session
347
+ proto_obj: models_pb2.Pipeline, session: eorm.Session
348
348
  ) -> Ok[eorm.Pipeline] | orm.InvalidORMIdentifierError | InvalidArgumentError:
349
349
  orm_obj = eorm.Pipeline(
350
350
  name=proto_obj.name,
@@ -389,7 +389,7 @@ def pipeline_proto_to_orm( # noqa: C901
389
389
 
390
390
 
391
391
  def source_proto_to_orm(
392
- proto_obj: models_pb2.Source, session: sa_orm.Session
392
+ proto_obj: models_pb2.Source, session: eorm.Session
393
393
  ) -> Ok[eorm.Source] | orm.InvalidORMIdentifierError | InvalidArgumentError:
394
394
  orm_obj = eorm.Source(
395
395
  name=proto_obj.name,
@@ -399,7 +399,7 @@ def source_proto_to_orm(
399
399
 
400
400
 
401
401
  def space_proto_to_orm(
402
- proto_obj: models_pb2.Space, session: sa_orm.Session
402
+ proto_obj: models_pb2.Space, session: eorm.Session
403
403
  ) -> Ok[eorm.Space] | orm.InvalidORMIdentifierError | InvalidArgumentError:
404
404
  match _ensure_id(
405
405
  proto_obj.feature_view, feature_view_proto_to_orm, eorm.FeatureViewID, session
@@ -423,7 +423,7 @@ def space_proto_to_orm(
423
423
 
424
424
 
425
425
  def feature_view_proto_to_orm(
426
- proto_obj: models_pb2.FeatureView, session: sa_orm.Session
426
+ proto_obj: models_pb2.FeatureView, session: eorm.Session
427
427
  ) -> Ok[eorm.FeatureView] | orm.InvalidORMIdentifierError | InvalidArgumentError:
428
428
  orm_obj = eorm.FeatureView(
429
429
  name=proto_obj.name,
@@ -493,7 +493,7 @@ def _feature_view_source_proto_to_orm(
493
493
  proto_obj: models_pb2.FeatureViewSource,
494
494
  room_id: eorm.RoomID,
495
495
  feature_view_id: eorm.FeatureViewID,
496
- session: sa_orm.Session,
496
+ session: eorm.Session,
497
497
  ) -> Ok[eorm.FeatureViewSource] | orm.InvalidORMIdentifierError | InvalidArgumentError:
498
498
  match _ensure_id(proto_obj.source, source_proto_to_orm, eorm.SourceID, session):
499
499
  case orm.InvalidORMIdentifierError() | InvalidArgumentError() as err:
@@ -514,14 +514,14 @@ def _feature_view_source_proto_to_orm(
514
514
 
515
515
 
516
516
  def room_proto_to_orm(
517
- proto_obj: models_pb2.Room, session: sa_orm.Session
517
+ proto_obj: models_pb2.Room, session: eorm.Session
518
518
  ) -> Ok[eorm.Room] | orm.InvalidORMIdentifierError | InvalidArgumentError:
519
519
  orm_obj = eorm.Room(name=proto_obj.name)
520
520
  return add_orm_org_mixin_to_session(orm_obj, proto_obj, eorm.RoomID, session)
521
521
 
522
522
 
523
523
  def completion_model_proto_to_orm(
524
- proto_obj: models_pb2.CompletionModel, session: sa_orm.Session
524
+ proto_obj: models_pb2.CompletionModel, session: eorm.Session
525
525
  ) -> Ok[eorm.CompletionModel] | InvalidArgumentError:
526
526
  orm_obj = eorm.CompletionModel(
527
527
  name=proto_obj.name,
@@ -538,7 +538,7 @@ def completion_model_proto_to_orm(
538
538
 
539
539
  def source_delete_orms(
540
540
  orm_ids: Sequence[eorm.SourceID],
541
- session: sa_orm.Session,
541
+ session: eorm.Session,
542
542
  ) -> Ok[None] | InvalidArgumentError:
543
543
  feat_view_refs = list(
544
544
  session.scalars(
@@ -557,7 +557,7 @@ def source_delete_orms(
557
557
 
558
558
 
559
559
  def pipeline_delete_orms(
560
- ids: Sequence[eorm.PipelineID], session: sa_orm.Session
560
+ ids: Sequence[eorm.PipelineID], session: eorm.Session
561
561
  ) -> Ok[None] | InvalidArgumentError:
562
562
  source_ids = [
563
563
  val[0]
@@ -135,7 +135,7 @@ class Resource(StandardModel[ResourceID, models_pb2.Resource, eorm.Resource]):
135
135
  client: system.Client | None = None,
136
136
  ids: Iterable[ResourceID] | None = None,
137
137
  is_terminal: bool | None = None,
138
- existing_session: sa_orm.Session | None = None,
138
+ existing_session: eorm.Session | None = None,
139
139
  url: str | None = None,
140
140
  ) -> Ok[list[Resource]] | NotFoundError | InvalidArgumentError:
141
141
  """List resources."""
@@ -192,7 +192,7 @@ class Resource(StandardModel[ResourceID, models_pb2.Resource, eorm.Resource]):
192
192
  cls,
193
193
  resource_id: ResourceID,
194
194
  client: system.Client | None = None,
195
- session: sa_orm.Session | None = None,
195
+ session: eorm.Session | None = None,
196
196
  ) -> Ok[Resource] | NotFoundError:
197
197
  client = client or Defaults.get_default_client()
198
198
  return cls.load_proto_for(resource_id, client, session).map(
@@ -83,7 +83,7 @@ class Source(StandardModel[SourceID, models_pb2.Source, eorm.Source]):
83
83
  cls,
84
84
  source_id: SourceID,
85
85
  client: system.Client | None = None,
86
- session: sa_orm.Session | None = None,
86
+ session: eorm.Session | None = None,
87
87
  ) -> Ok[Self] | NotFoundError:
88
88
  client = client or Defaults.get_default_client()
89
89
  return cls.load_proto_for(source_id, client, session).map(
@@ -212,7 +212,7 @@ class Source(StandardModel[SourceID, models_pb2.Source, eorm.Source]):
212
212
  created_before: datetime.datetime | None = None,
213
213
  client: system.Client | None = None,
214
214
  ids: Iterable[SourceID] | None = None,
215
- existing_session: sa_orm.Session | None = None,
215
+ existing_session: eorm.Session | None = None,
216
216
  ) -> Ok[list[Source]] | NotFoundError | InvalidArgumentError:
217
217
  """List sources that exist in storage."""
218
218
  client = client or Defaults.get_default_client()
@@ -37,13 +37,15 @@ _DEFAULT_CONCAT_SEPARATOR = " "
37
37
 
38
38
 
39
39
  embedding_model_proto_to_name: Final[dict[embedding_models_pb2.Model, str]] = {
40
- embedding_models_pb2.MODEL_CUSTOM: "random",
40
+ embedding_models_pb2.MODEL_CUSTOM: system.RandomTextEmbedder.model_name(),
41
41
  embedding_models_pb2.MODEL_SENTENCE_TRANSFORMER: "text-embedding-004",
42
42
  embedding_models_pb2.MODEL_GCP_TEXT_EMBEDDING_004: "text-embedding-004",
43
43
  embedding_models_pb2.MODEL_OPENAI_TEXT_EMBEDDING_3_SMALL: "text-embedding-3-small",
44
44
  embedding_models_pb2.MODEL_OPENAI_TEXT_EMBEDDING_3_LARGE: "text-embedding-3-large",
45
- embedding_models_pb2.MODEL_IDENTITY: "identity",
45
+ embedding_models_pb2.MODEL_IDENTITY: system.IdentityTextEmbedder.model_name(),
46
46
  embedding_models_pb2.MODEL_UNSPECIFIED: "",
47
+ embedding_models_pb2.MODEL_CLIP: system.ClipText.model_name(),
48
+ embedding_models_pb2.MODEL_SIGLIP2: system.SigLIP2Text.model_name(),
47
49
  }
48
50
  name_to_proto_embedding_model = {
49
51
  name: model for model, name in embedding_model_proto_to_name.items()
@@ -265,7 +267,7 @@ class Space(StandardModel[SpaceID, models_pb2.Space, eorm.Space]):
265
267
  cls,
266
268
  space_id: SpaceID,
267
269
  client: system.Client | None = None,
268
- session: sa_orm.Session | None = None,
270
+ session: eorm.Session | None = None,
269
271
  ) -> Ok[SpecificSpace] | NotFoundError:
270
272
  client = client or Defaults.get_default_client()
271
273
  return cls.load_proto_for(space_id, client, session).map(
@@ -284,7 +286,7 @@ class Space(StandardModel[SpaceID, models_pb2.Space, eorm.Space]):
284
286
  created_before: datetime.datetime | None = None,
285
287
  client: system.Client | None = None,
286
288
  ids: Iterable[eorm.SpaceID] | None = None,
287
- existing_session: sa_orm.Session | None = None,
289
+ existing_session: eorm.Session | None = None,
288
290
  ) -> Ok[list[SpecificSpace]] | InvalidArgumentError | NotFoundError:
289
291
  client = client or Defaults.get_default_client()
290
292
 
@@ -23,6 +23,7 @@ from corvic.orm.errors import (
23
23
  DeletedObjectError,
24
24
  InvalidORMIdentifierError,
25
25
  RequestedObjectsForNobodyError,
26
+ dbapi_error_to_result,
26
27
  )
27
28
  from corvic.orm.func import utc_now
28
29
  from corvic.orm.ids import (
@@ -278,4 +279,5 @@ __all__ = [
278
279
  "primary_key_foreign_column",
279
280
  "primary_key_identity_column",
280
281
  "primary_key_uuid_column",
282
+ "dbapi_error_to_result",
281
283
  ]
@@ -1,6 +1,7 @@
1
1
  """Mixin models for corvic orm tables."""
2
2
 
3
3
  from datetime import UTC, datetime
4
+ from types import TracebackType
4
5
  from typing import Any, LiteralString
5
6
 
6
7
  import sqlalchemy as sa
@@ -9,9 +10,7 @@ from sqlalchemy import orm as sa_orm
9
10
  from sqlalchemy.ext import hybrid
10
11
  from sqlalchemy.ext.hybrid import hybrid_property
11
12
 
12
- from corvic.orm.errors import (
13
- DeletedObjectError,
14
- )
13
+ from corvic.orm.errors import DeletedObjectError, dbapi_error_to_result
15
14
 
16
15
 
17
16
  class BadDeleteError(DeletedObjectError):
@@ -155,6 +154,16 @@ class Session(sa_orm.Session):
155
154
 
156
155
  _soft_deleted: dict[sa_orm.InstanceState[Any], Any] | None = None
157
156
 
157
+ def __exit__(
158
+ self,
159
+ type_: type[BaseException] | None,
160
+ value: BaseException | None,
161
+ traceback: TracebackType | None,
162
+ ):
163
+ super().__exit__(type_, value, traceback)
164
+ if isinstance(value, sa.exc.DBAPIError):
165
+ raise dbapi_error_to_result(value) from value
166
+
158
167
  def _track_soft_deleted(self, instance: object):
159
168
  if self._soft_deleted is None:
160
169
  self._soft_deleted = {}
@@ -0,0 +1,54 @@
1
+ """Errors specific to communicating with the database."""
2
+
3
+ import sqlalchemy as sa
4
+
5
+ from corvic import result
6
+
7
+
8
+ class InvalidORMIdentifierError(result.InvalidArgumentError):
9
+ """Raised when an identifier can't be translated to its orm equivalent."""
10
+
11
+
12
+ class RequestedObjectsForNobodyError(result.Error):
13
+ """Raised when attempts are made to access database objects as the nobody org."""
14
+
15
+
16
+ class DeletedObjectError(result.Error):
17
+ """DeletedObjectError result Error.
18
+
19
+ Raised on invalid operations to objects which are soft deleted.
20
+ """
21
+
22
+
23
+ def dbapi_error_to_result(err: sa.exc.DBAPIError):
24
+ # based on https://docs.sqlalchemy.org/en/20/errors.html
25
+ match err:
26
+ case sa.exc.NotSupportedError():
27
+ # raised in the unexpected case that we're doing something that the
28
+ # database just doesn't support
29
+ raise result.InternalError.from_(err) from err
30
+ case (
31
+ sa.exc.OperationalError()
32
+ | sa.exc.InterfaceError()
33
+ | sa.exc.InternalError()
34
+ ):
35
+ # These are commonly things that are outside of our control that might
36
+ # succeed on retry, e.g., connections being dropped
37
+ return result.UnavailableError.from_(err)
38
+ case sa.exc.IntegrityError:
39
+ return result.InvalidArgumentError.from_(err)
40
+ case sa.exc.ProgrammingError():
41
+ if "could not serialize" in str(err):
42
+ return result.UnavailableError.from_(err)
43
+ case _:
44
+ pass
45
+
46
+ try:
47
+ import psycopg.errors
48
+
49
+ if isinstance(err.orig, psycopg.errors.SerializationFailure):
50
+ return result.UnavailableError.from_(err)
51
+ except ModuleNotFoundError:
52
+ pass
53
+
54
+ return result.InvalidArgumentError.from_(err)
@@ -39,6 +39,9 @@ class EmbedTextResult:
39
39
  class TextEmbedder(Protocol):
40
40
  """Use a model to embed text."""
41
41
 
42
+ @classmethod
43
+ def model_name(cls) -> str: ...
44
+
42
45
  async def aembed(
43
46
  self,
44
47
  context: EmbedTextContext,
@@ -86,8 +89,12 @@ class LoadedModels:
86
89
  class HFModelText(TextEmbedder):
87
90
  """Generic text/image embedder from hugging face models."""
88
91
 
92
+ @classmethod
89
93
  @abc.abstractmethod
90
- def _load_models(self) -> LoadedModels: ...
94
+ def model_revision(cls) -> str: ...
95
+
96
+ @abc.abstractmethod
97
+ def load_models(self) -> LoadedModels: ...
91
98
 
92
99
  def embed(
93
100
  self, context: EmbedTextContext
@@ -98,7 +105,7 @@ class HFModelText(TextEmbedder):
98
105
  case 32:
99
106
  coord_dtype = pl.Float32()
100
107
 
101
- models = self._load_models()
108
+ models = self.load_models()
102
109
  model = models.model
103
110
  processor = models.processor
104
111
  model.eval() # type: ignore[reportAttributeAccess]
@@ -152,7 +159,15 @@ class ClipText(HFModelText):
152
159
  overcoming several major challenges in computer vision.
153
160
  """
154
161
 
155
- def _load_models(self):
162
+ @classmethod
163
+ def model_name(cls) -> str:
164
+ return "openai/clip-vit-base-patch32"
165
+
166
+ @classmethod
167
+ def model_revision(cls) -> str:
168
+ return "5812e510083bb2d23fa43778a39ac065d205ed4d"
169
+
170
+ def load_models(self):
156
171
  from transformers.models.clip import (
157
172
  CLIPModel,
158
173
  CLIPProcessor,
@@ -161,15 +176,15 @@ class ClipText(HFModelText):
161
176
  model = cast(
162
177
  AutoModel,
163
178
  CLIPModel.from_pretrained( # pyright: ignore[reportUnknownMemberType]
164
- pretrained_model_name_or_path="openai/clip-vit-base-patch32",
165
- revision="5812e510083bb2d23fa43778a39ac065d205ed4d",
179
+ pretrained_model_name_or_path=self.model_name(),
180
+ revision=self.model_revision(),
166
181
  ),
167
182
  )
168
183
  processor = cast(
169
184
  AutoProcessor,
170
185
  CLIPProcessor.from_pretrained( # pyright: ignore[reportUnknownMemberType]
171
- pretrained_model_name_or_path="openai/clip-vit-base-patch32",
172
- revision="5812e510083bb2d23fa43778a39ac065d205ed4d",
186
+ pretrained_model_name_or_path=self.model_name(),
187
+ revision=self.model_revision(),
173
188
  use_fast=False,
174
189
  ),
175
190
  )
@@ -179,23 +194,31 @@ class ClipText(HFModelText):
179
194
  class SigLIP2Text(HFModelText):
180
195
  """SigLIP2 text/image embedder."""
181
196
 
182
- def _load_models(self):
197
+ @classmethod
198
+ def model_name(cls) -> str:
199
+ return "google/siglip2-base-patch16-512"
200
+
201
+ @classmethod
202
+ def model_revision(cls) -> str:
203
+ return "a89f5c5093f902bf39d3cd4d81d2c09867f0724b"
204
+
205
+ def load_models(self):
183
206
  from transformers.models.auto.modeling_auto import AutoModel
184
207
  from transformers.models.auto.processing_auto import AutoProcessor
185
208
 
186
209
  model = cast(
187
210
  AutoModel,
188
211
  AutoModel.from_pretrained( # pyright: ignore[reportUnknownMemberType]
189
- pretrained_model_name_or_path="google/siglip2-base-patch16-512",
190
- revision="a89f5c5093f902bf39d3cd4d81d2c09867f0724b",
212
+ pretrained_model_name_or_path=self.model_name(),
213
+ revision=self.model_revision(),
191
214
  device_map="auto",
192
215
  ),
193
216
  )
194
217
  processor = cast(
195
218
  AutoProcessor,
196
219
  AutoProcessor.from_pretrained( # pyright: ignore[reportUnknownMemberType]
197
- pretrained_model_name_or_path="google/siglip2-base-patch16-512",
198
- revision="a89f5c5093f902bf39d3cd4d81d2c09867f0724b",
220
+ pretrained_model_name_or_path=self.model_name(),
221
+ revision=self.model_revision(),
199
222
  use_fast=True,
200
223
  ),
201
224
  )
@@ -18,6 +18,10 @@ class RandomTextEmbedder(TextEmbedder):
18
18
  Useful for testing.
19
19
  """
20
20
 
21
+ @classmethod
22
+ def model_name(cls) -> str:
23
+ return "random"
24
+
21
25
  def embed(
22
26
  self, context: EmbedTextContext
23
27
  ) -> Ok[EmbedTextResult] | InvalidArgumentError | InternalError:
@@ -62,6 +66,10 @@ class IdentityTextEmbedder(TextEmbedder):
62
66
  - The resulting list is truncated or padded to match the expected vector length.
63
67
  """
64
68
 
69
+ @classmethod
70
+ def model_name(cls) -> str:
71
+ return "identity"
72
+
65
73
  def _text_to_embedding(
66
74
  self, text: str, vector_length: int, *, normalization: bool = False
67
75
  ) -> list[float]: