orca-sdk 0.1.6__py3-none-any.whl → 0.1.8__py3-none-any.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.
orca_sdk/client.py CHANGED
@@ -60,10 +60,12 @@ class ActionRecommendation(TypedDict):
60
60
  class AddMemorySuggestion(TypedDict):
61
61
  value: str
62
62
  label_name: str
63
+ similarity: NotRequired[float | None]
63
64
 
64
65
 
65
66
  class AliveResponse(TypedDict):
66
67
  ok: bool
68
+ checks: dict[str, bool]
67
69
 
68
70
 
69
71
  class ApiKeyMetadata(TypedDict):
@@ -290,7 +292,7 @@ class JobStatusInfo(TypedDict):
290
292
  class LabelClassMetrics(TypedDict):
291
293
  label: int | None
292
294
  label_name: NotRequired[str | None]
293
- average_lookup_score: float
295
+ average_lookup_score: float | None
294
296
  memory_count: int
295
297
 
296
298
 
@@ -344,7 +346,7 @@ class MemoryMetrics(TypedDict):
344
346
  cluster: NotRequired[int]
345
347
  embedding_2d: NotRequired[list]
346
348
  anomaly_score: NotRequired[float]
347
- neighbor_label_logits: NotRequired[list[float]]
349
+ neighbor_label_logits: NotRequired[list[float] | None]
348
350
  neighbor_predicted_label: NotRequired[int | None]
349
351
  neighbor_predicted_label_ambiguity: NotRequired[float]
350
352
  neighbor_predicted_label_confidence: NotRequired[float]
@@ -1155,6 +1157,9 @@ class FieldValidationError(TypedDict):
1155
1157
 
1156
1158
  class AddMemoryRecommendations(TypedDict):
1157
1159
  memories: list[AddMemorySuggestion]
1160
+ attempts_used: NotRequired[int]
1161
+ partial: NotRequired[bool]
1162
+ rejection_counts: NotRequired[dict[str, int]]
1158
1163
 
1159
1164
 
1160
1165
  class BootstrapClassificationModelRequest(TypedDict):
@@ -1270,10 +1275,19 @@ class CreateClassificationModelRequest(TypedDict):
1270
1275
  num_classes: NotRequired[int | None]
1271
1276
 
1272
1277
 
1273
- class CreateMemorysetRequest(TypedDict):
1278
+ class CreateMemorysetFromDatasourceRequest(TypedDict):
1274
1279
  name: str
1275
1280
  description: NotRequired[str | None]
1276
1281
  notes: NotRequired[str | None]
1282
+ pretrained_embedding_model_name: NotRequired[PretrainedEmbeddingModelName | None]
1283
+ finetuned_embedding_model_name_or_id: NotRequired[str | None]
1284
+ max_seq_length_override: NotRequired[int | None]
1285
+ label_names: NotRequired[list[str] | None]
1286
+ index_type: NotRequired[Literal["FLAT", "IVF_FLAT", "IVF_SQ8", "IVF_PQ", "HNSW", "DISKANN"]]
1287
+ index_params: NotRequired[dict[str, int | float | str]]
1288
+ prompt: NotRequired[str]
1289
+ hidden: NotRequired[bool]
1290
+ memory_type: NotRequired[MemoryType | None]
1277
1291
  datasource_name_or_id: str
1278
1292
  datasource_label_column: NotRequired[str | None]
1279
1293
  datasource_score_column: NotRequired[str | None]
@@ -1281,6 +1295,14 @@ class CreateMemorysetRequest(TypedDict):
1281
1295
  datasource_source_id_column: NotRequired[str | None]
1282
1296
  datasource_partition_id_column: NotRequired[str | None]
1283
1297
  remove_duplicates: NotRequired[bool]
1298
+ batch_size: NotRequired[int]
1299
+ subsample: NotRequired[int | float | None]
1300
+
1301
+
1302
+ class CreateMemorysetRequest(TypedDict):
1303
+ name: str
1304
+ description: NotRequired[str | None]
1305
+ notes: NotRequired[str | None]
1284
1306
  pretrained_embedding_model_name: NotRequired[PretrainedEmbeddingModelName | None]
1285
1307
  finetuned_embedding_model_name_or_id: NotRequired[str | None]
1286
1308
  max_seq_length_override: NotRequired[int | None]
@@ -1289,9 +1311,7 @@ class CreateMemorysetRequest(TypedDict):
1289
1311
  index_params: NotRequired[dict[str, int | float | str]]
1290
1312
  prompt: NotRequired[str]
1291
1313
  hidden: NotRequired[bool]
1292
- batch_size: NotRequired[int]
1293
- subsample: NotRequired[int | float | None]
1294
- memory_type: NotRequired[MemoryType]
1314
+ memory_type: NotRequired[MemoryType | None]
1295
1315
 
1296
1316
 
1297
1317
  class CreateRegressionModelRequest(TypedDict):
@@ -1651,8 +1671,8 @@ class MemorysetMetadata(TypedDict):
1651
1671
  created_at: str
1652
1672
  updated_at: str
1653
1673
  memories_updated_at: str
