corvic-engine 0.3.0rc70__tar.gz → 0.3.0rc71__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 (213) hide show
  1. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/Cargo.lock +2 -2
  2. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/Cargo.toml +1 -1
  3. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/PKG-INFO +1 -1
  4. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/pyproject.toml +5 -6
  5. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/embedding_metric/embeddings.py +2 -2
  6. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/__init__.py +2 -0
  7. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_base_model.py +17 -4
  8. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_completion_model.py +5 -12
  9. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_proto_orm_convert.py +2 -0
  10. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_resource.py +20 -1
  11. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_source.py +0 -2
  12. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/ops.py +5 -3
  13. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/__init__.py +3 -0
  14. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/_embedder.py +19 -13
  15. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/_image_embedder.py +15 -11
  16. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/in_memory_executor.py +8 -2
  17. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system_sqlite/fs_blob_store.py +7 -1
  18. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system_sqlite/staging.py +0 -2
  19. corvic_engine-0.3.0rc71/python/corvic_generated/model/v1alpha/models_pb2.py +51 -0
  20. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/model/v1alpha/models_pb2.pyi +4 -2
  21. corvic_engine-0.3.0rc70/python/corvic_generated/model/v1alpha/models_pb2.py +0 -51
  22. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/LICENSE +0 -0
  23. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/README.md +0 -0
  24. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/Cargo.toml +0 -0
  25. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/buf/validate/validate_pb2.py +0 -0
  26. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/buf/validate/validate_pb2.pyi +0 -0
  27. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/buf/validate/validate_pb2_grpc.py +0 -0
  28. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/buf/validate/validate_pb2_grpc.pyi +0 -0
  29. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/context/__init__.py +0 -0
  30. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/context/py.typed +0 -0
  31. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/embed/__init__.py +0 -0
  32. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/embed/node2vec.py +0 -0
  33. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/embed/py.typed +0 -0
  34. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/embedding_metric/__init__.py +0 -0
  35. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/embedding_metric/py.typed +0 -0
  36. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/engine/__init__.py +0 -0
  37. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/engine/_native.pyi +0 -0
  38. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/engine/py.typed +0 -0
  39. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_defaults.py +0 -0
  40. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_errors.py +0 -0
  41. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_feature_type.py +0 -0
  42. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_feature_view.py +0 -0
  43. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_pipeline.py +0 -0
  44. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_room.py +0 -0
  45. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/_space.py +0 -0
  46. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/model/py.typed +0 -0
  47. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/__init__.py +0 -0
  48. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/_schema.py +0 -0
  49. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/_transformations.py +0 -0
  50. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/aggregation.py +0 -0
  51. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/encoders.py +0 -0
  52. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/errors.py +0 -0
  53. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/feature_types.py +0 -0
  54. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/py.typed +0 -0
  55. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/row_filters/__init__.py +0 -0
  56. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/row_filters/_jsonlogic.py +0 -0
  57. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/row_filters/_row_filters.py +0 -0
  58. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/op_graph/sample_strategy.py +0 -0
  59. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/_proto_columns.py +0 -0
  60. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/base.py +0 -0
  61. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/errors.py +0 -0
  62. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/func/__init__.py +0 -0
  63. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/func/utc_func.py +0 -0
  64. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/func/uuid_func.py +0 -0
  65. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/ids.py +0 -0
  66. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/keys.py +0 -0
  67. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/mixins.py +0 -0
  68. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/orm/py.typed +0 -0
  69. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/pa_scalar/__init__.py +0 -0
  70. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/pa_scalar/_const.py +0 -0
  71. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/pa_scalar/_from_value.py +0 -0
  72. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/pa_scalar/_temporal.py +0 -0
  73. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/pa_scalar/_to_value.py +0 -0
  74. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/pa_scalar/_types.py +0 -0
  75. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/pa_scalar/py.typed +0 -0
  76. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/proto_wrapper/__init__.py +0 -0
  77. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/proto_wrapper/_errors.py +0 -0
  78. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/proto_wrapper/_wrappers.py +0 -0
  79. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/proto_wrapper/py.typed +0 -0
  80. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/result/__init__.py +0 -0
  81. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/result/py.typed +0 -0
  82. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/sql/__init__.py +0 -0
  83. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/sql/parse_ops.py +0 -0
  84. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/sql/py.typed +0 -0
  85. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/__init__.py +0 -0
  86. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/_column_encoding.py +0 -0
  87. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/_dimension_reduction.py +0 -0
  88. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/_planner.py +0 -0
  89. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/_text_embedder.py +0 -0
  90. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/client.py +0 -0
  91. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/op_graph_executor.py +0 -0
  92. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/py.typed +0 -0
  93. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/staging.py +0 -0
  94. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system/storage.py +0 -0
  95. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system_sqlite/__init__.py +0 -0
  96. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system_sqlite/client.py +0 -0
  97. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system_sqlite/py.typed +0 -0
  98. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/system_sqlite/rdbms_blob_store.py +0 -0
  99. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/table/__init__.py +0 -0
  100. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/table/py.typed +0 -0
  101. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/table/table.py +0 -0
  102. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/version/__init__.py +0 -0
  103. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/version/py.typed +0 -0
  104. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/well_known_types/__init__.py +0 -0
  105. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic/well_known_types/py.typed +0 -0
  106. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/__init__.py +0 -0
  107. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/algorithm/__init__.py +0 -0
  108. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/algorithm/graph/__init__.py +0 -0
  109. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/algorithm/graph/v1/__init__.py +0 -0
  110. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/algorithm/graph/v1/graph_pb2.py +0 -0
  111. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/algorithm/graph/v1/graph_pb2.pyi +0 -0
  112. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.py +0 -0
  113. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.pyi +0 -0
  114. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/embedding/__init__.py +0 -0
  115. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/embedding/v1/__init__.py +0 -0
  116. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/embedding/v1/models_pb2.py +0 -0
  117. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/embedding/v1/models_pb2.pyi +0 -0
  118. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/embedding/v1/models_pb2_grpc.py +0 -0
  119. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/embedding/v1/models_pb2_grpc.pyi +0 -0
  120. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/__init__.py +0 -0
  121. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/__init__.py +0 -0
  122. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/experiment_pb2.py +0 -0
  123. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/experiment_pb2.pyi +0 -0
  124. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/experiment_pb2_grpc.py +0 -0
  125. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/experiment_pb2_grpc.pyi +0 -0
  126. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/space_pb2.py +0 -0
  127. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/space_pb2.pyi +0 -0
  128. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/space_pb2_grpc.py +0 -0
  129. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v1/space_pb2_grpc.pyi +0 -0
  130. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/__init__.py +0 -0
  131. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/feature_view_pb2.py +0 -0
  132. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/feature_view_pb2.pyi +0 -0
  133. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.py +0 -0
  134. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.pyi +0 -0
  135. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/space_pb2.py +0 -0
  136. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/space_pb2.pyi +0 -0
  137. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/space_pb2_grpc.py +0 -0
  138. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/feature/v2/space_pb2_grpc.pyi +0 -0
  139. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/__init__.py +0 -0
  140. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v1/__init__.py +0 -0
  141. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v1/service_pb2.py +0 -0
  142. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v1/service_pb2.pyi +0 -0
  143. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v1/service_pb2_grpc.py +0 -0
  144. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v1/service_pb2_grpc.pyi +0 -0
  145. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/__init__.py +0 -0
  146. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/pipeline_pb2.py +0 -0
  147. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/pipeline_pb2.pyi +0 -0
  148. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.py +0 -0
  149. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.pyi +0 -0
  150. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/quick_mode_pb2.py +0 -0
  151. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/quick_mode_pb2.pyi +0 -0
  152. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.py +0 -0
  153. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.pyi +0 -0
  154. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/resource_pb2.py +0 -0
  155. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/resource_pb2.pyi +0 -0
  156. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/resource_pb2_grpc.py +0 -0
  157. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/resource_pb2_grpc.pyi +0 -0
  158. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/room_pb2.py +0 -0
  159. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/room_pb2.pyi +0 -0
  160. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/room_pb2_grpc.py +0 -0
  161. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/room_pb2_grpc.pyi +0 -0
  162. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/source_pb2.py +0 -0
  163. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/source_pb2.pyi +0 -0
  164. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/source_pb2_grpc.py +0 -0
  165. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/source_pb2_grpc.pyi +0 -0
  166. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/table_pb2.py +0 -0
  167. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/table_pb2.pyi +0 -0
  168. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/table_pb2_grpc.py +0 -0
  169. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/ingest/v2/table_pb2_grpc.pyi +0 -0
  170. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/model/__init__.py +0 -0
  171. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/model/v1alpha/__init__.py +0 -0
  172. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/model/v1alpha/models_pb2_grpc.py +0 -0
  173. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/model/v1alpha/models_pb2_grpc.pyi +0 -0
  174. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/__init__.py +0 -0
  175. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/__init__.py +0 -0
  176. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/agent_pb2.py +0 -0
  177. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/agent_pb2.pyi +0 -0
  178. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/agent_pb2_grpc.py +0 -0
  179. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/agent_pb2_grpc.pyi +0 -0
  180. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/common_pb2.py +0 -0
  181. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/common_pb2.pyi +0 -0
  182. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/common_pb2_grpc.py +0 -0
  183. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/common_pb2_grpc.pyi +0 -0
  184. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/completion_model_pb2.py +0 -0
  185. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/completion_model_pb2.pyi +0 -0
  186. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.py +0 -0
  187. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.pyi +0 -0
  188. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/feature_view_pb2.py +0 -0
  189. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/feature_view_pb2.pyi +0 -0
  190. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.py +0 -0
  191. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.pyi +0 -0
  192. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/pipeline_pb2.py +0 -0
  193. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/pipeline_pb2.pyi +0 -0
  194. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.py +0 -0
  195. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.pyi +0 -0
  196. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/space_pb2.py +0 -0
  197. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/space_pb2.pyi +0 -0
  198. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/space_pb2_grpc.py +0 -0
  199. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/space_pb2_grpc.pyi +0 -0
  200. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/table_pb2.py +0 -0
  201. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/table_pb2.pyi +0 -0
  202. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/table_pb2_grpc.py +0 -0
  203. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/orm/v1/table_pb2_grpc.pyi +0 -0
  204. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/__init__.py +0 -0
  205. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/__init__.py +0 -0
  206. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/event_pb2.py +0 -0
  207. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/event_pb2.pyi +0 -0
  208. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/event_pb2_grpc.py +0 -0
  209. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/event_pb2_grpc.pyi +0 -0
  210. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/service_pb2.py +0 -0
  211. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/service_pb2.pyi +0 -0
  212. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/service_pb2_grpc.py +0 -0
  213. {corvic_engine-0.3.0rc70 → corvic_engine-0.3.0rc71}/python/corvic_generated/status/v1/service_pb2_grpc.pyi +0 -0
