corvic-engine 0.3.0rc54__tar.gz → 0.3.0rc56__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.0rc54 → corvic_engine-0.3.0rc56}/Cargo.lock +2 -2
  2. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/Cargo.toml +1 -1
  3. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/PKG-INFO +1 -1
  4. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/pyproject.toml +4 -3
  5. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/embed/node2vec.py +2 -2
  6. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/__init__.py +25 -1
  7. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_agent.py +2 -6
  8. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_base_model.py +43 -21
  9. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_completion_model.py +22 -6
  10. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_feature_view.py +4 -6
  11. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_pipeline.py +2 -6
  12. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_proto_orm_convert.py +127 -164
  13. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_resource.py +2 -6
  14. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_room.py +2 -2
  15. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_source.py +10 -6
  16. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_space.py +35 -8
  17. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/encoders.py +48 -1
  18. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/__init__.py +29 -16
  19. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/base.py +1 -1
  20. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/in_memory_executor.py +151 -7
  21. corvic_engine-0.3.0rc56/python/corvic_generated/model/v1alpha/models_pb2.py +54 -0
  22. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/model/v1alpha/models_pb2.pyi +8 -4
  23. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/table_pb2.py +89 -85
  24. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/table_pb2.pyi +14 -2
  25. corvic_engine-0.3.0rc54/python/corvic_generated/model/v1alpha/models_pb2.py +0 -54
  26. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/LICENSE +0 -0
  27. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/README.md +0 -0
  28. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/Cargo.toml +0 -0
  29. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/expression_pb2.py +0 -0
  30. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/expression_pb2.pyi +0 -0
  31. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/expression_pb2_grpc.py +0 -0
  32. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/expression_pb2_grpc.pyi +0 -0
  33. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/priv/private_pb2.py +0 -0
  34. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/priv/private_pb2.pyi +0 -0
  35. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/priv/private_pb2_grpc.py +0 -0
  36. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/priv/private_pb2_grpc.pyi +0 -0
  37. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/validate_pb2.py +0 -0
  38. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/validate_pb2.pyi +0 -0
  39. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/validate_pb2_grpc.py +0 -0
  40. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/buf/validate/validate_pb2_grpc.pyi +0 -0
  41. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/context/__init__.py +0 -0
  42. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/context/py.typed +0 -0
  43. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/embed/__init__.py +0 -0
  44. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/embed/py.typed +0 -0
  45. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/embedding_metric/__init__.py +0 -0
  46. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/embedding_metric/embeddings.py +0 -0
  47. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/embedding_metric/py.typed +0 -0
  48. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/engine/__init__.py +0 -0
  49. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/engine/_native.pyi +0 -0
  50. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/engine/py.typed +0 -0
  51. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_defaults.py +0 -0
  52. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_errors.py +0 -0
  53. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/_feature_type.py +0 -0
  54. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/model/py.typed +0 -0
  55. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/__init__.py +0 -0
  56. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/_schema.py +0 -0
  57. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/_transformations.py +0 -0
  58. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/aggregation.py +0 -0
  59. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/errors.py +0 -0
  60. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/feature_types.py +0 -0
  61. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/ops.py +0 -0
  62. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/py.typed +0 -0
  63. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/row_filters/__init__.py +0 -0
  64. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/row_filters/_jsonlogic.py +0 -0
  65. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/row_filters/_row_filters.py +0 -0
  66. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/op_graph/sample_strategy.py +0 -0
  67. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/_proto_columns.py +0 -0
  68. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/errors.py +0 -0
  69. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/func/__init__.py +0 -0
  70. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/func/utc_func.py +0 -0
  71. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/func/uuid_func.py +0 -0
  72. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/ids.py +0 -0
  73. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/keys.py +0 -0
  74. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/mixins.py +0 -0
  75. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/orm/py.typed +0 -0
  76. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/pa_scalar/__init__.py +0 -0
  77. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/pa_scalar/_const.py +0 -0
  78. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/pa_scalar/_from_value.py +0 -0
  79. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/pa_scalar/_temporal.py +0 -0
  80. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/pa_scalar/_to_value.py +0 -0
  81. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/pa_scalar/_types.py +0 -0
  82. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/pa_scalar/py.typed +0 -0
  83. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/proto_wrapper/__init__.py +0 -0
  84. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/proto_wrapper/_errors.py +0 -0
  85. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/proto_wrapper/_wrappers.py +0 -0
  86. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/proto_wrapper/py.typed +0 -0
  87. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/result/__init__.py +0 -0
  88. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/result/py.typed +0 -0
  89. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/sql/__init__.py +0 -0
  90. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/sql/parse_ops.py +0 -0
  91. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/sql/py.typed +0 -0
  92. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/__init__.py +0 -0
  93. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/_dimension_reduction.py +0 -0
  94. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/_embedder.py +0 -0
  95. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/_image_embedder.py +0 -0
  96. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/_planner.py +0 -0
  97. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/_text_embedder.py +0 -0
  98. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/client.py +0 -0
  99. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/op_graph_executor.py +0 -0
  100. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/py.typed +0 -0
  101. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/staging.py +0 -0
  102. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system/storage.py +0 -0
  103. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system_sqlite/__init__.py +0 -0
  104. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system_sqlite/client.py +0 -0
  105. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system_sqlite/fs_blob_store.py +0 -0
  106. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system_sqlite/py.typed +0 -0
  107. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system_sqlite/rdbms_blob_store.py +0 -0
  108. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/system_sqlite/staging.py +0 -0
  109. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/table/__init__.py +0 -0
  110. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/table/py.typed +0 -0
  111. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/table/table.py +0 -0
  112. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/version/__init__.py +0 -0
  113. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/version/py.typed +0 -0
  114. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/well_known_types/__init__.py +0 -0
  115. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic/well_known_types/py.typed +0 -0
  116. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/__init__.py +0 -0
  117. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/algorithm/__init__.py +0 -0
  118. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/algorithm/graph/__init__.py +0 -0
  119. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/algorithm/graph/v1/__init__.py +0 -0
  120. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/algorithm/graph/v1/graph_pb2.py +0 -0
  121. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/algorithm/graph/v1/graph_pb2.pyi +0 -0
  122. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.py +0 -0
  123. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.pyi +0 -0
  124. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/chat/__init__.py +0 -0
  125. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/chat/v1/__init__.py +0 -0
  126. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/chat/v1/service_pb2.py +0 -0
  127. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/chat/v1/service_pb2.pyi +0 -0
  128. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/chat/v1/service_pb2_grpc.py +0 -0
  129. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/chat/v1/service_pb2_grpc.pyi +0 -0
  130. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/completion/__init__.py +0 -0
  131. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/completion/v1/__init__.py +0 -0
  132. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/completion/v1/service_pb2.py +0 -0
  133. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/completion/v1/service_pb2.pyi +0 -0
  134. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/completion/v1/service_pb2_grpc.py +0 -0
  135. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/completion/v1/service_pb2_grpc.pyi +0 -0
  136. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/config/__init__.py +0 -0
  137. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/config/v1/__init__.py +0 -0
  138. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/config/v1/settings_pb2.py +0 -0
  139. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/config/v1/settings_pb2.pyi +0 -0
  140. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/config/v1/settings_pb2_grpc.py +0 -0
  141. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/config/v1/settings_pb2_grpc.pyi +0 -0
  142. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/embedding/__init__.py +0 -0
  143. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/embedding/v1/__init__.py +0 -0
  144. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/embedding/v1/models_pb2.py +0 -0
  145. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/embedding/v1/models_pb2.pyi +0 -0
  146. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/embedding/v1/models_pb2_grpc.py +0 -0
  147. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/embedding/v1/models_pb2_grpc.pyi +0 -0
  148. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/__init__.py +0 -0
  149. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/__init__.py +0 -0
  150. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/experiment_pb2.py +0 -0
  151. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/experiment_pb2.pyi +0 -0
  152. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/experiment_pb2_grpc.py +0 -0
  153. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/experiment_pb2_grpc.pyi +0 -0
  154. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/space_pb2.py +0 -0
  155. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/space_pb2.pyi +0 -0
  156. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/space_pb2_grpc.py +0 -0
  157. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v1/space_pb2_grpc.pyi +0 -0
  158. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/__init__.py +0 -0
  159. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/feature_view_pb2.py +0 -0
  160. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/feature_view_pb2.pyi +0 -0
  161. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.py +0 -0
  162. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.pyi +0 -0
  163. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/space_pb2.py +0 -0
  164. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/space_pb2.pyi +0 -0
  165. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/space_pb2_grpc.py +0 -0
  166. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/feature/v2/space_pb2_grpc.pyi +0 -0
  167. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/__init__.py +0 -0
  168. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v1/__init__.py +0 -0
  169. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v1/service_pb2.py +0 -0
  170. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v1/service_pb2.pyi +0 -0
  171. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v1/service_pb2_grpc.py +0 -0
  172. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v1/service_pb2_grpc.pyi +0 -0
  173. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/__init__.py +0 -0
  174. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/pipeline_pb2.py +0 -0
  175. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/pipeline_pb2.pyi +0 -0
  176. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.py +0 -0
  177. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.pyi +0 -0
  178. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/quick_mode_pb2.py +0 -0
  179. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/quick_mode_pb2.pyi +0 -0
  180. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.py +0 -0
  181. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.pyi +0 -0
  182. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/resource_pb2.py +0 -0
  183. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/resource_pb2.pyi +0 -0
  184. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/resource_pb2_grpc.py +0 -0
  185. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/resource_pb2_grpc.pyi +0 -0
  186. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/room_pb2.py +0 -0
  187. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/room_pb2.pyi +0 -0
  188. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/room_pb2_grpc.py +0 -0
  189. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/room_pb2_grpc.pyi +0 -0
  190. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/source_pb2.py +0 -0
  191. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/source_pb2.pyi +0 -0
  192. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/source_pb2_grpc.py +0 -0
  193. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/source_pb2_grpc.pyi +0 -0
  194. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/table_pb2.py +0 -0
  195. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/table_pb2.pyi +0 -0
  196. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/table_pb2_grpc.py +0 -0
  197. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/ingest/v2/table_pb2_grpc.pyi +0 -0
  198. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/model/__init__.py +0 -0
  199. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/model/v1alpha/__init__.py +0 -0
  200. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/model/v1alpha/models_pb2_grpc.py +0 -0
  201. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/model/v1alpha/models_pb2_grpc.pyi +0 -0
  202. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/__init__.py +0 -0
  203. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/__init__.py +0 -0
  204. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/agent_pb2.py +0 -0
  205. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/agent_pb2.pyi +0 -0
  206. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/agent_pb2_grpc.py +0 -0
  207. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/agent_pb2_grpc.pyi +0 -0
  208. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/common_pb2.py +0 -0
  209. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/common_pb2.pyi +0 -0
  210. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/common_pb2_grpc.py +0 -0
  211. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/common_pb2_grpc.pyi +0 -0
  212. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/completion_model_pb2.py +0 -0
  213. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/completion_model_pb2.pyi +0 -0
  214. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.py +0 -0
  215. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.pyi +0 -0
  216. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/feature_view_pb2.py +0 -0
  217. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/feature_view_pb2.pyi +0 -0
  218. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.py +0 -0
  219. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.pyi +0 -0
  220. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/pipeline_pb2.py +0 -0
  221. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/pipeline_pb2.pyi +0 -0
  222. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.py +0 -0
  223. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.pyi +0 -0
  224. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/space_pb2.py +0 -0
  225. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/space_pb2.pyi +0 -0
  226. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/space_pb2_grpc.py +0 -0
  227. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/space_pb2_grpc.pyi +0 -0
  228. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/table_pb2_grpc.py +0 -0
  229. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/orm/v1/table_pb2_grpc.pyi +0 -0
  230. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/platform/__init__.py +0 -0
  231. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/platform/v1/__init__.py +0 -0
  232. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/platform/v1/platform_pb2.py +0 -0
  233. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/platform/v1/platform_pb2.pyi +0 -0
  234. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/platform/v1/platform_pb2_grpc.py +0 -0
  235. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/platform/v1/platform_pb2_grpc.pyi +0 -0
  236. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/query/__init__.py +0 -0
  237. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/query/v1/__init__.py +0 -0
  238. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/query/v1/query_pb2.py +0 -0
  239. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/query/v1/query_pb2.pyi +0 -0
  240. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/query/v1/query_pb2_grpc.py +0 -0
  241. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/query/v1/query_pb2_grpc.pyi +0 -0
  242. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/__init__.py +0 -0
  243. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/v1/__init__.py +0 -0
  244. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/v1/event_pb2.py +0 -0
  245. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/v1/event_pb2.pyi +0 -0
  246. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/v1/event_pb2_grpc.py +0 -0
  247. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/v1/event_pb2_grpc.pyi +0 -0
  248. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/v1/service_pb2.py +0 -0
  249. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/v1/service_pb2.pyi +0 -0
  250. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/python/corvic_generated/status/v1/service_pb2_grpc.py +0 -0
  251. {corvic_engine-0.3.0rc54 → corvic_engine-0.3.0rc56}/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.54"
