orca-sdk 0.0.92__py3-none-any.whl → 0.0.93__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.
Files changed (25) hide show
  1. orca_sdk/_generated_api_client/api/__init__.py +4 -0
  2. orca_sdk/_generated_api_client/api/memoryset/suggest_cascading_edits_memoryset_name_or_id_memory_memory_id_cascading_edits_post.py +233 -0
  3. orca_sdk/_generated_api_client/models/__init__.py +4 -0
  4. orca_sdk/_generated_api_client/models/cascade_edit_suggestions_request.py +154 -0
  5. orca_sdk/_generated_api_client/models/cascading_edit_suggestion.py +92 -0
  6. orca_sdk/_generated_api_client/models/classification_evaluation_result.py +62 -0
  7. orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +1 -0
  8. orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +8 -0
  9. orca_sdk/_generated_api_client/models/labeled_memory.py +8 -0
  10. orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +8 -0
  11. orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics.py +8 -0
  12. orca_sdk/_generated_api_client/models/prediction_request.py +16 -7
  13. orca_sdk/_utils/data_parsing.py +31 -2
  14. orca_sdk/_utils/data_parsing_test.py +18 -15
  15. orca_sdk/_utils/tqdm_file_reader.py +12 -0
  16. orca_sdk/classification_model.py +27 -9
  17. orca_sdk/classification_model_test.py +49 -34
  18. orca_sdk/conftest.py +86 -25
  19. orca_sdk/datasource.py +22 -12
  20. orca_sdk/embedding_model_test.py +6 -5
  21. orca_sdk/memoryset.py +78 -0
  22. orca_sdk/memoryset_test.py +197 -123
  23. {orca_sdk-0.0.92.dist-info → orca_sdk-0.0.93.dist-info}/METADATA +1 -1
  24. {orca_sdk-0.0.92.dist-info → orca_sdk-0.0.93.dist-info}/RECORD +25 -21
  25. {orca_sdk-0.0.92.dist-info → orca_sdk-0.0.93.dist-info}/WHEEL +0 -0
@@ -1,23 +1,45 @@
1
1
  import random
2
+ import time
3
+ from typing import Generator
2
4
  from uuid import uuid4
3
5
 
4
6
  import pytest
7
+ from datasets import ClassLabel, Features, Value
5
8
  from datasets.arrow_dataset import Dataset
6
9
 
10
+ from orca_sdk.conftest import SAMPLE_DATA
11
+
12
+ from ._generated_api_client.models import CascadingEditSuggestion
7
13
  from .classification_model import ClassificationModel
8
14
  from .datasource import Datasource
9
15
  from .embedding_model import PretrainedEmbeddingModel
10
16
  from .memoryset import LabeledMemoryset, TaskStatus
11
17
 
18
+ """
19
+ Test Performance Note:
20
+
21
+ Creating new `LabeledMemoryset` objects is expensive, so this test file applies the following optimizations:
22
+
23
+ - Two fixtures are used to manage memorysets:
24
+ - `readonly_memoryset` is a session-scoped fixture shared across tests that do not modify state.
25
+ It should only be used in nullipotent tests.
26
+ - `writable_memoryset` is a function-scoped, regenerating fixture.
27
+ It can be used in tests that mutate or delete the memoryset, and will be reset before each test.
28
+
29
+ - To minimize fixture overhead, tests using `writable_memoryset` should combine related behaviors.
30
+ For example, prefer a single `test_delete` that covers both single and multiple deletion cases,
31
+ rather than separate `test_delete_single` and `test_delete_multiple` tests.
32
+ """
12
33
 
13
- def test_create_memoryset(memoryset: LabeledMemoryset, hf_dataset: Dataset, label_names: list[str]):
14
- assert memoryset is not None
15
- assert memoryset.name == "test_memoryset"
16
- assert memoryset.embedding_model == PretrainedEmbeddingModel.GTE_BASE
17
- assert memoryset.label_names == label_names
18
- assert memoryset.insertion_status == TaskStatus.COMPLETED
19
- assert isinstance(memoryset.length, int)
20
- assert memoryset.length == len(hf_dataset)
34
+
35
+ def test_create_memoryset(readonly_memoryset: LabeledMemoryset, hf_dataset: Dataset, label_names: list[str]):
36
+ assert readonly_memoryset is not None
37
+ assert readonly_memoryset.name == "test_readonly_memoryset"
38
+ assert readonly_memoryset.embedding_model == PretrainedEmbeddingModel.GTE_BASE
39
+ assert readonly_memoryset.label_names == label_names
40
+ assert readonly_memoryset.insertion_status == TaskStatus.COMPLETED
41
+ assert isinstance(readonly_memoryset.length, int)
42
+ assert readonly_memoryset.length == len(hf_dataset)
21
43
 
22
44
 
23
45
  def test_create_memoryset_unauthenticated(unauthenticated, datasource):
@@ -29,61 +51,55 @@ def test_create_memoryset_invalid_input(datasource):
29
51
  # invalid name
30
52
  with pytest.raises(ValueError, match=r"Invalid input:.*"):
31
53
  LabeledMemoryset.create("test memoryset", datasource)
32
- # invalid datasource
33
- datasource.id = str(uuid4())
34
- with pytest.raises(ValueError, match=r"Invalid input:.*"):
35
- LabeledMemoryset.create("test_memoryset_invalid_datasource", datasource)
36
54
 
37
55
 
38
- def test_create_memoryset_already_exists_error(hf_dataset, label_names, memoryset):
56
+ def test_create_memoryset_already_exists_error(hf_dataset, label_names, readonly_memoryset):
57
+ memoryset_name = readonly_memoryset.name
39
58
  with pytest.raises(ValueError):
40
- LabeledMemoryset.from_hf_dataset("test_memoryset", hf_dataset, label_names=label_names, value_column="text")
59
+ LabeledMemoryset.from_hf_dataset(memoryset_name, hf_dataset, label_names=label_names)
41
60
  with pytest.raises(ValueError):
42
- LabeledMemoryset.from_hf_dataset(
43
- "test_memoryset", hf_dataset, label_names=label_names, value_column="text", if_exists="error"
44
- )
61
+ LabeledMemoryset.from_hf_dataset(memoryset_name, hf_dataset, label_names=label_names, if_exists="error")
45
62
 
