nucliadb 6.4.0.post4302__py3-none-any.whl → 6.4.0.post4313__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.
- nucliadb/purge/__init__.py +33 -14
- nucliadb/search/search/chat/query.py +0 -10
- nucliadb/search/search/graph_strategy.py +96 -22
- nucliadb/search/search/merge.py +11 -33
- {nucliadb-6.4.0.post4302.dist-info → nucliadb-6.4.0.post4313.dist-info}/METADATA +6 -6
- {nucliadb-6.4.0.post4302.dist-info → nucliadb-6.4.0.post4313.dist-info}/RECORD +9 -9
- {nucliadb-6.4.0.post4302.dist-info → nucliadb-6.4.0.post4313.dist-info}/WHEEL +0 -0
- {nucliadb-6.4.0.post4302.dist-info → nucliadb-6.4.0.post4313.dist-info}/entry_points.txt +0 -0
- {nucliadb-6.4.0.post4302.dist-info → nucliadb-6.4.0.post4313.dist-info}/top_level.txt +0 -0
nucliadb/purge/__init__.py
CHANGED
@@ -232,26 +232,39 @@ async def purge_kb_vectorsets(driver: Driver, storage: Storage):
|
|
232
232
|
async for resource in kb.iterate_resources():
|
233
233
|
fields.extend((await resource.get_fields(force=True)).values())
|
234
234
|
|
235
|
-
|
236
|
-
for
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
235
|
+
logger.info(f"Purging {len(fields)} fields for vectorset {vectorset}", extra={"kbid": kbid})
|
236
|
+
for fields_batch in batchify(fields, 20):
|
237
|
+
tasks = []
|
238
|
+
for field in fields_batch:
|
239
|
+
if purge_payload.storage_key_kind == VectorSetConfig.StorageKeyKind.UNSET:
|
240
|
+
# Bw/c for purge before adding purge payload. We assume
|
241
|
+
# there's only 2 kinds of KBs: with one or with more than
|
242
|
+
# one vectorset. KBs with one vectorset are not allowed to
|
243
|
+
# delete their vectorset, so we wouldn't be here. It has to
|
244
|
+
# be a KB with multiple, so the storage key kind has to be
|
245
|
+
# this:
|
246
|
+
tasks.append(
|
247
|
+
asyncio.create_task(
|
248
|
+
field.delete_vectors(
|
249
|
+
vectorset, VectorSetConfig.StorageKeyKind.VECTORSET_PREFIX
|
250
|
+
)
|
251
|
+
)
|
252
|
+
)
|
253
|
+
else:
|
254
|
+
tasks.append(
|
255
|
+
asyncio.create_task(
|
256
|
+
field.delete_vectors(vectorset, purge_payload.storage_key_kind)
|
257
|
+
)
|
258
|
+
)
|
259
|
+
await asyncio.gather(*tasks)
|
249
260
|
|
250
261
|
# Finally, delete the key
|
251
262
|
async with driver.transaction() as txn:
|
252
263
|
await txn.delete(key)
|
253
264
|
await txn.commit()
|
254
265
|
|
266
|
+
logger.info(f"Finished purging vectorset {vectorset} for KB", extra={"kbid": kbid})
|
267
|
+
|
255
268
|
except Exception as exc:
|
256
269
|
errors.capture_exception(exc)
|
257
270
|
logger.error(
|
@@ -304,3 +317,9 @@ def run() -> int: # pragma: no cover
|
|
304
317
|
setup_logging()
|
305
318
|
errors.setup_error_handling(importlib.metadata.distribution("nucliadb").version)
|
306
319
|
return asyncio.run(main())
|
320
|
+
|
321
|
+
|
322
|
+
def batchify(iterable, n=1):
|
323
|
+
"""Yield successive n-sized chunks from iterable."""
|
324
|
+
for i in range(0, len(iterable), n):
|
325
|
+
yield iterable[i : i + n]
|
@@ -246,8 +246,6 @@ async def get_relations_results(
|
|
246
246
|
kbid: str,
|
247
247
|
text_answer: str,
|
248
248
|
timeout: Optional[float] = None,
|
249
|
-
only_with_metadata: bool = False,
|
250
|
-
only_agentic_relations: bool = False,
|
251
249
|
) -> Relations:
|
252
250
|
try:
|
253
251
|
predict = get_predict()
|
@@ -257,8 +255,6 @@ async def get_relations_results(
|
|
257
255
|
kbid=kbid,
|
258
256
|
entities=detected_entities,
|
259
257
|
timeout=timeout,
|
260
|
-
only_with_metadata=only_with_metadata,
|
261
|
-
only_agentic_relations=only_agentic_relations,
|
262
258
|
)
|
263
259
|
except Exception as exc:
|
264
260
|
capture_exception(exc)
|
@@ -271,9 +267,6 @@ async def get_relations_results_from_entities(
|
|
271
267
|
kbid: str,
|
272
268
|
entities: Iterable[RelationNode],
|
273
269
|
timeout: Optional[float] = None,
|
274
|
-
only_with_metadata: bool = False,
|
275
|
-
only_agentic_relations: bool = False,
|
276
|
-
only_entity_to_entity: bool = False,
|
277
270
|
deleted_entities: set[str] = set(),
|
278
271
|
) -> Relations:
|
279
272
|
entry_points = list(entities)
|
@@ -303,9 +296,6 @@ async def get_relations_results_from_entities(
|
|
303
296
|
return await merge_relations_results(
|
304
297
|
relations_results,
|
305
298
|
entry_points,
|
306
|
-
only_with_metadata,
|
307
|
-
only_agentic_relations,
|
308
|
-
only_entity_to_entity,
|
309
299
|
)
|
310
300
|
|
311
301
|
|
@@ -19,6 +19,7 @@
|
|
19
19
|
import heapq
|
20
20
|
import json
|
21
21
|
from collections import defaultdict
|
22
|
+
from dataclasses import dataclass
|
22
23
|
from typing import Any, Collection, Iterable, Optional, Union
|
23
24
|
|
24
25
|
from nidx_protos import nodereader_pb2
|
@@ -36,13 +37,13 @@ from nucliadb.search import logger
|
|
36
37
|
from nucliadb.search.requesters.utils import Method, nidx_query
|
37
38
|
from nucliadb.search.search.chat.query import (
|
38
39
|
find_request_from_ask_request,
|
39
|
-
get_relations_results_from_entities,
|
40
40
|
)
|
41
41
|
from nucliadb.search.search.find_merge import (
|
42
42
|
compose_find_resources,
|
43
43
|
hydrate_and_rerank,
|
44
44
|
)
|
45
45
|
from nucliadb.search.search.hydrator import ResourceHydrationOptions, TextBlockHydrationOptions
|
46
|
+
from nucliadb.search.search.merge import entity_type_to_relation_node_type, merge_relations_results
|
46
47
|
from nucliadb.search.search.metrics import Metrics
|
47
48
|
from nucliadb.search.search.rerankers import (
|
48
49
|
Reranker,
|
@@ -74,7 +75,7 @@ from nucliadb_models.search import (
|
|
74
75
|
TextPosition,
|
75
76
|
UserPrompt,
|
76
77
|
)
|
77
|
-
from nucliadb_protos.utils_pb2 import RelationNode
|
78
|
+
from nucliadb_protos.utils_pb2 import Relation, RelationNode
|
78
79
|
|
79
80
|
SCHEMA = {
|
80
81
|
"title": "score_triplets",
|
@@ -289,6 +290,17 @@ Now, let's get started! Here are the triplets you need to score:
|
|
289
290
|
"""
|
290
291
|
|
291
292
|
|
293
|
+
@dataclass(frozen=True)
|
294
|
+
class FrozenRelationNode:
|
295
|
+
ntype: RelationNode.NodeType.ValueType
|
296
|
+
subtype: str
|
297
|
+
value: str
|
298
|
+
|
299
|
+
|
300
|
+
def freeze_node(r: RelationNode):
|
301
|
+
return FrozenRelationNode(ntype=r.ntype, subtype=r.subtype, value=r.value)
|
302
|
+
|
303
|
+
|
292
304
|
class RelationsParagraphMatch(BaseModel):
|
293
305
|
paragraph_id: ParagraphId
|
294
306
|
score: float
|
@@ -310,13 +322,12 @@ async def get_graph_results(
|
|
310
322
|
shards: Optional[list[str]] = None,
|
311
323
|
) -> tuple[KnowledgeboxFindResults, FindRequest]:
|
312
324
|
relations = Relations(entities={})
|
313
|
-
explored_entities: set[
|
325
|
+
explored_entities: set[FrozenRelationNode] = set()
|
314
326
|
scores: dict[str, list[float]] = {}
|
315
327
|
predict = get_predict()
|
328
|
+
entities_to_explore: list[RelationNode] = []
|
316
329
|
|
317
330
|
for hop in range(graph_strategy.hops):
|
318
|
-
entities_to_explore: Iterable[RelationNode] = []
|
319
|
-
|
320
331
|
if hop == 0:
|
321
332
|
# Get the entities from the query
|
322
333
|
with metrics.time("graph_strat_query_entities"):
|
@@ -326,14 +337,14 @@ async def get_graph_results(
|
|
326
337
|
query=query,
|
327
338
|
)
|
328
339
|
if relation_result is not None:
|
329
|
-
entities_to_explore =
|
340
|
+
entities_to_explore = [
|
330
341
|
RelationNode(
|
331
342
|
ntype=RelationNode.NodeType.ENTITY,
|
332
343
|
value=result.value,
|
333
344
|
subtype=result.family,
|
334
345
|
)
|
335
346
|
for result in relation_result.entities
|
336
|
-
|
347
|
+
]
|
337
348
|
elif (
|
338
349
|
not entities_to_explore
|
339
350
|
or graph_strategy.query_entity_detection == QueryEntityDetection.PREDICT
|
@@ -353,7 +364,7 @@ async def get_graph_results(
|
|
353
364
|
entities_to_explore = []
|
354
365
|
else:
|
355
366
|
# Find neighbors of the current relations and remove the ones already explored
|
356
|
-
entities_to_explore =
|
367
|
+
entities_to_explore = [
|
357
368
|
RelationNode(
|
358
369
|
ntype=RelationNode.NodeType.ENTITY,
|
359
370
|
value=relation.entity,
|
@@ -361,35 +372,50 @@ async def get_graph_results(
|
|
361
372
|
)
|
362
373
|
for subgraph in relations.entities.values()
|
363
374
|
for relation in subgraph.related_to
|
364
|
-
if
|
365
|
-
|
375
|
+
if FrozenRelationNode(
|
376
|
+
ntype=entity_type_to_relation_node_type(relation.entity_type),
|
377
|
+
subtype=relation.entity_subtype,
|
378
|
+
value=relation.entity,
|
379
|
+
)
|
380
|
+
not in explored_entities
|
381
|
+
]
|
382
|
+
|
383
|
+
if not entities_to_explore:
|
384
|
+
break
|
366
385
|
|
367
386
|
# Get the relations for the new entities
|
387
|
+
relations_results = []
|
368
388
|
with metrics.time("graph_strat_neighbor_relations"):
|
369
389
|
try:
|
370
|
-
|
371
|
-
kbid
|
372
|
-
|
373
|
-
|
390
|
+
relations_results = await find_graph_neighbours(
|
391
|
+
kbid,
|
392
|
+
entities_to_explore,
|
393
|
+
explored_entities,
|
394
|
+
exclude_processor_relations=graph_strategy.exclude_processor_relations,
|
395
|
+
)
|
396
|
+
new_relations = await merge_relations_results(
|
397
|
+
relations_results,
|
398
|
+
entities_to_explore,
|
374
399
|
only_with_metadata=not graph_strategy.relation_text_as_paragraphs,
|
375
|
-
only_agentic_relations=graph_strategy.agentic_graph_only,
|
376
|
-
# We only want entity to entity relations (skip resource/labels/collaborators/etc.)
|
377
|
-
only_entity_to_entity=True,
|
378
|
-
deleted_entities=explored_entities,
|
379
400
|
)
|
380
401
|
except Exception as e:
|
381
402
|
capture_exception(e)
|
382
403
|
logger.exception("Error in getting query relations for graph strategy")
|
383
404
|
new_relations = Relations(entities={})
|
384
405
|
|
385
|
-
|
406
|
+
relations.entities.update(new_relations.entities)
|
407
|
+
discovered_entities = []
|
386
408
|
|
387
|
-
|
409
|
+
for shard in relations_results:
|
410
|
+
for node in shard.nodes:
|
411
|
+
if node not in entities_to_explore and freeze_node(node) not in explored_entities:
|
412
|
+
discovered_entities.append(node)
|
388
413
|
|
389
|
-
if not
|
414
|
+
if not discovered_entities:
|
390
415
|
break
|
391
416
|
|
392
|
-
|
417
|
+
explored_entities.update([freeze_node(n) for n in entities_to_explore])
|
418
|
+
entities_to_explore = discovered_entities
|
393
419
|
|
394
420
|
# Rank the relevance of the relations
|
395
421
|
with metrics.time("graph_strat_rank_relations"):
|
@@ -898,3 +924,51 @@ def relations_matches_to_text_block_matches(
|
|
898
924
|
paragraph_matches: Collection[RelationsParagraphMatch],
|
899
925
|
) -> list[TextBlockMatch]:
|
900
926
|
return [relations_match_to_text_block_match(match) for match in paragraph_matches]
|
927
|
+
|
928
|
+
|
929
|
+
async def find_graph_neighbours(
|
930
|
+
kbid: str,
|
931
|
+
entities_to_explore: list[RelationNode],
|
932
|
+
explored_entities: set[FrozenRelationNode],
|
933
|
+
exclude_processor_relations: bool,
|
934
|
+
) -> list[nodereader_pb2.GraphSearchResponse]:
|
935
|
+
graph_query = nodereader_pb2.GraphSearchRequest(
|
936
|
+
kind=nodereader_pb2.GraphSearchRequest.QueryKind.PATH, top_k=100
|
937
|
+
)
|
938
|
+
|
939
|
+
# Explore starting from some entities
|
940
|
+
query_to_explore = nodereader_pb2.GraphQuery.PathQuery()
|
941
|
+
for entity in entities_to_explore:
|
942
|
+
entity_query = nodereader_pb2.GraphQuery.PathQuery()
|
943
|
+
entity_query.path.source.node_type = entity.ntype
|
944
|
+
entity_query.path.source.node_subtype = entity.subtype
|
945
|
+
entity_query.path.source.value = entity.value
|
946
|
+
entity_query.path.undirected = True
|
947
|
+
query_to_explore.bool_or.operands.append(entity_query)
|
948
|
+
graph_query.query.path.bool_and.operands.append(query_to_explore)
|
949
|
+
|
950
|
+
# Do not return already known entities
|
951
|
+
if explored_entities:
|
952
|
+
query_exclude_explored = nodereader_pb2.GraphQuery.PathQuery()
|
953
|
+
for explored in explored_entities:
|
954
|
+
entity_query = nodereader_pb2.GraphQuery.PathQuery()
|
955
|
+
entity_query.path.source.node_type = explored.ntype
|
956
|
+
entity_query.path.source.node_subtype = explored.subtype
|
957
|
+
entity_query.path.source.value = explored.value
|
958
|
+
entity_query.path.undirected = True
|
959
|
+
query_exclude_explored.bool_not.bool_or.operands.append(entity_query)
|
960
|
+
graph_query.query.path.bool_and.operands.append(query_exclude_explored)
|
961
|
+
|
962
|
+
# Only include relations between entities
|
963
|
+
only_entities = nodereader_pb2.GraphQuery.PathQuery()
|
964
|
+
only_entities.path.relation.relation_type = Relation.RelationType.ENTITY
|
965
|
+
graph_query.query.path.bool_and.operands.append(only_entities)
|
966
|
+
|
967
|
+
# Exclude processor entities
|
968
|
+
if exclude_processor_relations:
|
969
|
+
exclude_processor = nodereader_pb2.GraphQuery.PathQuery()
|
970
|
+
exclude_processor.facet.facet = "/g"
|
971
|
+
graph_query.query.path.bool_and.operands.append(exclude_processor)
|
972
|
+
|
973
|
+
(relations_results, _) = await nidx_query(kbid, Method.GRAPH, graph_query, timeout=5.0)
|
974
|
+
return relations_results
|
nucliadb/search/search/merge.py
CHANGED
@@ -48,7 +48,6 @@ from nucliadb.search.search.fetch import (
|
|
48
48
|
from nucliadb.search.search.query_parser.models import FulltextQuery, UnitRetrieval
|
49
49
|
from nucliadb_models.common import FieldTypeName
|
50
50
|
from nucliadb_models.labels import translate_system_to_alias_label
|
51
|
-
from nucliadb_models.metadata import RelationType
|
52
51
|
from nucliadb_models.resource import ExtractedDataTypeName
|
53
52
|
from nucliadb_models.search import (
|
54
53
|
DirectionalRelation,
|
@@ -93,6 +92,15 @@ def relation_node_type_to_entity_type(node_type: RelationNode.NodeType.ValueType
|
|
93
92
|
}[node_type]
|
94
93
|
|
95
94
|
|
95
|
+
def entity_type_to_relation_node_type(node_type: EntityType) -> RelationNode.NodeType.ValueType:
|
96
|
+
return {
|
97
|
+
EntityType.ENTITY: RelationNode.NodeType.ENTITY,
|
98
|
+
EntityType.LABEL: RelationNode.NodeType.LABEL,
|
99
|
+
EntityType.RESOURCE: RelationNode.NodeType.RESOURCE,
|
100
|
+
EntityType.USER: RelationNode.NodeType.USER,
|
101
|
+
}[node_type]
|
102
|
+
|
103
|
+
|
96
104
|
def sort_results_by_score(results: Union[list[ParagraphResult], list[DocumentResult]]):
|
97
105
|
results.sort(key=lambda x: (x.score.bm25, x.score.booster), reverse=True)
|
98
106
|
|
@@ -442,18 +450,10 @@ async def merge_relations_results(
|
|
442
450
|
graph_responses: list[GraphSearchResponse],
|
443
451
|
query_entry_points: Iterable[RelationNode],
|
444
452
|
only_with_metadata: bool = False,
|
445
|
-
only_agentic: bool = False,
|
446
|
-
only_entity_to_entity: bool = False,
|
447
453
|
) -> Relations:
|
448
454
|
loop = asyncio.get_event_loop()
|
449
455
|
return await loop.run_in_executor(
|
450
|
-
None,
|
451
|
-
_merge_relations_results,
|
452
|
-
graph_responses,
|
453
|
-
query_entry_points,
|
454
|
-
only_with_metadata,
|
455
|
-
only_agentic,
|
456
|
-
only_entity_to_entity,
|
456
|
+
None, _merge_relations_results, graph_responses, query_entry_points, only_with_metadata
|
457
457
|
)
|
458
458
|
|
459
459
|
|
@@ -461,21 +461,8 @@ def _merge_relations_results(
|
|
461
461
|
graph_responses: list[GraphSearchResponse],
|
462
462
|
query_entry_points: Iterable[RelationNode],
|
463
463
|
only_with_metadata: bool,
|
464
|
-
only_agentic: bool,
|
465
|
-
only_entity_to_entity: bool,
|
466
464
|
) -> Relations:
|
467
|
-
"""Merge relation search responses into a single Relations object while applying filters.
|
468
|
-
|
469
|
-
- When `only_with_metadata` is enabled, only include paths with metadata
|
470
|
-
(this can include paragraph_id and entity positions among other things)
|
471
|
-
|
472
|
-
- When `only_agentic` is enabled, ony include relations extracted by a Graph
|
473
|
-
Extraction Agent
|
474
|
-
|
475
|
-
- When `only_entity_to_entity` is enabled, only include relations between
|
476
|
-
nodes with type ENTITY
|
477
|
-
|
478
|
-
"""
|
465
|
+
"""Merge relation search responses into a single Relations object while applying filters."""
|
479
466
|
relations = Relations(entities={})
|
480
467
|
|
481
468
|
for entry_point in query_entry_points:
|
@@ -492,18 +479,9 @@ def _merge_relations_results(
|
|
492
479
|
if path.resource_field_id is not None:
|
493
480
|
resource_id = path.resource_field_id.split("/")[0]
|
494
481
|
|
495
|
-
# If only_with_metadata is True, we check that metadata for the relation is not None
|
496
|
-
# If only_agentic is True, we check that metadata for the relation is not None and that it has a data_augmentation_task_id
|
497
|
-
# TODO: This is suboptimal, we should be able to filter this in the query to the index,
|
498
482
|
if only_with_metadata and not metadata:
|
499
483
|
continue
|
500
484
|
|
501
|
-
if only_agentic and (not metadata or not metadata.data_augmentation_task_id):
|
502
|
-
continue
|
503
|
-
|
504
|
-
if only_entity_to_entity and relation_type != RelationType.ENTITY:
|
505
|
-
continue
|
506
|
-
|
507
485
|
if origin.value in relations.entities:
|
508
486
|
relations.entities[origin.value].related_to.append(
|
509
487
|
DirectionalRelation(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: nucliadb
|
3
|
-
Version: 6.4.0.
|
3
|
+
Version: 6.4.0.post4313
|
4
4
|
Summary: NucliaDB
|
5
5
|
Author-email: Nuclia <nucliadb@nuclia.com>
|
6
6
|
License: AGPL
|
@@ -20,11 +20,11 @@ Classifier: Programming Language :: Python :: 3.12
|
|
20
20
|
Classifier: Programming Language :: Python :: 3 :: Only
|
21
21
|
Requires-Python: <4,>=3.9
|
22
22
|
Description-Content-Type: text/markdown
|
23
|
-
Requires-Dist: nucliadb-telemetry[all]>=6.4.0.
|
24
|
-
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.4.0.
|
25
|
-
Requires-Dist: nucliadb-protos>=6.4.0.
|
26
|
-
Requires-Dist: nucliadb-models>=6.4.0.
|
27
|
-
Requires-Dist: nidx-protos>=6.4.0.
|
23
|
+
Requires-Dist: nucliadb-telemetry[all]>=6.4.0.post4313
|
24
|
+
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.4.0.post4313
|
25
|
+
Requires-Dist: nucliadb-protos>=6.4.0.post4313
|
26
|
+
Requires-Dist: nucliadb-models>=6.4.0.post4313
|
27
|
+
Requires-Dist: nidx-protos>=6.4.0.post4313
|
28
28
|
Requires-Dist: nucliadb-admin-assets>=1.0.0.post1224
|
29
29
|
Requires-Dist: nuclia-models>=0.24.2
|
30
30
|
Requires-Dist: uvicorn[standard]
|
@@ -179,7 +179,7 @@ nucliadb/models/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,8
|
|
179
179
|
nucliadb/models/responses.py,sha256=qnuOoc7TrVSUnpikfTwHLKez47_DE4mSFzpxrwtqijA,1599
|
180
180
|
nucliadb/models/internal/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
181
181
|
nucliadb/models/internal/processing.py,sha256=bzPr-hXliY81zMUgG-PDyDiFKP7Xbs71s2d0SIAu4Do,4090
|
182
|
-
nucliadb/purge/__init__.py,sha256=
|
182
|
+
nucliadb/purge/__init__.py,sha256=lZE7_FQMVz2rWiwRYrtKpAjVoO6tbnzTYofQbsGUqos,13118
|
183
183
|
nucliadb/purge/orphan_shards.py,sha256=fcP37QoFNjS6q2XozLQImY1swC_EmHeNhAJwLvEkOww,7769
|
184
184
|
nucliadb/reader/__init__.py,sha256=C5Efic7WlGm2U2C5WOyquMFbIj2Pojwe_8mwzVYnOzE,1304
|
185
185
|
nucliadb/reader/app.py,sha256=Se-BFTE6d1v1msLzQn4q5XIhjnSxa2ckDSHdvm7NRf8,3096
|
@@ -240,10 +240,10 @@ nucliadb/search/search/filters.py,sha256=1MkHlJjAQqoRCj7e5cEzK2HvBxGLE17I_omsjik
|
|
240
240
|
nucliadb/search/search/find.py,sha256=ZocoQNN28OHOmMaroGVFCnce3YHPZbFb1-9jxLNHSFM,7805
|
241
241
|
nucliadb/search/search/find_merge.py,sha256=c-7IlfjfdmWAvQOyM7IO3bKS1EQpnR4oi6pN6mwrQKw,19815
|
242
242
|
nucliadb/search/search/graph_merge.py,sha256=y5V7X-BhjHsKDXE69tzQLIIKGm4XuaFrZXw0odcHVNM,3402
|
243
|
-
nucliadb/search/search/graph_strategy.py,sha256=
|
243
|
+
nucliadb/search/search/graph_strategy.py,sha256=LtPWGVL0RzxUgDLjrYgoQdZFmPBbln1fUsmXM1z5krs,35941
|
244
244
|
nucliadb/search/search/hydrator.py,sha256=-R37gCrGxkyaiHQalnTWHNG_FCx11Zucd7qA1vQCxuw,6985
|
245
245
|
nucliadb/search/search/ingestion_agents.py,sha256=NeJr4EEX-bvFFMGvXOOwLv8uU7NuQ-ntJnnrhnKfMzY,3174
|
246
|
-
nucliadb/search/search/merge.py,sha256=
|
246
|
+
nucliadb/search/search/merge.py,sha256=XiRBsxhYPshPV7lZXD-9E259KZOPIf4I2tKosY0lPo4,22470
|
247
247
|
nucliadb/search/search/metrics.py,sha256=3I6IN0qDSmqIvUaWJmT3rt-Jyjs6LcvnKI8ZqCiuJPY,3501
|
248
248
|
nucliadb/search/search/paragraphs.py,sha256=pNAEiYqJGGUVcEf7xf-PFMVqz0PX4Qb-WNG-_zPGN2o,7799
|
249
249
|
nucliadb/search/search/pgcatalog.py,sha256=s_J98fsX_RuFXwpejpkGqG-tD9ELuzz4YQ6U3ew5h2g,9313
|
@@ -259,7 +259,7 @@ nucliadb/search/search/chat/ask.py,sha256=aaNj0MeAbx9dyeKpQJdm3VsHMq9OmcCESxahbg
|
|
259
259
|
nucliadb/search/search/chat/exceptions.py,sha256=Siy4GXW2L7oPhIR86H3WHBhE9lkV4A4YaAszuGGUf54,1356
|
260
260
|
nucliadb/search/search/chat/images.py,sha256=PA8VWxT5_HUGfW1ULhKTK46UBsVyINtWWqEM1ulzX1E,3095
|
261
261
|
nucliadb/search/search/chat/prompt.py,sha256=e8C7_MPr6Cn3nJHA4hWpeW3629KVI1ZUQA_wZf9Kiu4,48503
|
262
|
-
nucliadb/search/search/chat/query.py,sha256=
|
262
|
+
nucliadb/search/search/chat/query.py,sha256=3jMPNbiFEOoS0ydMOPYkSx1qVlvAv51npzadWXDwkMs,16650
|
263
263
|
nucliadb/search/search/query_parser/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
264
264
|
nucliadb/search/search/query_parser/exceptions.py,sha256=szAOXUZ27oNY-OSa9t2hQ5HHkQQC0EX1FZz_LluJHJE,1224
|
265
265
|
nucliadb/search/search/query_parser/fetcher.py,sha256=SkvBRDfSKmuz-QygNKLAU4AhZhhDo1dnOZmt1zA28RA,16851
|
@@ -368,8 +368,8 @@ nucliadb/writer/tus/local.py,sha256=7jYa_w9b-N90jWgN2sQKkNcomqn6JMVBOVeDOVYJHto,
|
|
368
368
|
nucliadb/writer/tus/s3.py,sha256=vF0NkFTXiXhXq3bCVXXVV-ED38ECVoUeeYViP8uMqcU,8357
|
369
369
|
nucliadb/writer/tus/storage.py,sha256=ToqwjoYnjI4oIcwzkhha_MPxi-k4Jk3Lt55zRwaC1SM,2903
|
370
370
|
nucliadb/writer/tus/utils.py,sha256=MSdVbRsRSZVdkaum69_0wku7X3p5wlZf4nr6E0GMKbw,2556
|
371
|
-
nucliadb-6.4.0.
|
372
|
-
nucliadb-6.4.0.
|
373
|
-
nucliadb-6.4.0.
|
374
|
-
nucliadb-6.4.0.
|
375
|
-
nucliadb-6.4.0.
|
371
|
+
nucliadb-6.4.0.post4313.dist-info/METADATA,sha256=-Mp65qW_udL5EUZsp6CwEysmjbvuTY3u6Qbn0Bc3epI,4223
|
372
|
+
nucliadb-6.4.0.post4313.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
|
373
|
+
nucliadb-6.4.0.post4313.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
|
374
|
+
nucliadb-6.4.0.post4313.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
|
375
|
+
nucliadb-6.4.0.post4313.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|