corvic-engine 0.3.0rc44__tar.gz → 0.3.0rc46__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 (251) hide show
  1. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/Cargo.lock +8 -8
  2. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/Cargo.toml +1 -1
  3. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/PKG-INFO +1 -1
  4. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/pyproject.toml +2 -2
  5. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/__init__.py +7 -1
  6. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_base_model.py +35 -42
  7. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_feature_view.py +43 -43
  8. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_pipeline.py +2 -14
  9. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_proto_orm_convert.py +242 -239
  10. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_resource.py +2 -7
  11. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_source.py +14 -16
  12. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_space.py +330 -362
  13. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/__init__.py +37 -223
  14. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/storage.py +1 -1
  15. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system_sqlite/fs_blob_store.py +9 -3
  16. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system_sqlite/rdbms_blob_store.py +3 -2
  17. corvic_engine-0.3.0rc46/python/corvic_generated/model/v1alpha/models_pb2.py +58 -0
  18. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/model/v1alpha/models_pb2.pyi +8 -68
  19. corvic_engine-0.3.0rc44/python/corvic_generated/model/v1alpha/models_pb2.py +0 -68
  20. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/LICENSE +0 -0
  21. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/README.md +0 -0
  22. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/Cargo.toml +0 -0
  23. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/expression_pb2.py +0 -0
  24. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/expression_pb2.pyi +0 -0
  25. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/expression_pb2_grpc.py +0 -0
  26. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/expression_pb2_grpc.pyi +0 -0
  27. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/priv/private_pb2.py +0 -0
  28. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/priv/private_pb2.pyi +0 -0
  29. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/priv/private_pb2_grpc.py +0 -0
  30. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/priv/private_pb2_grpc.pyi +0 -0
  31. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/validate_pb2.py +0 -0
  32. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/validate_pb2.pyi +0 -0
  33. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/validate_pb2_grpc.py +0 -0
  34. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/buf/validate/validate_pb2_grpc.pyi +0 -0
  35. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/context/__init__.py +0 -0
  36. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/context/py.typed +0 -0
  37. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/embed/__init__.py +0 -0
  38. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/embed/node2vec.py +0 -0
  39. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/embed/py.typed +0 -0
  40. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/embedding_metric/__init__.py +0 -0
  41. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/embedding_metric/embeddings.py +0 -0
  42. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/embedding_metric/py.typed +0 -0
  43. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/engine/__init__.py +0 -0
  44. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/engine/_native.pyi +0 -0
  45. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/engine/py.typed +0 -0
  46. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_agent.py +0 -0
  47. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_completion_model.py +0 -0
  48. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_defaults.py +0 -0
  49. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_errors.py +0 -0
  50. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_feature_type.py +0 -0
  51. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/_room.py +0 -0
  52. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/model/py.typed +0 -0
  53. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/__init__.py +0 -0
  54. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/_schema.py +0 -0
  55. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/_transformations.py +0 -0
  56. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/aggregation.py +0 -0
  57. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/encoders.py +0 -0
  58. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/errors.py +0 -0
  59. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/feature_types.py +0 -0
  60. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/ops.py +0 -0
  61. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/py.typed +0 -0
  62. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/row_filters/__init__.py +0 -0
  63. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/row_filters/_jsonlogic.py +0 -0
  64. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/row_filters/_row_filters.py +0 -0
  65. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/op_graph/sample_strategy.py +0 -0
  66. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/_proto_columns.py +0 -0
  67. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/base.py +0 -0
  68. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/errors.py +0 -0
  69. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/func/__init__.py +0 -0
  70. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/func/utc_func.py +0 -0
  71. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/func/uuid_func.py +0 -0
  72. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/ids.py +0 -0
  73. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/keys.py +0 -0
  74. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/mixins.py +0 -0
  75. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/orm/py.typed +0 -0
  76. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/pa_scalar/__init__.py +0 -0
  77. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/pa_scalar/_const.py +0 -0
  78. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/pa_scalar/_from_value.py +0 -0
  79. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/pa_scalar/_temporal.py +0 -0
  80. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/pa_scalar/_to_value.py +0 -0
  81. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/pa_scalar/_types.py +0 -0
  82. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/pa_scalar/py.typed +0 -0
  83. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/proto_wrapper/__init__.py +0 -0
  84. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/proto_wrapper/_errors.py +0 -0
  85. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/proto_wrapper/_wrappers.py +0 -0
  86. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/proto_wrapper/py.typed +0 -0
  87. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/result/__init__.py +0 -0
  88. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/result/py.typed +0 -0
  89. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/sql/__init__.py +0 -0
  90. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/sql/parse_ops.py +0 -0
  91. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/sql/py.typed +0 -0
  92. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/__init__.py +0 -0
  93. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/_dimension_reduction.py +0 -0
  94. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/_embedder.py +0 -0
  95. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/_image_embedder.py +0 -0
  96. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/_planner.py +0 -0
  97. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/_text_embedder.py +0 -0
  98. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/client.py +0 -0
  99. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/in_memory_executor.py +0 -0
  100. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/op_graph_executor.py +0 -0
  101. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/py.typed +0 -0
  102. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system/staging.py +0 -0
  103. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system_sqlite/__init__.py +0 -0
  104. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system_sqlite/client.py +0 -0
  105. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system_sqlite/py.typed +0 -0
  106. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/system_sqlite/staging.py +0 -0
  107. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/table/__init__.py +0 -0
  108. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/table/py.typed +0 -0
  109. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/table/table.py +0 -0
  110. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/version/__init__.py +0 -0
  111. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/version/py.typed +0 -0
  112. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/well_known_types/__init__.py +0 -0
  113. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic/well_known_types/py.typed +0 -0
  114. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/__init__.py +0 -0
  115. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/algorithm/__init__.py +0 -0
  116. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/algorithm/graph/__init__.py +0 -0
  117. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/algorithm/graph/v1/__init__.py +0 -0
  118. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/algorithm/graph/v1/graph_pb2.py +0 -0
  119. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/algorithm/graph/v1/graph_pb2.pyi +0 -0
  120. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.py +0 -0
  121. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.pyi +0 -0
  122. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/chat/__init__.py +0 -0
  123. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/chat/v1/__init__.py +0 -0
  124. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/chat/v1/service_pb2.py +0 -0
  125. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/chat/v1/service_pb2.pyi +0 -0
  126. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/chat/v1/service_pb2_grpc.py +0 -0
  127. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/chat/v1/service_pb2_grpc.pyi +0 -0
  128. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/completion/__init__.py +0 -0
  129. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/completion/v1/__init__.py +0 -0
  130. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/completion/v1/service_pb2.py +0 -0
  131. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/completion/v1/service_pb2.pyi +0 -0
  132. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/completion/v1/service_pb2_grpc.py +0 -0
  133. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/completion/v1/service_pb2_grpc.pyi +0 -0
  134. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/config/__init__.py +0 -0
  135. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/config/v1/__init__.py +0 -0
  136. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/config/v1/settings_pb2.py +0 -0
  137. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/config/v1/settings_pb2.pyi +0 -0
  138. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/config/v1/settings_pb2_grpc.py +0 -0
  139. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/config/v1/settings_pb2_grpc.pyi +0 -0
  140. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/embedding/__init__.py +0 -0
  141. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/embedding/v1/__init__.py +0 -0
  142. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/embedding/v1/models_pb2.py +0 -0
  143. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/embedding/v1/models_pb2.pyi +0 -0
  144. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/embedding/v1/models_pb2_grpc.py +0 -0
  145. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/embedding/v1/models_pb2_grpc.pyi +0 -0
  146. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/__init__.py +0 -0
  147. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/__init__.py +0 -0
  148. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/experiment_pb2.py +0 -0
  149. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/experiment_pb2.pyi +0 -0
  150. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/experiment_pb2_grpc.py +0 -0
  151. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/experiment_pb2_grpc.pyi +0 -0
  152. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/space_pb2.py +0 -0
  153. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/space_pb2.pyi +0 -0
  154. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/space_pb2_grpc.py +0 -0
  155. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v1/space_pb2_grpc.pyi +0 -0
  156. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/__init__.py +0 -0
  157. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/feature_view_pb2.py +0 -0
  158. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/feature_view_pb2.pyi +0 -0
  159. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.py +0 -0
  160. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.pyi +0 -0
  161. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/space_pb2.py +0 -0
  162. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/space_pb2.pyi +0 -0
  163. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/space_pb2_grpc.py +0 -0
  164. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/feature/v2/space_pb2_grpc.pyi +0 -0
  165. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/__init__.py +0 -0
  166. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v1/__init__.py +0 -0
  167. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v1/service_pb2.py +0 -0
  168. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v1/service_pb2.pyi +0 -0
  169. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v1/service_pb2_grpc.py +0 -0
  170. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v1/service_pb2_grpc.pyi +0 -0
  171. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/__init__.py +0 -0
  172. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/pipeline_pb2.py +0 -0
  173. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/pipeline_pb2.pyi +0 -0
  174. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.py +0 -0
  175. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.pyi +0 -0
  176. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/quick_mode_pb2.py +0 -0
  177. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/quick_mode_pb2.pyi +0 -0
  178. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.py +0 -0
  179. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.pyi +0 -0
  180. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/resource_pb2.py +0 -0
  181. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/resource_pb2.pyi +0 -0
  182. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/resource_pb2_grpc.py +0 -0
  183. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/resource_pb2_grpc.pyi +0 -0
  184. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/room_pb2.py +0 -0
  185. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/room_pb2.pyi +0 -0
  186. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/room_pb2_grpc.py +0 -0
  187. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/room_pb2_grpc.pyi +0 -0
  188. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/source_pb2.py +0 -0
  189. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/source_pb2.pyi +0 -0
  190. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/source_pb2_grpc.py +0 -0
  191. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/source_pb2_grpc.pyi +0 -0
  192. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/table_pb2.py +0 -0
  193. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/table_pb2.pyi +0 -0
  194. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/table_pb2_grpc.py +0 -0
  195. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/ingest/v2/table_pb2_grpc.pyi +0 -0
  196. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/model/__init__.py +0 -0
  197. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/model/v1alpha/__init__.py +0 -0
  198. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/model/v1alpha/models_pb2_grpc.py +0 -0
  199. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/model/v1alpha/models_pb2_grpc.pyi +0 -0
  200. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/__init__.py +0 -0
  201. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/__init__.py +0 -0
  202. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/agent_pb2.py +0 -0
  203. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/agent_pb2.pyi +0 -0
  204. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/agent_pb2_grpc.py +0 -0
  205. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/agent_pb2_grpc.pyi +0 -0
  206. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/common_pb2.py +0 -0
  207. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/common_pb2.pyi +0 -0
  208. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/common_pb2_grpc.py +0 -0
  209. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/common_pb2_grpc.pyi +0 -0
  210. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/completion_model_pb2.py +0 -0
  211. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/completion_model_pb2.pyi +0 -0
  212. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.py +0 -0
  213. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.pyi +0 -0
  214. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/feature_view_pb2.py +0 -0
  215. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/feature_view_pb2.pyi +0 -0
  216. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.py +0 -0
  217. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.pyi +0 -0
  218. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/pipeline_pb2.py +0 -0
  219. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/pipeline_pb2.pyi +0 -0
  220. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.py +0 -0
  221. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.pyi +0 -0
  222. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/space_pb2.py +0 -0
  223. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/space_pb2.pyi +0 -0
  224. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/space_pb2_grpc.py +0 -0
  225. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/space_pb2_grpc.pyi +0 -0
  226. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/table_pb2.py +0 -0
  227. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/table_pb2.pyi +0 -0
  228. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/table_pb2_grpc.py +0 -0
  229. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/orm/v1/table_pb2_grpc.pyi +0 -0
  230. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/platform/__init__.py +0 -0
  231. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/platform/v1/__init__.py +0 -0
  232. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/platform/v1/platform_pb2.py +0 -0
  233. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/platform/v1/platform_pb2.pyi +0 -0
  234. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/platform/v1/platform_pb2_grpc.py +0 -0
  235. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/platform/v1/platform_pb2_grpc.pyi +0 -0
  236. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/query/__init__.py +0 -0
  237. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/query/v1/__init__.py +0 -0
  238. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/query/v1/query_pb2.py +0 -0
  239. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/query/v1/query_pb2.pyi +0 -0
  240. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/query/v1/query_pb2_grpc.py +0 -0
  241. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/query/v1/query_pb2_grpc.pyi +0 -0
  242. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/__init__.py +0 -0
  243. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/__init__.py +0 -0
  244. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/event_pb2.py +0 -0
  245. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/event_pb2.pyi +0 -0
  246. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/event_pb2_grpc.py +0 -0
  247. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/event_pb2_grpc.pyi +0 -0
  248. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/service_pb2.py +0 -0
  249. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/service_pb2.pyi +0 -0
  250. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/service_pb2_grpc.py +0 -0
  251. {corvic_engine-0.3.0rc44 → corvic_engine-0.3.0rc46}/python/corvic_generated/status/v1/service_pb2_grpc.pyi +0 -0
