corvic-engine 0.3.0rc43__cp38-abi3-win_amd64.whl → 0.3.0rc45__cp38-abi3-win_amd64.whl

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.
corvic/orm/__init__.py CHANGED
@@ -56,20 +56,18 @@ from corvic_generated.orm.v1 import (
56
56
  )
57
57
  from corvic_generated.status.v1 import event_pb2
58
58
 
59
+ # NOTE: The only safe use of "sa_orm.relationship" uses the args:
60
+ # `viewonly=True` and `init=False`. Writes quickly become
61
+ # a complex mess when implementers of commit need to reason about
62
+ # which sub-object should be updated.
63
+ #
64
+ # Rather, classes in corvic.model define their own commit protocols,
65
+ # and if sub-orm-model updates are required they are explicit.
66
+
59
67
 
60
68
  class Org(SoftDeleteMixin, OrgBase):
61
69
  """An organization it a top level grouping of resources."""
62
70
 
63
- rooms: sa_orm.Mapped[dict[str, Room]] = sa_orm.relationship(
64
- collection_class=attribute_mapped_collection("room_key"),
65
- cascade="all",
66
- init=False,
67
- default_factory=dict,
68
- )
69
- sources: sa_orm.Mapped[list[Source]] = sa_orm.relationship(
70
- collection_class=list, cascade="all", init=True, default_factory=list
71
- )
72
-
73
71
 
74
72
  class Room(BelongsToOrgMixin, SoftDeleteMixin, Base):
75
73
  """A Room is a logical collection of Documents."""
@@ -79,32 +77,19 @@ class Room(BelongsToOrgMixin, SoftDeleteMixin, Base):
79
77
 
80
78
  name: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text, default=None)
81
79
  id: sa_orm.Mapped[RoomID | None] = primary_key_identity_column()
82
- org: sa_orm.Mapped[Org] = sa_orm.relationship(back_populates="rooms", init=False)
83
-
84
- feature_views: sa_orm.Mapped[dict[str, FeatureView]] = sa_orm.relationship(
85
- collection_class=attribute_mapped_collection("feature_view_key"),
86
- cascade="all",
87
- init=False,
88
- default_factory=dict,
89
- )
90
- sources: sa_orm.Mapped[dict[str, Source]] = sa_orm.relationship(
91
- collection_class=attribute_mapped_collection("source_key"),
92
- cascade="all",
93
- init=False,
94
- default_factory=dict,
95
- )
96
- spaces: sa_orm.Mapped[dict[str, Space]] = sa_orm.relationship(
97
- collection_class=attribute_mapped_collection("space_key"),
98
- cascade="all",
99
- init=False,
100
- default_factory=dict,
101
- )
102
80
 
103
81
  @property
104
82
  def room_key(self):
105
83
  return self.name
106
84
 
107
85
 
86
+ class BelongsToRoomMixin(sa_orm.MappedAsDataclass):
87
+ room_id: sa_orm.Mapped[RoomID | None] = sa_orm.mapped_column(
88
+ ForeignKey(Room).make(ondelete="CASCADE"),
89
+ nullable=True,
90
+ )
91
+
92
+
108
93
  class DefaultObjects(Base):
109
94
  """Holds the identifiers for default objects."""
110
95
 
@@ -118,7 +103,7 @@ class DefaultObjects(Base):
118
103
  version: sa_orm.Mapped[int | None] = primary_key_identity_column(type_=INT_PK_TYPE)
119
104
 
120
105
 