46
63
 
47
- def test_create_memoryset_already_exists_open(hf_dataset, label_names, memoryset):
64
+ def test_create_memoryset_already_exists_open(hf_dataset, label_names, readonly_memoryset):
48
65
  # invalid label names
49
66
  with pytest.raises(ValueError):
50
67
  LabeledMemoryset.from_hf_dataset(
51
- memoryset.name,
68
+ readonly_memoryset.name,
52
69
  hf_dataset,
53
70
  label_names=["turtles", "frogs"],
54
- value_column="text",
55
71
  if_exists="open",
56
72
  )
57
73
  # different embedding model
58
74
  with pytest.raises(ValueError):
59
75
  LabeledMemoryset.from_hf_dataset(
60
- memoryset.name,
76
+ readonly_memoryset.name,
61
77
  hf_dataset,
62
78
  label_names=label_names,
63
79
  embedding_model=PretrainedEmbeddingModel.DISTILBERT,
64
80
  if_exists="open",
65
81
  )
66
82
  opened_memoryset = LabeledMemoryset.from_hf_dataset(
67
- memoryset.name,
83
+ readonly_memoryset.name,
68
84
  hf_dataset,
69
85
  embedding_model=PretrainedEmbeddingModel.GTE_BASE,
70
86
  if_exists="open",
71
87
  )
72
88
  assert opened_memoryset is not None
73
- assert opened_memoryset.name == memoryset.name
89
+ assert opened_memoryset.name == readonly_memoryset.name
74
90
  assert opened_memoryset.length == len(hf_dataset)
75
91
 
76
92
 
77
- def test_open_memoryset(memoryset, hf_dataset):
78
- fetched_memoryset = LabeledMemoryset.open(memoryset.name)
93
+ def test_open_memoryset(readonly_memoryset, hf_dataset):
94
+ fetched_memoryset = LabeledMemoryset.open(readonly_memoryset.name)
79
95
  assert fetched_memoryset is not None
80
- assert fetched_memoryset.name == memoryset.name
96
+ assert fetched_memoryset.name == readonly_memoryset.name
81
97
  assert fetched_memoryset.length == len(hf_dataset)
82
98
 
83
99
 
84
- def test_open_memoryset_unauthenticated(unauthenticated, memoryset):
100
+ def test_open_memoryset_unauthenticated(unauthenticated, readonly_memoryset):
85
101
  with pytest.raises(ValueError, match="Invalid API key"):
86
- LabeledMemoryset.open(memoryset.name)
102
+ LabeledMemoryset.open(readonly_memoryset.name)
87
103
 
88
104
 
89
105
  def test_open_memoryset_not_found():
@@ -96,15 +112,15 @@ def test_open_memoryset_invalid_input():
96
112
  LabeledMemoryset.open("not valid id")
97
113
 
98
114
 
99
- def test_open_memoryset_unauthorized(unauthorized, memoryset):
115
+ def test_open_memoryset_unauthorized(unauthorized, readonly_memoryset):
100
116
  with pytest.raises(LookupError):
101
- LabeledMemoryset.open(memoryset.name)
117
+ LabeledMemoryset.open(readonly_memoryset.name)
102
118
 
103
119
 
104
- def test_all_memorysets(memoryset):
120
+ def test_all_memorysets(readonly_memoryset: LabeledMemoryset):
105
121
  memorysets = LabeledMemoryset.all()
106
122
  assert len(memorysets) > 0
107
- assert any(memoryset.name == memoryset.name for memoryset in memorysets)
123
+ assert any(memoryset.name == readonly_memoryset.name for memoryset in memorysets)
108
124
 
109
125
 
110
126
  def test_all_memorysets_unauthenticated(unauthenticated):
@@ -112,51 +128,39 @@ def test_all_memorysets_unauthenticated(unauthenticated):
112
128
  LabeledMemoryset.all()
113
129
 
114
130
 
115
- def test_all_memorysets_unauthorized(unauthorized, memoryset):
116
- assert memoryset not in LabeledMemoryset.all()
117
-
118
-
119
- def test_drop_memoryset(hf_dataset):
120
- memoryset = LabeledMemoryset.from_hf_dataset(
121
- "test_memoryset_delete",
122
- hf_dataset.select(range(1)),
123
- value_column="text",
124
- )
125
- assert LabeledMemoryset.exists(memoryset.name)
126
- LabeledMemoryset.drop(memoryset.name)
127
- assert not LabeledMemoryset.exists(memoryset.name)
131
+ def test_all_memorysets_unauthorized(unauthorized, readonly_memoryset):
132
+ assert readonly_memoryset not in LabeledMemoryset.all()
128
133
 
129
134
 
130
- def test_drop_memoryset_unauthenticated(unauthenticated, memoryset):
135
+ def test_drop_memoryset_unauthenticated(unauthenticated, readonly_memoryset):
131
136
  with pytest.raises(ValueError, match="Invalid API key"):
132
- LabeledMemoryset.drop(memoryset.name)
137
+ LabeledMemoryset.drop(readonly_memoryset.name)
133
138
 
134
139
 
135
- def test_drop_memoryset_not_found(memoryset):
140
+ def test_drop_memoryset_not_found():
136
141
  with pytest.raises(LookupError):
137
142
  LabeledMemoryset.drop(str(uuid4()))
138
143
  # ignores error if specified
139
144
  LabeledMemoryset.drop(str(uuid4()), if_not_exists="ignore")
140
145
 
141
146
 
142
- def test_drop_memoryset_unauthorized(unauthorized, memoryset):
147
+ def test_drop_memoryset_unauthorized(unauthorized, readonly_memoryset):
143
148
  with pytest.raises(LookupError):
144
- LabeledMemoryset.drop(memoryset.name)
149
+ LabeledMemoryset.drop(readonly_memoryset.name)
145
150
 
146
151
 
147
- def test_update_memoryset_metadata(memoryset: LabeledMemoryset):
148
- memoryset.update_metadata(description="New description")
149
- assert memoryset.description == "New description"
152
+ def test_update_memoryset_metadata(writable_memoryset: LabeledMemoryset):
153
+ # NOTE: We're combining multiple tests into one here to avoid multiple API calls
150
154
 
