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.
@@ -46,16 +46,98 @@ def test_create_memoryset(readonly_memoryset: LabeledMemoryset, hf_dataset: Data
46
46
  assert readonly_memoryset.index_params == {"n_lists": 100}
47
47
 
48
48
 
49
+ def test_create_empty_labeled_memoryset():
50
+ name = f"test_empty_labeled_{uuid4()}"
51
+ label_names = ["negative", "positive"]
52
+ try:
53
+ memoryset = LabeledMemoryset.create(name, label_names=label_names, description="empty labeled test")
54
+ assert memoryset is not None
55
+ assert memoryset.name == name
56
+ assert memoryset.length == 0
57
+ assert memoryset.label_names == label_names
58
+ assert memoryset.insertion_status is None
59
+
60
+ # inserting should work on an empty memoryset
61
+ memoryset.insert(dict(value="i love soup", label=1, key="k1"))
62
+ memoryset.refresh()
63
+ assert memoryset.length == 1
64
+ m = memoryset[0]
65
+ assert isinstance(m, LabeledMemory)
66
+ assert m.value == "i love soup"
67
+ assert m.label == 1
68
+ assert m.label_name == "positive"
69
+ assert m.metadata.get("key") == "k1"
70
+
71
+ # if_exists="open" should re-open the same memoryset
72
+ reopened = LabeledMemoryset.create(name, label_names=label_names, if_exists="open")
73
+ assert reopened.id == memoryset.id
74
+ assert len(reopened) == 1
75
+
76
+ # if_exists="open" should raise if label_names mismatch
77
+ with pytest.raises(ValueError, match=r"label names|requested"):
78
+ LabeledMemoryset.create(name, label_names=["turtles", "frogs"], if_exists="open")
79
+
80
+ # if_exists="open" should raise if embedding_model mismatch
81
+ with pytest.raises(ValueError, match=r"embedding_model|requested"):
82
+ LabeledMemoryset.create(
83
+ name,
84
+ label_names=label_names,
85
+ embedding_model=PretrainedEmbeddingModel.DISTILBERT,
86
+ if_exists="open",
87
+ )
88
+
89
+ # if_exists="error" should raise when it already exists
90
+ with pytest.raises(ValueError, match="already exists"):
91
+ LabeledMemoryset.create(name, label_names=label_names, if_exists="error")
92
+ finally:
93
+ LabeledMemoryset.drop(name, if_not_exists="ignore")
94
+
95
+
96
+ def test_create_empty_scored_memoryset():
97
+ name = f"test_empty_scored_{uuid4()}"
98
+ try:
99
+ memoryset = ScoredMemoryset.create(name, description="empty scored test")
100
+ assert memoryset is not None
101
+ assert memoryset.name == name
102
+ assert memoryset.length == 0
103
+ assert memoryset.insertion_status is None
104
+
105
+ # inserting should work on an empty memoryset
106
+ memoryset.insert(dict(value="i love soup", score=0.25, key="k1", label=0))
107
+ memoryset.refresh()
108
+ assert memoryset.length == 1
109
+ m = memoryset[0]
110
+ assert isinstance(m, ScoredMemory)
111
+ assert m.value == "i love soup"
112
+ assert m.score == 0.25
113
+ assert m.metadata.get("key") == "k1"
114
+ assert m.metadata.get("label") == 0
115
+
116
+ # if_exists="open" should re-open the same memoryset
117
+ reopened = ScoredMemoryset.create(name, if_exists="open")
118
+ assert reopened.id == memoryset.id
119
+
120
+ # if_exists="open" should raise if embedding_model mismatch
121
+ with pytest.raises(ValueError, match=r"embedding_model|requested"):
122
+ ScoredMemoryset.create(name, embedding_model=PretrainedEmbeddingModel.DISTILBERT, if_exists="open")
123
+
124
+ # if_exists="error" should raise when it already exists
125
+ with pytest.raises(ValueError, match="already exists"):
126
+ ScoredMemoryset.create(name, if_exists="error")
127
+ finally:
128
+ ScoredMemoryset.drop(name, if_not_exists="ignore")
129
+
130
+
49
131
  def test_create_memoryset_unauthenticated(unauthenticated_client, datasource):
50
132
  with unauthenticated_client.use():
51
133
  with pytest.raises(ValueError, match="Invalid API key"):
52
- LabeledMemoryset.create("test_memoryset", datasource)
134
+ LabeledMemoryset.create("test_memoryset", datasource=datasource)
53
135
 
54
136
 
55
137
  def test_create_memoryset_invalid_input(datasource):
56
138
  # invalid name
57
139
  with pytest.raises(ValueError, match=r"Invalid input:.*"):
58
- LabeledMemoryset.create("test memoryset", datasource)
140
+ LabeledMemoryset.create("test memoryset", datasource=datasource)
59
141
 
60
142
 
61
143
  def test_create_memoryset_already_exists_error(hf_dataset, label_names, readonly_memoryset):
@@ -849,6 +931,31 @@ def test_clone_memoryset(readonly_memoryset: LabeledMemoryset):
849
931
  assert cloned_memoryset.insertion_status == Status.COMPLETED
850
932
 
851
933
 
934
+ def test_clone_empty_memoryset():
935
+ name = f"test_empty_to_clone_{uuid4()}"
936
+ cloned_name = f"test_empty_cloned_{uuid4()}"
937
+ label_names = ["negative", "positive"]
938
+ try:
939
+ # Create an empty memoryset
940
+ empty_memoryset = LabeledMemoryset.create(name, label_names=label_names, description="empty memoryset to clone")
941
+ assert empty_memoryset is not None
942
+ assert empty_memoryset.name == name
943
+ assert empty_memoryset.length == 0
944
+ assert empty_memoryset.insertion_status is None # Empty memorysets have None status
945
+
946
+ # Clone the empty memoryset
947
+ cloned_memoryset = empty_memoryset.clone(cloned_name, embedding_model=PretrainedEmbeddingModel.DISTILBERT)
948
+ assert cloned_memoryset is not None
949
+ assert cloned_memoryset.name == cloned_name
950
+ assert cloned_memoryset.length == 0 # Clone should also be empty
951
+ assert cloned_memoryset.embedding_model == PretrainedEmbeddingModel.DISTILBERT
952
+ assert cloned_memoryset.insertion_status == Status.COMPLETED
953
+ assert cloned_memoryset.label_names == label_names
954
+ finally:
955
+ LabeledMemoryset.drop(name, if_not_exists="ignore")
956
+ LabeledMemoryset.drop(cloned_name, if_not_exists="ignore")
957
+
958
+
852
959
  @pytest.fixture(scope="function")
853
960
  async def test_group_potential_duplicates(writable_memoryset: LabeledMemoryset):
854
961
  writable_memoryset.insert(
@@ -11,10 +11,8 @@ from ._shared.metrics import RegressionMetrics, calculate_regression_metrics
11
11
  from ._utils.common import UNSET, CreateMode, DropMode
12
12
  from .client import (
13
13
  OrcaClient,
14
- PostRegressionModelByModelNameOrIdEvaluationParams,
15
14
  PredictiveModelUpdate,
16
15
  RARHeadType,
17
- RegressionEvaluationRequest,
18
16
  RegressionModelMetadata,
19
17
  RegressionPredictionRequest,
20
18
  )
@@ -85,12 +83,13 @@ class RegressionModel:
85
83
  return isinstance(other, RegressionModel) and self.id == other.id
86
84
 
87
85
  def __repr__(self):
86
+ memoryset_repr = self.memoryset.__repr__().replace("\n", "\n ")
88
87
  return (
89
88
  "RegressionModel({\n"
90
89
  f" name: '{self.name}',\n"
91
90
  f" head_type: {self.head_type},\n"
92
91
  f" memory_lookup_count: {self.memory_lookup_count},\n"
93
- f" memoryset: ScoredMemoryset.open('{self.memoryset.name}'),\n"
92
+ f" memoryset: {memoryset_repr},\n"
94
93
  "})"
95
94
  )
96
95
 
@@ -1,15 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orca_sdk
3
- Version: 0.1.6
3
+ Version: 0.1.8
4
4
  Summary: SDK for interacting with Orca Services
5
5
  License-Expression: Apache-2.0
6
6
  Author: Orca DB Inc.
7
7
  Author-email: dev-rel@orcadb.ai
8
- Requires-Python: >=3.11,<3.14
8
+ Requires-Python: >=3.11,<3.15
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
13
14
  Requires-Dist: datasets (>=3.1.0,<4)
14
15
  Requires-Dist: gradio (>=5.44.1,<6)
15
16
  Requires-Dist: httpx (>=0.28.1)
@@ -1,7 +1,7 @@
1
1
  orca_sdk/__init__.py,sha256=xyjNwkLQXaX8A-UYgGwYDjv2btOXArT_yiMTfmW7KA8,1003
2
2
  orca_sdk/_shared/__init__.py,sha256=3Kt0Hu3QLI5FEp9nqGTxqAm3hAoBJKcagfaGQZ-lbJQ,223
3
- orca_sdk/_shared/metrics.py,sha256=a_FdsPGDjR3CMOEBaEhEBqMfWUg7sqz9Jeh26XzAeg0,19756
4
- orca_sdk/_shared/metrics_test.py,sha256=n7eEAT8e6RqbI94ftEDljTBzOuh-YkFpXfF3DOoZA10,12905
3
+ orca_sdk/_shared/metrics.py,sha256=faeL1B1ftmns1ikfKrIlU3xOn6j0iAGLNUupxvAFza8,24968
4
+ orca_sdk/_shared/metrics_test.py,sha256=vDIXoj8EuuLcdPJz_7EiVPgQ-FXiVT81JG30jxsg9HM,20752
5
5
  orca_sdk/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  orca_sdk/_utils/analysis_ui.py,sha256=nT-M_YcNRCVPQzvuqYNFKnNHhYkADYBvq1GlIUePrWw,9232
7
7
  orca_sdk/_utils/analysis_ui_style.css,sha256=q_ba_-_KtgztepHg829zLzypaxKayl7ySC1-oYDzV3k,836
@@ -17,25 +17,25 @@ orca_sdk/_utils/prediction_result_ui.py,sha256=Ur_FY7dz3oWNmtPiP3Wl3yRlEMgK8q9Uf
17
17
  orca_sdk/_utils/tqdm_file_reader.py,sha256=Lw7Cg1UgNuRUoN6jjqZb-IlV00H-kbRcrZLdudr1GxE,324
18
18
  orca_sdk/_utils/value_parser.py,sha256=c3qMABCCDQcIjn9N1orYYnlRwDW9JWdGwW_2TDZPLdI,1286
19
19
  orca_sdk/_utils/value_parser_test.py,sha256=OybsiC-Obi32RRi9NIuwrVBRAnlyPMV1xVAaevSrb7M,1079
20
- orca_sdk/async_client.py,sha256=y2D3fPQZmbwmtYWAk5acJ45atSZen9MNfjP2tKjpP6Q,132737
21
- orca_sdk/classification_model.py,sha256=4AcQvAm0EN7w0qx0WpgEs7VUoIIPTqIVE86wtkaIAYs,46249
20
+ orca_sdk/async_client.py,sha256=U7B8yLbeB5STPr3dkeTTwPkDHou2nBCJ9CLBPulrXVY,134893
21
+ orca_sdk/classification_model.py,sha256=jy8h5Kb4cesFqm1sat4JuxAs9uH53rUvOrlqKID-mwA,46294
22
22
  orca_sdk/classification_model_test.py,sha256=vBn7KBb9-ACuJEdzW50n54Fn6Mh9iEYbn1197lE8-yI,36997
23
- orca_sdk/client.py,sha256=oQd8Lm0agetLyAdVRP8IZqe6S5mjxhFSnbVHqhT7dmI,131798
23
+ orca_sdk/client.py,sha256=9AaEYrfK7HZEpsSSih8mRuTUiaQ4yk2n0jU92oLusGY,133942
24
24
  orca_sdk/conftest.py,sha256=0O1VY-SPKNAvi9fBLdY1RMnYVgZvMjP92y99bNAqqiw,12461
25
25
  orca_sdk/credentials.py,sha256=80_1r8n5jruEvN_E629SaRrRhKvF_NhWUEZyZzPXkqQ,6620
26
26
  orca_sdk/credentials_test.py,sha256=TLbXJMz3IlThvtSrHeLM7jRsKnrncA_ahOTpHg15Ei4,4089
27
27
  orca_sdk/datasource.py,sha256=6QaccghiyFEUSFcqnwjIJzpgIh9Id0snJk2EqViqPsU,22356
28
28
  orca_sdk/datasource_test.py,sha256=sCk3IcQJbDut5oN4Wf7PXhTxyMwalxMuCXJekSxy9wk,16665
29
- orca_sdk/embedding_model.py,sha256=4xxfo26b5X_YJtU8KyqoMmJQ6VgfHEcYftVSz-RfDng,27920
30
- orca_sdk/embedding_model_test.py,sha256=-NItbNb3tTVj5jAvSi3WjV3FP448q08lmT5iObg9vwA,8133
29
+ orca_sdk/embedding_model.py,sha256=vLGnlO9I-cN1lklNBl_LxZ8m9oK3vkegFOpvYYw8u8g,28038
30
+ orca_sdk/embedding_model_test.py,sha256=Lc6fZ0ifT0hh6ldkUfjwMPcP6OgN0Umlzu8XDLs7UO4,8144
31
31
  orca_sdk/job.py,sha256=wHwVt-s7i-v8udhLGybB-90Kp4dwOLrY806bE4Tam5Q,13092
32
32
  orca_sdk/job_test.py,sha256=nRSWxd_1UIfrj9oMVvrXjt6OBkBpddYAjb2y6P-DTUg,4327
33
- orca_sdk/memoryset.py,sha256=OtIZH14bN7tejevdsHJpBeje5Ovc58vtkw1inRMWdw4,117709
34
- orca_sdk/memoryset_test.py,sha256=YrMP_Z7BPhKAIZq1FKar83dNzR_2b56A89pnEiUbRrs,46509
35
- orca_sdk/regression_model.py,sha256=vXdY2Fbfc0MyECUR3fa_IR-nETPrDN7VFAdjvsgHPrs,31382
33
+ orca_sdk/memoryset.py,sha256=-bTQJLzr8Fdt3LIaCEliO2jT_LxcaoaqxETY42vH0mA,156070
34
+ orca_sdk/memoryset_test.py,sha256=X-gAOz-BA4ByXAitI19GQsktnL2xRGcLus8AHj5mL48,51218
35
+ orca_sdk/regression_model.py,sha256=Ga0TZLm1Qe_bQXoP90BrMiyvZ8bsJ33Z9I6RgT86t2c,31339
36
36
  orca_sdk/regression_model_test.py,sha256=DfWLkqxB835jjwM-sj1uxQ6Yz_ZBMnt8EHjdfnHsRnU,25103
37
37
  orca_sdk/telemetry.py,sha256=ZyCMiyyo_SchjadWZH55TlLrC4Ucq5S316NbW26LL4Y,27834
38
38
  orca_sdk/telemetry_test.py,sha256=eT66C5lFdNg-pQdo2I__BP7Tn5fTc9aTkVo9ZhWwhU0,5519
39
- orca_sdk-0.1.6.dist-info/METADATA,sha256=85QDZDP9Uxda4oZ3BMPP_kI5T4GPy1mFMYtWh1-nI54,3659
40
- orca_sdk-0.1.6.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
41
- orca_sdk-0.1.6.dist-info/RECORD,,
39
+ orca_sdk-0.1.8.dist-info/METADATA,sha256=EIDzSzxtf7D5LEuAdakH5rIy1XHqeEC1HhqsrF_oT5c,3710
40
+ orca_sdk-0.1.8.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
41
+ orca_sdk-0.1.8.dist-info/RECORD,,