1654
- insertion_job_id: str
1655
- insertion_status: JobStatus
1674
+ insertion_job_id: str | None
1675
+ insertion_status: JobStatus | None
1656
1676
  metrics: MemorysetMetrics
1657
1677
  memory_type: MemoryType
1658
1678
  label_names: list[str] | None
@@ -1662,7 +1682,7 @@ class MemorysetMetadata(TypedDict):
1662
1682
  document_prompt_override: str | None
1663
1683
  query_prompt_override: str | None
1664
1684
  hidden: bool
1665
- insertion_task_id: str
1685
+ insertion_task_id: str | None
1666
1686
 
1667
1687
 
1668
1688
  class PaginatedWorkerInfo(TypedDict):
@@ -1733,6 +1753,22 @@ class OrcaClient(Client):
1733
1753
  ) -> AliveResponse:
1734
1754
  pass
1735
1755
 
1756
+ @overload
1757
+ def GET(
1758
+ self,
1759
+ path: Literal["/gpu/check/alive"],
1760
+ *,
1761
+ params: None = None,
1762
+ parse_as: Literal["json"] = "json",
1763
+ headers: HeaderTypes | None = None,
1764
+ cookies: CookieTypes | None = None,
1765
+ auth: AuthTypes | UseClientDefault = USE_CLIENT_DEFAULT,
1766
+ follow_redirects: bool | UseClientDefault = USE_CLIENT_DEFAULT,
1767
+ timeout: TimeoutTypes | UseClientDefault = USE_CLIENT_DEFAULT,
1768
+ extensions: RequestExtensions | None = None,
1769
+ ) -> AliveResponse:
1770
+ pass
1771
+
1736
1772
  @overload