155
+ writable_memoryset.update_metadata(description="New description")
156
+ assert writable_memoryset.description == "New description"
151
157
 
152
- def test_update_memoryset_no_description(memoryset: LabeledMemoryset):
153
- assert memoryset.description is not None
154
- memoryset.update_metadata(description=None)
155
- assert memoryset.description is None
158
+ writable_memoryset.update_metadata(description=None)
159
+ assert writable_memoryset.description is None
156
160
 
157
161
 
158
- def test_search(memoryset: LabeledMemoryset):
159
- memory_lookups = memoryset.search(["i love soup", "cats are cute"])
162
+ def test_search(readonly_memoryset: LabeledMemoryset):
163
+ memory_lookups = readonly_memoryset.search(["i love soup", "cats are cute"])
160
164
  assert len(memory_lookups) == 2
161
165
  assert len(memory_lookups[0]) == 1
162
166
  assert len(memory_lookups[1]) == 1
@@ -164,53 +168,53 @@ def test_search(memoryset: LabeledMemoryset):
164
168
  assert memory_lookups[1][0].label == 1
165
169
 
166
170
 
167
- def test_search_count(memoryset: LabeledMemoryset):
168
- memory_lookups = memoryset.search("i love soup", count=3)
171
+ def test_search_count(readonly_memoryset: LabeledMemoryset):
172
+ memory_lookups = readonly_memoryset.search("i love soup", count=3)
169
173
  assert len(memory_lookups) == 3
170
174
  assert memory_lookups[0].label == 0
171
175
  assert memory_lookups[1].label == 0
172
176
  assert memory_lookups[2].label == 0
173
177
 
174
178
 
175
- def test_get_memory_at_index(memoryset: LabeledMemoryset, hf_dataset: Dataset, label_names: list[str]):
176
- memory = memoryset[0]
177
- assert memory.value == hf_dataset[0]["text"]
179
+ def test_get_memory_at_index(readonly_memoryset: LabeledMemoryset, hf_dataset: Dataset, label_names: list[str]):
180
+ memory = readonly_memoryset[0]
181
+ assert memory.value == hf_dataset[0]["value"]
178
182
  assert memory.label == hf_dataset[0]["label"]
179
183
  assert memory.label_name == label_names[hf_dataset[0]["label"]]
180
184
  assert memory.source_id == hf_dataset[0]["source_id"]
181
185
  assert memory.score == hf_dataset[0]["score"]
182
186
  assert memory.key == hf_dataset[0]["key"]
183
- last_memory = memoryset[-1]
184
- assert last_memory.value == hf_dataset[-1]["text"]
187
+ last_memory = readonly_memoryset[-1]
188
+ assert last_memory.value == hf_dataset[-1]["value"]
185
189
  assert last_memory.label == hf_dataset[-1]["label"]
186
190
 
187
191
 
188
- def test_get_range_of_memories(memoryset: LabeledMemoryset, hf_dataset: Dataset):
189
- memories = memoryset[1:3]
192
+ def test_get_range_of_memories(readonly_memoryset: LabeledMemoryset, hf_dataset: Dataset):
193
+ memories = readonly_memoryset[1:3]
190
194
  assert len(memories) == 2
191
- assert memories[0].value == hf_dataset["text"][1]
192
- assert memories[1].value == hf_dataset["text"][2]
195
+ assert memories[0].value == hf_dataset["value"][1]
196
+ assert memories[1].value == hf_dataset["value"][2]
193
197
 
194
198
 
195
- def test_get_memory_by_id(memoryset: LabeledMemoryset, hf_dataset: Dataset):
196
- memory = memoryset.get(memoryset[0].memory_id)
197
- assert memory.value == hf_dataset[0]["text"]
198
- assert memory == memoryset[memory.memory_id]
199
+ def test_get_memory_by_id(readonly_memoryset: LabeledMemoryset, hf_dataset: Dataset):
200
+ memory = readonly_memoryset.get(readonly_memoryset[0].memory_id)
201
+ assert memory.value == hf_dataset[0]["value"]
202
+ assert memory == readonly_memoryset[memory.memory_id]
199
203
 
200
204
 
201
- def test_get_memories_by_id(memoryset: LabeledMemoryset, hf_dataset: Dataset):
202
- memories = memoryset.get([memoryset[0].memory_id, memoryset[1].memory_id])
205
+ def test_get_memories_by_id(readonly_memoryset: LabeledMemoryset, hf_dataset: Dataset):
206
+ memories = readonly_memoryset.get([readonly_memoryset[0].memory_id, readonly_memoryset[1].memory_id])
203
207
  assert len(memories) == 2
204
- assert memories[0].value == hf_dataset[0]["text"]
205
- assert memories[1].value == hf_dataset[1]["text"]
208
+ assert memories[0].value == hf_dataset[0]["value"]
209
+ assert memories[1].value == hf_dataset[1]["value"]
206
210
 
207
211
 
208
- def test_query_memoryset(memoryset: LabeledMemoryset):
209
- memories = memoryset.query(filters=[("label", "==", 1)])
212
+ def test_query_memoryset(readonly_memoryset: LabeledMemoryset):
213
+ memories = readonly_memoryset.query(filters=[("label", "==", 1)])
210
214
  assert len(memories) == 8
211
215
  assert all(memory.label == 1 for memory in memories)
212
- assert len(memoryset.query(limit=2)) == 2
213
- assert len(memoryset.query(filters=[("metadata.key", "==", "val1")])) == 1
216
+ assert len(readonly_memoryset.query(limit=2)) == 2
217
+ assert len(readonly_memoryset.query(filters=[("metadata.key", "==", "val1")])) == 1
214
218
 
215
219
 
216
220
  def test_query_memoryset_with_feedback_metrics(model: ClassificationModel):
@@ -268,19 +272,19 @@ def test_query_memoryset_with_feedback_metrics_sort(model: ClassificationModel):
268
272
  assert memories[-1].feedback_metrics["positive"]["avg"] == -1.0
269
273
 
270
274
 