25
+ version = "0.3.0-rc.56"
26
26
  dependencies = [
27
27
  "numpy",
28
28
  "pyo3",
@@ -63,7 +63,7 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
63
63
 
64
64
  [[package]]
65
65
  name = "engine-walk"
66
- version = "0.3.0-rc.54"
66
+ version = "0.3.0-rc.56"
67
67
  dependencies = [
68
68
  "version_check",
69
69
  ]
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.0-rc.54"
6
+ version = "0.3.0-rc.56"
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.0rc54
3
+ Version: 0.3.0rc56
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.54" # sync this with tool.poetry.version below
23
+ version = "0.3.0-rc.56" # 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.54"
77
+ version = "0.3.0-rc.56"
78
78
 
79
79
  [tool.poetry.scripts]
80
80
  check = "corvic_check.cli:main"
@@ -95,7 +95,7 @@ cachetools = "^5.3.0"
95
95
  duckdb = "^1.0.0"
96
96
  more-itertools = "^10.2.0"
97
97
  numpy = "^1.26.3"
98
- polars = "^1.9.0"
98
+ polars = "^1.25.2"
99
99
  # buf (which we use to generate protobuf code) doesn't yet have a plugin
100
100
  # that supports patch versions greater than 3.
101
101
  protobuf = ">=4.25.0,<4.25.4"
@@ -335,6 +335,7 @@ known-third-party = ["proto", "rockset"]
335
335
  "pyarrow.parquet" = "pq" # this alias is used in pyarrow examples
336
336
  "sqlalchemy" = "sa" # common way to refer to sqlalchemy
337
337
  "sqlalchemy.orm" = "sa_orm" # shortening to disambiguate from corvic.orm
338
+ "polars.selectors" = "cs" # this alias is used in polars examples
338
339
 
339
340
  [tool.pyright]
340
341
  include = ["python", "tests"]
@@ -176,7 +176,7 @@ class Space:
176
176
  left_on=start_id_column_names,
177
177
  right_on=self._node_ids,
178
178
  how="left",
179
- join_nulls=True,
179
+ nulls_equal=True,
180
180
  )