1737
1773
  def GET(
1738
1774
  self,
@@ -1752,7 +1788,7 @@ class OrcaClient(Client):
1752
1788
  @overload
1753
1789
  def GET(
1754
1790
  self,
1755
- path: Literal["/gpu/check/healthy"],
1791
+ path: Literal["/check/healthy"],
1756
1792
  *,
1757
1793
  params: None = None,
1758
1794
  parse_as: Literal["json"] = "json",
@@ -1768,7 +1804,7 @@ class OrcaClient(Client):
1768
1804
  @overload
1769
1805
  def GET(
1770
1806
  self,
1771
- path: Literal["/check/healthy"],
1807
+ path: Literal["/gpu/check/healthy"],
1772
1808
  *,
1773
1809
  params: None = None,
1774
1810
  parse_as: Literal["json"] = "json",
@@ -2893,6 +2929,26 @@ class OrcaClient(Client):
2893
2929
  path: Literal["/memoryset"],
2894
2930
  *,
2895
2931
  params: None = None,
2932
+ json: CreateMemorysetFromDatasourceRequest,
2933
+ data: None = None,
2934
+ files: None = None,
2935
+ content: None = None,
2936
+ parse_as: Literal["json"] = "json",
2937
+ headers: HeaderTypes | None = None,
2938
+ cookies: CookieTypes | None = None,
2939
+ auth: AuthTypes | UseClientDefault = USE_CLIENT_DEFAULT,
2940
+ follow_redirects: bool | UseClientDefault = USE_CLIENT_DEFAULT,
2941
+ timeout: TimeoutTypes | UseClientDefault = USE_CLIENT_DEFAULT,
2942
+ extensions: RequestExtensions | None = None,
2943
+ ) -> MemorysetMetadata:
2944
+ pass
2945
+
2946
+ @overload
2947
+ def POST(
2948
+ self,
2949
+ path: Literal["/memoryset/empty"],
2950
+ *,
2951
+ params: None = None,
2896
2952
  json: CreateMemorysetRequest,
2897
2953
  data: None = None,
2898
2954
  files: None = None,
@@ -26,14 +26,23 @@ if TYPE_CHECKING:
26
26
  class EmbeddingModelBase(ABC):
27
27
  embedding_dim: int
28
28
  max_seq_length: int
29
+ num_params: int
29
30
  uses_context: bool
30
31
  supports_instructions: bool
31
32
 
32
33
  def __init__(
33
- self, *, name: str, embedding_dim: int, max_seq_length: int, uses_context: bool, supports_instructions: bool
34
+ self,
35
+ *,
36
+ name: str,
37
+ embedding_dim: int,
38
+ max_seq_length: int,
39
+ num_params: int,
40
+ uses_context: bool,
41
+ supports_instructions: bool,
34
42
  ):
35
43
  self.embedding_dim = embedding_dim
36
44
  self.max_seq_length = max_seq_length
45
+ self.num_params = num_params
37
46
  self.uses_context = uses_context
38
47
  self.supports_instructions = supports_instructions
39
48
 
@@ -359,6 +368,7 @@ class PretrainedEmbeddingModel(EmbeddingModelBase):
359
368
  name: Name of the pretrained embedding model
360
369
  embedding_dim: Dimension of the embeddings that are generated by the model
361
370
  max_seq_length: Maximum input length (in tokens not characters) that this model can process. Inputs that are longer will be truncated during the embedding process
371
+ num_params: Number of parameters in the model
362
372
  uses_context: Whether the pretrained embedding model uses context
363
373
  supports_instructions: Whether this model supports instruction-following
364
374
  """
@@ -383,6 +393,7 @@ class PretrainedEmbeddingModel(EmbeddingModelBase):
383
393
  name=metadata["name"],
384
394
  embedding_dim=metadata["embedding_dim"],
385
395
  max_seq_length=metadata["max_seq_length"],
396
+ num_params=metadata["num_params"],
386
397
  uses_context=metadata["uses_context"],
387
398
  supports_instructions=(
388
399
  bool(metadata["supports_instructions"]) if "supports_instructions" in metadata else False
@@ -393,7 +404,7 @@ class PretrainedEmbeddingModel(EmbeddingModelBase):
393
404
  return isinstance(other, PretrainedEmbeddingModel) and self.name == other.name
394
405
 
395
406
  def __repr__(self) -> str:
396
- return f"PretrainedEmbeddingModel({{name: {self.name}, embedding_dim: {self.embedding_dim}, max_seq_length: {self.max_seq_length}}})"
407
+ return f"PretrainedEmbeddingModel({{name: {self.name}, embedding_dim: {self.embedding_dim}, max_seq_length: {self.max_seq_length}, num_params: {self.num_params/1000000:.0f}M}})"
397
408
 
398
409
  @classmethod
399
410
  def all(cls) -> list[PretrainedEmbeddingModel]:
@@ -541,7 +552,7 @@ class PretrainedEmbeddingModel(EmbeddingModelBase):
541
552
  elif exists and if_exists == "open":
542
553
  existing = FinetunedEmbeddingModel.open(name)
543
554
 
544
- if existing.base_model_name != self.name:
555
+ if existing.base_model.name != self.name:
545
556
  raise ValueError(f"Finetuned embedding model '{name}' already exists, but with different base model")
546
557
 
547
558
  return existing
@@ -596,7 +607,7 @@ class FinetunedEmbeddingModel(EmbeddingModelBase):
596
607
  name: str
597
608
  created_at: datetime
598
609
  updated_at: datetime
599
- base_model_name: PretrainedEmbeddingModelName
610
+ base_model: PretrainedEmbeddingModel
600
611
  _status: Status
601
612
 
602
613
  def __init__(self, metadata: FinetunedEmbeddingModelMetadata):
@@ -605,13 +616,14 @@ class FinetunedEmbeddingModel(EmbeddingModelBase):
605
616
  self.name = metadata["name"]
606
617
  self.created_at = datetime.fromisoformat(metadata["created_at"])
607
618
  self.updated_at = datetime.fromisoformat(metadata["updated_at"])
608
- self.base_model_name = metadata["base_model"]
619
+ self.base_model = PretrainedEmbeddingModel._get(metadata["base_model"])
609
620
  self._status = Status(metadata["finetuning_status"])
610
621
 
611
622
  super().__init__(
612
623
  name=metadata["name"],
613
624
  embedding_dim=metadata["embedding_dim"],
614
625
  max_seq_length=metadata["max_seq_length"],
626
+ num_params=self.base_model.num_params,
615
627
  uses_context=metadata["uses_context"],
616
628
  supports_instructions=self.base_model.supports_instructions,
617
629
  )
@@ -625,15 +637,10 @@ class FinetunedEmbeddingModel(EmbeddingModelBase):
625
637
  f" name: {self.name},\n"
626
638
  f" embedding_dim: {self.embedding_dim},\n"
627
639
  f" max_seq_length: {self.max_seq_length},\n"
628
- f" base_model: PretrainedEmbeddingModel.{self.base_model_name}\n"
640
+ f" base_model: PretrainedEmbeddingModel.{self.base_model.name}\n"
629
641
  "})"
630
642
  )
631
643
 
632
- @property
633
- def base_model(self) -> PretrainedEmbeddingModel:
634
- """Pretrained model the finetuned embedding model was based on"""
635
- return PretrainedEmbeddingModel._get(self.base_model_name)
636
-
637
644
  @classmethod
638
645
  def all(cls) -> list[FinetunedEmbeddingModel]:
639
646
  """
@@ -700,6 +707,6 @@ class FinetunedEmbeddingModel(EmbeddingModelBase):
700
707
  "/finetuned_embedding_model/{name_or_id}",
701
708
  params={"name_or_id": name_or_id},
702
709
  )
703
- except (LookupError, RuntimeError):
710
+ except LookupError:
704
711
  if if_not_exists == "error":
705
712
  raise
@@ -119,7 +119,7 @@ def test_finetune_model_unauthenticated(unauthenticated_client, datasource: Data
119
119
  def test_use_finetuned_model_in_memoryset(datasource: Datasource, finetuned_model: FinetunedEmbeddingModel):
120
120
  memoryset = LabeledMemoryset.create(
121
121
  "test_memoryset_finetuned_model",
122
- datasource,
122
+ datasource=datasource,
123
123
  embedding_model=finetuned_model,
124
124
  )
125
125
  assert memoryset is not None