271
- def test_insert_memories(memoryset: LabeledMemoryset):
272
- memoryset.refresh()
273
- prev_length = memoryset.length
274
- memoryset.insert(
275
+ def test_insert_memories(writable_memoryset: LabeledMemoryset):
276
+ writable_memoryset.refresh()
277
+ prev_length = writable_memoryset.length
278
+ writable_memoryset.insert(
275
279
  [
276
280
  dict(value="tomato soup is my favorite", label=0),
277
281
  dict(value="cats are fun to play with", label=1),
278
282
  ]
279
283
  )
280
- assert memoryset.length == prev_length + 2
281
- memoryset.insert(dict(value="tomato soup is my favorite", label=0, key="test", source_id="test"))
282
- assert memoryset.length == prev_length + 3
283
- last_memory = memoryset[-1]
284
+ assert writable_memoryset.length == prev_length + 2
285
+ writable_memoryset.insert(dict(value="tomato soup is my favorite", label=0, key="test", source_id="test"))
286
+ assert writable_memoryset.length == prev_length + 3
287
+ last_memory = writable_memoryset[-1]
284
288
  assert last_memory.value == "tomato soup is my favorite"
285
289
  assert last_memory.label == 0
286
290
  assert last_memory.metadata
@@ -288,25 +292,26 @@ def test_insert_memories(memoryset: LabeledMemoryset):
288
292
  assert last_memory.source_id == "test"
289
293
 
290
294
 
291
- def test_update_memory(memoryset: LabeledMemoryset, hf_dataset: Dataset):
292
- memory_id = memoryset[0].memory_id
293
- updated_memory = memoryset.update(dict(memory_id=memory_id, value="i love soup so much"))
295
+ def test_update_memories(writable_memoryset: LabeledMemoryset, hf_dataset: Dataset):
296
+ # We've combined the update tests into one to avoid multiple expensive requests for a writable_memoryset
297
+
298
+ # test updating a single memory
299
+ memory_id = writable_memoryset[0].memory_id
300
+ updated_memory = writable_memoryset.update(dict(memory_id=memory_id, value="i love soup so much"))
294
301
  assert updated_memory.value == "i love soup so much"
295
302
  assert updated_memory.label == hf_dataset[0]["label"]
296
- assert memoryset.get(memory_id).value == "i love soup so much"
297
-
303
+ assert writable_memoryset.get(memory_id).value == "i love soup so much"
298
304
 
299
- def test_update_memory_instance(memoryset: LabeledMemoryset, hf_dataset: Dataset):
300
- memory = memoryset[0]
305
+ # test updating a memory instance
306
+ memory = writable_memoryset[0]
301
307
  updated_memory = memory.update(value="i love soup even more")
302
308
  assert updated_memory is memory
303
309
  assert memory.value == "i love soup even more"
304
310
  assert memory.label == hf_dataset[0]["label"]
305
311
 
306
-
307
- def test_update_memories(memoryset: LabeledMemoryset):
308
- memory_ids = [memory.memory_id for memory in memoryset[:2]]
309
- updated_memories = memoryset.update(
312
+ # test updating multiple memories
313
+ memory_ids = [memory.memory_id for memory in writable_memoryset[:2]]
314
+ updated_memories = writable_memoryset.update(
310
315
  [
311
316
  dict(memory_id=memory_ids[0], value="i love soup so much"),
312
317
  dict(memory_id=memory_ids[1], value="cats are so cute"),
@@ -316,35 +321,37 @@ def test_update_memories(memoryset: LabeledMemoryset):
316
321
  assert updated_memories[1].value == "cats are so cute"
317
322
 
318
323
 
319
- def test_delete_memory(memoryset: LabeledMemoryset):
320
- memoryset.refresh()
321
- prev_length = memoryset.length
322
- memory_id = memoryset[0].memory_id
323
- memoryset.delete(memory_id)
324
- with pytest.raises(LookupError):
325
- memoryset.get(memory_id)
326
- assert memoryset.length == prev_length - 1
324
+ def test_delete_memories(writable_memoryset: LabeledMemoryset):
325
+ # We've combined the delete tests into one to avoid multiple expensive requests for a writable_memoryset
327
326
 
327
+ # test deleting a single memory
328
+ prev_length = writable_memoryset.length
329
+ memory_id = writable_memoryset[0].memory_id
330
+ writable_memoryset.delete(memory_id)
331
+ with pytest.raises(LookupError):
332
+ writable_memoryset.get(memory_id)
333
+ assert writable_memoryset.length == prev_length - 1
328
334
 
329
- def test_delete_memories(memoryset: LabeledMemoryset):
330
- prev_length = memoryset.length
331
- memoryset.delete([memoryset[0].memory_id, memoryset[1].memory_id])
332
- assert memoryset.length == prev_length - 2
335
+ # test deleting multiple memories
336
+ prev_length = writable_memoryset.length
337
+ writable_memoryset.delete([writable_memoryset[0].memory_id, writable_memoryset[1].memory_id])
338
+ assert writable_memoryset.length == prev_length - 2
333
339
 
334
340
 
335
- def test_clone_memoryset(memoryset: LabeledMemoryset):
336
- cloned_memoryset = memoryset.clone("test_cloned_memoryset", embedding_model=PretrainedEmbeddingModel.DISTILBERT)
341
+ def test_clone_memoryset(readonly_memoryset: LabeledMemoryset):
342
+ cloned_memoryset = readonly_memoryset.clone(
343
+ "test_cloned_memoryset", embedding_model=PretrainedEmbeddingModel.DISTILBERT
344
+ )
337
345
  assert cloned_memoryset is not None
338
346
  assert cloned_memoryset.name == "test_cloned_memoryset"
339
- assert cloned_memoryset.length == memoryset.length
347
+ assert cloned_memoryset.length == readonly_memoryset.length
340
348
  assert cloned_memoryset.embedding_model == PretrainedEmbeddingModel.DISTILBERT
341
349
  assert cloned_memoryset.insertion_status == TaskStatus.COMPLETED
342
350
 
343
351
 
344
- def test_embedding_evaluation(hf_dataset):
345
- datasource = Datasource.from_hf_dataset("eval_datasource", hf_dataset, if_exists="open")
352
+ def test_embedding_evaluation(eval_datasource: Datasource):
346
353
  response = LabeledMemoryset.run_embedding_evaluation(
347
- datasource, embedding_models=["CDE_SMALL"], neighbor_count=2, value_column="text"
354
+ eval_datasource, embedding_models=["CDE_SMALL"], neighbor_count=2
348
355
  )
349
356
  assert response is not None
350
357
  assert isinstance(response, dict)
@@ -358,8 +365,8 @@ def test_embedding_evaluation(hf_dataset):
358
365
 
359
366
 
360
367
  @pytest.fixture(scope="function")
361
- async def test_group_potential_duplicates(memoryset: LabeledMemoryset):
362
- memoryset.insert(
368
+ async def test_group_potential_duplicates(writable_memoryset: LabeledMemoryset):
369
+ writable_memoryset.insert(
363
370
  [
364
371
  dict(value="raspberry soup Is my favorite", label=0),
365
372
  dict(value="Raspberry soup is MY favorite", label=0),
@@ -375,7 +382,74 @@ async def test_group_potential_duplicates(memoryset: LabeledMemoryset):
375
382
  ]
376
383
  )
377
384
 
378
- memoryset.analyze({"name": "duplicate", "possible_duplicate_threshold": 0.97})
379
- response = memoryset.get_potential_duplicate_groups()
385
+ writable_memoryset.analyze({"name": "duplicate", "possible_duplicate_threshold": 0.97})
386
+ response = writable_memoryset.get_potential_duplicate_groups()
380
387
  assert isinstance(response, list)
381
388
  assert sorted([len(res) for res in response]) == [5, 6] # 5 favorite, 6 mom
389
+
390
+
391
+ def test_get_cascading_edits_suggestions(writable_memoryset: LabeledMemoryset):
392
+ # Insert a memory to test cascading edits
393
+ SOUP = 0
394
+ CATS = 1
395
+ query_text = "i love soup" # from SAMPLE_DATA in conftest.py
396
+ mislabeled_soup_text = "soup is comfort in a bowl"
397
+ writable_memoryset.insert(
398
+ [
399
+ dict(value=mislabeled_soup_text, label=CATS), # mislabeled soup memory
400
+ ]
401
+ )
402
+
403
+ # Fetch the memory to update
404
+ memory = writable_memoryset.query(filters=[("value", "==", query_text)])[0]
405
+
406
+ # Update the label and get cascading edit suggestions
407
+ suggestions = writable_memoryset.get_cascading_edits_suggestions(
408
+ memory=memory,
409
+ old_label=CATS,
410
+ new_label=SOUP,
411
+ max_neighbors=10,
412
+ max_validation_neighbors=5,
413
+ )
414
+
415
+ # Validate the suggestions
416
+ assert len(suggestions) == 1
417
+ assert suggestions[0].neighbor.value == mislabeled_soup_text
418
+
419
+
420
+ def test_analyze_invalid_analysis_name(readonly_memoryset: LabeledMemoryset):
421
+ """Test that analyze() raises ValueError for invalid analysis names"""
422
+ memoryset = LabeledMemoryset.open(readonly_memoryset.name)
423
+
424
+ # Test with string input
425
+ with pytest.raises(ValueError) as excinfo:
426
+ memoryset.analyze("invalid_name")
427
+ assert "Invalid analysis name: invalid_name" in str(excinfo.value)
428
+ assert "Valid names are:" in str(excinfo.value)
429
+
430
+ # Test with dict input
431
+ with pytest.raises(ValueError) as excinfo:
432
+ memoryset.analyze({"name": "invalid_name"})
433
+ assert "Invalid analysis name: invalid_name" in str(excinfo.value)
434
+ assert "Valid names are:" in str(excinfo.value)
435
+
436
+ # Test with multiple analyses where one is invalid
437
+ with pytest.raises(ValueError) as excinfo:
438
+ memoryset.analyze("duplicate", "invalid_name")
439
+ assert "Invalid analysis name: invalid_name" in str(excinfo.value)
440
+ assert "Valid names are:" in str(excinfo.value)
441
+
442
+ # Test with valid analysis names
443
+ result = memoryset.analyze("duplicate", "cluster")
444
+ assert isinstance(result, dict)
445
+ assert "duplicate" in result
446
+ assert "cluster" in result
447
+
448
+
449
+ def test_drop_memoryset(writable_memoryset: LabeledMemoryset):
450
+ # NOTE: Keep this test at the end to ensure the memoryset is dropped after all tests.
451
+ # Otherwise, it would be recreated on the next test run if it were dropped earlier, and
452
+ # that's expensive.
453
+ assert LabeledMemoryset.exists(writable_memoryset.name)
454
+ LabeledMemoryset.drop(writable_memoryset.name)
455
+ assert not LabeledMemoryset.exists(writable_memoryset.name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: orca_sdk
3
- Version: 0.0.92
3
+ Version: 0.0.93
4
4
  Summary: SDK for interacting with Orca Services
5
5
  License: Apache-2.0
6
6
  Author: Orca DB Inc.
@@ -1,6 +1,6 @@
1
1
  orca_sdk/__init__.py,sha256=n0csZZlmu18cSj9aelY0SGIMoM4ymz0Wx00RK2GN8jQ,783
2
2
  orca_sdk/_generated_api_client/__init__.py,sha256=2-BPUe-gQ4yMDdxcfBZ1PEHKn-te41oFdKgrzK29JV0,69
3
- orca_sdk/_generated_api_client/api/__init__.py,sha256=4oVjtFRCqyyenbFtaOOIyKZ8q9wQ0drWrsTu4Iy9VKE,9123
3
+ orca_sdk/_generated_api_client/api/__init__.py,sha256=3Kwwz_mNGgVMnYF-VRXiHnwZNBomWwM9HNI1ROrvbtA,9301
4
4
  orca_sdk/_generated_api_client/api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  orca_sdk/_generated_api_client/api/auth/check_authentication_auth_get.py,sha256=lARAAY0SCTCBUPRo9r31yGoJZ2RklwaqD6kQBnsXfsY,3900
6
6
  orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py,sha256=HeSjn9M8vplZdoeZE8jYyHq_s_chx4ElwF6FZptI_f4,4570
@@ -53,6 +53,7 @@ orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py,sh
53
53
  orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py,sha256=LlbgqtFbIcmLIEficz6NqNDi3ofb2dk1mtwSb5TW6hk,5426
54
54
  orca_sdk/_generated_api_client/api/memoryset/potential_duplicate_groups_memoryset_name_or_id_potential_duplicate_groups_get.py,sha256=GFV-VC26gnrKsBbUJ-r8an27IOKTRO8zwuH3m97-dbA,4812
55
55
  orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py,sha256=AZuWJjzVX4Q5rEhuByGMdd3eIlkijUHTyB4NsevCg3U,5110
56
+ orca_sdk/_generated_api_client/api/memoryset/suggest_cascading_edits_memoryset_name_or_id_memory_memory_id_cascading_edits_post.py,sha256=GRkPaFCjQEK1sqW_pA6HM790020Tth7tgDwbTs1VOHI,7238
56
57
  orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py,sha256=830keCUt7CaGsd0TlxPK_TuhiMTVQKhFobRpJGVzq9I,5284
57
58
  orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py,sha256=cbfnljmpDMto1dRcrhZDxLJRXYeCMvaZjas9mzA51w8,5144
58
59
  orca_sdk/_generated_api_client/api/memoryset/update_memoryset_memoryset_name_or_id_patch.py,sha256=VxXtTAl_NDMJYOEOnAEZw8yqhP0w-ADtXGmYbsnfAdk,5010
@@ -77,14 +78,16 @@ orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetr
77
78
  orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py,sha256=l94sgnNg4IkhigmFmx3gpeTA6pl-WwdFZmsNCWX2hw0,4779
78
79
  orca_sdk/_generated_api_client/client.py,sha256=fPYjw_Y3Q2xbosRZAHb5hlOuV4KqIfHgFtEnJx1Yce8,8430
79
80
  orca_sdk/_generated_api_client/errors.py,sha256=jgL5oFlxjCNjjxWNpaFtFMqNxrG8TK6jpk5bZDvWeRM,1853
80
- orca_sdk/_generated_api_client/models/__init__.py,sha256=3fjbYdRtS5POw4Ce2FfBdnUqaVU4YRhj2iCy4wOJbvQ,10719
81
+ orca_sdk/_generated_api_client/models/__init__.py,sha256=bdrEE4WTcf4kaRWd2BOOeIGe95Cb1wwJGL6cVy6p0SE,10926
81
82
  orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py,sha256=n5xhKNRx_QaAmXgveWSwLRlAjTHkuEGiH0-Vr1H6RsY,4256
82
83
  orca_sdk/_generated_api_client/models/api_key_metadata.py,sha256=jQrSe_X5hCgFYh8PwX-X0M6VINVGVhLBlKmv4qN5otA,3789
83
84
  orca_sdk/_generated_api_client/models/api_key_metadata_scope_item.py,sha256=umhWzrAt0ZEI9B7pLpnOEsc5Kc-dxeJdzHX7iHyjt4I,182
84
85
  orca_sdk/_generated_api_client/models/base_label_prediction_result.py,sha256=wJBkJcUdI588tOXimOZ6lBIFGPAaStBrOC84m4-8CIw,3828
85
86
  orca_sdk/_generated_api_client/models/base_model.py,sha256=0UY9I_q-b6kOG0LYcw_C192PKRfmejYX9rZa7POCrTc,1563
86
87
  orca_sdk/_generated_api_client/models/body_create_datasource_datasource_post.py,sha256=w5Ni3zFPMTf8XYsH-EZmlokx7vV0vpQiSnbXlktoQBY,6713
87
- orca_sdk/_generated_api_client/models/classification_evaluation_result.py,sha256=mdSZjv7qy6OreEjwNTV_VpfoeuZHdrnlCG8sr0elhoo,4715
88
+ orca_sdk/_generated_api_client/models/cascade_edit_suggestions_request.py,sha256=juE1BymgvGCihm0KFKle6x2rw3C2KbDsQY8Jhydxpb4,5742
89
+ orca_sdk/_generated_api_client/models/cascading_edit_suggestion.py,sha256=lXgBJ663mtHpmHxfkzIdTktnvF9BZFitVdqavjgOcNs,2679
90
+ orca_sdk/_generated_api_client/models/classification_evaluation_result.py,sha256=0rdQWoW5F9c2FpPHiq8pkNQVRCHOGrNtNM5z7Y4KR64,7401
88
91
  orca_sdk/_generated_api_client/models/clone_labeled_memoryset_request.py,sha256=oMZL1jSF0twNNEwbBuz5VuLewcRcbIOc4h7MxMvI4uY,6535
89
92
  orca_sdk/_generated_api_client/models/cluster_metrics.py,sha256=u5ODh3udSzndaKaStb1vK1P49J7l0UtZ9Q977jyTxZ8,2078
90
93
  orca_sdk/_generated_api_client/models/column_info.py,sha256=aI0YD5aOabF0B_JpUU6uFSWmN6nTiDUwnjb6L9KKj9M,3358
@@ -110,7 +113,7 @@ orca_sdk/_generated_api_client/models/evaluation_response.py,sha256=3ADAPevS7WOm
110
113
  orca_sdk/_generated_api_client/models/feedback_metrics.py,sha256=1Y8aRPTIShFRPGoqN4kqoI0DnoOKmI7mx3jfx4gCoS8,2229
111
114
  orca_sdk/_generated_api_client/models/feedback_type.py,sha256=EtKEUBoLVnJLdXiiH6R9QKPHqgTrbGJ_svdeDogn69k,169
112
115
  orca_sdk/_generated_api_client/models/filter_item.py,sha256=pYj2qR1SaPrXbk7D02sKa3mIZACz8AX1Nz7Mq_-ss5k,8257
113
- orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py,sha256=8R3BKCeXrmanscp-3-E28UStjN3A2aaVzK7e-8xis-o,355
116
+ orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py,sha256=iyRsQvQKAnthnbtIzXFwQqVZsWjVkRUfBL9jbogfo1I,383
114
117
  orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py,sha256=5E9GwCFT1TyGjqF1cUBqJ5g4dL7MyaFMMpPOKMvd1gs,926
115
118
  orca_sdk/_generated_api_client/models/filter_item_op.py,sha256=vtjnJWrVJMwg6gj6BjDl6FasWzBCQygHpBbpRycOdGM,283
116
119
  orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py,sha256=O9iHbzevRZ-oQLHXMv-v4IEKG7GboRDLDuLePzng9v4,10211
@@ -119,19 +122,19 @@ orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py,sha2
119
122
  orca_sdk/_generated_api_client/models/get_memories_request.py,sha256=xNit9r5gJqqXId1KhNdQsoMh_cKjvbl9UVapfT6W3Ks,1949
120
123
  orca_sdk/_generated_api_client/models/internal_server_error_response.py,sha256=RBVgjZKuBM-fql-N_hts-RvgfrN09T7yqqOOhHYBVN8,2310
121
124
  orca_sdk/_generated_api_client/models/label_class_metrics.py,sha256=Q3vWLw8F_IdwAwhunLp0f_l7PvP1gZN1XGCZQRJtbAY,3144
122
- orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py,sha256=DEwdX5532kHRpsKJe3wOgUWUTZOdeaJV30XvsI8dyOI,6005
125
+ orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py,sha256=_r2UeP1Op3w2luQiOgQ7cQmdG8X0q9VbmdSG2T07mfw,6248
123
126
  orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py,sha256=bsXtXEf25ch5qAdpnXWSi2qzCkQPZ4xhKcHWMxlgOhQ,2338
124
127
  orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py,sha256=ZxmUTIY02_eZz5EeO6xwehFyS4yYzt_Nw3v0pEbTclQ,9004
125
- orca_sdk/_generated_api_client/models/labeled_memory.py,sha256=BYG1PqvL3FXKQCuBTg3pLwIgA0Uv8KU5YoxvdR2zZxg,5205
128
+ orca_sdk/_generated_api_client/models/labeled_memory.py,sha256=bLCcyezGKT05PROBXnObnaxvj5ymSrBc2r4fPH2mgcQ,5448
126
129
  orca_sdk/_generated_api_client/models/labeled_memory_insert.py,sha256=O3rgrloH3eu9YPzP7X1AKRfq6wxx9Eznl_prpRiMVVM,3768
127
130
  orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py,sha256=b9T8i61YUIkNpbJzLwUztfUGNqwRzYJ51RfFpukNS5I,2295
128
- orca_sdk/_generated_api_client/models/labeled_memory_lookup.py,sha256=t2mOLObeEVATumYskejgPr7d0pmggygBjyPxGCgIViY,5370
131
+ orca_sdk/_generated_api_client/models/labeled_memory_lookup.py,sha256=ufC44ri2gkSK8Dodnq1oSqvtB2_28H-wfoPKsIPy-p4,5613
129
132
  orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py,sha256=8-gqpENgh8ZxLPIvm2nrnpzlCdKQBeBlKAj20dCPpo8,2295
130
133
  orca_sdk/_generated_api_client/models/labeled_memory_metadata.py,sha256=2BEZAYpUCJwF9xd_avvR8m-gh13MXjgfUXVXFFSj-UE,2262
131
134
  orca_sdk/_generated_api_client/models/labeled_memory_metrics.py,sha256=fXDYee3im18yfNtV8OwbDZNgXRkDhYBpu3f87v_NHFc,10765
132
135
  orca_sdk/_generated_api_client/models/labeled_memory_update.py,sha256=stIKFqWNQR6SGPnhraH3L5EBnsSn7I5UUK6IX8sKdX0,5662
133
136
  orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py,sha256=PVuiR3MpN2PGcui-L1airH44rs_1Ith076kpvItstf0,2326
134
- orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics.py,sha256=pr2cM9z2F4iAMW6N38xGCYD_fr8R5co70-p0TVRN94w,6307
137
+ orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics.py,sha256=oFvoGzk7i4Z2kwPY8Ko-IPJ2XTQzsKWeeuaI0qwzcH4,6550
135
138
  orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics_feedback_metrics.py,sha256=qSUl04WibCHV-1yoytEW2TI5in2cf1HCerpOJ8wej3w,2272
136
139
  orca_sdk/_generated_api_client/models/labeled_memory_with_feedback_metrics_metadata.py,sha256=wYnU5KuMTlUwIxpbrCe4obx40h_-FJExxoCOMd0-Qik,2366
137
140
  orca_sdk/_generated_api_client/models/labeled_memoryset_metadata.py,sha256=1GiEJSXBA6VnUoLYSNk2f5Zxyj8bi_kWvUGOUzHNKyQ,7669
@@ -166,7 +169,7 @@ orca_sdk/_generated_api_client/models/prediction_feedback.py,sha256=wigdEfcKnuGr
166
169
  orca_sdk/_generated_api_client/models/prediction_feedback_category.py,sha256=qlaU7wRFtgNQt-hsTwZvt0uPtFJepv0v4TPFP19N00E,3031
167
170
  orca_sdk/_generated_api_client/models/prediction_feedback_request.py,sha256=uhtjJ5y4H4tTAQGqzYY5RzzSsntXsb2EP3dxzjnfIYE,3812
168
171
  orca_sdk/_generated_api_client/models/prediction_feedback_result.py,sha256=uFqV0S9opm6fkcMo1cVS4rXTXHY259YvacRUKtfbGl0,3317
169
- orca_sdk/_generated_api_client/models/prediction_request.py,sha256=aUJaAzeOIXLyMklVHRqGIuq5hTgxHrJVB8DdHicum8w,6315
172
+ orca_sdk/_generated_api_client/models/prediction_request.py,sha256=HE4AVf1d2yp_tUWdmie8zsTGh7bRdHh_gY2QJSocpl4,6787
170
173
  orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_0.py,sha256=Q9RNooVV_he9I9J20ugXylFQPYIuBLfVX2d9XJha6VI,226
171
174
  orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_1.py,sha256=iW6iIk_mpkkPFaxDcyLfkRQ75vrAMlEap_7hp4263pE,166
172
175
  orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py,sha256=XMHvBdeGpbSn7ZPJaBVT3QeNa2lVD1zioyj9X957wmo,2928
@@ -199,26 +202,27 @@ orca_sdk/_utils/analysis_ui_style.css,sha256=q_ba_-_KtgztepHg829zLzypaxKayl7ySC1
199
202
  orca_sdk/_utils/auth.py,sha256=9nLgcuw5B9BCkThN8Qhyq0TeJAyaRSK4bLbOsZCDIqg,2793
200
203
  orca_sdk/_utils/auth_test.py,sha256=ygVWv1Ex53LaxIP7p2hzPHl8l9qYyBD5IGmEFJMps6s,1056
201
204
  orca_sdk/_utils/common.py,sha256=wUm2pNDWytEecC5WiDWd02-yCZw3Akx0bIutG4lHsFA,805
202
- orca_sdk/_utils/data_parsing.py,sha256=1bGQttjgdPuORNnB_otg4CHHxaO1zeB7fNJDkubllkA,4106
203
- orca_sdk/_utils/data_parsing_test.py,sha256=n-6iQ-WOgux7PywCor2YXXaaurv_FsuHVu6jy1D2ZbY,8802
205
+ orca_sdk/_utils/data_parsing.py,sha256=2XPiZEV6yQ_W0brCO1QEdVuYQnZCh7h-1-1WskRnegg,5326
206
+ orca_sdk/_utils/data_parsing_test.py,sha256=XFluNehttlZtdy5cuQwzMx9KVUKv1Nh1FvTmPU4X8_0,9068
204
207
  orca_sdk/_utils/prediction_result_ui.css,sha256=sqBlkRLnovb5X5EcUDdB6iGpH63nVRlTW4uAmXuD0WM,258
205
208
  orca_sdk/_utils/prediction_result_ui.py,sha256=dudc21ka2Bqdtr_8wQaMVFxLGvrsZxWUZvfC9dn4i2A,2990
206
209
  orca_sdk/_utils/task.py,sha256=WOfFuRCoh6QHVDDYrGeq3Hi6NVihQQZJii0cBCONOWk,2400
210
+ orca_sdk/_utils/tqdm_file_reader.py,sha256=Lw7Cg1UgNuRUoN6jjqZb-IlV00H-kbRcrZLdudr1GxE,324
207
211
  orca_sdk/_utils/value_parser.py,sha256=c3qMABCCDQcIjn9N1orYYnlRwDW9JWdGwW_2TDZPLdI,1286
208
212
  orca_sdk/_utils/value_parser_test.py,sha256=OybsiC-Obi32RRi9NIuwrVBRAnlyPMV1xVAaevSrb7M,1079
209
- orca_sdk/classification_model.py,sha256=j3b277NGeF2kDehwPN7s95KkEyjafvH52ip9t-dRFPk,26439
210
- orca_sdk/classification_model_test.py,sha256=gbqyjjnwVZB_Z7IHLIVJ7U3jY-xdKag9hIXULDelVqQ,13272
211
- orca_sdk/conftest.py,sha256=_7O6yVccU-_zteUTCX3j7j7ZfyKNBD7nYL-G8ln6qXY,4661
213
+ orca_sdk/classification_model.py,sha256=E_Mmo3SzsUBue8t1mugLfPFsoAZcEzudgw_qfPayKBk,27564
214
+ orca_sdk/classification_model_test.py,sha256=flhk3vhdIpjuPlpVDrzIgpyoAGGiiYyWB1cRtuNE1oQ,14183
215
+ orca_sdk/conftest.py,sha256=JfwN_-43_EzPtJLY58R7ucVWXnAdw_HGRCf_8XFtXf4,7025
212
216
  orca_sdk/credentials.py,sha256=gq_4w_o-igCCLNR6TY1x4RzMYysKUCsXJvdi6nem-A0,3558
213
217
  orca_sdk/credentials_test.py,sha256=ETTyDZ9MEpb_X6yiRcgYGWNKCB2QZ5CLYB_unRGg1b8,1028
214
- orca_sdk/datasource.py,sha256=zdkA32FYY8XuWHMUBjgMDFtuEspdtl0-iTOMOHic90w,13733
218
+ orca_sdk/datasource.py,sha256=hRw9GIQAAQLk-bQWqaKZSLJXt5XcBPr-CWzwXvftz2U,14217
215
219
  orca_sdk/datasource_test.py,sha256=5zRew9Wi05cPJj-xSF0PwRZ8oDaaO5MhqJojlfqT5p4,3158
216
220
  orca_sdk/embedding_model.py,sha256=Hw8NlwzWVK5ts8SF0lHIs7hL38hCTreEiIyoqHY-OFA,14187
217
- orca_sdk/embedding_model_test.py,sha256=j6uGu9ZJSafDV7uFiJiG8SZVGvPQBgxxDcg7i1xbWho,6914
218
- orca_sdk/memoryset.py,sha256=xvaNn3YwG3fzk3MZhk3LeX_K5yRKP-yRf79bIAUBR-Y,56058
219
- orca_sdk/memoryset_test.py,sha256=w8-2RXFePg1pqC67uMpHSevjnW4P0GbNpqRjJXAmIa0,15122
221
+ orca_sdk/embedding_model_test.py,sha256=YbhA8flPuhhb6p67CR4sBj31e6mmbIa6-YRDPMF-xJE,6875
222
+ orca_sdk/memoryset.py,sha256=_YayL3m-qdkiiRefq0J7b3320cV1hnU-jww16SU0ThY,59864
223
+ orca_sdk/memoryset_test.py,sha256=z4aW4ljeGOiWkBC2mXGGm4pu5JAQCNDqYuHcaw4I6UQ,18968
220
224
  orca_sdk/telemetry.py,sha256=U53NI7_D1IpWqdV8NYuUrwvhpX0CF_PJvRRvOiFekno,16393
221
225
  orca_sdk/telemetry_test.py,sha256=7JfS0k7r9STMCkasCjXWL3KmbrdmVjVnFeYPCdT8jqQ,5059
222
- orca_sdk-0.0.92.dist-info/METADATA,sha256=W1Ee5mRfJQH03lS5XQAztQC1cE4gupmRJaibugGAcrs,3229
223
- orca_sdk-0.0.92.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
224
- orca_sdk-0.0.92.dist-info/RECORD,,
226
+ orca_sdk-0.0.93.dist-info/METADATA,sha256=VKQ_ZnIWW5P9okjSzZZjRvjtXTU9zkNLKbbWRI9mHLE,3229
227
+ orca_sdk-0.0.93.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
228
+ orca_sdk-0.0.93.dist-info/RECORD,,