corvic-engine 0.3.0rc53__tar.gz → 0.3.0rc55__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 (250) hide show
  1. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/Cargo.lock +2 -2
  2. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/Cargo.toml +1 -1
  3. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/PKG-INFO +1 -1
  4. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/pyproject.toml +2 -2
  5. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_completion_model.py +18 -0
  6. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_proto_orm_convert.py +4 -0
  7. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_space.py +33 -2
  8. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/encoders.py +48 -1
  9. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/__init__.py +7 -0
  10. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/pa_scalar/_to_value.py +11 -16
  11. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/in_memory_executor.py +151 -7
  12. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/table/table.py +0 -13
  13. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/model/v1alpha/models_pb2.py +2 -2
  14. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/model/v1alpha/models_pb2.pyi +4 -2
  15. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/table_pb2.py +89 -85
  16. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/table_pb2.pyi +14 -2
  17. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/LICENSE +0 -0
  18. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/README.md +0 -0
  19. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/Cargo.toml +0 -0
  20. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/expression_pb2.py +0 -0
  21. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/expression_pb2.pyi +0 -0
  22. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/expression_pb2_grpc.py +0 -0
  23. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/expression_pb2_grpc.pyi +0 -0
  24. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/priv/private_pb2.py +0 -0
  25. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/priv/private_pb2.pyi +0 -0
  26. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/priv/private_pb2_grpc.py +0 -0
  27. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/priv/private_pb2_grpc.pyi +0 -0
  28. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/validate_pb2.py +0 -0
  29. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/validate_pb2.pyi +0 -0
  30. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/validate_pb2_grpc.py +0 -0
  31. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/buf/validate/validate_pb2_grpc.pyi +0 -0
  32. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/context/__init__.py +0 -0
  33. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/context/py.typed +0 -0
  34. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/embed/__init__.py +0 -0
  35. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/embed/node2vec.py +0 -0
  36. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/embed/py.typed +0 -0
  37. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/embedding_metric/__init__.py +0 -0
  38. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/embedding_metric/embeddings.py +0 -0
  39. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/embedding_metric/py.typed +0 -0
  40. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/engine/__init__.py +0 -0
  41. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/engine/_native.pyi +0 -0
  42. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/engine/py.typed +0 -0
  43. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/__init__.py +0 -0
  44. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_agent.py +0 -0
  45. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_base_model.py +0 -0
  46. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_defaults.py +0 -0
  47. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_errors.py +0 -0
  48. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_feature_type.py +0 -0
  49. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_feature_view.py +0 -0
  50. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_pipeline.py +0 -0
  51. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_resource.py +0 -0
  52. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_room.py +0 -0
  53. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/_source.py +0 -0
  54. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/model/py.typed +0 -0
  55. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/__init__.py +0 -0
  56. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/_schema.py +0 -0
  57. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/_transformations.py +0 -0
  58. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/aggregation.py +0 -0
  59. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/errors.py +0 -0
  60. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/feature_types.py +0 -0
  61. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/ops.py +0 -0
  62. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/py.typed +0 -0
  63. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/row_filters/__init__.py +0 -0
  64. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/row_filters/_jsonlogic.py +0 -0
  65. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/row_filters/_row_filters.py +0 -0
  66. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/op_graph/sample_strategy.py +0 -0
  67. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/_proto_columns.py +0 -0
  68. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/base.py +0 -0
  69. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/errors.py +0 -0
  70. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/func/__init__.py +0 -0
  71. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/func/utc_func.py +0 -0
  72. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/func/uuid_func.py +0 -0
  73. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/ids.py +0 -0
  74. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/keys.py +0 -0
  75. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/mixins.py +0 -0
  76. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/orm/py.typed +0 -0
  77. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/pa_scalar/__init__.py +0 -0
  78. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/pa_scalar/_const.py +0 -0
  79. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/pa_scalar/_from_value.py +0 -0
  80. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/pa_scalar/_temporal.py +0 -0
  81. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/pa_scalar/_types.py +0 -0
  82. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/pa_scalar/py.typed +0 -0
  83. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/proto_wrapper/__init__.py +0 -0
  84. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/proto_wrapper/_errors.py +0 -0
  85. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/proto_wrapper/_wrappers.py +0 -0
  86. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/proto_wrapper/py.typed +0 -0
  87. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/result/__init__.py +0 -0
  88. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/result/py.typed +0 -0
  89. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/sql/__init__.py +0 -0
  90. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/sql/parse_ops.py +0 -0
  91. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/sql/py.typed +0 -0
  92. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/__init__.py +0 -0
  93. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/_dimension_reduction.py +0 -0
  94. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/_embedder.py +0 -0
  95. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/_image_embedder.py +0 -0
  96. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/_planner.py +0 -0
  97. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/_text_embedder.py +0 -0
  98. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/client.py +0 -0
  99. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/op_graph_executor.py +0 -0
  100. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/py.typed +0 -0
  101. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/staging.py +0 -0
  102. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system/storage.py +0 -0
  103. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system_sqlite/__init__.py +0 -0
  104. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system_sqlite/client.py +0 -0
  105. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system_sqlite/fs_blob_store.py +0 -0
  106. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system_sqlite/py.typed +0 -0
  107. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system_sqlite/rdbms_blob_store.py +0 -0
  108. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/system_sqlite/staging.py +0 -0
  109. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/table/__init__.py +0 -0
  110. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/table/py.typed +0 -0
  111. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/version/__init__.py +0 -0
  112. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/version/py.typed +0 -0
  113. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/well_known_types/__init__.py +0 -0
  114. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic/well_known_types/py.typed +0 -0
  115. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/__init__.py +0 -0
  116. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/algorithm/__init__.py +0 -0
  117. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/algorithm/graph/__init__.py +0 -0
  118. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/algorithm/graph/v1/__init__.py +0 -0
  119. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/algorithm/graph/v1/graph_pb2.py +0 -0
  120. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/algorithm/graph/v1/graph_pb2.pyi +0 -0
  121. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.py +0 -0
  122. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.pyi +0 -0
  123. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/chat/__init__.py +0 -0
  124. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/chat/v1/__init__.py +0 -0
  125. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/chat/v1/service_pb2.py +0 -0
  126. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/chat/v1/service_pb2.pyi +0 -0
  127. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/chat/v1/service_pb2_grpc.py +0 -0
  128. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/chat/v1/service_pb2_grpc.pyi +0 -0
  129. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/completion/__init__.py +0 -0
  130. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/completion/v1/__init__.py +0 -0
  131. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/completion/v1/service_pb2.py +0 -0
  132. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/completion/v1/service_pb2.pyi +0 -0
  133. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/completion/v1/service_pb2_grpc.py +0 -0
  134. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/completion/v1/service_pb2_grpc.pyi +0 -0
  135. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/config/__init__.py +0 -0
  136. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/config/v1/__init__.py +0 -0
  137. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/config/v1/settings_pb2.py +0 -0
  138. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/config/v1/settings_pb2.pyi +0 -0
  139. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/config/v1/settings_pb2_grpc.py +0 -0
  140. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/config/v1/settings_pb2_grpc.pyi +0 -0
  141. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/embedding/__init__.py +0 -0
  142. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/embedding/v1/__init__.py +0 -0
  143. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/embedding/v1/models_pb2.py +0 -0
  144. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/embedding/v1/models_pb2.pyi +0 -0
  145. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/embedding/v1/models_pb2_grpc.py +0 -0
  146. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/embedding/v1/models_pb2_grpc.pyi +0 -0
  147. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/__init__.py +0 -0
  148. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/__init__.py +0 -0
  149. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/experiment_pb2.py +0 -0
  150. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/experiment_pb2.pyi +0 -0
  151. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/experiment_pb2_grpc.py +0 -0
  152. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/experiment_pb2_grpc.pyi +0 -0
  153. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/space_pb2.py +0 -0
  154. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/space_pb2.pyi +0 -0
  155. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/space_pb2_grpc.py +0 -0
  156. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v1/space_pb2_grpc.pyi +0 -0
  157. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/__init__.py +0 -0
  158. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/feature_view_pb2.py +0 -0
  159. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/feature_view_pb2.pyi +0 -0
  160. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.py +0 -0
  161. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.pyi +0 -0
  162. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/space_pb2.py +0 -0
  163. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/space_pb2.pyi +0 -0
  164. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/space_pb2_grpc.py +0 -0
  165. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/feature/v2/space_pb2_grpc.pyi +0 -0
  166. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/__init__.py +0 -0
  167. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v1/__init__.py +0 -0
  168. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v1/service_pb2.py +0 -0
  169. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v1/service_pb2.pyi +0 -0
  170. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v1/service_pb2_grpc.py +0 -0
  171. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v1/service_pb2_grpc.pyi +0 -0
  172. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/__init__.py +0 -0
  173. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/pipeline_pb2.py +0 -0
  174. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/pipeline_pb2.pyi +0 -0
  175. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.py +0 -0
  176. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.pyi +0 -0
  177. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/quick_mode_pb2.py +0 -0
  178. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/quick_mode_pb2.pyi +0 -0
  179. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.py +0 -0
  180. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.pyi +0 -0
  181. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/resource_pb2.py +0 -0
  182. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/resource_pb2.pyi +0 -0
  183. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/resource_pb2_grpc.py +0 -0
  184. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/resource_pb2_grpc.pyi +0 -0
  185. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/room_pb2.py +0 -0
  186. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/room_pb2.pyi +0 -0
  187. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/room_pb2_grpc.py +0 -0
  188. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/room_pb2_grpc.pyi +0 -0
  189. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/source_pb2.py +0 -0
  190. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/source_pb2.pyi +0 -0
  191. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/source_pb2_grpc.py +0 -0
  192. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/source_pb2_grpc.pyi +0 -0
  193. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/table_pb2.py +0 -0
  194. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/table_pb2.pyi +0 -0
  195. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/table_pb2_grpc.py +0 -0
  196. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/ingest/v2/table_pb2_grpc.pyi +0 -0
  197. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/model/__init__.py +0 -0
  198. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/model/v1alpha/__init__.py +0 -0
  199. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/model/v1alpha/models_pb2_grpc.py +0 -0
  200. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/model/v1alpha/models_pb2_grpc.pyi +0 -0
  201. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/__init__.py +0 -0
  202. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/__init__.py +0 -0
  203. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/agent_pb2.py +0 -0
  204. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/agent_pb2.pyi +0 -0
  205. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/agent_pb2_grpc.py +0 -0
  206. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/agent_pb2_grpc.pyi +0 -0
  207. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/common_pb2.py +0 -0
  208. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/common_pb2.pyi +0 -0
  209. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/common_pb2_grpc.py +0 -0
  210. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/common_pb2_grpc.pyi +0 -0
  211. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/completion_model_pb2.py +0 -0
  212. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/completion_model_pb2.pyi +0 -0
  213. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.py +0 -0
  214. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.pyi +0 -0
  215. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/feature_view_pb2.py +0 -0
  216. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/feature_view_pb2.pyi +0 -0
  217. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.py +0 -0
  218. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.pyi +0 -0
  219. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/pipeline_pb2.py +0 -0
  220. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/pipeline_pb2.pyi +0 -0
  221. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.py +0 -0
  222. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.pyi +0 -0
  223. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/space_pb2.py +0 -0
  224. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/space_pb2.pyi +0 -0
  225. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/space_pb2_grpc.py +0 -0
  226. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/space_pb2_grpc.pyi +0 -0
  227. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/table_pb2_grpc.py +0 -0
  228. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/orm/v1/table_pb2_grpc.pyi +0 -0
  229. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/platform/__init__.py +0 -0
  230. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/platform/v1/__init__.py +0 -0
  231. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/platform/v1/platform_pb2.py +0 -0
  232. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/platform/v1/platform_pb2.pyi +0 -0
  233. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/platform/v1/platform_pb2_grpc.py +0 -0
  234. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/platform/v1/platform_pb2_grpc.pyi +0 -0
  235. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/query/__init__.py +0 -0
  236. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/query/v1/__init__.py +0 -0
  237. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/query/v1/query_pb2.py +0 -0
  238. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/query/v1/query_pb2.pyi +0 -0
  239. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/query/v1/query_pb2_grpc.py +0 -0
  240. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/query/v1/query_pb2_grpc.pyi +0 -0
  241. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/__init__.py +0 -0
  242. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/v1/__init__.py +0 -0
  243. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/v1/event_pb2.py +0 -0
  244. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/v1/event_pb2.pyi +0 -0
  245. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/v1/event_pb2_grpc.py +0 -0
  246. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/v1/event_pb2_grpc.pyi +0 -0
  247. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/v1/service_pb2.py +0 -0
  248. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/v1/service_pb2.pyi +0 -0
  249. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/python/corvic_generated/status/v1/service_pb2_grpc.py +0 -0
  250. {corvic_engine-0.3.0rc53 → corvic_engine-0.3.0rc55}/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.53"