@@ -22,7 +22,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
22
22
 
23
23
  [[package]]
24
24
  name = "corvic-engine"
25
- version = "0.3.0-rc.44"
25
+ version = "0.3.0-rc.46"
26
26
  dependencies = [
27
27
  "numpy",
28
28
  "pyo3",
@@ -63,7 +63,7 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
63
63
 
64
64
  [[package]]
65
65
  name = "engine-walk"
66
- version = "0.3.0-rc.44"
66
+ version = "0.3.0-rc.46"
67
67
  dependencies = [
68
68
  "version_check",
69
69
  ]
@@ -172,9 +172,9 @@ dependencies = [
172
172
 
173
173
  [[package]]
174
174
  name = "once_cell"
175
- version = "1.20.2"
175
+ version = "1.20.3"
176
176
  source = "registry+https://github.com/rust-lang/crates.io-index"
177
- checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
177
+ checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
178
178
 
179
179
  [[package]]
180
180
  name = "parking_lot"
@@ -341,9 +341,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
341
341
 
342
342
  [[package]]
343
343
  name = "syn"
344
- version = "2.0.96"
344
+ version = "2.0.98"
345
345
  source = "registry+https://github.com/rust-lang/crates.io-index"
346
- checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80"
346
+ checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
347
347
  dependencies = [
348
348
  "proc-macro2",
349
349
  "quote",
@@ -368,9 +368,9 @@ dependencies = [
368
368
 
369
369
  [[package]]
370
370
  name = "unicode-ident"
371
- version = "1.0.15"
371
+ version = "1.0.16"
372
372
  source = "registry+https://github.com/rust-lang/crates.io-index"
373
- checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243"
373
+ checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034"
374
374
 
375
375
  [[package]]
376
376
  name = "unindent"
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.0-rc.44"
6
+ version = "0.3.0-rc.46"
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.0rc44
3
+ Version: 0.3.0rc46
4
4
  Classifier: Environment :: Console
5
5
  Classifier: License :: Other/Proprietary License
6
6
  Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -20,7 +20,7 @@ authors = [
20
20
  ]
21
21
  readme = "README.md"
22
22
  description = "Seamless embedding generation and retrieval."
23
- version = "0.3.0-rc.44" # sync this with tool.poetry.version below
23
+ version = "0.3.0-rc.46" # sync this with tool.poetry.version below
24
24
 
25
25
  # TODO(ddn): Pull dependencies from tool.poetry.dependencies. We use maturin as
26
26
  # the build system but poetry for the development environment.
@@ -74,7 +74,7 @@ packages = [
74
74
  ]
75
75
  description = ""
76
76
  authors = []
77
- version = "0.3.0-rc.44"
77
+ version = "0.3.0-rc.46"
78
78
 
79
79
  [tool.poetry.scripts]
80
80
  check = "corvic_check.cli:main"
@@ -2,7 +2,7 @@
2
2
 
3
3
  import corvic.model._feature_type as feature_type
4
4
  from corvic.model._agent import Agent, AgentID
5
- from corvic.model._base_model import BaseModel
5
+ from corvic.model._base_model import BaseModel, HasProtoSelf, UsesOrmID
6
6
  from corvic.model._completion_model import (
7
7
  CompletionModel,
8
8
  CompletionModelID,
@@ -47,7 +47,9 @@ from corvic.model._space import (
47
47
  SemanticSpace,
48
48
  Space,
49
49
  SpecificSpace,
50
+ SpecificSpaceParameters,
50
51
  TabularSpace,
52
+ UnknownSpace,
51
53
  embedding_model_proto_to_name,
52
54
  image_model_proto_to_name,
53
55
  )
@@ -70,6 +72,7 @@ __all__ = [
70
72
  "FeatureView",
71
73
  "FeatureViewEdgeTableMetadata",
72
74
  "FeatureViewRelationshipsMetadata",
75
+ "HasProtoSelf",
73
76
  "ImageSpace",
74
77
  "Node2VecParameters",
75
78
  "OcrPdfsPipeline",
@@ -87,9 +90,12 @@ __all__ = [
87
90
  "Space",
88
91
  "SpecificPipeline",
89
92
  "SpecificSpace",
93
+ "SpecificSpaceParameters",
90
94
  "TabularSpace",
91
95
  "UNCOMMITTED_ID_PREFIX",
92
96
  "UnknownTransformationPipeline",
97
+ "UnknownSpace",
98
+ "UsesOrmID",
93
99
  "embedding_model_proto_to_name",
94
100
  "feature_type",
95
101
  "image_model_proto_to_name",
@@ -5,7 +5,7 @@ import datetime
5
5
  import functools
6
6
  import uuid
7
7
  from collections.abc import Callable, Iterable, Iterator, Sequence
8
- from typing import Any, Final, Generic, Protocol, TypeVar
8
+ from typing import Final, Generic, Protocol, TypeVar
9
9
 
10
10
  import sqlalchemy as sa
11
11
  import sqlalchemy.orm as sa_orm
@@ -14,7 +14,7 @@ from google.protobuf import timestamp_pb2
14
14
  from typing_extensions import Self
15
15
 
16
16
  from corvic import orm, system
17
- from corvic.model._proto_orm_convert import UNCOMMITTED_ID_PREFIX
17
+ from corvic.model._proto_orm_convert import ID, UNCOMMITTED_ID_PREFIX, OrmObj
18
18
  from corvic.result import InvalidArgumentError, NotFoundError, Ok
19
19
 
20
20
  _logger = structlog.get_logger()
@@ -26,21 +26,6 @@ class _ModelProto(Protocol):
26
26
 
27
27
 
28
28
  _ProtoObj = TypeVar("_ProtoObj", bound=_ModelProto)
29
- _ID = TypeVar("_ID", bound=orm.BaseID[Any])
30
-
31
-
32
- class _OrmModel(Protocol[_ID]):
33
- id: sa_orm.Mapped[_ID | None]
34
-
35
- @sa.ext.hybrid.hybrid_property
36
- def created_at(self) -> datetime.datetime | None: ...
37
-
38
- @created_at.inplace.expression
39
- @classmethod
40
- def _created_at_expression(cls): ...
41
-
42
-
43
- _OrmObj = TypeVar("_OrmObj", bound=_OrmModel[Any])
44
29
 
45
30
 
46
31
  def _generate_uncommitted_id_str():
@@ -58,55 +43,63 @@ def _create_or_join_session(
58
43
  yield session
59
44
 
60
45
 
61
- class BaseModel(Generic[_ID, _ProtoObj, _OrmObj], abc.ABC):
62
- """Base for orm wrappers providing a unified update mechanism."""
63
-
46
+ class HasProtoSelf(Generic[_ProtoObj], abc.ABC):
64
47
  client: Final[system.Client]
65
48
  proto_self: Final[_ProtoObj]
66
49
 
67
50
  def __init__(self, client: system.Client, proto_self: _ProtoObj):
68
- if not proto_self.id:
69
- proto_self.id = _generate_uncommitted_id_str()
70
51
  self.proto_self = proto_self
71
52
  self.client = client
72
53
 
54
+ @property
55
+ def created_at(self) -> datetime.datetime | None:
56
+ if self.proto_self.created_at:
57
+ return self.proto_self.created_at.ToDatetime(tzinfo=datetime.timezone.utc)
58
+ return None
59
+
60
+
61
+ class UsesOrmID(Generic[ID, _ProtoObj], HasProtoSelf[_ProtoObj]):
62
+ def __init__(self, client: system.Client, proto_self: _ProtoObj):
63
+ if not proto_self.id:
64
+ proto_self.id = _generate_uncommitted_id_str()
65
+ super().__init__(client, proto_self)
66
+
73
67
  @classmethod
74
68
  @abc.abstractmethod
75
- def orm_class(cls) -> type[_OrmObj]: ...
69
+ def id_class(cls) -> type[ID]: ...
70
+
71
+ @functools.cached_property
72
+ def id(self) -> ID:
73
+ return self.id_class().from_str(self.proto_self.id)
74
+
75
+
76
+ class BaseModel(Generic[ID, _ProtoObj, OrmObj], UsesOrmID[ID, _ProtoObj]):
77
+ """Base for orm wrappers providing a unified update mechanism."""
76
78
 
77
79
  @classmethod
78
80
  @abc.abstractmethod
79
- def id_class(cls) -> type[_ID]: ...
81
+ def orm_class(cls) -> type[OrmObj]: ...
80
82
 
81
83
  @classmethod
82
84
  @abc.abstractmethod
83
- def orm_to_proto(cls, orm_obj: _OrmObj) -> _ProtoObj: ...
85
+ def orm_to_proto(cls, orm_obj: OrmObj) -> _ProtoObj: ...
84
86
 
85
87
  @classmethod
86
88
  @abc.abstractmethod
87
89
  def proto_to_orm(
88
90
  cls, proto_obj: _ProtoObj, session: orm.Session
89
- ) -> Ok[_OrmObj] | InvalidArgumentError: ...
91
+ ) -> Ok[OrmObj] | InvalidArgumentError: ...
92
+
90
93
  @classmethod
91
94
  @abc.abstractmethod
92
95
  def delete_by_ids(
93
- cls, ids: Sequence[_ID], session: orm.Session
96
+ cls, ids: Sequence[ID], session: orm.Session
94
97
  ) -> Ok[None] | InvalidArgumentError: ...
95
98
 
96
- @functools.cached_property
97
- def id(self) -> _ID:
98
- return self.id_class().from_str(self.proto_self.id)
99
-
100
- @property
101
- def created_at(self) -> datetime.datetime | None:
102
- if self.proto_self.created_at:
103
- return self.proto_self.created_at.ToDatetime(tzinfo=datetime.timezone.utc)
104
- return None
105
-
106
99
  @classmethod
107
100
  def load_proto_for(
108
101
  cls,
109
- obj_id: _ID,
102
+ obj_id: ID,
110
103
  client: system.Client,
111
104
  existing_session: sa_orm.Session | None = None,
112
105
  ) -> Ok[_ProtoObj] | NotFoundError:
@@ -120,8 +113,8 @@ class BaseModel(Generic[_ID, _ProtoObj, _OrmObj], abc.ABC):
120
113
 
121
114
  @classmethod
122
115
  def _generate_query_results(
123
- cls, query: sa.Select[tuple[_OrmObj]], session: sa_orm.Session
124
- ) -> Iterator[_OrmObj]:
116
+ cls, query: sa.Select[tuple[OrmObj]], session: sa_orm.Session
117
+ ) -> Iterator[OrmObj]:
125
118
  it = iter(session.scalars(query))
126
119
  while True:
127
120
  try:
@@ -147,9 +140,9 @@ class BaseModel(Generic[_ID, _ProtoObj, _OrmObj], abc.ABC):
147
140
  limit: int | None = None,
148
141
  room_id: orm.RoomID | None = None,
149
142
  created_before: datetime.datetime | None = None,
150
- ids: Iterable[_ID] | None = None,
143
+ ids: Iterable[ID] | None = None,
151
144
  additional_query_transform: Callable[
152
- [sa.Select[tuple[_OrmObj]]], sa.Select[tuple[_OrmObj]]
145
+ [sa.Select[tuple[OrmObj]]], sa.Select[tuple[OrmObj]]
153
146
  ]
154
147
  | None = None,
155
148
  existing_session: sa_orm.Session | None = None,
@@ -18,15 +18,12 @@ from sqlalchemy.orm.interfaces import LoaderOption
18
18
  from typing_extensions import Self
19
19
 
20
20
  from corvic import op_graph, orm, system
21
- from corvic.model._base_model import BaseModel
21
+ from corvic.model._base_model import BaseModel, UsesOrmID
22
22
  from corvic.model._defaults import Defaults
23
23
  from corvic.model._proto_orm_convert import (
24
24
  feature_view_delete_orms,
25
25
  feature_view_orm_to_proto,
26
26
  feature_view_proto_to_orm,
27
- feature_view_source_delete_orms,
28
- feature_view_source_orm_to_proto,
29
- feature_view_source_proto_to_orm,
30
27
  )
31
28
  from corvic.model._source import Source, SourceID
32
29
  from corvic.result import InvalidArgumentError, NotFoundError, Ok
@@ -541,36 +538,31 @@ class RelationshipPath:
541
538
  return f"end-{uuid.uuid4()}"
542
539
 
543
540
 
544
- class FeatureViewSource(
545
- BaseModel[FeatureViewSourceID, models_pb2.FeatureViewSource, orm.FeatureViewSource]
546
- ):
541
+ class FeatureViewSource(UsesOrmID[FeatureViewSourceID, models_pb2.FeatureViewSource]):
547
542
  """A table from a source with some extra operations defined by a feature view."""
548
543
 
549
- @classmethod
550
- def orm_class(cls):
551
- return orm.FeatureViewSource
552
-
553
544
  @classmethod
554
545
  def id_class(cls):
555
546
  return FeatureViewSourceID
556
547
 
557
548
  @classmethod
558
- def orm_to_proto(
559
- cls, orm_obj: orm.FeatureViewSource
560
- ) -> models_pb2.FeatureViewSource:
561
- return feature_view_source_orm_to_proto(orm_obj)
562
-
563
- @classmethod
564
- def proto_to_orm(
565
- cls, proto_obj: models_pb2.FeatureViewSource, session: orm.Session
566
- ) -> Ok[orm.FeatureViewSource] | InvalidArgumentError:
567
- return feature_view_source_proto_to_orm(proto_obj, session)
568
-
569
- @classmethod
570
- def delete_by_ids(
571
- cls, ids: Sequence[FeatureViewSourceID], session: orm.Session
572
- ) -> Ok[None] | InvalidArgumentError:
573
- return feature_view_source_delete_orms(ids, session)
549
+ def create(
550
+ cls,
551
+ table: Table,
552
+ source: Source,
553
+ *,
554
+ drop_disconnected: bool,
555
+ room_id: orm.RoomID,
556
+ ):
557
+ return cls(
558
+ source.client,
559
+ models_pb2.FeatureViewSource(
560
+ source=source.proto_self,
561
+ table_op_graph=table.op_graph.to_proto(),
562
+ drop_disconnected=drop_disconnected,
563
+ room_id=str(room_id),
564
+ ),
565
+ )
574
566
 
575
567
  def with_table(self, table: Table | op_graph.Op) -> FeatureViewSource:
576
568
  if isinstance(table, Table):
@@ -713,12 +705,8 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
713
705
  return [
714
706
  sa_orm.selectinload(orm.FeatureView.feature_view_sources)
715
707
  .selectinload(orm.FeatureViewSource.source)
716
- .selectinload(orm.Source.resource_associations)
717
- .selectinload(orm.SourceResourceAssociation.resource),
718
- sa_orm.selectinload(orm.FeatureView.feature_view_sources)
719
- .selectinload(orm.FeatureViewSource.source)
720
- .selectinload(orm.Source.pipeline_output_refs)
721
- .selectinload(orm.PipelineOutput.pipeline),
708
+ .selectinload(orm.Source.pipeline_ref)
709
+ .selectinload(orm.PipelineOutput.source)
722
710
  ]
723
711
 
724
712
  @classmethod
@@ -775,12 +763,19 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
775
763
  ]
776
764
 
777
765
  @functools.cached_property
778
- def output_sources(self) -> set[SourceID]:
766
+ def output_source_ids(self) -> set[SourceID]:
779
767
  return {
780
768
  SourceID(output_source.source_id)
781
769
  for output_source in self.proto_self.feature_view_output.output_sources
782
770
  }
783
771
 
772
+ @functools.cached_property
773
+ def output_sources(self) -> Sequence[Source]:
774
+ return [
775
+ self.source_id_to_feature_view_source[source_id].source
776
+ for source_id in self.output_source_ids
777
+ ]
778
+
784
779
  @functools.cached_property
785
780
  def source_id_to_feature_view_source(self) -> Mapping[SourceID, FeatureViewSource]:
786
781
  return {fvs.source.id: fvs for fvs in self.feature_view_sources}
@@ -846,7 +841,7 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
846
841
  paths_between_outputs = list(
847
842
  flatten(
848
843
  self._calculate_paths_to_outputs(output, self.relationships)
849
- for output in self.output_sources
844
+ for output in self.output_source_ids
850
845
  )
851
846
  )
852
847
  return [RelationshipPath(path) for path in paths_between_outputs]
@@ -857,7 +852,7 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
857
852
  paths: list[list[Relationship]] = []
858
853
  for rel in rels:
859
854
  if rel.start_source.id == output:
860
- if rel.end_source.id in self.output_sources:
855
+ if rel.end_source.id in self.output_source_ids:
861
856
  paths.append([rel])
862
857
  else:
863
858
  child_paths = self._calculate_paths_to_outputs(
@@ -944,7 +939,7 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
944
939
  )
945
940
  node_tables = {
946
941
  source_id: self.source_id_to_feature_view_source[source_id].table
947
- for source_id in self.output_sources
942
+ for source_id in self.output_source_ids
948
943
  }
949
944
  node_id_columns = _validate_deepgnn_nodes(node_tables).unwrap_or_raise()
950
945
 
@@ -1034,6 +1029,11 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
1034
1029
  new_proto_self.name = name
1035
1030
  return self.__class__(self.client, proto_self=new_proto_self)
1036
1031
 
1032
+ def with_description(self, description: str) -> Self:
1033
+ new_proto_self = copy.deepcopy(self.proto_self)
1034
+ new_proto_self.description = description
1035
+ return self.__class__(self.client, proto_self=new_proto_self)
1036
+
1037
1037
  def with_source(
1038
1038
  self,
1039
1039
  source: SourceID | Source,
@@ -1074,15 +1074,15 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
1074
1074
  FeatureViewSourceColumnRenames(column_renames=renames)
1075
1075
  )
1076
1076
 
1077
- proto_feature_view_source = models_pb2.FeatureViewSource(
1078
- room_id=str(source.room_id),
1079
- table_op_graph=new_table.op_graph.to_proto(),
1077
+ fvs = FeatureViewSource.create(
1078
+ room_id=source.room_id,
1079
+ table=new_table,
1080
1080
  drop_disconnected=drop_disconnected,
1081
- source=source.proto_self,
1081
+ source=source,
1082
1082
  )
1083
1083
 
1084
1084
  new_proto_self = copy.deepcopy(self.proto_self)
1085
- new_proto_self.feature_view_sources.append(proto_feature_view_source)
1085
+ new_proto_self.feature_view_sources.append(fvs.proto_self)
1086
1086
 
1087
1087
  if output:
1088
1088
  primary_key = source.table.schema.get_primary_key()
@@ -1336,7 +1336,7 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
1336
1336
  del new_proto_self.feature_view_sources[:]
1337
1337
 
1338
1338
  for fvs in self.feature_view_sources:
1339
- if fvs.source.id in self.output_sources:
1339
+ if fvs.source.id in self.output_source_ids:
1340
1340
  row_id_column = f"row-id-{uuid.uuid4()}"
1341
1341
  # TODO(Patrick): make row ids stable
1342
1342
  new_fvs = fvs.with_table(
@@ -124,22 +124,10 @@ class Pipeline(BaseModel[PipelineID, models_pb2.Pipeline, orm.Pipeline]):
124
124
  return [
125
125
  sa_orm.selectinload(orm.Pipeline.inputs)
126
126
  .selectinload(orm.PipelineInput.resource)
127
- .selectinload(orm.Resource.source_associations),
128
- sa_orm.selectinload(orm.Pipeline.inputs)
129
- .selectinload(orm.PipelineInput.resource)
130
- .selectinload(orm.Resource.pipeline_input_refs),
131
- sa_orm.selectinload(orm.Pipeline.inputs).selectinload(
132
- orm.PipelineInput.pipeline
133
- ),
134
- sa_orm.selectinload(orm.Pipeline.outputs).selectinload(
135
- orm.PipelineOutput.pipeline
136
- ),
137
- sa_orm.selectinload(orm.Pipeline.outputs)
138
- .selectinload(orm.PipelineOutput.source)
139
- .selectinload(orm.Source.resource_associations),
127
+ .selectinload(orm.Resource.pipeline_ref),
140
128
  sa_orm.selectinload(orm.Pipeline.outputs)
141
129
  .selectinload(orm.PipelineOutput.source)
142
- .selectinload(orm.Source.pipeline_output_refs),
130
+ .selectinload(orm.Source.pipeline_ref),
143
131
  ]
144
132
 
145
133
  @classmethod