@@ -16,7 +16,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
16
16
 
17
17
  [[package]]
18
18
  name = "corvic-engine"
19
- version = "0.3.0-rc.70"
19
+ version = "0.3.0-rc.71"
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.70"
60
+ version = "0.3.0-rc.71"
61
61
  dependencies = [
62
62
  "version_check",
63
63
  ]
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.0-rc.70"
6
+ version = "0.3.0-rc.71"
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.0rc70
3
+ Version: 0.3.0rc71
4
4
  Classifier: Environment :: Console
5
5
  Classifier: License :: Other/Proprietary License
6
6
  Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -12,14 +12,13 @@ classifiers = [
12
12
  "Programming Language :: Rust",
13
13
  "Topic :: Scientific/Engineering",
14
14
  ]
15
- dynamic = ["version"]
16
15
  license = { file = "LICENSE" }
17
16
  authors = [
18
17
  { name = "Corvic Team", email = "contact@corvic.ai" },
19
18
  ]
20
19
  readme = "README.md"
21
20
  description = "Seamless embedding generation and retrieval."
22
- version = "0.3.0-rc.70" # sync this with tool.poetry.version below
21
+ version = "0.3.0-rc.71" # sync this with tool.poetry.version below
23
22
 
24
23
  # TODO(ddn): Pull dependencies from tool.poetry.dependencies. We use maturin as