121
- class Resource(BelongsToOrgMixin, Base):
106
+ class Resource(BelongsToOrgMixin, BelongsToRoomMixin, Base):
122
107
  """A Resource is a reference to some durably stored file.
123
108
 
124
109
  E.g., a document could be a PDF file, an image, or a text transcript of a
@@ -130,9 +115,6 @@ class Resource(BelongsToOrgMixin, Base):
130
115
  name: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text)
131
116
  mime_type: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text)
132
117
  url: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text)
133
- room_id: sa_orm.Mapped[RoomID] = sa_orm.mapped_column(
134
- ForeignKey(Room).make(ondelete="CASCADE"), name="room_id"
135
- )
136
118
  md5: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.CHAR(32), nullable=True)
137
119
  size: sa_orm.Mapped[int] = sa_orm.mapped_column(nullable=True)
138
120
  original_path: sa_orm.Mapped[str] = sa_orm.mapped_column(nullable=True)
@@ -141,55 +123,27 @@ class Resource(BelongsToOrgMixin, Base):
141
123
  latest_event: sa_orm.Mapped[event_pb2.Event | None] = sa_orm.mapped_column(
142
124
  default=None, nullable=True
143
125
  )
144
-
145
- source_associations: sa_orm.Mapped[list[SourceResourceAssociation]] = (
146
- sa_orm.relationship(
147
- back_populates="resource",
148
- cascade="save-update, merge, delete, delete-orphan",
149
- default_factory=list,
150
- )
151
- )
152
- pipeline_input_refs: sa_orm.Mapped[list[PipelineInput]] = sa_orm.relationship(
153
- viewonly=True,
154
- back_populates="resource",
155
- default_factory=list,
156
- cascade="save-update, merge, delete, delete-orphan",
126
+ pipeline_ref: sa_orm.Mapped[PipelineInput | None] = sa_orm.relationship(
127
+ init=False, viewonly=True
157
128
  )
158
129
 
159
130
 
160
- class Source(BelongsToOrgMixin, Base):
131
+ class Source(BelongsToOrgMixin, BelongsToRoomMixin, Base):
161
132
  """A source."""
162
133
 
163
134
  __tablename__ = "source"
164
135
  __table_args__ = (sa.UniqueConstraint("name", "room_id"),)
165
136
 
166
137
  name: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text)
167
- room_id: sa_orm.Mapped[RoomID] = sa_orm.mapped_column(
168
- ForeignKey(Room).make(ondelete="CASCADE"),
169
- )
170
138
  # protobuf describing the operations required to construct a table
171
139
  table_op_graph: sa_orm.Mapped[table_pb2.TableComputeOp] = sa_orm.mapped_column()
172
140
  id: sa_orm.Mapped[SourceID | None] = primary_key_identity_column()
173
141
 
174
- resource_associations: sa_orm.Mapped[list[SourceResourceAssociation]] = (
175
- sa_orm.relationship(
176
- back_populates="source",
177
- cascade="save-update, merge, delete, delete-orphan",
178
- default_factory=list,
179
- )
180
- )
181
- org: sa_orm.Mapped[Org] = sa_orm.relationship(back_populates="sources", init=False)
182
- room: sa_orm.Mapped[Room] = sa_orm.relationship(
183
- back_populates="sources", init=False
184
- )
185
142
  source_files: sa_orm.Mapped[common_pb2.BlobUrlList | None] = sa_orm.mapped_column(
186
143
  default=None
187
144
  )
188
- pipeline_output_refs: sa_orm.Mapped[list[PipelineOutput]] = sa_orm.relationship(
189
- viewonly=True,
190
- back_populates="source",
191
- default_factory=list,
192
- cascade="save-update, merge, delete, delete-orphan",
145
+ pipeline_ref: sa_orm.Mapped[PipelineOutput | None] = sa_orm.relationship(
146
+ init=False, viewonly=True
193
147
  )
194
148
 
195
149
  @property
@@ -197,7 +151,7 @@ class Source(BelongsToOrgMixin, Base):
197
151
  return self.name
198
152
 
199
153
 
200
- class Pipeline(BelongsToOrgMixin, Base):
154
+ class Pipeline(BelongsToOrgMixin, BelongsToRoomMixin, Base):
201
155
  """A resource to source pipeline."""
202
156
 
203
157
  __tablename__ = "pipeline"
@@ -206,96 +160,60 @@ class Pipeline(BelongsToOrgMixin, Base):
206
160
  transformation: sa_orm.Mapped[pipeline_pb2.PipelineTransformation] = (
207
161
  sa_orm.mapped_column()
208
162
  )
209
- room_id: sa_orm.Mapped[RoomID] = sa_orm.mapped_column(
210
- ForeignKey(Room).make(ondelete="CASCADE")
211
- )
212
163
  name: sa_orm.Mapped[str] = sa_orm.mapped_column()
213
164
  description: sa_orm.Mapped[str | None] = sa_orm.mapped_column()
214
165
  id: sa_orm.Mapped[PipelineID | None] = primary_key_identity_column()
215
166
 
216
167
  inputs: sa_orm.Mapped[list[PipelineInput]] = sa_orm.relationship(
217
- back_populates="pipeline",
218
168
  viewonly=True,
219
- cascade="",
169
+ init=False,
220
170
  default_factory=list,
221
171
  )
222
172
 
223
173
  outputs: sa_orm.Mapped[list[PipelineOutput]] = sa_orm.relationship(
224
- back_populates="pipeline",
225
174
  viewonly=True,
226
- cascade="",
175
+ init=False,
227
176
  default_factory=list,
228
177
  )
229
178
 
230
179
 
231
- class PipelineInput(BelongsToOrgMixin, Base):
180
+ class PipelineInput(BelongsToOrgMixin, BelongsToRoomMixin, Base):
232
181
  """Pipeline input resources."""
233
182
 
234
183
  __tablename__ = "pipeline_input"
235
184
  __table_args__ = (sa.UniqueConstraint("name", "pipeline_id"),)
236
185
 
237
- pipeline: sa_orm.Mapped[Pipeline] = sa_orm.relationship(
238
- back_populates="inputs",
239
- )
240
- resource: sa_orm.Mapped[Resource] = sa_orm.relationship(
241
- back_populates="pipeline_input_refs",
242
- )
186
+ resource: sa_orm.Mapped[Resource] = sa_orm.relationship(viewonly=True, init=False)
243
187
  name: sa_orm.Mapped[str]
244
188
  """A name the pipeline uses to refer to this input."""
245
189
 
246
190
  pipeline_id: sa_orm.Mapped[PipelineID] = primary_key_foreign_column(
247
- ForeignKey(Pipeline).make(ondelete="CASCADE"), init=False
191
+ ForeignKey(Pipeline).make(ondelete="CASCADE")
248
192
  )
249
193
  resource_id: sa_orm.Mapped[ResourceID] = primary_key_foreign_column(
250
- ForeignKey(Resource).make(ondelete="CASCADE"), init=False
194
+ ForeignKey(Resource).make(ondelete="CASCADE")
251
195
  )
252
196
 
253
197
 
254
- class PipelineOutput(BelongsToOrgMixin, Base):
198
+ class PipelineOutput(BelongsToOrgMixin, BelongsToRoomMixin, Base):
255
199
  """Objects for tracking pipeline output sources."""
256
200
 
257
201
  __tablename__ = "pipeline_output"
258
202
  __table_args__ = (sa.UniqueConstraint("name", "pipeline_id"),)
259
203
 
260
- pipeline: sa_orm.Mapped[Pipeline] = sa_orm.relationship(
261
- back_populates="outputs",
262
- )
263
- source: sa_orm.Mapped[Source] = sa_orm.relationship(
264
- back_populates="pipeline_output_refs",
265
- )
204
+ source: sa_orm.Mapped[Source] = sa_orm.relationship(viewonly=True, init=False)
266
205
  name: sa_orm.Mapped[str]
267
206
  """A name the pipeline uses to refer to this output."""
268
207
 
269
208
  pipeline_id: sa_orm.Mapped[PipelineID] = primary_key_foreign_column(
270
- ForeignKey(Pipeline).make(ondelete="CASCADE"), init=False
209
+ ForeignKey(Pipeline).make(ondelete="CASCADE")
271
210
  )
272
211
  source_id: sa_orm.Mapped[SourceID] = primary_key_foreign_column(
273
- ForeignKey(Source).make(ondelete="CASCADE"), init=False
274
- )
275
-
276
-
277
- class SourceResourceAssociation(BelongsToOrgMixin, Base):
278
- __tablename__ = "source_resource_association"
279
-
280
- source_id: sa_orm.Mapped[SourceID | None] = (
281
- # this should be legal but pyright complains that it makes Source depend
282
- # on itself
283
- primary_key_foreign_column(ForeignKey(Source).make())
284
- )
285
- resource_id: sa_orm.Mapped[ResourceID | None] = (
286
- # this should be legal but pyright complains that it makes Resource depend
287
- # on itself
288
- primary_key_foreign_column(ForeignKey(Resource).make())
289
- )
290
- source: sa_orm.Mapped[Source] = sa_orm.relationship(
291
- back_populates="resource_associations", init=False
292
- )
293
- resource: sa_orm.Mapped[Resource] = sa_orm.relationship(
294
- back_populates="source_associations", init=False
212
+ ForeignKey(Source).make(ondelete="CASCADE")
295
213
  )
296
214
 
297
215
 
298
- class FeatureView(SoftDeleteMixin, BelongsToOrgMixin, Base):
216
+ class FeatureView(SoftDeleteMixin, BelongsToOrgMixin, BelongsToRoomMixin, Base):
299
217
  """A FeatureView is a logical collection of sources used by various spaces."""
300
218
 
301
219
  __tablename__ = "feature_view"
@@ -305,16 +223,6 @@ class FeatureView(SoftDeleteMixin, BelongsToOrgMixin, Base):
305
223
  name: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text, default=None)
306
224
  description: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text, default="")
307
225
 
308
- room_id: sa_orm.Mapped[RoomID | None] = sa_orm.mapped_column(
309
- ForeignKey(Room).make(ondelete="CASCADE"),
310
- nullable=True,
311
- init=True,
312
- default=None,
313
- )
314
- room: sa_orm.Mapped[Room] = sa_orm.relationship(
315
- back_populates="feature_views", init=False
316
- )
317
-
318
226
  feature_view_output: sa_orm.Mapped[feature_view_pb2.FeatureViewOutput | None] = (
319
227
  sa_orm.mapped_column(default_factory=feature_view_pb2.FeatureViewOutput)
320
228
  )
@@ -324,26 +232,24 @@ class FeatureView(SoftDeleteMixin, BelongsToOrgMixin, Base):
324
232
  return self.name
325
233
 
326
234
  feature_view_sources: sa_orm.Mapped[list[FeatureViewSource]] = sa_orm.relationship(
327
- init=True,
235
+ viewonly=True,
236
+ init=False,
328
237
  default_factory=list,
329
- back_populates="feature_view",
330
- )
331
-
332
- spaces: sa_orm.Mapped[list[Space]] = sa_orm.relationship(
333
- init=False, default_factory=list
334
238
  )
335
239
 
336
240
 
337
- class FeatureViewSource(BelongsToOrgMixin, Base):
241
+ class FeatureViewSource(BelongsToOrgMixin, BelongsToRoomMixin, Base):
338
242
  """A source inside of a feature view."""
339
243
 
340
244
  __tablename__ = "feature_view_source"
245
+
341
246
  table_op_graph: sa_orm.Mapped[table_pb2.TableComputeOp] = sa_orm.mapped_column()
342
- id: sa_orm.Mapped[FeatureViewSourceID | None] = primary_key_identity_column()
343
- drop_disconnected: sa_orm.Mapped[bool] = sa_orm.mapped_column(default=False)
344
247
  feature_view_id: sa_orm.Mapped[FeatureViewID] = sa_orm.mapped_column(
345
- ForeignKey(FeatureView).make(ondelete="CASCADE"), nullable=False, default=None
248
+ ForeignKey(FeatureView).make(ondelete="CASCADE"),
249
+ nullable=False,
346
250
  )
251
+ id: sa_orm.Mapped[FeatureViewSourceID | None] = primary_key_identity_column()
252
+ drop_disconnected: sa_orm.Mapped[bool] = sa_orm.mapped_column(default=False)
347
253
  # this should be legal but pyright complains that it makes Source depend
348
254
  # on itself
349
255
  source_id: sa_orm.Mapped[SourceID] = sa_orm.mapped_column(
@@ -351,28 +257,17 @@ class FeatureViewSource(BelongsToOrgMixin, Base):
351
257
  nullable=False,
352
258
  default=None,
353
259
  )
354
- source: sa_orm.Mapped[Source] = sa_orm.relationship(init=True, default=None)
355
- feature_view: sa_orm.Mapped[FeatureView] = sa_orm.relationship(
356
- init=True, default=None
260
+ source: sa_orm.Mapped[Source] = sa_orm.relationship(
261
+ init=True, viewonly=True, default=None
357
262
  )
358
263
 
359
264
 
360
- class Space(BelongsToOrgMixin, Base):
265
+ class Space(BelongsToOrgMixin, BelongsToRoomMixin, Base):
361
266
  """A space is a named evaluation of space parameters."""
362
267
 
363
268
  __tablename__ = "space"
364
269
  __table_args__ = (sa.UniqueConstraint("name", "room_id"),)
365
270
 
366
- room_id: sa_orm.Mapped[RoomID] = sa_orm.mapped_column(
367
- ForeignKey(Room).make(ondelete="CASCADE"),
368
- nullable=True,
369
- init=True,
370
- default=None,
371
- )
372
- room: sa_orm.Mapped[Room] = sa_orm.relationship(
373
- back_populates="spaces", init=True, default=None
374
- )
375
-
376
271
  id: sa_orm.Mapped[SpaceID | None] = primary_key_identity_column()
377
272
  name: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text, default=None)
378
273
  description: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text, default="")
@@ -387,15 +282,15 @@ class Space(BelongsToOrgMixin, Base):
387
282
  )
388
283
  auto_sync: sa_orm.Mapped[bool | None] = sa_orm.mapped_column(default=None)
389
284
  feature_view: sa_orm.Mapped[FeatureView] = sa_orm.relationship(
390
- init=True,
285
+ init=False,
391
286
  default=None,
392
- back_populates="spaces",
287
+ viewonly=True,
393
288
  )
394
289
 
395
290
  agent_associations: sa_orm.Mapped[list[AgentSpaceAssociation]] = (
396
291
  sa_orm.relationship(
397
- back_populates="space",
398
- cascade="save-update, merge, delete, delete-orphan",
292
+ init=False,
293
+ viewonly=True,
399
294
  default_factory=list,
400
295
  )
401
296
  )
@@ -405,7 +300,7 @@ class Space(BelongsToOrgMixin, Base):
405
300
  return self.name
406
301
 
407
302
 
408
- class SpaceRun(BelongsToOrgMixin, Base):
303
+ class SpaceRun(BelongsToOrgMixin, BelongsToRoomMixin, Base, kw_only=True):
409
304
  """A Space run."""
410
305
 
411
306
  __tablename__ = "space_run"
@@ -415,9 +310,9 @@ class SpaceRun(BelongsToOrgMixin, Base):
415
310
  default_factory=table_pb2.TableComputeOp
416
311
  )
417
312
  space_id: sa_orm.Mapped[SpaceID] = sa_orm.mapped_column(
418
- ForeignKey(Space).make(ondelete="CASCADE"), nullable=False, default=None
313
+ ForeignKey(Space).make(ondelete="CASCADE"), nullable=False
419
314
  )
420
- space: sa_orm.Mapped[Space] = sa_orm.relationship(init=True, default=None)
315
+ space: sa_orm.Mapped[Space] = sa_orm.relationship(init=False, viewonly=True)
421
316
  result_url: sa_orm.Mapped[str | None] = sa_orm.mapped_column(sa.Text, default=None)
422
317
  coordinates_urls: sa_orm.Mapped[common_pb2.BlobUrlList | None] = (
423
318
  sa_orm.mapped_column(default=None)
@@ -440,18 +335,12 @@ class SpaceRun(BelongsToOrgMixin, Base):
440
335
  )
441
336
 
442
337
 
443
- class Agent(SoftDeleteMixin, BelongsToOrgMixin, Base):
338
+ class Agent(SoftDeleteMixin, BelongsToOrgMixin, BelongsToRoomMixin, Base):
444
339
  """An Agent."""
445
340
 
446
341
  __tablename__ = "agent"
447
342
  __table_args__ = (live_unique_constraint("name", "room_id"),)
448
343
 
449
- room_id: sa_orm.Mapped[RoomID | None] = sa_orm.mapped_column(
450
- ForeignKey(Room).make(ondelete="CASCADE"),
451
- nullable=True,
452
- init=True,
453
- default=None,
454
- )
455
344
  id: sa_orm.Mapped[AgentID | None] = primary_key_identity_column()
456
345
  name: sa_orm.Mapped[str] = sa_orm.mapped_column(sa.Text, default=None)
457
346
 
@@ -464,22 +353,17 @@ class Agent(SoftDeleteMixin, BelongsToOrgMixin, Base):
464
353
  )
465
354
  messages: sa_orm.Mapped[dict[str, MessageEntry]] = sa_orm.relationship(
466
355
  collection_class=attribute_mapped_collection("entry_id"),
467
- cascade="all",
468
- init=False,
469
356
  default_factory=dict,
357
+ init=False,
470
358
  viewonly=True,
471
359
  )
472
360
 
473
361
  space_associations: sa_orm.Mapped[list[AgentSpaceAssociation]] = (
474
- sa_orm.relationship(
475
- back_populates="agent",
476
- cascade="save-update, merge, delete, delete-orphan",
477
- default_factory=list,
478
- )
362
+ sa_orm.relationship(default_factory=list, init=False, viewonly=True)
479
363
  )
480
364
 
481
365
 
482
- class AgentSpaceAssociation(BelongsToOrgMixin, Base):
366
+ class AgentSpaceAssociation(BelongsToOrgMixin, BelongsToRoomMixin, Base):
483
367
  __tablename__ = "agent_space_association"
484
368
 
485
369
  agent_id: sa_orm.Mapped[AgentID] = primary_key_foreign_column(
@@ -488,15 +372,12 @@ class AgentSpaceAssociation(BelongsToOrgMixin, Base):
488
372
  space_id: sa_orm.Mapped[SpaceID] = primary_key_foreign_column(
489
373
  ForeignKey(Space).make()
490
374
  )
491
- agent: sa_orm.Mapped[Agent] = sa_orm.relationship(
492
- back_populates="space_associations", init=False
493
- )
494
375
  space: sa_orm.Mapped[Space] = sa_orm.relationship(
495
- back_populates="agent_associations", init=False
376
+ back_populates="agent_associations", init=False, viewonly=True
496
377
  )
497
378
 
498
379
 
499
- class UserMessage(SoftDeleteMixin, BelongsToOrgMixin, Base):
380
+ class UserMessage(SoftDeleteMixin, BelongsToOrgMixin, BelongsToRoomMixin, Base):
500
381
  """A message sent by an user."""
501
382
 
502
383
  __tablename__ = "user_message"
@@ -510,7 +391,7 @@ class UserMessage(SoftDeleteMixin, BelongsToOrgMixin, Base):
510
391
  message: sa_orm.Mapped[str | None] = sa_orm.mapped_column(sa.Text, default=None)
511
392
 
512
393
 
513
- class AgentMessage(SoftDeleteMixin, BelongsToOrgMixin, Base):
394
+ class AgentMessage(SoftDeleteMixin, BelongsToOrgMixin, BelongsToRoomMixin, Base):
514
395
  """A message sent by an agent."""
515
396
 
516
397
  __tablename__ = "agent_message"
@@ -538,7 +419,7 @@ class AgentMessage(SoftDeleteMixin, BelongsToOrgMixin, Base):
538
419
  )
539
420
 
540
421
 
541
- class MessageEntry(SoftDeleteMixin, BelongsToOrgMixin, Base):
422
+ class MessageEntry(SoftDeleteMixin, BelongsToOrgMixin, BelongsToRoomMixin, Base):
542
423
  """A message either sent by an Agent or an User."""
543
424
 
544
425
  __tablename__ = "message_entry"
@@ -531,22 +531,24 @@ class InMemoryExecutor(OpGraphExecutor):
531
531
  case Ok(metric):
532
532
  metrics["ne_sum"] = metric
533
533
  case InvalidArgumentError() as err:
534
- return InternalError.from_(err)
534
+ _logger.warning("could not compute ne_sum", exc_info=str(err))
535
535
  match embedding_metric.condition_number(embedding, normalize=True):
536
536
  case Ok(metric):
537
537
  metrics["condition_number"] = metric
538
538
  case InvalidArgumentError() as err:
539
- return InternalError.from_(err)
539
+ _logger.warning("could not compute condition_number", exc_info=str(err))
540
540
  match embedding_metric.rcondition_number(embedding, normalize=True):
541
541
  case Ok(metric):
542
542
  metrics["rcondition_number"] = metric
543
543
  case InvalidArgumentError() as err:
544
- return InternalError.from_(err)
544
+ _logger.warning(
545
+ "could not compute rcondition_number", exc_info=str(err)
546
+ )
545
547
  match embedding_metric.stable_rank(embedding, normalize=True):
546
548
  case Ok(metric):
547
549
  metrics["stable_rank"] = metric
548
550
  case InvalidArgumentError() as err:
549
- return InternalError.from_(err)
551
+ _logger.warning("could not compute stable_rank", exc_info=str(err))
550
552
  return Ok(_SchemaAndBatches.from_dataframe(embedding_df, metrics=metrics))
551
553
 
552
554
  def _execute_embedding_coordinates(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: corvic-engine
3
- Version: 0.3.0rc43
3
+ Version: 0.3.0rc45
4
4
  Classifier: Environment :: Console
5
5
  Classifier: License :: Other/Proprietary License
6
6
  Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -11,25 +11,25 @@ Classifier: Programming Language :: Python :: 3.12
11
11
  Classifier: Programming Language :: Python :: 3.13
12
12
  Classifier: Programming Language :: Rust
13
13
  Classifier: Topic :: Scientific/Engineering
14
- Requires-Dist: cachetools >=5
15
- Requires-Dist: duckdb >=1.0.0
16
- Requires-Dist: more-itertools >=10
17
- Requires-Dist: numpy >=1.26
18
- Requires-Dist: polars >=1.7.1
19
- Requires-Dist: protobuf >=4.25
20
- Requires-Dist: protovalidate >=0.3
21
- Requires-Dist: pyarrow >=17
22
- Requires-Dist: sqlalchemy >=2
23
- Requires-Dist: sqlglot >=25.6.0, <26
24
- Requires-Dist: structlog >=24
14
+ Requires-Dist: cachetools>=5
15
+ Requires-Dist: duckdb>=1.0.0
16
+ Requires-Dist: more-itertools>=10
17
+ Requires-Dist: numpy>=1.26
18
+ Requires-Dist: polars>=1.7.1
19
+ Requires-Dist: protobuf>=4.25
20
+ Requires-Dist: protovalidate>=0.3
21
+ Requires-Dist: pyarrow>=17
22
+ Requires-Dist: sqlalchemy>=2
23
+ Requires-Dist: sqlglot>=25.6.0,<26
24
+ Requires-Dist: structlog>=24
25
25
  Requires-Dist: tqdm
26
- Requires-Dist: typing-extensions >=4.9
27
- Requires-Dist: umap-learn >=0.5.5 ; extra == 'ml'
28
- Requires-Dist: pillow >=10.0.0 ; extra == 'ml'
29
- Requires-Dist: scikit-learn >=1.4.0 ; extra == 'ml'
30
- Requires-Dist: transformers[torch] >=4.45.0 ; extra == 'ml'
31
- Requires-Dist: opentelemetry-api >=1.20.0 ; extra == 'telemetry'
32
- Requires-Dist: opentelemetry-sdk >=1.20.0 ; extra == 'telemetry'
26
+ Requires-Dist: typing-extensions>=4.9
27
+ Requires-Dist: umap-learn>=0.5.5 ; extra == 'ml'
28
+ Requires-Dist: pillow>=10.0.0 ; extra == 'ml'
29
+ Requires-Dist: scikit-learn>=1.4.0 ; extra == 'ml'
30
+ Requires-Dist: transformers[torch]>=4.45.0 ; extra == 'ml'
31
+ Requires-Dist: opentelemetry-api>=1.20.0 ; extra == 'telemetry'
32
+ Requires-Dist: opentelemetry-sdk>=1.20.0 ; extra == 'telemetry'
33
33
  Provides-Extra: ml
34
34
  Provides-Extra: telemetry
35
35
  License-File: LICENSE
@@ -1,12 +1,12 @@
1
- corvic_engine-0.3.0rc43.dist-info/METADATA,sha256=dFcSElUKY_9aoHfg-8CN6ppfT6tnIl_5y_FeeL5Np3M,1895
2
- corvic_engine-0.3.0rc43.dist-info/WHEEL,sha256=mYDPFrpmO1_UhonyEoMo2i0zHOwqc92hj_Q3CYuEBdM,94
3
- corvic_engine-0.3.0rc43.dist-info/licenses/LICENSE,sha256=DSS1OD0oIgssKOmAzkMRBv5jvvVuZQbrIv8lpl9DXY8,1035
1
+ corvic_engine-0.3.0rc45.dist-info/METADATA,sha256=yHt7aIKRrl0-UfwUTk3w-pG13PTQCdo2mz02nSPtcCA,1876
2
+ corvic_engine-0.3.0rc45.dist-info/WHEEL,sha256=_g1M2QM3kt1Ssm_sHOg_3TUY7GxNE2Ueyslb9ZDtPwk,94
3
+ corvic_engine-0.3.0rc45.dist-info/licenses/LICENSE,sha256=DSS1OD0oIgssKOmAzkMRBv5jvvVuZQbrIv8lpl9DXY8,1035
4
4
  corvic/context/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  corvic/context/__init__.py,sha256=zBnPiP-tStGSVMG_0-G_0ay6-yIX2aerW_oYRzAex74,1702
6
6
  corvic/embed/node2vec.py,sha256=JnYb8f2g4XhF6LL2TjpMxLfKhn_Yp1AzptsWwrKQWgc,11146
7
7
  corvic/embed/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  corvic/embed/__init__.py,sha256=cZZSrRXmezJuTafcQgrB1rbitqXZTVY1B5ryRzAlvgs,144
9
- corvic/embedding_metric/embeddings.py,sha256=jyqL8GthdFcC2iemtP-U-p8WiguiG_40Ld2iJJ1Tz_Y,13337
9
+ corvic/embedding_metric/embeddings.py,sha256=5jvSY0cg5P-Wg_KN7DsrcPo5AfJ_1-XKdErx_dNN5B8,14082
10
10
  corvic/embedding_metric/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  corvic/embedding_metric/__init__.py,sha256=8a-QKSQNbiksueHk5LdkugjZr6wasP4ff8A-Jsn5gUI,536
12
12
  corvic/engine/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -14,19 +14,19 @@ corvic/engine/_native.pyi,sha256=KYMPtvXqHZ-jMgZohLf4se3rr-rBpCihmjANcr6s8ag,139
14
14
  corvic/engine/__init__.py,sha256=XL4Vg7rNcBi29ccVelpeFizR9oJtGYXDn84W9zok9d4,975
15
15
  corvic/model/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  corvic/model/_agent.py,sha256=WGdxu0oLHU7EEgBOMQ0UOnH2AIIUGfeH6VSQZgC0kEk,3621
17
- corvic/model/_base_model.py,sha256=r6NKFAlTkxQPDF-RcuWoZkoOdrRSZc8iL3B6W8JvmK0,8341
17
+ corvic/model/_base_model.py,sha256=m4JkZu8QAoQEeHqzpMUlH08PGOjVZbqld4Rm0uW73QQ,8225
18
18
  corvic/model/_completion_model.py,sha256=uoqF7hwxzGXXqSPZT_CIcNBSDmYhcxMotpGPucWH6Q0,6656
19
19
  corvic/model/_defaults.py,sha256=yoKPPSmYJCE5YAD5jLTEmT4XNf_zXoggNK-uyG8MfVs,1524
20
20
  corvic/model/_errors.py,sha256=Ctlq04SDwHzJPvLaL1rzqzwVqf2b50EILfW3cH4vnh8,261
21
21
  corvic/model/_feature_type.py,sha256=Y-_-wa9fv7XaCAkxfjjoCLxxK2Ftfba-PMefD7bNXzs,917
22
- corvic/model/_feature_view.py,sha256=SW-BOCWpW9GXkFrC5b_JfY8AUAKK_q-BpHYFpkkTXd4,49894
23
- corvic/model/_pipeline.py,sha256=IEUaMX8XYDH-qx5336X5MM10F-h0nHoNNnM86b8sBqA,18193
24
- corvic/model/_proto_orm_convert.py,sha256=dU292sUqBOdb_nBgxtQXk1VcHc4ttWUoHSwLrjjtL8A,23696
25
- corvic/model/_resource.py,sha256=UFff-ZGjSnIo810kELRZ9NiA4yXETIrsxjyMId9sEmc,7304
22
+ corvic/model/_feature_view.py,sha256=kM8kMzb1oxAgIOMVmv6twZ-JLeP2NopdsKHCiKjuNIE,49700
23
+ corvic/model/_pipeline.py,sha256=A_q_nWm6UBN-AKlbQkhWNMG2r-uW0IR6vGJbhYv7z3k,17578
24
+ corvic/model/_proto_orm_convert.py,sha256=6CWe_b-L7JBS4Pb_SjUeuiuczWh-nPw0jElQIMOl_UA,25029
25
+ corvic/model/_resource.py,sha256=O93gy2r4HjsZzVUahrGbLGmxI7sfSVQCvwvCLN3nSXQ,7097
26
26
  corvic/model/_room.py,sha256=57MiBfj8hZcmUfq2PeECrOWDpBZAOSjnVqNUIGXOy2Q,2898
27
- corvic/model/_source.py,sha256=pv2vsjZNuc4KAqy39pCN0tK6kvtowODQhIeUfvS0ek0,9526
28
- corvic/model/_space.py,sha256=1tyCFz_AvBgYffA00v17ubJxXMwe8tU-sKTasCSg9eQ,36632
29
- corvic/model/__init__.py,sha256=_Hjo5INX0urDsUZPlUtnwvODNkZ7H0azMS0RXCS3MZI,2360
27
+ corvic/model/_source.py,sha256=JBCk1I6u_rUKPiB4Fvtl7uVm0Jx0LF1oWNd1-Wn_sbI,9412
28
+ corvic/model/_space.py,sha256=_qXYefPwwL6jGY3zUBYWW9X3ZE4FEuiOksPoCuG_O1Q,33928
29
+ corvic/model/__init__.py,sha256=IzYwjTcZE8MgmCESoj7W518N2CmZgcUFbzBhnpvNers,2526
30
30
  corvic/op_graph/aggregation.py,sha256=8X6vqXD7dLHrhYJU0BqmhUsWGbzD1zSP5Db5VHdIru4,6187
31
31
  corvic/op_graph/encoders.py,sha256=EhEmAiwgnXNiJ8NU0xm4deC7EZm80UzuzBL5MV140LQ,9217
32
32
  corvic/op_graph/errors.py,sha256=I4NE5053d0deGm5xx5EmyP4f98qx42xnIsW1IA-2hy4,163
@@ -50,7 +50,7 @@ corvic/orm/keys.py,sha256=Ag6Xbpvxev-VByT1KJ8ChUn9vKVEzkkMXxrjvtADCtY,2182
50
50
  corvic/orm/mixins.py,sha256=HfmzJ7LblHtddbbkDmv7nNWURL87Bnj8NeOnNbfmSN4,17794
51
51
  corvic/orm/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  corvic/orm/_proto_columns.py,sha256=tcOu92UjFJFYZLasS6sWJQBDRK26yrnmpTii_LDY4iw,913
53
- corvic/orm/__init__.py,sha256=VYyTMal77Gp7IcXkk5yCmb5333DavrwP1qokuQKqOeM,21967
53
+ corvic/orm/__init__.py,sha256=iDEAq3VGvJeR5rrQOeia728cM8pHogaKwyNGc5mmav0,17827
54
54
  corvic/pa_scalar/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  corvic/pa_scalar/_const.py,sha256=1nk6w3Y7crd3J5jSCq7DRVa1lcGk4H1RUr1l4NjnlzE,868
56
56
  corvic/pa_scalar/_from_value.py,sha256=fS3TNPcPI3jAKGmcUIhn8rdqdQEAwgTLEneVxFUeK6M,27531
@@ -68,7 +68,7 @@ corvic/sql/parse_ops.py,sha256=1ZXVlDzIzqwW_KP0mwMxaY91tLSXqpeaUHyrGJkh56o,29444
68
68
  corvic/sql/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
69
  corvic/sql/__init__.py,sha256=kZ1a39KVZ08P8Bg6XuXDLD_dTQX0k620u4nwxZF4SnY,303
70
70
  corvic/system/client.py,sha256=hGhZX8RtHrFEOlOmJNlUHktOZrutOwNYUY_a1htQSrg,821
71
- corvic/system/in_memory_executor.py,sha256=vX4aGkNHW9gNpH3teMwOxC2Vjhoxc2YBtEXeEU2n4h0,60946
71
+ corvic/system/in_memory_executor.py,sha256=dYgcxbA_O0mM1pI19t2OXs8q5B4TX-NFacR7TBIhWBk,61136
72
72
  corvic/system/op_graph_executor.py,sha256=gXFnVkemS5EwNegJdU-xVAfMLPULqMFPF7d3EG3AD_U,3482
73
73
  corvic/system/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  corvic/system/staging.py,sha256=K5P5moiuAMfPx7lxK4mArxeURBwKoyB6x9HGu9JJ16E,1846
@@ -156,7 +156,7 @@ corvic_generated/ingest/v2/table_pb2.py,sha256=aTJHaliZm5DMtp7gslNxyn9uDagz-2-_e
156
156
  corvic_generated/ingest/v2/table_pb2_grpc.py,sha256=tVs7wMWyAfvHcCQEiUOHLwaptKxgMFG6E7Ki9vNmmvQ,8151
157
157
  corvic_generated/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
158
  corvic_generated/model/v1alpha/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
- corvic_generated/model/v1alpha/models_pb2.py,sha256=3cBEUrlygqnfeIBsB-hzT7OTxhFd3cb5sTJmWnpotnA,10766
159
+ corvic_generated/model/v1alpha/models_pb2.py,sha256=PZhKYVfK1bgoYgKKoYwQ4KUbMTtmVlE1zhcQ8X8rR9w,10899
160
160
  corvic_generated/model/v1alpha/models_pb2_grpc.py,sha256=_bXoS025FcWrXR1E_3Mh4GHB1RMvgz8lIpit-Awnf-s,163
161
161
  corvic_generated/orm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
162
  corvic_generated/orm/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -176,8 +176,8 @@ corvic_generated/orm/v1/table_pb2.py,sha256=LArWzoLr31IRO2-gKc0JBn_SFB-g9JcISN8e
176
176
  corvic_generated/orm/v1/table_pb2_grpc.py,sha256=ixBOrA7wwNxEQCRT1kO2N_LayeFYEdFJjVRkkhesWbY,4558
177
177
  corvic_generated/platform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
178
  corvic_generated/platform/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
- corvic_generated/platform/v1/platform_pb2.py,sha256=w19YYczRJWAhx34JLQRqDUnP2MEWmuh8VsItGubn2A0,9844
180
- corvic_generated/platform/v1/platform_pb2_grpc.py,sha256=lpPzShz0YAgQ2GSUwIZqM6_BEPkx5cHc25qxpEXlX0s,15145
179
+ corvic_generated/platform/v1/platform_pb2.py,sha256=Il1UYttRhPk54stIbednz8rnyrEqvp5d9cNXp2bzwag,10662
180
+ corvic_generated/platform/v1/platform_pb2_grpc.py,sha256=sx3PmrtfiqZqW2Mr9NyYyKXfv4dYimbBZfvFxhE197g,17052
181
181
  corvic_generated/query/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
182
  corvic_generated/query/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
183
  corvic_generated/query/v1/query_pb2.py,sha256=cRHixYUF9eihJ2GGL9r3Ny49cfsK_zWsBCnLv23JzYs,2831
@@ -220,7 +220,7 @@ corvic_generated/ingest/v2/source_pb2.pyi,sha256=k7FdbgurQLk0JA1WiTUerznzxLv8b50
220
220
  corvic_generated/ingest/v2/source_pb2_grpc.pyi,sha256=VG5gpql2SREHgqMC_ycT-QJBVpPeSYKOYS2COgGrZa4,6195
221
221
  corvic_generated/ingest/v2/table_pb2.pyi,sha256=p22F8kv0HfM-9OzGP88bLofxmUtxfLR5eVN0HOxXiEo,4382
222
222
  corvic_generated/ingest/v2/table_pb2_grpc.pyi,sha256=AEXYNtrU4xyENumcCrkD2FmFV7T1UVidxxeZ5pyE4Qc,4554
223
- corvic_generated/model/v1alpha/models_pb2.pyi,sha256=e2OJo0zeB4lL-tUQlbpAXwSw9BAl__2fk9f63o178k0,14241
223
+ corvic_generated/model/v1alpha/models_pb2.pyi,sha256=-HUawjooxKuzlkQTkIKzRIZN7F0qBNAl7azdqKlw60M,14386
224
224
  corvic_generated/model/v1alpha/models_pb2_grpc.pyi,sha256=H9-ADaiKR9iyVZvmnXutZqWwRRCDxjUIktkfJrJFIHg,417
225
225
  corvic_generated/orm/v1/agent_pb2.pyi,sha256=9AExLKFRvOJ1fSaOdZc3Src015uvNl-le2lSPatZjSQ,4575
226
226
  corvic_generated/orm/v1/agent_pb2_grpc.pyi,sha256=H9-ADaiKR9iyVZvmnXutZqWwRRCDxjUIktkfJrJFIHg,417
@@ -236,13 +236,13 @@ corvic_generated/orm/v1/space_pb2.pyi,sha256=qKMymobwu_qQAlFxayifiUkQBpjrK9tAgoQ
236
236
  corvic_generated/orm/v1/space_pb2_grpc.pyi,sha256=H9-ADaiKR9iyVZvmnXutZqWwRRCDxjUIktkfJrJFIHg,417
237
237
  corvic_generated/orm/v1/table_pb2.pyi,sha256=qUtOna4mJQXcf2Za0buDQHHJPdtvoevjAtfyesExIwE,49683
238
238
  corvic_generated/orm/v1/table_pb2_grpc.pyi,sha256=K4hyNndkiKpxt9PYxcn_98RTpb4yxET3Um2rDe3VJTI,2499
239
- corvic_generated/platform/v1/platform_pb2.pyi,sha256=MBcHInUjm1uytkGkQs6edEgcqFnbyT928nYQMauRJsQ,5293
240
- corvic_generated/platform/v1/platform_pb2_grpc.pyi,sha256=XSkcFXnMIdK2lcBu8axH95BOTM9j19P8qVJUg5KRjqE,6793
239
+ corvic_generated/platform/v1/platform_pb2.pyi,sha256=y6kR7rBuar5cFgn7vTaAVTETOsmki-fC4I-4Y1M8JrQ,5627
240
+ corvic_generated/platform/v1/platform_pb2_grpc.pyi,sha256=wlnUjgSOjBJzyG6ubpMv9H9XD_jJUQyUsgYIyx_hx20,7652
241
241
  corvic_generated/query/v1/query_pb2.pyi,sha256=scOTjQSNmG1mPrgx9cMN8anovQMpfJDSJnoMN0P8J1s,2972
242
242
  corvic_generated/query/v1/query_pb2_grpc.pyi,sha256=Uy_oO0HSK_QlJsjneYktgFi67gMcq9GtEsM5I1CoPy8,1494
243
243
  corvic_generated/status/v1/event_pb2.pyi,sha256=eU-ibrYpvEAJSIDlSa62-bC96AQU1ykFi3_sQ1RzBvo,2027
244
244
  corvic_generated/status/v1/event_pb2_grpc.pyi,sha256=H9-ADaiKR9iyVZvmnXutZqWwRRCDxjUIktkfJrJFIHg,417
245
245
  corvic_generated/status/v1/service_pb2.pyi,sha256=iXLR2FOKQJpBgvBzpD2kVwcYOCksP2aRwK4JYaI9CBw,558
246
246
  corvic_generated/status/v1/service_pb2_grpc.pyi,sha256=OoAnaZ64FD0UTzPoRhYvQU8ecoilhHj3ySjSfHbVDaU,1501
247
- corvic/engine/_native.pyd,sha256=JQnE7t3U1UEeA9I7Li0fb6Tz5f07Fw5yZuJwe6gdevY,438272
248
- corvic_engine-0.3.0rc43.dist-info/RECORD,,
247
+ corvic/engine/_native.pyd,sha256=tqs1zEZzUSxpYJMFNawLRjHfuc7Mnb2BzcaW7bIgujg,438272
248
+ corvic_engine-0.3.0rc45.dist-info/RECORD,,