181
181
  .select(["index"])
182
182
  .rename({"index": "start"})
@@ -187,7 +187,7 @@ class Space:
187
187
  left_on=end_id_column_names,
188
188
  right_on=self._node_ids,
189
189
  how="left",
190
- join_nulls=True,
190
+ nulls_equal=True,
191
191
  )
192
192
  .select(["index"])
193
193
  .rename({"index": "end"})
@@ -2,7 +2,13 @@
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, HasProtoSelf, UsesOrmID
5
+ from corvic.model._base_model import (
6
+ BaseModel,
7
+ BelongsToOrgModel,
8
+ BelongsToRoomModel,
9
+ HasProtoSelf,
10
+ UsesOrmID,
11
+ )
6
12
  from corvic.model._completion_model import (
7
13
  CompletionModel,
8
14
  CompletionModelID,
@@ -25,6 +31,14 @@ from corvic.model._pipeline import (
25
31
  )
26
32
  from corvic.model._proto_orm_convert import (
27
33
  UNCOMMITTED_ID_PREFIX,
34
+ OrmBelongsToOrgObj,
35
+ OrmBelongsToRoomObj,
36
+ OrmObj,
37
+ ProtoBelongsToOrgObj,
38
+ ProtoBelongsToRoomObj,
39
+ ProtoObj,
40
+ add_orm_org_mixin_to_session,
41
+ add_orm_room_mixin_to_session,
28
42
  space_orm_to_proto,
29
43
  timestamp_orm_to_proto,
30
44
  )
@@ -60,6 +74,8 @@ __all__ = [
60
74
  "Agent",
61
75
  "AgentID",
62
76
  "BaseModel",
77
+ "BelongsToOrgModel",
78
+ "BelongsToRoomModel",
63
79
  "ChunkPdfsPipeline",
64
80
  "Column",
65
81
  "CompletionModel",
@@ -76,8 +92,14 @@ __all__ = [
76
92
  "ImageSpace",
77
93
  "Node2VecParameters",
78
94
  "OcrPdfsPipeline",
95
+ "OrmObj",
96
+ "OrmBelongsToOrgObj",
97
+ "OrmBelongsToRoomObj",
79
98
  "Pipeline",
80
99
  "PipelineID",
100
+ "ProtoObj",
101
+ "ProtoBelongsToOrgObj",
102
+ "ProtoBelongsToRoomObj",
81
103
  "RelationalSpace",
82
104
  "Resource",
83
105
  "ResourceID",
@@ -96,6 +118,8 @@ __all__ = [
96
118
  "UnknownTransformationPipeline",
97
119
  "UnknownSpace",
98
120
  "UsesOrmID",
121
+ "add_orm_org_mixin_to_session",
122
+ "add_orm_room_mixin_to_session",
99
123
  "embedding_model_proto_to_name",
100
124
  "feature_type",
101
125
  "image_model_proto_to_name",
@@ -10,7 +10,7 @@ from typing import TypeAlias
10
10
  from sqlalchemy import orm as sa_orm
11
11
 
12
12
  from corvic import orm, system
13
- from corvic.model._base_model import BaseModel
13
+ from corvic.model._base_model import BelongsToRoomModel
14
14
  from corvic.model._defaults import Defaults
15
15
  from corvic.model._proto_orm_convert import (
16
16
  agent_delete_orms,
@@ -27,7 +27,7 @@ FeatureViewID: TypeAlias = orm.FeatureViewID
27
27
  AgentID: TypeAlias = orm.AgentID
28
28
 
29
29
 
30
- class Agent(BaseModel[AgentID, models_pb2.Agent, orm.Agent]):
30
+ class Agent(BelongsToRoomModel[AgentID, models_pb2.Agent, orm.Agent]):
31
31
  """A corvic agent represents a named agent that can produce embeddings."""
32
32
 
33
33
  @classmethod
@@ -133,10 +133,6 @@ class Agent(BaseModel[AgentID, models_pb2.Agent, orm.Agent]):
133
133
  def name(self) -> str:
134
134
  return self.proto_self.name
135
135
 
136
- @property
137
- def room_id(self) -> RoomID:
138
- return RoomID(self.proto_self.room_id)
139
-
140
136
  @property
141
137
  def parameters(self) -> AgentParameters:
142
138
  return self.proto_self.agent_parameters
@@ -5,29 +5,29 @@ import datetime
5
5
  import functools
6
6
  import uuid
7
7
  from collections.abc import Callable, Iterable, Iterator, Sequence
8
- from typing import Final, Generic, Protocol, TypeVar
8
+ from typing import Final, Generic
9
9
 
10
10
  import sqlalchemy as sa
11
11
  import sqlalchemy.orm as sa_orm
12
12
  import structlog
13
- from google.protobuf import timestamp_pb2
14
13
  from typing_extensions import Self
15
14
 
16
15
  from corvic import orm, system
17
- from corvic.model._proto_orm_convert import ID, UNCOMMITTED_ID_PREFIX, OrmObj
16
+ from corvic.model._proto_orm_convert import (
17
+ ID,
18
+ UNCOMMITTED_ID_PREFIX,
19
+ OrmBelongsToOrgObj,
20
+ OrmBelongsToRoomObj,
21
+ OrmObj,
22
+ ProtoBelongsToOrgObj,
23
+ ProtoBelongsToRoomObj,
24
+ ProtoObj,
25
+ )
18
26
  from corvic.result import InvalidArgumentError, NotFoundError, Ok
19
27
 
20
28
  _logger = structlog.get_logger()
21
29
 
22
30
 
23
- class _ModelProto(Protocol):
24
- id: str
25
- created_at: timestamp_pb2.Timestamp
26
-
27
-
28
- _ProtoObj = TypeVar("_ProtoObj", bound=_ModelProto)
29
-
30
-
31
31
  def _generate_uncommitted_id_str():
32
32
  return f"{UNCOMMITTED_ID_PREFIX}{uuid.uuid4()}"
33
33
 
@@ -43,11 +43,11 @@ def _create_or_join_session(
43
43
  yield session
44
44
 
45
45
 
46
- class HasProtoSelf(Generic[_ProtoObj], abc.ABC):
46
+ class HasProtoSelf(Generic[ProtoObj], abc.ABC):
47
47
  client: Final[system.Client]
48
- proto_self: Final[_ProtoObj]
48
+ proto_self: Final[ProtoObj]
49
49
 
50
- def __init__(self, client: system.Client, proto_self: _ProtoObj):
50
+ def __init__(self, client: system.Client, proto_self: ProtoObj):
51
51
  self.proto_self = proto_self
52
52
  self.client = client
53
53
 
@@ -58,8 +58,8 @@ class HasProtoSelf(Generic[_ProtoObj], abc.ABC):
58
58
  return None
59
59
 
60
60
 
61
- class UsesOrmID(Generic[ID, _ProtoObj], HasProtoSelf[_ProtoObj]):
62
- def __init__(self, client: system.Client, proto_self: _ProtoObj):
61
+ class UsesOrmID(Generic[ID, ProtoObj], HasProtoSelf[ProtoObj]):
62
+ def __init__(self, client: system.Client, proto_self: ProtoObj):
63
63
  if not proto_self.id:
64
64
  proto_self.id = _generate_uncommitted_id_str()
65
65
  super().__init__(client, proto_self)
@@ -73,7 +73,7 @@ class UsesOrmID(Generic[ID, _ProtoObj], HasProtoSelf[_ProtoObj]):
73
73
  return self.id_class().from_str(self.proto_self.id)
74
74
 
75
75
 
76
- class BaseModel(Generic[ID, _ProtoObj, OrmObj], UsesOrmID[ID, _ProtoObj]):
76
+ class BaseModel(Generic[ID, ProtoObj, OrmObj], UsesOrmID[ID, ProtoObj]):
77
77
  """Base for orm wrappers providing a unified update mechanism."""
78
78
 
79
79
  @classmethod
@@ -82,12 +82,12 @@ class BaseModel(Generic[ID, _ProtoObj, OrmObj], UsesOrmID[ID, _ProtoObj]):
82
82
 
83
83
  @classmethod
84
84
  @abc.abstractmethod
85
- def orm_to_proto(cls, orm_obj: OrmObj) -> _ProtoObj: ...
85
+ def orm_to_proto(cls, orm_obj: OrmObj) -> ProtoObj: ...
86
86
 
87
87
  @classmethod
88
88
  @abc.abstractmethod
89
89
  def proto_to_orm(
90
- cls, proto_obj: _ProtoObj, session: orm.Session
90
+ cls, proto_obj: ProtoObj, session: orm.Session
91
91
  ) -> Ok[OrmObj] | InvalidArgumentError: ...
92
92
 
93
93
  @classmethod
@@ -102,7 +102,7 @@ class BaseModel(Generic[ID, _ProtoObj, OrmObj], UsesOrmID[ID, _ProtoObj]):
102
102
  obj_id: ID,
103
103
  client: system.Client,
104
104
  existing_session: sa_orm.Session | None = None,
105
- ) -> Ok[_ProtoObj] | NotFoundError:
105
+ ) -> Ok[ProtoObj] | NotFoundError:
106
106
  """Create a model object by loading it from the database."""
107
107
  with _create_or_join_session(client, existing_session) as session:
108
108
  orm_self = session.get(cls.orm_class(), obj_id)
@@ -146,7 +146,7 @@ class BaseModel(Generic[ID, _ProtoObj, OrmObj], UsesOrmID[ID, _ProtoObj]):
146
146
  ]
147
147
  | None = None,
148
148
  existing_session: sa_orm.Session | None = None,
149
- ) -> Ok[list[_ProtoObj]] | NotFoundError | InvalidArgumentError:
149
+ ) -> Ok[list[ProtoObj]] | NotFoundError | InvalidArgumentError:
150
150
  """List sources that exist in storage."""
151
151
  orm_class = cls.orm_class()
152
152
  with _create_or_join_session(client, existing_session) as session:
@@ -231,3 +231,25 @@ class BaseModel(Generic[ID, _ProtoObj, OrmObj], UsesOrmID[ID, _ProtoObj]):
231
231
  proto_self=new_proto_self,
232
232
  )