25
24
  # the build system but poetry for the development environment.
@@ -73,7 +72,7 @@ packages = [
73
72
  ]
74
73
  description = ""
75
74
  authors = []
76
- version = "0.3.0-rc.70"
75
+ version = "0.3.0-rc.71"
77
76
 
78
77
  [tool.poetry.scripts]
79
78
  check = "corvic_check.cli:main"
@@ -91,7 +90,7 @@ priority = "primary"
91
90
 
92
91
  [tool.poetry.dependencies]
93
92
  cachetools = "^5.3.0"
94
- duckdb = "^1.0.0"
93
+ duckdb = "1.1.3"
95
94
  more-itertools = "^10.2.0"
96
95
  numpy = "^1.26.3"
97
96
  polars = "^1.25.2"
@@ -102,7 +101,7 @@ protovalidate = "^0.7.1"
102
101
  pyarrow = "^17"
103
102
  # Should match build matrix for any native code dependencies (namely pyarrow)
104
103
  python = ">=3.11,<3.13"
105
- sqlalchemy = "^2.0.27"
104
+ sqlalchemy = "2.0.36"
106
105
  # Rust tokenizer for better performances
107
106
  sqlglot = { extras = ["rs"], version = "^25.8.1" }
108
107
  structlog = "^24.1.0"
@@ -162,7 +161,7 @@ torch = [
162
161
  { platform = "linux", version = "^2.7.0", source = "torch-cpu-linux" },
163
162
  { platform = "darwin", version = "^2.7.0", source = "pypi" },
164
163
  ]
165
- transformers = "^4.48.0"
164
+ transformers = "^4.51.3"
166
165
  umap-learn = "^0.5.5"
167
166
  pillow = "10.4.0"
168
167
 
@@ -39,10 +39,10 @@ def norm(
39
39
  *,
40
40
  keepdims: bool = False,
41
41
  ) -> float | NDArray[Any]:
42
- return linalg.norm(
42
+ return linalg.norm( # pyright: ignore[reportReturnType]
43
43
  x=x,
44
44
  ord=order,
45
- axis=axis, # pyright: ignore[reportCallIssue, reportUnknownVariableType, reportArgumentType]
45
+ axis=axis,
46
46
  keepdims=keepdims,
47
47
  )
48
48
 
@@ -7,6 +7,7 @@ from corvic.model._base_model import (
7
7
  BelongsToRoomModel,
8
8
  HasProtoSelf,
9
9
  UsesOrmID,
10
+ non_empty_timestamp_to_datetime,
10
11
  )
11
12
  from corvic.model._completion_model import (
12
13
  CompletionModel,
@@ -120,6 +121,7 @@ __all__ = [
120
121
  "embedding_model_proto_to_name",
121
122
  "feature_type",
122
123
  "image_model_proto_to_name",
124
+ "non_empty_timestamp_to_datetime",
123
125
  "space_orm_to_proto",
124
126
  "timestamp_orm_to_proto",
125
127
  ]
@@ -10,6 +10,7 @@ from typing import Final, Generic, Self
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
13
14
 
14
15
  from corvic import orm, system
15
16
  from corvic.model._proto_orm_convert import (
@@ -26,6 +27,16 @@ from corvic.result import InvalidArgumentError, NotFoundError, Ok
26
27
 
27
28
  _logger = structlog.get_logger()
28
29
 
30
+ _EMPTY_PROTO_TIMESTAMP = timestamp_pb2.Timestamp(seconds=0, nanos=0)
31
+
32
+
33
+ def non_empty_timestamp_to_datetime(
34
+ timestamp: timestamp_pb2.Timestamp,
35
+ ) -> datetime.datetime | None:
36
+ if timestamp != _EMPTY_PROTO_TIMESTAMP:
37
+ return timestamp.ToDatetime(tzinfo=datetime.UTC)
38
+ return None
39
+
29
40
 
30
41
  def _generate_uncommitted_id_str():
31
42
  return f"{UNCOMMITTED_ID_PREFIX}{uuid.uuid4()}"
@@ -52,9 +63,7 @@ class HasProtoSelf(Generic[ProtoObj], abc.ABC):
52
63
 
53
64
  @property
54
65
  def created_at(self) -> datetime.datetime | None:
55
- if self.proto_self.created_at:
56
- return self.proto_self.created_at.ToDatetime(tzinfo=datetime.UTC)
57
- return None
66
+ return non_empty_timestamp_to_datetime(self.proto_self.created_at)
58
67
 
59
68
 
60
69
  class UsesOrmID(Generic[ID, ProtoObj], HasProtoSelf[ProtoObj]):
@@ -75,6 +84,10 @@ class UsesOrmID(Generic[ID, ProtoObj], HasProtoSelf[ProtoObj]):
75
84
  class BaseModel(Generic[ID, ProtoObj, OrmObj], UsesOrmID[ID, ProtoObj]):
76
85
  """Base for orm wrappers providing a unified update mechanism."""
77
86
 
87
+ @property
88
+ def created_at(self) -> datetime.datetime | None:
89
+ return non_empty_timestamp_to_datetime(self.proto_self.created_at)
90
+
78
91
  @classmethod
79
92
  @abc.abstractmethod
80
93
  def orm_class(cls) -> type[OrmObj]: ...
@@ -160,7 +173,7 @@ class BaseModel(Generic[ID, ProtoObj, OrmObj], UsesOrmID[ID, ProtoObj]):
160
173
  query = query.filter_by(room_id=room_id)
161
174
  if created_before:
162
175
  query = query.filter(orm_class.created_at < created_before)
163
- if ids:
176
+ if ids is not None:
164
177
  query = query.filter(orm_class.id.in_(ids))
165
178
  if additional_query_transform:
166
179
  query = additional_query_transform(query)
@@ -7,11 +7,10 @@ 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
11
10
  from sqlalchemy import orm as sa_orm
12
11
 
13
12
  from corvic import orm, system
14
- from corvic.model._base_model import BelongsToOrgModel
13
+ from corvic.model._base_model import BelongsToOrgModel, non_empty_timestamp_to_datetime
15
14
  from corvic.model._defaults import Defaults
16
15
  from corvic.model._proto_orm_convert import (
17
16
  completion_model_delete_orms,
@@ -25,8 +24,6 @@ from corvic_generated.orm.v1 import completion_model_pb2
25
24
  CompletionModelID: TypeAlias = orm.CompletionModelID
26
25
  OrgID: TypeAlias = orm.OrgID
27
26
 
28
- UNIX_TIMESTAMP_START_DATETIME = timestamp_pb2.Timestamp(seconds=0, nanos=0)
29
-
30
27
 
31
28
  class CompletionModel(
32
29
  BelongsToOrgModel[
@@ -115,17 +112,13 @@ class CompletionModel(
115
112
 
116
113
  @property
117
114
  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(tzinfo=datetime.UTC)
120
- return None
115
+ return non_empty_timestamp_to_datetime(self.proto_self.last_validation_time)
121
116
 
122
117
  @property
123
118
  def last_successful_validation(self) -> datetime.datetime | None:
124
- if self.proto_self.last_successful_validation != UNIX_TIMESTAMP_START_DATETIME:
125
- return self.proto_self.last_successful_validation.ToDatetime(
126
- tzinfo=datetime.UTC
127
- )
128
- return None
119
+ return non_empty_timestamp_to_datetime(
120
+ self.proto_self.last_successful_validation
121
+ )
129
122
 
130
123
  @classmethod
131
124
  def create(
@@ -101,6 +101,7 @@ def resource_orm_to_proto(resource_orm: orm.Resource) -> models_pb2.Resource:
101
101
  room_id=str(resource_orm.room_id),
102
102
  org_id=str(resource_orm.org_id),
103
103
  recent_events=[resource_orm.latest_event] if resource_orm.latest_event else [],
104
+ is_terminal=bool(resource_orm.is_terminal),
104
105
  pipeline_id=pipeline_id,
105
106
  pipeline_input_name=pipeline_input_name,
106
107
  created_at=timestamp_orm_to_proto(resource_orm.created_at),
@@ -300,6 +301,7 @@ def resource_proto_to_orm(
300
301
  size=proto_obj.size,
301
302
  original_path=proto_obj.original_path,
302
303
  latest_event=proto_obj.recent_events[-1] if proto_obj.recent_events else None,
304
+ is_terminal=proto_obj.is_terminal,
303
305
  )
304
306
  add_orm_room_mixin_to_session(orm_obj, proto_obj, orm.ResourceID, session)
305
307
 
@@ -98,6 +98,8 @@ class Resource(BelongsToRoomModel[ResourceID, models_pb2.Resource, orm.Resource]
98
98
 
99
99
  @property
100
100
  def is_terminal(self) -> bool:
101
+ if self.proto_self.is_terminal:
102
+ return True
101
103
  if not self.latest_event:
102
104
  return False
103
105
  return self.latest_event.event_type in [
@@ -108,6 +110,10 @@ class Resource(BelongsToRoomModel[ResourceID, models_pb2.Resource, orm.Resource]
108
110
  def with_event(self, event: event_pb2.Event) -> Resource:
109
111
  new_proto = copy.copy(self.proto_self)
110
112
  new_proto.recent_events.append(event)
113
+ new_proto.is_terminal = event.event_type in [
114
+ event_pb2.EVENT_TYPE_FINISHED,
115
+ event_pb2.EVENT_TYPE_ERROR,
116
+ ]
111
117
  return Resource(self.client, proto_self=new_proto)
112
118
 
113
119
  @classmethod
@@ -119,7 +125,7 @@ class Resource(BelongsToRoomModel[ResourceID, models_pb2.Resource, orm.Resource]
119
125
  ]
120
126
 
121
127
  @classmethod
122
- def list(
128
+ def list( # noqa: PLR0913
123
129
  cls,
124
130
  *,
125
131
  room_id: RoomID | None = None,
@@ -128,6 +134,7 @@ class Resource(BelongsToRoomModel[ResourceID, models_pb2.Resource, orm.Resource]
128
134
  created_before: datetime.datetime | None = None,
129
135
  client: system.Client | None = None,
130
136
  ids: Iterable[ResourceID] | None = None,
137
+ is_terminal: bool | None = None,
131
138
  existing_session: sa_orm.Session | None = None,
132
139
  url: str | None = None,
133
140
  ) -> Ok[list[Resource]] | NotFoundError | InvalidArgumentError:
@@ -145,6 +152,18 @@ class Resource(BelongsToRoomModel[ResourceID, models_pb2.Resource, orm.Resource]
145
152
  )
146
153
  )
147
154
  )
155
+ match is_terminal:
156
+ case True:
157
+ query = query.where(orm.Resource.is_terminal.is_(True))
158
+ case False:
159
+ query = query.where(
160
+ sa.or_(
161
+ orm.Resource.is_terminal.is_(False),
162
+ orm.Resource.is_terminal.is_(None),
163
+ )
164
+ )
165
+ case None:
166
+ pass
148
167
  return query
149
168
 
150
169
  match cls.list_as_proto(
@@ -278,8 +278,6 @@ class Source(BelongsToRoomModel[SourceID, models_pb2.Source, orm.Source]):
278
278
 
279
279
  @functools.cached_property
280
280
  def prop_table(self):
281
- if self.proto_self.prop_table_op_graph is None:
282
- return None
283
281
  return Table.from_ops(
284
282
  self.client, op_graph.op.from_proto(self.proto_self.prop_table_op_graph)
285
283
  )
@@ -946,7 +946,9 @@ class _Base(OneofProtoWrapper[table_pb2.TableComputeOp], ABC):
946
946
  )
947
947
  )
948
948
 
949
- def rename_columns(self, old_name_to_new: Mapping[str, str]):
949
+ def rename_columns(
950
+ self, old_name_to_new: Mapping[str, str]
951
+ ) -> InvalidArgumentError | Ok[RenameColumns]:
950
952
  match self._check_columns_valid(old_name_to_new):
951
953
  case InvalidArgumentError() as err:
952
954
  return err
@@ -1743,8 +1745,8 @@ class _Base(OneofProtoWrapper[table_pb2.TableComputeOp], ABC):
1743
1745
  sample_strategy: SampleStrategy,
1744
1746
  num_rows: int,
1745
1747
  ):
1746
- if num_rows <= 0:
1747
- return InvalidArgumentError("num_rows must be positive")
1748
+ if num_rows < 0:
1749
+ return InvalidArgumentError("num_rows must be non-negative")
1748
1750
 
1749
1751
  return Ok(
1750
1752
  from_proto(
@@ -126,6 +126,9 @@ class Resource(BelongsToOrgMixin, BelongsToRoomMixin, Base, kw_only=True):
126
126
  latest_event: sa_orm.Mapped[event_pb2.Event | None] = sa_orm.mapped_column(
127
127
  default=None, nullable=True
128
128
  )
129
+ is_terminal: sa_orm.Mapped[bool | None] = sa_orm.mapped_column(
130
+ default=None, nullable=True
131
+ )
129
132
  pipeline_ref: sa_orm.Mapped[PipelineInput | None] = sa_orm.relationship(
130
133
  init=False, viewonly=True
131
134
  )
@@ -2,7 +2,7 @@ import asyncio
2
2
  import dataclasses
3
3
  from collections.abc import Sequence
4
4
  from concurrent.futures import ThreadPoolExecutor
5
- from typing import TYPE_CHECKING, Any, Literal, Protocol
5
+ from typing import TYPE_CHECKING, Any, Literal, Protocol, cast
6
6
 
7
7
  import numpy as np
8
8
  import polars as pl
@@ -11,7 +11,7 @@ from corvic import orm
11
11
  from corvic.result import InternalError, InvalidArgumentError, Ok
12
12
 
13
13
  if TYPE_CHECKING:
14
- from transformers import (
14
+ from transformers.models.clip import (
15
15
  CLIPModel,
16
16
  CLIPProcessor,
17
17
  )
@@ -102,19 +102,22 @@ class ClipText(TextEmbedder):
102
102
  """
103
103
 
104
104
  def _load_models(self):
105
- from transformers import (
105
+ from transformers.models.clip import (
106
106
  CLIPModel,
107
107
  CLIPProcessor,
108
108
  )
109
109
 
110
- model: CLIPModel = CLIPModel.from_pretrained( # pyright: ignore[reportUnknownMemberType]
110
+ model = CLIPModel.from_pretrained( # pyright: ignore[reportUnknownMemberType]
111
111
  pretrained_model_name_or_path="openai/clip-vit-base-patch32",
112
112
  revision="5812e510083bb2d23fa43778a39ac065d205ed4d",
113
113
  )
114
- processor: CLIPProcessor = CLIPProcessor.from_pretrained( # pyright: ignore[reportUnknownMemberType, reportAssignmentType]
115
- pretrained_model_name_or_path="openai/clip-vit-base-patch32",
116
- revision="5812e510083bb2d23fa43778a39ac065d205ed4d",
117
- use_fast=False,
114
+ processor = cast(
115
+ CLIPProcessor,
116
+ CLIPProcessor.from_pretrained( # pyright: ignore[reportUnknownMemberType]
117
+ pretrained_model_name_or_path="openai/clip-vit-base-patch32",
118
+ revision="5812e510083bb2d23fa43778a39ac065d205ed4d",
119
+ use_fast=False,
120
+ ),
118
121
  )
119
122
  return ClipModels(model=model, processor=processor)
120
123
 
@@ -135,14 +138,17 @@ class ClipText(TextEmbedder):
135
138
  import torch
136
139
 
137
140
  with torch.no_grad():
138
- inputs: dict[str, torch.Tensor] = processor( # pyright: ignore[reportAssignmentType]
139
- text=context.inputs,
140
- return_tensors="pt",
141
- padding=True,
141
+ inputs = cast(
142
+ dict[str, torch.Tensor],
143
+ processor(
144
+ text=context.inputs,
145
+ return_tensors="pt",
146
+ padding=True,
147
+ ),
142
148
  )
143
149
  text_features = model.get_text_features(input_ids=inputs["input_ids"])
144
150
 
145
- text_features_numpy: np.ndarray[Any, Any] = text_features.numpy() # pyright: ignore[reportUnknownMemberType]
151
+ text_features_numpy = cast(np.ndarray[Any, Any], text_features.numpy()) # pyright: ignore[reportUnknownMemberType]
146
152
 
147
153
  return Ok(
148
154
  EmbedTextResult(
@@ -2,7 +2,7 @@ import asyncio
2
2
  import dataclasses
3
3
  from concurrent.futures import ThreadPoolExecutor
4
4
  from io import BytesIO
5
- from typing import TYPE_CHECKING, Any
5
+ from typing import TYPE_CHECKING, Any, cast
6
6
 
7
7
  import numpy as np
8
8
  import polars as pl
@@ -16,7 +16,7 @@ from corvic.system._embedder import (
16
16
 
17
17
  if TYPE_CHECKING:
18
18
  from PIL import Image
19
- from transformers import (
19
+ from transformers.models.clip import (
20
20
  CLIPModel,
21
21
  CLIPProcessor,
22
22
  )
@@ -93,19 +93,22 @@ class Clip(ImageEmbedder):
93
93
  """
94
94
 
95
95
  def _load_models(self):
96
- from transformers import (
96
+ from transformers.models.clip import (
97
97
  CLIPModel,
98
98
  CLIPProcessor,
99
99
  )
100
100
 
101
- model: CLIPModel = CLIPModel.from_pretrained( # pyright: ignore[reportUnknownMemberType]
101
+ model = CLIPModel.from_pretrained( # pyright: ignore[reportUnknownMemberType]
102
102
  pretrained_model_name_or_path="openai/clip-vit-base-patch32",
103
103
  revision="5812e510083bb2d23fa43778a39ac065d205ed4d",
104
104
  )
105
- processor: CLIPProcessor = CLIPProcessor.from_pretrained( # pyright: ignore[reportUnknownMemberType, reportAssignmentType]
106
- pretrained_model_name_or_path="openai/clip-vit-base-patch32",
107
- revision="5812e510083bb2d23fa43778a39ac065d205ed4d",
108
- use_fast=False,
105
+ processor = cast(
106
+ CLIPProcessor,
107
+ CLIPProcessor.from_pretrained( # pyright: ignore[reportUnknownMemberType]
108
+ pretrained_model_name_or_path="openai/clip-vit-base-patch32",
109
+ revision="5812e510083bb2d23fa43778a39ac065d205ed4d",
110
+ use_fast=False,
111
+ ),
109
112
  )
110
113
  return ClipModels(model=model, processor=processor)
111
114
 
@@ -146,14 +149,15 @@ class Clip(ImageEmbedder):
146
149
  import torch
147
150
 
148
151
  with torch.no_grad():
149
- inputs: dict[str, torch.FloatTensor] = processor( # pyright: ignore[reportAssignmentType]
150
- images=images, return_tensors="pt"
152
+ inputs = cast(
153
+ dict[str, torch.FloatTensor],
154
+ processor(images=images, return_tensors="pt"),
151
155
  )
152
156
  image_features = model.get_image_features(
153
157
  pixel_values=inputs["pixel_values"]
154
158
  )
155
159
 
156
- image_features_numpy: np.ndarray[Any, Any] = image_features.numpy() # pyright: ignore[reportUnknownMemberType]
160
+ image_features_numpy = cast(np.ndarray[Any, Any], image_features.numpy()) # pyright: ignore[reportUnknownMemberType]
157
161
  return Ok(
158
162
  EmbedImageResult(
159
163
  context=context,
@@ -243,6 +243,12 @@ class _SlicedTable:
243
243
  slice_args: TableSliceArgs | None
244
244
 
245
245
 
246
+ def _default_computed_batches_for_op_graph() -> (
247
+ dict[_SlicedTable, _LazyFrameWithMetrics]
248
+ ):
249
+ return {}
250
+
251
+
246
252
  @dataclasses.dataclass
247
253
  class _InMemoryExecutionContext(AbstractContextManager["_InMemoryExecutionContext"]):
248
254
  exec_context: ExecutionContext
@@ -253,7 +259,7 @@ class _InMemoryExecutionContext(AbstractContextManager["_InMemoryExecutionContex
253
259
  # contract only guarantees one iteration and these might be accessed more than
254
260
  # once
255
261
  computed_batches_for_op_graph: dict[_SlicedTable, _LazyFrameWithMetrics] = (
256
- dataclasses.field(default_factory=dict)
262
+ dataclasses.field(default_factory=_default_computed_batches_for_op_graph)
257
263
  )
258
264
  exit_stack: ExitStack = dataclasses.field(default_factory=ExitStack)
259
265
  lock: asyncio.Lock = dataclasses.field(default_factory=asyncio.Lock)
@@ -1688,7 +1694,7 @@ class InMemoryExecutor(OpGraphExecutor):
1688
1694
  sliced_table in context.output_tables
1689
1695
  or sliced_table in context.reused_tables
1690
1696
  ):
1691
- # collect the lazy frame since it will be re-used to avoid
1697
+ # collect the lazy frame since it will be reused to avoid
1692
1698
  # re-computation
1693
1699
  dataframe = lfm.data.collect()
1694
1700
  lfm = _LazyFrameWithMetrics(dataframe.lazy(), lfm.metrics)
@@ -42,11 +42,17 @@ def _signed_url_to_bucket_blob(url: str) -> tuple[str, str]:
42
42
  return match.group(1), urllib.parse.unquote_plus(match.group(2))
43
43
 
44
44
 
45
+ def _default_user_metadata() -> dict[str, Any]:
46
+ return {}
47
+
48
+
45
49
  @dataclasses.dataclass
46
50
  class BlobMetadata:
47
51
  """Data about blobs."""
48
52
 
49
- user_metadata: dict[str, Any] = dataclasses.field(default_factory=dict)
53
+ user_metadata: dict[str, Any] = dataclasses.field(
54
+ default_factory=_default_user_metadata
55
+ )
50
56
  content_type: str = ""
51
57
  md5_hash: str | None = None
52
58
  size: int | None = None
@@ -9,8 +9,6 @@ import duckdb
9
9
  import pyarrow as pa
10
10
  import pyarrow.parquet as pq
11
11
  import sqlglot
12
- import sqlglot._version
13
- import sqlglot.expressions
14
12
 
15
13
  from corvic.op_graph import Schema
16
14
  from corvic.result import InternalError, Ok
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: corvic/model/v1alpha/models.proto
4
+ # Protobuf Python Version: 4.25.3
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from corvic_generated.orm.v1 import completion_model_pb2 as corvic_dot_orm_dot_v1_dot_completion__model__pb2
16
+ from corvic_generated.orm.v1 import feature_view_pb2 as corvic_dot_orm_dot_v1_dot_feature__view__pb2
17
+ from corvic_generated.orm.v1 import pipeline_pb2 as corvic_dot_orm_dot_v1_dot_pipeline__pb2
18
+ from corvic_generated.orm.v1 import space_pb2 as corvic_dot_orm_dot_v1_dot_space__pb2
19
+ from corvic_generated.orm.v1 import table_pb2 as corvic_dot_orm_dot_v1_dot_table__pb2
20
+ from corvic_generated.status.v1 import event_pb2 as corvic_dot_status_dot_v1_dot_event__pb2
21
+ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
22
+
23
+
24
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!corvic/model/v1alpha/models.proto\x12\x14\x63orvic.model.v1alpha\x1a$corvic/orm/v1/completion_model.proto\x1a corvic/orm/v1/feature_view.proto\x1a\x1c\x63orvic/orm/v1/pipeline.proto\x1a\x19\x63orvic/orm/v1/space.proto\x1a\x19\x63orvic/orm/v1/table.proto\x1a\x1c\x63orvic/status/v1/event.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x90\x01\n\x04Room\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x15\n\x06org_id\x18\x03 \x01(\tR\x05orgId\x12>\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x42\r\n\x0b_created_at\"\xf9\x03\n\x08Resource\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x1b\n\tmime_type\x18\x04 \x01(\tR\x08mimeType\x12\x10\n\x03url\x18\x05 \x01(\tR\x03url\x12\x12\n\x04size\x18\x06 \x01(\x04R\x04size\x12\x10\n\x03md5\x18\x07 \x01(\tR\x03md5\x12#\n\roriginal_path\x18\x08 \x01(\tR\x0coriginalPath\x12\x17\n\x07room_id\x18\t \x01(\tR\x06roomId\x12\x15\n\x06org_id\x18\x0b \x01(\tR\x05orgId\x12\x1f\n\x0bpipeline_id\x18\r \x01(\tR\npipelineId\x12.\n\x13pipeline_input_name\x18\x0f \x01(\tR\x11pipelineInputName\x12<\n\rrecent_events\x18\x0e \x03(\x0b\x32\x17.corvic.status.v1.EventR\x0crecentEvents\x12\x1f\n\x0bis_terminal\x18\x10 \x01(\x08R\nisTerminal\x12>\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x42\r\n\x0b_created_at\"\xfc\x02\n\x06Source\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x43\n\x0etable_op_graph\x18\x03 \x01(\x0b\x32\x1d.corvic.orm.v1.TableComputeOpR\x0ctableOpGraph\x12\x17\n\x07room_id\x18\x04 \x01(\tR\x06roomId\x12\x15\n\x06org_id\x18\x06 \x01(\tR\x05orgId\x12\x1f\n\x0bpipeline_id\x18\x08 \x01(\tR\npipelineId\x12>\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x12Q\n\x13prop_table_op_graph\x18\t \x01(\x0b\x32\x1d.corvic.orm.v1.TableComputeOpH\x01R\x10propTableOpGraph\x88\x01\x01\x42\r\n\x0b_created_atB\x16\n\x14_prop_table_op_graph\"\xe9\x03\n\x08Pipeline\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\t \x01(\tR\x0b\x64\x65scription\x12\x17\n\x07room_id\x18\x03 \x01(\tR\x06roomId\x12X\n\x0esource_outputs\x18\x05 \x03(\x0b\x32\x31.corvic.model.v1alpha.Pipeline.SourceOutputsEntryR\rsourceOutputs\x12^\n\x17pipeline_transformation\x18\x06 \x01(\x0b\x32%.corvic.orm.v1.PipelineTransformationR\x16pipelineTransformation\x12\x15\n\x06org_id\x18\x07 \x01(\tR\x05orgId\x12>\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x1a^\n\x12SourceOutputsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32\x1c.corvic.model.v1alpha.SourceR\x05value:\x02\x38\x01\x42\r\n\x0b_created_at\"\xca\x02\n\x11\x46\x65\x61tureViewSource\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x34\n\x06source\x18\x02 \x01(\x0b\x32\x1c.corvic.model.v1alpha.SourceR\x06source\x12\x43\n\x0etable_op_graph\x18\x03 \x01(\x0b\x32\x1d.corvic.orm.v1.TableComputeOpR\x0ctableOpGraph\x12+\n\x11\x64rop_disconnected\x18\x04 \x01(\x08R\x10\x64ropDisconnected\x12\x15\n\x06org_id\x18\x05 \x01(\tR\x05orgId\x12>\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x12\x17\n\x07room_id\x18\x07 \x01(\tR\x06roomIdB\r\n\x0b_created_at\"\x9c\x03\n\x0b\x46\x65\x61tureView\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x17\n\x07room_id\x18\x04 \x01(\tR\x06roomId\x12P\n\x13\x66\x65\x61ture_view_output\x18\x05 \x01(\x0b\x32 .corvic.orm.v1.FeatureViewOutputR\x11\x66\x65\x61tureViewOutput\x12Y\n\x14\x66\x65\x61ture_view_sources\x18\x06 \x03(\x0b\x32\'.corvic.model.v1alpha.FeatureViewSourceR\x12\x66\x65\x61tureViewSources\x12\x1b\n\tspace_ids\x18\x07 \x03(\tR\x08spaceIds\x12\x15\n\x06org_id\x18\x08 \x01(\tR\x05orgId\x12>\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x42\r\n\x0b_created_at\"\xfa\x02\n\x05Space\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x17\n\x07room_id\x18\x04 \x01(\tR\x06roomId\x12I\n\x10space_parameters\x18\x05 \x01(\x0b\x32\x1e.corvic.orm.v1.SpaceParametersR\x0fspaceParameters\x12\x44\n\x0c\x66\x65\x61ture_view\x18\x06 \x01(\x0b\x32!.corvic.model.v1alpha.FeatureViewR\x0b\x66\x65\x61tureView\x12\x1b\n\tauto_sync\x18\t \x01(\x08R\x08\x61utoSync\x12\x15\n\x06org_id\x18\x07 \x01(\tR\x05orgId\x12>\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x42\r\n\x0b_created_at\"\x97\x04\n\x0f\x43ompletionModel\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x15\n\x06org_id\x18\x04 \x01(\tR\x05orgId\x12H\n\nparameters\x18\x05 \x01(\x0b\x32(.corvic.orm.v1.CompletionModelParametersR\nparameters\x12$\n\x0esecret_api_key\x18\x06 \x01(\tR\x0csecretApiKey\x12Q\n\x14last_validation_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x12lastValidationTime\x88\x01\x01\x12]\n\x1alast_successful_validation\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x18lastSuccessfulValidation\x88\x01\x01\x12>\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\tcreatedAt\x88\x01\x01\x42\x17\n\x15_last_validation_timeB\x1d\n\x1b_last_successful_validationB\r\n\x0b_created_atb\x06proto3')
25
+
26
+ _globals = globals()
27
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
28
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'corvic.model.v1alpha.models_pb2', _globals)
29
+ if _descriptor._USE_C_DESCRIPTORS == False:
30
+ DESCRIPTOR._options = None
31
+ _globals['_PIPELINE_SOURCEOUTPUTSENTRY']._options = None
32
+ _globals['_PIPELINE_SOURCEOUTPUTSENTRY']._serialized_options = b'8\001'
33
+ _globals['_ROOM']._serialized_start=279
34
+ _globals['_ROOM']._serialized_end=423
35
+ _globals['_RESOURCE']._serialized_start=426
36
+ _globals['_RESOURCE']._serialized_end=931
37
+ _globals['_SOURCE']._serialized_start=934
38
+ _globals['_SOURCE']._serialized_end=1314
39
+ _globals['_PIPELINE']._serialized_start=1317
40
+ _globals['_PIPELINE']._serialized_end=1806
41
+ _globals['_PIPELINE_SOURCEOUTPUTSENTRY']._serialized_start=1697
42
+ _globals['_PIPELINE_SOURCEOUTPUTSENTRY']._serialized_end=1791
43
+ _globals['_FEATUREVIEWSOURCE']._serialized_start=1809
44
+ _globals['_FEATUREVIEWSOURCE']._serialized_end=2139
45
+ _globals['_FEATUREVIEW']._serialized_start=2142
46
+ _globals['_FEATUREVIEW']._serialized_end=2554
47
+ _globals['_SPACE']._serialized_start=2557
48
+ _globals['_SPACE']._serialized_end=2935
49
+ _globals['_COMPLETIONMODEL']._serialized_start=2938
50
+ _globals['_COMPLETIONMODEL']._serialized_end=3473
51
+ # @@protoc_insertion_point(module_scope)
@@ -25,7 +25,7 @@ class Room(_message.Message):
25
25
  def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., org_id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
26
26
 
27
27
  class Resource(_message.Message):
28
- __slots__ = ("id", "name", "description", "mime_type", "url", "size", "md5", "original_path", "room_id", "org_id", "pipeline_id", "pipeline_input_name", "recent_events", "created_at")
28
+ __slots__ = ("id", "name", "description", "mime_type", "url", "size", "md5", "original_path", "room_id", "org_id", "pipeline_id", "pipeline_input_name", "recent_events", "is_terminal", "created_at")
29
29
  ID_FIELD_NUMBER: _ClassVar[int]
30
30
  NAME_FIELD_NUMBER: _ClassVar[int]
31
31
  DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
@@ -39,6 +39,7 @@ class Resource(_message.Message):
39
39
  PIPELINE_ID_FIELD_NUMBER: _ClassVar[int]
40
40
  PIPELINE_INPUT_NAME_FIELD_NUMBER: _ClassVar[int]
41
41
  RECENT_EVENTS_FIELD_NUMBER: _ClassVar[int]
42
+ IS_TERMINAL_FIELD_NUMBER: _ClassVar[int]
42
43
  CREATED_AT_FIELD_NUMBER: _ClassVar[int]
43
44
  id: str
44
45
  name: str
@@ -53,8 +54,9 @@ class Resource(_message.Message):
53
54
  pipeline_id: str
54
55
  pipeline_input_name: str
55
56
  recent_events: _containers.RepeatedCompositeFieldContainer[_event_pb2.Event]
57
+ is_terminal: bool
56
58
  created_at: _timestamp_pb2.Timestamp
57
- def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., mime_type: _Optional[str] = ..., url: _Optional[str] = ..., size: _Optional[int] = ..., md5: _Optional[str] = ..., original_path: _Optional[str] = ..., room_id: _Optional[str] = ..., org_id: _Optional[str] = ..., pipeline_id: _Optional[str] = ..., pipeline_input_name: _Optional[str] = ..., recent_events: _Optional[_Iterable[_Union[_event_pb2.Event, _Mapping]]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
59
+ def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., mime_type: _Optional[str] = ..., url: _Optional[str] = ..., size: _Optional[int] = ..., md5: _Optional[str] = ..., original_path: _Optional[str] = ..., room_id: _Optional[str] = ..., org_id: _Optional[str] = ..., pipeline_id: _Optional[str] = ..., pipeline_input_name: _Optional[str] = ..., recent_events: _Optional[_Iterable[_Union[_event_pb2.Event, _Mapping]]] = ..., is_terminal: bool = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
58
60
 
59
61
  class Source(_message.Message):
60
62
  __slots__ = ("id", "name", "table_op_graph", "room_id", "org_id", "pipeline_id", "created_at", "prop_table_op_graph")