25
+ version = "0.3.0-rc.55"
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.53"
66
+ version = "0.3.0-rc.55"
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.53"
6
+ version = "0.3.0-rc.55"
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.0rc53
3
+ Version: 0.3.0rc55
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.53" # sync this with tool.poetry.version below
23
+ version = "0.3.0-rc.55" # 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.53"
77
+ version = "0.3.0-rc.55"
78
78
 
79
79
  [tool.poetry.scripts]
80
80
  check = "corvic_check.cli:main"
@@ -7,6 +7,7 @@ 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
@@ -24,6 +25,8 @@ 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
32
  BaseModel[CompletionModelID, models_pb2.CompletionModel, orm.CompletionModel]
@@ -112,6 +115,14 @@ class CompletionModel(
112
115
  def description(self) -> str:
113
116
  return self.proto_self.description
114
117
 
118
+ @property
119
+ def last_validation_time(self) -> datetime.datetime | None:
120
+ if self.proto_self.last_validation_time != UNIX_TIMESTAMP_START_DATETIME:
121
+ return self.proto_self.last_validation_time.ToDatetime(
122
+ tzinfo=datetime.timezone.utc
123
+ )
124
+ return None
125
+
115
126
  @classmethod
116
127
  def create(
117
128
  cls,
@@ -197,3 +208,10 @@ class CompletionModel(
197
208
  proto_self = copy.deepcopy(self.proto_self)
198
209
  proto_self.secret_api_key = secret_api_key
199
210
  return CompletionModel(self.client, proto_self)
211
+
212
+ def with_last_validation_time(
213
+ self, last_validation_time: datetime.datetime
214
+ ) -> CompletionModel:
215
+ proto_self = copy.deepcopy(self.proto_self)
216
+ proto_self.last_validation_time.FromDatetime(last_validation_time)
217
+ return CompletionModel(self.client, proto_self)
@@ -241,6 +241,9 @@ def completion_model_orm_to_proto(
241
241
  parameters=completion_model_orm.parameters,
242
242
  secret_api_key=completion_model_orm.secret_api_key,
243
243
  created_at=timestamp_orm_to_proto(completion_model_orm.created_at),
244
+ last_validation_time=timestamp_orm_to_proto(
245
+ completion_model_orm.last_validation_time
246
+ ),
244
247
  )
245
248
 
246
249
 
@@ -618,6 +621,7 @@ def completion_model_proto_to_orm(
618
621
  description=proto_obj.description,
619
622
  parameters=proto_obj.parameters,
620
623
  secret_api_key=proto_obj.secret_api_key,
624
+ last_validation_time=proto_obj.last_validation_time.ToDatetime(),
621
625
  )
622
626
  return Ok(_add_orm_to_session(orm_obj, proto_obj.org_id, session))
623
627
 
@@ -694,7 +694,7 @@ class TabularSpace(Space):
694
694
  )
695
695
  return Ok(cls(client, proto_self))
696
696
 
697
- def embeddings_tables( # noqa: C901
697
+ def embeddings_tables( # noqa: C901, PLR0915
698
698
  self,
699
699
  ) -> Ok[Mapping[str, Table]] | InvalidArgumentError:
700
700
  output_sources = self.feature_view.output_sources
@@ -750,7 +750,38 @@ class TabularSpace(Space):
750
750
  pass
751
751
  case InvalidArgumentError() as err:
752
752
  return err
753
-
753
+ case op_graph.feature_type.Timestamp():
754
+ encoded_column_name = f"__encoded-{uuid.uuid4()}"
755
+ embedding_column_tmp_names.append(encoded_column_name)
756
+ match op.encode_columns(
757
+ [
758
+ op_graph.encoder.EncodedColumn(
759
+ column_name=column.name,
760
+ encoded_column_name=encoded_column_name,
761
+ encoder=op_graph.encoder.timestamp_encoder(),
762
+ )
763
+ ]
764
+ ):
765
+ case Ok(op):
766
+ pass
767
+ case InvalidArgumentError() as err:
768
+ return err
769
+ case op_graph.feature_type.Text():
770
+ encoded_column_name = f"__encoded-{uuid.uuid4()}"
771
+ embedding_column_tmp_names.append(encoded_column_name)
772
+ match op.encode_columns(
773
+ [
774
+ op_graph.encoder.EncodedColumn(
775
+ column_name=column.name,
776
+ encoded_column_name=encoded_column_name,
777
+ encoder=op_graph.encoder.text_encoder(),
778
+ )
779
+ ]
780
+ ):
781
+ case Ok(op):
782
+ pass
783
+ case InvalidArgumentError() as err:
784
+ return err
754
785
  case _:
755
786
  continue
756
787
 
@@ -67,7 +67,19 @@ def from_proto(
67
67
  ) -> StandardScaler: ...
68
68
 
69
69
 
70
+ @overload
71
+ def from_proto(
72
+ proto: table_pb2.TimestampEncoder,
73
+ ) -> TimestampEncoder: ...
74
+
75
+
76
+ @overload
70
77
  def from_proto(
78
+ proto: table_pb2.TextEncoder,
79
+ ) -> TextEncoder: ...
80
+
81
+
82
+ def from_proto( # noqa: C901
71
83
  proto: (
72
84
  table_pb2.Encoder
73
85
  | table_pb2.OneHotEncoder
@@ -78,6 +90,8 @@ def from_proto(
78
90
  | table_pb2.Binarizer
79
91
  | table_pb2.MaxAbsScaler
80
92
  | table_pb2.StandardScaler
93
+ | table_pb2.TimestampEncoder
94
+ | table_pb2.TextEncoder
81
95
  ),
82
96
  ) -> Encoder:
83
97
  """Create a Encoder wrapper around a Encoder protobuf message."""
@@ -100,6 +114,10 @@ def from_proto(
100
114
  return MaxAbsScaler(table_pb2.Encoder(max_abs_scaler=proto))
101
115
  case table_pb2.StandardScaler():
102
116
  return StandardScaler(table_pb2.Encoder(standard_scaler=proto))
117
+ case table_pb2.TimestampEncoder():
118
+ return TimestampEncoder(table_pb2.Encoder(timestamp_encoder=proto))
119
+ case table_pb2.TextEncoder():
120
+ return TextEncoder(table_pb2.Encoder(text_encoder=proto))
103
121
 
104
122
 
105
123
  def _from_encoder_type(proto: table_pb2.Encoder):
@@ -249,6 +267,22 @@ class StandardScaler(_Base):
249
267
  return self._proto.standard_scaler.with_std
250
268
 
251
269
 
270
+ class TimestampEncoder(_Base):
271
+ """Encode timestamp features into a numeric array."""
272
+
273
+ @property
274
+ def output_dtype(self) -> DataType:
275
+ return pl.List(pl.Float32())
276
+
277
+
278
+ class TextEncoder(_Base):
279
+ """Encode text features into a numeric vector."""
280
+
281
+ @property
282
+ def output_dtype(self) -> DataType:
283
+ return pl.List(pl.Float32())
284
+
285
+
252
286
  def one_hot_encoder():
253
287
  """Build a OneHotEncoder Encoder."""
254
288
  return from_proto(table_pb2.OneHotEncoder())
@@ -316,6 +350,16 @@ def standard_scaler(
316
350
  )
317
351
 
318
352
 
353
+ def timestamp_encoder():
354
+ """Build a TimestampEncoder Encoder."""
355
+ return from_proto(table_pb2.TimestampEncoder())
356
+
357
+
358
+ def text_encoder():
359
+ """Build a TextEncoder Encoder."""
360
+ return from_proto(table_pb2.TextEncoder())
361
+
362
+
319
363
  Encoder = (
320
364
  OneHotEncoder
321
365
  | MinMaxScaler
@@ -325,9 +369,10 @@ Encoder = (
325
369
  | Binarizer
326
370
  | MaxAbsScaler
327
371
  | StandardScaler
372
+ | TimestampEncoder
373
+ | TextEncoder
328
374
  )
329
375
 
330
-
331
376
  _ENCODER_NAME_TO_ENCODER_TYPE: Final = {
332
377
  "one_hot_encoder": OneHotEncoder,
333
378
  "min_max_scaler": MinMaxScaler,
@@ -337,6 +382,8 @@ _ENCODER_NAME_TO_ENCODER_TYPE: Final = {
337
382
  "binarizer": Binarizer,
338
383
  "max_abs_scaler": MaxAbsScaler,
339
384
  "standard_scaler": StandardScaler,
385
+ "timestamp_encoder": TimestampEncoder,
386
+ "text_encoder": TextEncoder,
340
387
  }
341
388
 
342
389
  _ENCODER_TYPE_TO_ENCODER_FIELD_NAME: Final[dict[type[Any], str]] = {
@@ -2,6 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from datetime import datetime
6
+
5
7
  import sqlalchemy as sa
6
8
  from sqlalchemy import orm as sa_orm
7
9
 
@@ -369,6 +371,11 @@ class CompletionModel(SoftDeleteMixin, BelongsToOrgMixin, Base):
369
371
  sa_orm.mapped_column(default=None)
370
372
  )
371
373
  secret_api_key: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text, default=None)
374
+ last_validation_time: sa_orm.Mapped[datetime | None] = sa_orm.mapped_column(
375
+ sa.DateTime(timezone=True),
376
+ server_default=None,
377
+ default=None,
378
+ )
372
379
 
373
380
  @property
374
381
  def model_key(self):
@@ -414,28 +414,23 @@ def _visit(
414
414
 
415
415
 
416
416
  def to_value(
417
- scalar: Scalar | float | str | bool | None | struct_pb2.Value,
417
+ scalar: Scalar | _PyValue | struct_pb2.Value,
418
418
  ) -> struct_pb2.Value:
419
419
  """Convert Scalar (or convenient Scalar equivalents) to struct_pb2.Value."""
420
420
  match scalar:
421
- # Order matters: bools are ints but ints are not bools
422
- case bool():
423
- return struct_pb2.Value(bool_value=scalar)
424
- case int():
425
- return struct_pb2.Value(string_value=str(scalar))
426
- case float():
427
- if _is_invalid_float(scalar):
428
- return to_value(None)
429
- return struct_pb2.Value(number_value=scalar)
430
- case str():
431
- return struct_pb2.Value(string_value=scalar)
432
- case None:
433
- return struct_pb2.Value(null_value=struct_pb2.NULL_VALUE)
434
421
  case struct_pb2.Value():
435
422
  return scalar
436
- case _:
423
+ case pa.Scalar():
437
424
  value = cast(_PyValue, scalar.as_py())
438
- return _visit(value, scalar.type)
425
+ return _visit(value, cast(Scalar, scalar).type)
426
+ case _:
427
+ try:
428
+ # Attempt to convert the python value into a pyarrow scalar and
429
+ # then go through our visitor
430
+ pa_value = cast(Scalar, pa.scalar(cast(Any, scalar)))
431
+ return to_value(pa_value)
432
+ except Exception:
433
+ return struct_pb2.Value(null_value=struct_pb2.NULL_VALUE)
439
434
 
440
435
 
441
436
  def _to_py(scalar: Scalar) -> Any:
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import dataclasses
6
6
  import datetime
7
7
  import functools
8
+ import math
8
9
  from collections.abc import MutableMapping
9
10
  from contextlib import nullcontext
10
11
  from typing import Any, Final, cast
@@ -46,6 +47,9 @@ from corvic_generated.orm.v1 import table_pb2
46
47
 
47
48
  _logger = structlog.get_logger()
48
49
 
50
+ """Reference and Maximum number of years for normalizing year in Datetime encoder"""
51
+ REFERENCE_YEAR: Final = 1900
52
+ MAX_NUMBER_OF_YEARS: Final = 200
49
53
 
50
54
  _MIN_EMBEDDINGS_FOR_EMBEDDINGS_SUMMARY: Final = 3
51
55
 
@@ -815,7 +819,119 @@ class InMemoryExecutor(OpGraphExecutor):
815
819
  )
816
820
  )
817
821
 
818
- def _execute_encode_columns( # noqa: C901
822
+ @staticmethod
823
+ def get_cyclic_encoding(
824
+ series: pl.Series,
825
+ period: int,
826
+ ) -> tuple[pl.Series, pl.Series]:
827
+ sine_series = (2 * math.pi * series / period).sin().alias(f"{series.name}_sine")
828
+ cosine_series = (
829
+ (2 * math.pi * series / period).cos().alias(f"{series.name}_cosine")
830
+ )
831
+ return sine_series, cosine_series
832
+
833
+ @staticmethod
834
+ def encode_datetime(series: pl.Series) -> pl.Series:
835
+ match series.dtype:
836
+ case pl.Date | pl.Time:
837
+ pass
838
+ case pl.Datetime:
839
+ series = series.dt.replace_time_zone("UTC")
840
+ case _:
841
+ raise ValueError("Invalid arguments, expected a datetime series")
842
+
843
+ if series.is_null().all():
844
+ zero_vector = pl.zeros(11, dtype=pl.Float32, eager=True)
845
+ return pl.Series([zero_vector] * len(series), dtype=pl.List(pl.Float32))
846
+
847
+ n = len(series)
848
+ year_norm = pl.zeros(n, dtype=pl.Float32, eager=True).alias("year")
849
+ month_sine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("month_sine")
850
+ month_cosine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("month_cosine")
851
+ day_sine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("day_sine")
852
+ day_cosine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("day_cosine")
853
+ hour_sine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("hour_sine")
854
+ hour_cosine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("hour_cosine")
855
+ minute_sine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("minute_sine")
856
+ minute_cosine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("minute_cosine")
857
+ second_sine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("second_sine")
858
+ second_cosine = pl.zeros(n, dtype=pl.Float32, eager=True).alias("second_cosine")
859
+
860
+ if series.dtype in [pl.Date, pl.Datetime]:
861
+ try:
862
+ year = series.dt.year().cast(pl.Float32).alias("year")
863
+ month = series.dt.month().cast(pl.Float32).alias("month")
864
+ day = series.dt.day().cast(pl.Float32).alias("day")
865
+
866
+ year_norm = (year - REFERENCE_YEAR) / MAX_NUMBER_OF_YEARS
867
+ month_sine, month_cosine = InMemoryExecutor.get_cyclic_encoding(
868
+ month, 12
869
+ )
870
+ day_sine, day_cosine = InMemoryExecutor.get_cyclic_encoding(day, 31)
871
+ except pl.exceptions.PanicException as e:
872
+ _logger.exception("Error extracting datetime", exc_info=e)
873
+
874
+ if series.dtype in [pl.Time, pl.Datetime]:
875
+ try:
876
+ hour = series.dt.hour().cast(pl.Float32).alias("hour")
877
+ minute = series.dt.minute().cast(pl.Float32).alias("minute")
878
+ second = series.dt.second().cast(pl.Float32).alias("second")
879
+
880
+ hour_sine, hour_cosine = InMemoryExecutor.get_cyclic_encoding(hour, 24)
881
+ minute_sine, minute_cosine = InMemoryExecutor.get_cyclic_encoding(
882
+ minute, 60
883
+ )
884
+ second_sine, second_cosine = InMemoryExecutor.get_cyclic_encoding(
885
+ second, 60
886
+ )
887
+ except pl.exceptions.PanicException as e:
888
+ _logger.exception("Error extracting datetime", exc_info=e)
889
+
890
+ return pl.DataFrame(
891
+ [
892
+ year_norm.fill_null(0.0),
893
+ month_sine.fill_null(0.0),
894
+ month_cosine.fill_null(0.0),
895
+ day_sine.fill_null(0.0),
896
+ day_cosine.fill_null(0.0),
897
+ hour_sine.fill_null(0.0),
898
+ hour_cosine.fill_null(0.0),
899
+ minute_sine.fill_null(0.0),
900
+ minute_cosine.fill_null(0.0),
901
+ second_sine.fill_null(0.0),
902
+ second_cosine.fill_null(0.0),
903
+ ]
904
+ ).select(pl.concat_list(pl.all()).alias(series.name))[series.name]
905
+
906
+ @staticmethod
907
+ def encode_duration(series: pl.Series) -> pl.Series:
908
+ if series.dtype != pl.Duration:
909
+ raise ValueError("Invalid arguments, expected a duration series")
910
+ if series.is_null().all():
911
+ return pl.zeros(len(series), dtype=pl.Float32, eager=True)
912
+
913
+ return series.dt.total_seconds().cast(pl.Float32).fill_null(0.0)
914
+
915
+ @staticmethod
916
+ def encode_text(series: pl.Series) -> pl.Series:
917
+ match series.dtype:
918
+ case pl.String:
919
+ pass
920
+ case pl.Binary:
921
+ series = series.map_elements(
922
+ lambda x: x.decode("utf-8", errors="replace"),
923
+ return_dtype=pl.String,
924
+ )
925
+ case _:
926
+ raise ValueError("Invalid arguments, expected a string series")
927
+ series = series.fill_null(" ").replace("", " ")
928
+ return pl.Series(
929
+ series.name,
930
+ [[1 / (len(doc) + 1)] for doc in series],
931
+ pl.List(pl.Float32),
932
+ )
933
+
934
+ def _execute_encode_columns( # noqa: C901, PLR0915
819
935
  self, op: op_graph.op.EncodeColumns, context: _InMemoryExecutionContext
820
936
  ):
821
937
  match self._execute(op.source, context):
@@ -903,9 +1019,12 @@ class InMemoryExecutor(OpGraphExecutor):
903
1019
  from sklearn.preprocessing import MaxAbsScaler
904
1020
 
905
1021
  encoder = MaxAbsScaler()
906
- encoded = encoder.fit_transform(
907
- np.nan_to_num(to_encode.to_numpy()).reshape(-1, 1)
908
- ).flatten()
1022
+ try:
1023
+ encoded = encoder.fit_transform(
1024
+ np.nan_to_num(to_encode.to_numpy()).reshape(-1, 1)
1025
+ ).flatten()
1026
+ except ValueError:
1027
+ encoded = np.array([])
909
1028
 
910
1029
  case op_graph.encoder.StandardScaler():
911
1030
  from sklearn.preprocessing import StandardScaler
@@ -917,6 +1036,28 @@ class InMemoryExecutor(OpGraphExecutor):
917
1036
  encoded = encoder.fit_transform(
918
1037
  to_encode.to_numpy().reshape(-1, 1)
919
1038
  ).flatten()
1039
+
1040
+ case op_graph.encoder.TimestampEncoder():
1041
+ if to_encode.dtype == pl.datatypes.Duration:
1042
+ encoded = self.encode_duration(to_encode)
1043
+ else:
1044
+ encoded = self.encode_datetime(to_encode)
1045
+ source_df = source_df.with_columns(
1046
+ encoded.rename(encoder_arg.encoded_column_name).cast(
1047
+ encoder_arg.encoder.output_dtype
1048
+ )
1049
+ )
1050
+ continue
1051
+
1052
+ case op_graph.encoder.TextEncoder():
1053
+ encoded = self.encode_text(to_encode)
1054
+ source_df = source_df.with_columns(
1055
+ encoded.rename(encoder_arg.encoded_column_name).cast(
1056
+ encoder_arg.encoder.output_dtype
1057
+ )
1058
+ )
1059
+ continue
1060
+
920
1061
  source_df = source_df.with_columns(
921
1062
  pl.Series(
922
1063
  name=encoder_arg.encoded_column_name,
@@ -1158,9 +1299,12 @@ class InMemoryExecutor(OpGraphExecutor):
1158
1299
  case err:
1159
1300
  return err
1160
1301
  source_df = _as_df(source_batches)
1161
- existing_length = get_polars_embedding_length(
1162
- source_df, op.column_name
1163
- ).unwrap_or_raise()
1302
+ if len(source_df):
1303
+ existing_length = get_polars_embedding_length(
1304
+ source_df, op.column_name
1305
+ ).unwrap_or_raise()
1306
+ else:
1307
+ existing_length = 0
1164
1308
  head_length = (
1165
1309
  op.target_column_length
1166
1310
  if existing_length >= op.target_column_length
@@ -62,9 +62,6 @@ _TM = TypeVar("_TM", bound=TypedMetadata)
62
62
 
63
63
  _logger = structlog.get_logger()
64
64
 
65
- CORVIC_RESERVED_PREFIX = "__corvic"
66
- CORVIC_SURROGATE_ID = f"{CORVIC_RESERVED_PREFIX}_surrogate_id"
67
-
68
65
 
69
66
  @dataclasses.dataclass
70
67
  class DataclassAsTypedMetadataMixin:
@@ -366,16 +363,6 @@ class Table:
366
363
  case Ok(op):
367
364
  pass
368
365
 
369
- # For internally added columns we can set custom feature types
370
- if CORVIC_SURROGATE_ID in schema:
371
- match op.update_feature_types(
372
- {CORVIC_SURROGATE_ID: op_graph.feature_type.identifier()}
373
- ):
374
- case InvalidArgumentError() as error:
375
- return error
376
- case Ok(op):
377
- pass
378
-
379
366
  return Ok(cls.from_ops(client, op))
380
367
 
381
368
  def to_bytes(self):
@@ -22,7 +22,7 @@ from corvic_generated.status.v1 import event_pb2 as corvic_dot_status_dot_v1_dot
22
22
  from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
23
23
 
24
24
 
25
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!corvic/model/v1alpha/models.proto\x12\x14\x63orvic.model.v1alpha\x1a\x19\x63orvic/orm/v1/agent.proto\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\"\xd8\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>\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x42\r\n\x0b_created_at\"\x91\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\x42\r\n\x0b_created_at\"\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\"\x85\x02\n\x05\x41gent\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x17\n\x07room_id\x18\x03 \x01(\tR\x06roomId\x12I\n\x10\x61gent_parameters\x18\x04 \x01(\x0b\x32\x1e.corvic.orm.v1.AgentParametersR\x0f\x61gentParameters\x12\x15\n\x06org_id\x18\x05 \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_atJ\x04\x08\x06\x10\x07R\x08messages\"\xad\x02\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\x12>\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x42\r\n\x0b_created_atb\x06proto3')
25
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!corvic/model/v1alpha/models.proto\x12\x14\x63orvic.model.v1alpha\x1a\x19\x63orvic/orm/v1/agent.proto\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\"\xd8\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>\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x42\r\n\x0b_created_at\"\x91\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\x42\r\n\x0b_created_at\"\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\"\x85\x02\n\x05\x41gent\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x17\n\x07room_id\x18\x03 \x01(\tR\x06roomId\x12I\n\x10\x61gent_parameters\x18\x04 \x01(\x0b\x32\x1e.corvic.orm.v1.AgentParametersR\x0f\x61gentParameters\x12\x15\n\x06org_id\x18\x05 \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_atJ\x04\x08\x06\x10\x07R\x08messages\"\x99\x03\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\x12>\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tcreatedAt\x88\x01\x01\x12Q\n\x14last_validation_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x12lastValidationTime\x88\x01\x01\x42\r\n\x0b_created_atB\x17\n\x15_last_validation_timeb\x06proto3')
26
26
 
27
27
  _globals = globals()
28
28
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -50,5 +50,5 @@ if _descriptor._USE_C_DESCRIPTORS == False:
50
50
  _globals['_AGENT']._serialized_start=2825
51
51
  _globals['_AGENT']._serialized_end=3086
52
52
  _globals['_COMPLETIONMODEL']._serialized_start=3089
53
- _globals['_COMPLETIONMODEL']._serialized_end=3390
53
+ _globals['_COMPLETIONMODEL']._serialized_end=3498
54
54
  # @@protoc_insertion_point(module_scope)
@@ -181,7 +181,7 @@ class Agent(_message.Message):
181
181
  def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., room_id: _Optional[str] = ..., agent_parameters: _Optional[_Union[_agent_pb2.AgentParameters, _Mapping]] = ..., org_id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
182
182
 
183
183
  class CompletionModel(_message.Message):
184
- __slots__ = ("id", "name", "description", "org_id", "parameters", "secret_api_key", "created_at")
184
+ __slots__ = ("id", "name", "description", "org_id", "parameters", "secret_api_key", "created_at", "last_validation_time")
185
185
  ID_FIELD_NUMBER: _ClassVar[int]
186
186
  NAME_FIELD_NUMBER: _ClassVar[int]
187
187
  DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
@@ -189,6 +189,7 @@ class CompletionModel(_message.Message):
189
189
  PARAMETERS_FIELD_NUMBER: _ClassVar[int]
190
190
  SECRET_API_KEY_FIELD_NUMBER: _ClassVar[int]
191
191
  CREATED_AT_FIELD_NUMBER: _ClassVar[int]
192
+ LAST_VALIDATION_TIME_FIELD_NUMBER: _ClassVar[int]
192
193
  id: str
193
194
  name: str
194
195
  description: str
@@ -196,4 +197,5 @@ class CompletionModel(_message.Message):
196
197
  parameters: _completion_model_pb2.CompletionModelParameters
197
198
  secret_api_key: str
198
199
  created_at: _timestamp_pb2.Timestamp
199
- def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., org_id: _Optional[str] = ..., parameters: _Optional[_Union[_completion_model_pb2.CompletionModelParameters, _Mapping]] = ..., secret_api_key: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
200
+ last_validation_time: _timestamp_pb2.Timestamp
201
+ def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., org_id: _Optional[str] = ..., parameters: _Optional[_Union[_completion_model_pb2.CompletionModelParameters, _Mapping]] = ..., secret_api_key: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., last_validation_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...