233
233
  )
234
+
235
+
236
+ class BelongsToOrgModel(
237
+ Generic[ID, ProtoBelongsToOrgObj, OrmBelongsToOrgObj],
238
+ BaseModel[ID, ProtoBelongsToOrgObj, OrmBelongsToOrgObj],
239
+ ):
240
+ """Base for orm wrappers with org mixin providing a unified update mechanism."""
241
+
242
+ @property
243
+ def org_id(self) -> orm.OrgID:
244
+ return orm.OrgID().from_str(self.proto_self.org_id)
245
+
246
+
247
+ class BelongsToRoomModel(
248
+ Generic[ID, ProtoBelongsToRoomObj, OrmBelongsToRoomObj],
249
+ BelongsToOrgModel[ID, ProtoBelongsToRoomObj, OrmBelongsToRoomObj],
250
+ ):
251
+ """Base for orm wrappers with room mixin providing a unified update mechanism."""
252
+
253
+ @property
254
+ def room_id(self) -> orm.RoomID:
255
+ return orm.RoomID().from_str(self.proto_self.room_id)
@@ -7,10 +7,11 @@ import datetime
7
7
  from collections.abc import Iterable, Sequence
8
8
  from typing import Literal, TypeAlias
9
9
 
10
+ from google.protobuf import timestamp_pb2
10
11
  from sqlalchemy import orm as sa_orm
