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/_shared/metrics.py +112 -14
- orca_sdk/_shared/metrics_test.py +204 -0
- orca_sdk/async_client.py +67 -11
- orca_sdk/classification_model.py +2 -1
- orca_sdk/client.py +67 -11
- orca_sdk/embedding_model.py +19 -12
- orca_sdk/embedding_model_test.py +1 -1
- orca_sdk/memoryset.py +1093 -231
- orca_sdk/memoryset_test.py +109 -2
- orca_sdk/regression_model.py +2 -3
- {orca_sdk-0.1.6.dist-info → orca_sdk-0.1.8.dist-info}/METADATA +3 -2
- {orca_sdk-0.1.6.dist-info → orca_sdk-0.1.8.dist-info}/RECORD +13 -13
- {orca_sdk-0.1.6.dist-info → orca_sdk-0.1.8.dist-info}/WHEEL +0 -0
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
|
|
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
|
-
|
|
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["/
|
|
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,
|
orca_sdk/embedding_model.py
CHANGED
|
@@ -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,
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
710
|
+
except LookupError:
|
|
704
711
|
if if_not_exists == "error":
|
|
705
712
|
raise
|
orca_sdk/embedding_model_test.py
CHANGED
|
@@ -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
|