11
12
 
12
13
  from corvic import orm, system
13
- from corvic.model._base_model import BaseModel
14
+ from corvic.model._base_model import BelongsToOrgModel
14
15
  from corvic.model._defaults import Defaults
15
16
  from corvic.model._proto_orm_convert import (
16
17
  completion_model_delete_orms,
@@ -24,9 +25,13 @@ from corvic_generated.orm.v1 import completion_model_pb2
24
25
  CompletionModelID: TypeAlias = orm.CompletionModelID
25
26
  OrgID: TypeAlias = orm.OrgID
26
27
 
28
+ UNIX_TIMESTAMP_START_DATETIME = timestamp_pb2.Timestamp(seconds=0, nanos=0)
29
+
27
30
 
28
31
  class CompletionModel(
29
- BaseModel[CompletionModelID, models_pb2.CompletionModel, orm.CompletionModel]
32
+ BelongsToOrgModel[
33
+ CompletionModelID, models_pb2.CompletionModel, orm.CompletionModel
34
+ ]
30
35
  ):
31
36
  """Completion Models."""
32
37
 
@@ -58,10 +63,6 @@ class CompletionModel(
58
63
  def name(self) -> str:
59
64
  return self.proto_self.name
60
65
 
61
- @property
62
- def org_id(self) -> OrgID:
63
- return OrgID(self.proto_self.org_id)
64
-
65
66
  @property
66
67
  def provider(self) -> Literal["openai-generic", "azure-openai"] | None:
67
68
  match self.proto_self.parameters.WhichOneof("params"):
@@ -112,6 +113,14 @@ class CompletionModel(
112
113
  def description(self) -> str:
113
114
  return self.proto_self.description
114
115
 
116
+ @property
117
+ def last_validation_time(self) -> datetime.datetime | None:
118
+ if self.proto_self.last_validation_time != UNIX_TIMESTAMP_START_DATETIME:
119
+ return self.proto_self.last_validation_time.ToDatetime(
120
+ tzinfo=datetime.timezone.utc
121
+ )
122
+ return None
123
+
115
124
  @classmethod
116
125
  def create(
117
126
  cls,
@@ -197,3 +206,10 @@ class CompletionModel(
197
206
  proto_self = copy.deepcopy(self.proto_self)
198
207
  proto_self.secret_api_key = secret_api_key
199
208
  return CompletionModel(self.client, proto_self)
209
+
210
+ def with_last_validation_time(
211
+ self, last_validation_time: datetime.datetime
212
+ ) -> CompletionModel:
213
+ proto_self = copy.deepcopy(self.proto_self)
214
+ proto_self.last_validation_time.FromDatetime(last_validation_time)
215
+ return CompletionModel(self.client, proto_self)
@@ -18,7 +18,7 @@ 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, UsesOrmID
21
+ from corvic.model._base_model import BelongsToRoomModel, UsesOrmID
22
22
  from corvic.model._defaults import Defaults
23
23
  from corvic.model._proto_orm_convert import (
24
24
  feature_view_delete_orms,
@@ -642,7 +642,9 @@ class DeepGnnCsvUrlMetadata(DataclassAsTypedMetadataMixin):
642
642
  output_csv_url: str
643
643
 
644
644
 
645
- class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureView]):
645
+ class FeatureView(
646
+ BelongsToRoomModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureView]
647
+ ):
646
648
  """FeatureViews describe how Sources should be modeled to create a feature space.
647
649
 
648
650
  Example:
@@ -738,10 +740,6 @@ class FeatureView(BaseModel[FeatureViewID, models_pb2.FeatureView, orm.FeatureVi
738
740
  pass
739
741
  return Ok([cls.from_proto(proto, client) for proto in protos])
740
742
 
741
- @property
742
- def room_id(self):
743
- return RoomID(self.proto_self.room_id)
744
-
745
743
  @property
746
744
  def source_ids(self):
747
745
  return [fv_source.source.id for fv_source in self.feature_view_sources]
@@ -15,7 +15,7 @@ from typing_extensions import Self
15
15
 
16
16
  import corvic.table
17
17
  from corvic import op_graph, orm, system
18
- from corvic.model._base_model import BaseModel
18
+ from corvic.model._base_model import BelongsToRoomModel
19
19
  from corvic.model._defaults import Defaults
20
20
  from corvic.model._proto_orm_convert import (
21
21
  pipeline_delete_orms,
@@ -31,7 +31,7 @@ PipelineID: TypeAlias = orm.PipelineID
31
31
  RoomID: TypeAlias = orm.RoomID
32
32
 
33
33
 
34
- class Pipeline(BaseModel[PipelineID, models_pb2.Pipeline, orm.Pipeline]):
34
+ class Pipeline(BelongsToRoomModel[PipelineID, models_pb2.Pipeline, orm.Pipeline]):
35
35
  """Pipelines map resources to sources."""
36
36
 
37
37
  @classmethod
@@ -152,10 +152,6 @@ class Pipeline(BaseModel[PipelineID, models_pb2.Pipeline, orm.Pipeline]):
152
152
  case Ok(protos):
153
153
  return Ok([cls.from_proto(proto, client) for proto in protos])
154
154
 
155
- @property
156
- def room_id(self):
157
- return RoomID(self.proto_self.room_id)
158
-
159
155
  @property
160
156
  def name(self):
161
157
  return self.proto_self.name