nucliadb 6.7.0.post4734__py3-none-any.whl → 6.7.0.post4742__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/common/cluster/settings.py +5 -0
- nucliadb/ingest/orm/exceptions.py +4 -0
- nucliadb/ingest/orm/processor/__init__.py +3 -1
- nucliadb/ingest/orm/processor/processor.py +69 -14
- nucliadb/ingest/orm/resource.py +29 -1
- nucliadb/reader/api/v1/learning_config.py +38 -1
- nucliadb/writer/api/v1/learning_config.py +39 -1
- {nucliadb-6.7.0.post4734.dist-info → nucliadb-6.7.0.post4742.dist-info}/METADATA +7 -7
- {nucliadb-6.7.0.post4734.dist-info → nucliadb-6.7.0.post4742.dist-info}/RECORD +12 -12
- {nucliadb-6.7.0.post4734.dist-info → nucliadb-6.7.0.post4742.dist-info}/WHEEL +0 -0
- {nucliadb-6.7.0.post4734.dist-info → nucliadb-6.7.0.post4742.dist-info}/entry_points.txt +0 -0
- {nucliadb-6.7.0.post4734.dist-info → nucliadb-6.7.0.post4742.dist-info}/top_level.txt +0 -0
@@ -46,6 +46,11 @@ class Settings(BaseSettings):
|
|
46
46
|
title="Max paragraphs per resource",
|
47
47
|
description="Maximum number of paragraphs allowed on a single resource",
|
48
48
|
)
|
49
|
+
max_entity_facets: int = Field(
|
50
|
+
default=4_000,
|
51
|
+
title="Max entity labels per field",
|
52
|
+
description="Maximum number of entity labels (/e/) per field that are indexed (excess is not indexed)",
|
53
|
+
)
|
49
54
|
|
50
55
|
nidx_api_address: Optional[str] = Field(default=None, description="NIDX gRPC API address")
|
51
56
|
nidx_searcher_address: Optional[str] = Field(
|
@@ -83,18 +83,52 @@ def validate_indexable_resource(resource: noderesources_pb2.Resource) -> None:
|
|
83
83
|
This is still an edge case.
|
84
84
|
"""
|
85
85
|
num_paragraphs = 0
|
86
|
-
|
86
|
+
first_exceeded = ""
|
87
|
+
for field_id, fparagraph in resource.paragraphs.items():
|
87
88
|
# this count should not be very expensive to do since we don't have
|
88
89
|
# a lot of different fields and we just do a count on a dict
|
89
90
|
num_paragraphs += len(fparagraph.paragraphs)
|
91
|
+
if num_paragraphs > cluster_settings.max_resource_paragraphs:
|
92
|
+
first_exceeded = field_id
|
90
93
|
|
91
94
|
if num_paragraphs > cluster_settings.max_resource_paragraphs:
|
92
95
|
raise ResourceNotIndexable(
|
93
|
-
|
94
|
-
f"
|
96
|
+
first_exceeded,
|
97
|
+
f"Resource has too many paragraphs ({num_paragraphs}) and cannot be indexed. "
|
98
|
+
f"The maximum number of paragraphs per resource is {cluster_settings.max_resource_paragraphs}",
|
95
99
|
)
|
96
100
|
|
97
101
|
|
102
|
+
def trim_entity_facets(index_message: PBBrainResource) -> list[tuple[str, str]]:
|
103
|
+
max_entities = cluster_settings.max_entity_facets
|
104
|
+
warnings = []
|
105
|
+
for field_id, text_info in index_message.texts.items():
|
106
|
+
if len(text_info.labels) > max_entities:
|
107
|
+
new_labels = []
|
108
|
+
entity_count = 0
|
109
|
+
truncated = False
|
110
|
+
for label in text_info.labels:
|
111
|
+
if label.startswith("/e/"):
|
112
|
+
if entity_count < max_entities:
|
113
|
+
new_labels.append(label)
|
114
|
+
else:
|
115
|
+
truncated = True
|
116
|
+
entity_count += 1
|
117
|
+
else:
|
118
|
+
new_labels.append(label)
|
119
|
+
if truncated:
|
120
|
+
warnings.append(
|
121
|
+
(
|
122
|
+
field_id,
|
123
|
+
f"Too many detected entities. Only the first {max_entities} will be available as facets for filtering",
|
124
|
+
)
|
125
|
+
)
|
126
|
+
text_info.ClearField("labels")
|
127
|
+
text_info.labels.extend(new_labels)
|
128
|
+
|
129
|
+
return warnings
|
130
|
+
|
131
|
+
|
98
132
|
class Processor:
|
99
133
|
"""
|
100
134
|
This class is responsible for processing messages from the broker
|
@@ -314,17 +348,35 @@ class Processor:
|
|
314
348
|
# index message
|
315
349
|
if resource and resource.modified:
|
316
350
|
index_message = await self.generate_index_message(resource, messages, created)
|
351
|
+
|
352
|
+
try:
|
353
|
+
warnings = await self.index_resource(
|
354
|
+
index_message=index_message,
|
355
|
+
txn=txn,
|
356
|
+
uuid=uuid,
|
357
|
+
kbid=kbid,
|
358
|
+
seqid=seqid,
|
359
|
+
partition=partition,
|
360
|
+
kb=kb,
|
361
|
+
source=messages_source(messages),
|
362
|
+
)
|
363
|
+
# Save indexing warnings
|
364
|
+
for field_id, warning in warnings:
|
365
|
+
await resource.add_field_error(
|
366
|
+
field_id, warning, writer_pb2.Error.Severity.WARNING
|
367
|
+
)
|
368
|
+
except ResourceNotIndexable as e:
|
369
|
+
await resource.add_field_error(
|
370
|
+
e.field_id, e.message, writer_pb2.Error.Severity.ERROR
|
371
|
+
)
|
372
|
+
# Catalog takes status from index message labels, override it to error
|
373
|
+
current_status = [x for x in index_message.labels if x.startswith("/n/s/")]
|
374
|
+
if current_status:
|
375
|
+
index_message.labels.remove(current_status[0])
|
376
|
+
index_message.labels.append("/n/s/ERROR")
|
377
|
+
|
317
378
|
await pgcatalog_update(txn, kbid, resource, index_message)
|
318
|
-
|
319
|
-
index_message=index_message,
|
320
|
-
txn=txn,
|
321
|
-
uuid=uuid,
|
322
|
-
kbid=kbid,
|
323
|
-
seqid=seqid,
|
324
|
-
partition=partition,
|
325
|
-
kb=kb,
|
326
|
-
source=messages_source(messages),
|
327
|
-
)
|
379
|
+
|
328
380
|
if transaction_check:
|
329
381
|
await sequence_manager.set_last_seqid(txn, partition, seqid)
|
330
382
|
await txn.commit()
|
@@ -445,8 +497,10 @@ class Processor:
|
|
445
497
|
partition: str,
|
446
498
|
kb: KnowledgeBox,
|
447
499
|
source: nodewriter_pb2.IndexMessageSource.ValueType,
|
448
|
-
) ->
|
500
|
+
) -> list[tuple[str, str]]:
|
449
501
|
validate_indexable_resource(index_message)
|
502
|
+
warnings = trim_entity_facets(index_message)
|
503
|
+
|
450
504
|
shard = await self.get_or_assign_resource_shard(txn, kb, uuid)
|
451
505
|
external_index_manager = await get_external_index_manager(kbid=kbid)
|
452
506
|
if external_index_manager is not None:
|
@@ -460,6 +514,7 @@ class Processor:
|
|
460
514
|
kb=kbid,
|
461
515
|
source=source,
|
462
516
|
)
|
517
|
+
return warnings
|
463
518
|
|
464
519
|
@processor_observer.wrap({"type": "generate_index_message"})
|
465
520
|
async def generate_index_message(
|
nucliadb/ingest/orm/resource.py
CHANGED
@@ -27,7 +27,7 @@ from typing import TYPE_CHECKING, Any, Optional, Sequence, Type
|
|
27
27
|
|
28
28
|
from nucliadb.common import datamanagers
|
29
29
|
from nucliadb.common.datamanagers.resources import KB_RESOURCE_SLUG
|
30
|
-
from nucliadb.common.ids import FIELD_TYPE_PB_TO_STR, FieldId
|
30
|
+
from nucliadb.common.ids import FIELD_TYPE_PB_TO_STR, FIELD_TYPE_STR_TO_PB, FieldId
|
31
31
|
from nucliadb.common.maindb.driver import Transaction
|
32
32
|
from nucliadb.ingest.fields.base import Field
|
33
33
|
from nucliadb.ingest.fields.conversation import Conversation
|
@@ -526,6 +526,34 @@ class Resource:
|
|
526
526
|
else:
|
527
527
|
self.basic.metadata.status = PBMetadata.Status.PROCESSED
|
528
528
|
|
529
|
+
async def add_field_error(
|
530
|
+
self, field_id: str, message: str, severity: writer_pb2.Error.Severity.ValueType
|
531
|
+
):
|
532
|
+
(field_type_str, field_name) = field_id.split("/")
|
533
|
+
field_type = FIELD_TYPE_STR_TO_PB[field_type_str]
|
534
|
+
field = await self.get_field(field_name, field_type)
|
535
|
+
status = await field.get_status()
|
536
|
+
if status is not None:
|
537
|
+
field_error = writer_pb2.FieldError(
|
538
|
+
source_error=writer_pb2.Error(
|
539
|
+
field=field_name,
|
540
|
+
field_type=field_type,
|
541
|
+
error=message,
|
542
|
+
code=writer_pb2.Error.ErrorCode.INDEX,
|
543
|
+
severity=severity,
|
544
|
+
)
|
545
|
+
)
|
546
|
+
field_error.created.GetCurrentTime()
|
547
|
+
status.errors.append(field_error)
|
548
|
+
if severity == writer_pb2.Error.Severity.ERROR:
|
549
|
+
status.status = writer_pb2.FieldStatus.Status.ERROR
|
550
|
+
await field.set_status(status)
|
551
|
+
|
552
|
+
# If it's an error, we may need to change the resource status
|
553
|
+
if severity == writer_pb2.Error.Severity.ERROR and self.basic:
|
554
|
+
await self.update_status()
|
555
|
+
await self.set_basic(self.basic)
|
556
|
+
|
529
557
|
@processor_observer.wrap({"type": "apply_extracted"})
|
530
558
|
async def apply_extracted(self, message: BrokerMessage):
|
531
559
|
await self.get_basic()
|
@@ -21,7 +21,7 @@ from typing import Dict
|
|
21
21
|
|
22
22
|
from fastapi import Request
|
23
23
|
from fastapi_versioning import version
|
24
|
-
from nuclia_models.config.proto import ExtractConfig
|
24
|
+
from nuclia_models.config.proto import ExtractConfig, SplitConfiguration
|
25
25
|
|
26
26
|
from nucliadb.learning_proxy import learning_config_proxy
|
27
27
|
from nucliadb.models.responses import HTTPClientError
|
@@ -183,3 +183,40 @@ async def get_extract_strategy_from_id(
|
|
183
183
|
return await learning_config_proxy(
|
184
184
|
request, "GET", f"/extract_strategies/{kbid}/strategies/{strategy_id}"
|
185
185
|
)
|
186
|
+
|
187
|
+
|
188
|
+
@api.get(
|
189
|
+
path=f"/{KB_PREFIX}/{{kbid}}/split_strategies",
|
190
|
+
status_code=200,
|
191
|
+
summary="Learning split strategies",
|
192
|
+
description="Get available split strategies ",
|
193
|
+
response_model=Dict[str, SplitConfiguration],
|
194
|
+
tags=["Split Strategies"],
|
195
|
+
)
|
196
|
+
@requires(NucliaDBRoles.READER)
|
197
|
+
@version(1)
|
198
|
+
async def get_split_strategies(
|
199
|
+
request: Request,
|
200
|
+
kbid: str,
|
201
|
+
):
|
202
|
+
return await learning_config_proxy(request, "GET", f"/split_strategies/{kbid}")
|
203
|
+
|
204
|
+
|
205
|
+
@api.get(
|
206
|
+
path=f"/{KB_PREFIX}/{{kbid}}/split_strategies/strategy/{{strategy_id}}",
|
207
|
+
status_code=200,
|
208
|
+
summary="Extract split configuration",
|
209
|
+
description="Get split strategy for a given id",
|
210
|
+
response_model=None,
|
211
|
+
tags=["Split Strategies"],
|
212
|
+
)
|
213
|
+
@requires(NucliaDBRoles.READER)
|
214
|
+
@version(1)
|
215
|
+
async def get_split_strategy_from_id(
|
216
|
+
request: Request,
|
217
|
+
kbid: str,
|
218
|
+
strategy_id: str,
|
219
|
+
):
|
220
|
+
return await learning_config_proxy(
|
221
|
+
request, "GET", f"/split_strategies/{kbid}/strategies/{strategy_id}"
|
222
|
+
)
|
@@ -19,7 +19,7 @@
|
|
19
19
|
#
|
20
20
|
from fastapi import Request
|
21
21
|
from fastapi_versioning import version
|
22
|
-
from nuclia_models.config.proto import ExtractConfig
|
22
|
+
from nuclia_models.config.proto import ExtractConfig, SplitConfiguration
|
23
23
|
|
24
24
|
from nucliadb.learning_proxy import learning_config_proxy
|
25
25
|
from nucliadb.writer.api.v1.router import KB_PREFIX, api
|
@@ -97,3 +97,41 @@ async def delete_strategy(
|
|
97
97
|
return await learning_config_proxy(
|
98
98
|
request, "DELETE", f"/extract_strategies/{kbid}/strategies/{strategy_id}"
|
99
99
|
)
|
100
|
+
|
101
|
+
|
102
|
+
@api.post(
|
103
|
+
path=f"/{KB_PREFIX}/{{kbid}}/split_strategies",
|
104
|
+
status_code=200,
|
105
|
+
summary="Add a split strategy to a KB",
|
106
|
+
description="Add a split strategy to a KB",
|
107
|
+
response_model=str,
|
108
|
+
tags=["Split Strategies"],
|
109
|
+
)
|
110
|
+
@requires(NucliaDBRoles.WRITER)
|
111
|
+
@version(1)
|
112
|
+
async def add_split_strategy(
|
113
|
+
request: Request,
|
114
|
+
kbid: str,
|
115
|
+
item: SplitConfiguration,
|
116
|
+
):
|
117
|
+
return await learning_config_proxy(request, "POST", f"/split_strategies/{kbid}")
|
118
|
+
|
119
|
+
|
120
|
+
@api.delete(
|
121
|
+
path=f"/{KB_PREFIX}/{{kbid}}/split_strategies/strategy/{{strategy_id}}",
|
122
|
+
status_code=204,
|
123
|
+
summary="Remove a split strategy from a KB",
|
124
|
+
description="Removes a split strategy from a KB",
|
125
|
+
response_model=None,
|
126
|
+
tags=["Split Strategies"],
|
127
|
+
)
|
128
|
+
@requires(NucliaDBRoles.WRITER)
|
129
|
+
@version(1)
|
130
|
+
async def delete_split_strategy(
|
131
|
+
request: Request,
|
132
|
+
kbid: str,
|
133
|
+
strategy_id: str,
|
134
|
+
):
|
135
|
+
return await learning_config_proxy(
|
136
|
+
request, "DELETE", f"/split_strategies/{kbid}/strategies/{strategy_id}"
|
137
|
+
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: nucliadb
|
3
|
-
Version: 6.7.0.
|
3
|
+
Version: 6.7.0.post4742
|
4
4
|
Summary: NucliaDB
|
5
5
|
Author-email: Nuclia <nucliadb@nuclia.com>
|
6
6
|
License-Expression: AGPL-3.0-or-later
|
@@ -19,13 +19,13 @@ Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3 :: Only
|
20
20
|
Requires-Python: <4,>=3.9
|
21
21
|
Description-Content-Type: text/markdown
|
22
|
-
Requires-Dist: nucliadb-telemetry[all]>=6.7.0.
|
23
|
-
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.7.0.
|
24
|
-
Requires-Dist: nucliadb-protos>=6.7.0.
|
25
|
-
Requires-Dist: nucliadb-models>=6.7.0.
|
26
|
-
Requires-Dist: nidx-protos>=6.7.0.
|
22
|
+
Requires-Dist: nucliadb-telemetry[all]>=6.7.0.post4742
|
23
|
+
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.7.0.post4742
|
24
|
+
Requires-Dist: nucliadb-protos>=6.7.0.post4742
|
25
|
+
Requires-Dist: nucliadb-models>=6.7.0.post4742
|
26
|
+
Requires-Dist: nidx-protos>=6.7.0.post4742
|
27
27
|
Requires-Dist: nucliadb-admin-assets>=1.0.0.post1224
|
28
|
-
Requires-Dist: nuclia-models>=0.
|
28
|
+
Requires-Dist: nuclia-models>=0.46.0
|
29
29
|
Requires-Dist: uvicorn[standard]
|
30
30
|
Requires-Dist: argdantic
|
31
31
|
Requires-Dist: aiohttp>=3.11.11
|
@@ -81,7 +81,7 @@ nucliadb/common/cluster/grpc_node_dummy.py,sha256=JkufazWzMA4KFEU8EBkMbiiDW4C8lL
|
|
81
81
|
nucliadb/common/cluster/manager.py,sha256=QOHA7trtZVwV5G9IIxM1Y-0P2KE5mEhsXUMPs8vxIg0,12816
|
82
82
|
nucliadb/common/cluster/rebalance.py,sha256=238JxqdSl1_oeJNpKuGBgfVn8WXVmyX5yl2PyHomYX8,8715
|
83
83
|
nucliadb/common/cluster/rollover.py,sha256=swuYNXJ8u5p11PvYaHxVtomiYIPVWVGVsicwTgm24-Q,25862
|
84
|
-
nucliadb/common/cluster/settings.py,sha256=
|
84
|
+
nucliadb/common/cluster/settings.py,sha256=H-KRSDdJozXLRZjjmDzgjMKm_9p6UBaPuqmTFkdhd_M,2270
|
85
85
|
nucliadb/common/cluster/utils.py,sha256=IfW5PA7Ab26xWUYNOc3yBoksWV1GK4BGhTRo1vnHNKg,4662
|
86
86
|
nucliadb/common/cluster/standalone/__init__.py,sha256=itSI7dtTwFP55YMX4iK7JzdMHS5CQVUiB1XzQu4UBh8,833
|
87
87
|
nucliadb/common/cluster/standalone/utils.py,sha256=af3r-x_GF7A6dwIAhZLR-r-SZQEVxsFrDKeMfUTA6G0,1908
|
@@ -159,17 +159,17 @@ nucliadb/ingest/orm/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20
|
|
159
159
|
nucliadb/ingest/orm/brain_v2.py,sha256=y_OQ-SXyClX_VSKFVkYYwdIDxmj6TAQLC7UdPJ0hOvE,33647
|
160
160
|
nucliadb/ingest/orm/broker_message.py,sha256=XWaiZgDOz94NPOPT-hqbRr5ZkpVimUw6PjUJNftfoVw,7514
|
161
161
|
nucliadb/ingest/orm/entities.py,sha256=kXyeF6XOpFKhEsGLcY-GLIk21Exp0cJst4XQQ9jJoug,14791
|
162
|
-
nucliadb/ingest/orm/exceptions.py,sha256=
|
162
|
+
nucliadb/ingest/orm/exceptions.py,sha256=gsp7TtVNQPiIEh-zf_UEJClwuFU0iu-5vzj0OrKMScg,1550
|
163
163
|
nucliadb/ingest/orm/index_message.py,sha256=DWMTHJoVamUbK8opKl5csDvxfgz7c2j7phG1Ut4yIxk,15724
|
164
164
|
nucliadb/ingest/orm/knowledgebox.py,sha256=_rkeTMIXMhR64gbYtZpFHoUHghV2DTJ2lUBqZsoqC_4,23898
|
165
165
|
nucliadb/ingest/orm/metrics.py,sha256=OiuggTh-n3kZHA2G73NEUdIlh8c3yFrbusI88DK-Mko,1273
|
166
|
-
nucliadb/ingest/orm/resource.py,sha256=
|
166
|
+
nucliadb/ingest/orm/resource.py,sha256=TWsPo11d6n0HpXRNGy0AAVKXiYDSr0gzEzBBQXkw7FE,40015
|
167
167
|
nucliadb/ingest/orm/utils.py,sha256=fCQRuyecgqhaY7mcBG93oaXMkzkKb9BFjOcy4-ZiSNw,2693
|
168
|
-
nucliadb/ingest/orm/processor/__init__.py,sha256=
|
168
|
+
nucliadb/ingest/orm/processor/__init__.py,sha256=xhDNKCxY0XNOlIVKEtM8QT75vDUkJIt7K-_VgGbbOQU,904
|
169
169
|
nucliadb/ingest/orm/processor/auditing.py,sha256=TeYhXGJRyQ7ROytbb2u8R0fIh_FYi3HgTu3S1ribY3U,4623
|
170
170
|
nucliadb/ingest/orm/processor/data_augmentation.py,sha256=v-pj4GbBWSuO8dQyahs5UDr5ghsyfhCZDS0ftKd6ZYc,5179
|
171
171
|
nucliadb/ingest/orm/processor/pgcatalog.py,sha256=VPQ_Evme7xmmGoQ45zt0Am0yPkaD4hxN1r5rEaVt6s8,4633
|
172
|
-
nucliadb/ingest/orm/processor/processor.py,sha256=
|
172
|
+
nucliadb/ingest/orm/processor/processor.py,sha256=pr0wbe86d6ZboOaBH5HMsgcmm-WYDIjMrGDTElPxS3A,33830
|
173
173
|
nucliadb/ingest/orm/processor/sequence_manager.py,sha256=uqEphtI1Ir_yk9jRl2gPf7BlzzXWovbARY5MNZSBI_8,1704
|
174
174
|
nucliadb/ingest/service/__init__.py,sha256=LHQFUkdmNBOWqBG0Md9sMMI7g5TQZ-hLAnhw6ZblrJg,2002
|
175
175
|
nucliadb/ingest/service/exceptions.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
@@ -202,7 +202,7 @@ nucliadb/reader/api/v1/__init__.py,sha256=ieP8lsCCwG66Jupv8II5MSTj6nh3eCtLcF4utH
|
|
202
202
|
nucliadb/reader/api/v1/download.py,sha256=rGv1c5CjrJheDgGwAnNWy76A_4V2shqqHYvwmKGFlpk,10758
|
203
203
|
nucliadb/reader/api/v1/export_import.py,sha256=x4VBNDFjnlY1nIt5kdq0eZTB_DeRzGzT8T7uB7wUhNU,6448
|
204
204
|
nucliadb/reader/api/v1/knowledgebox.py,sha256=Uu-yPB8KKZt1VaFrFNMMaXOvLsclBJDK9dzZ9lF2ctI,3645
|
205
|
-
nucliadb/reader/api/v1/learning_config.py,sha256=
|
205
|
+
nucliadb/reader/api/v1/learning_config.py,sha256=t_KqQBBbhpo0m6nQTkYmNdZsLVmW53SLcHMrCWiQMrk,6536
|
206
206
|
nucliadb/reader/api/v1/resource.py,sha256=oCZGisVv5-t67MmokIpwaqJq5suE6YphR1QoCUmM174,14172
|
207
207
|
nucliadb/reader/api/v1/router.py,sha256=eyNmEGSP9zHkCIG5XlAXl6sukq950B7gFT3X2peMtIE,1011
|
208
208
|
nucliadb/reader/api/v1/services.py,sha256=Q2n-QMfAVzSylu6qTUuPa6L3AfZ9jS3azVlfQdSqlA4,13443
|
@@ -354,7 +354,7 @@ nucliadb/writer/api/v1/__init__.py,sha256=akI9A_jloNLb0dU4T5zjfdyvmSAiDeIdjAlzNx
|
|
354
354
|
nucliadb/writer/api/v1/export_import.py,sha256=v0sU55TtRSqDzwkDgcwv2uSaqKCuQTtGcMpYoHQYBQA,8192
|
355
355
|
nucliadb/writer/api/v1/field.py,sha256=rF_x6fVczZKa4xBrHChUVau-70uFJT7srQpOLuqG2ic,18755
|
356
356
|
nucliadb/writer/api/v1/knowledgebox.py,sha256=PHEYDFa-sN5JrI8-EiVVg5FDOsRuCLT43kyAB4xt-xA,9530
|
357
|
-
nucliadb/writer/api/v1/learning_config.py,sha256=
|
357
|
+
nucliadb/writer/api/v1/learning_config.py,sha256=mGQmnfFSM2Z9HDnWr8PFoA1MLpFR1JaCDb8B14J8e5k,4140
|
358
358
|
nucliadb/writer/api/v1/resource.py,sha256=gr4VtYOtnIAL5zsDQsBDzeOOWWh6wN7PUh1XgUsQ9N4,20436
|
359
359
|
nucliadb/writer/api/v1/router.py,sha256=RjuoWLpZer6Kl2BW_wznpNo6XL3BOpdTGqXZCn3QrrQ,1034
|
360
360
|
nucliadb/writer/api/v1/services.py,sha256=3AUjk-SmvqJx76v7y89DZx6oyasojPliGYeniRQjpcU,13337
|
@@ -376,8 +376,8 @@ nucliadb/writer/tus/local.py,sha256=7jYa_w9b-N90jWgN2sQKkNcomqn6JMVBOVeDOVYJHto,
|
|
376
376
|
nucliadb/writer/tus/s3.py,sha256=vF0NkFTXiXhXq3bCVXXVV-ED38ECVoUeeYViP8uMqcU,8357
|
377
377
|
nucliadb/writer/tus/storage.py,sha256=ToqwjoYnjI4oIcwzkhha_MPxi-k4Jk3Lt55zRwaC1SM,2903
|
378
378
|
nucliadb/writer/tus/utils.py,sha256=MSdVbRsRSZVdkaum69_0wku7X3p5wlZf4nr6E0GMKbw,2556
|
379
|
-
nucliadb-6.7.0.
|
380
|
-
nucliadb-6.7.0.
|
381
|
-
nucliadb-6.7.0.
|
382
|
-
nucliadb-6.7.0.
|
383
|
-
nucliadb-6.7.0.
|
379
|
+
nucliadb-6.7.0.post4742.dist-info/METADATA,sha256=RMmnuJPlX0neyRjo1ojJkYdgNvjC6CTMQBcYFFidrgM,4158
|
380
|
+
nucliadb-6.7.0.post4742.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
381
|
+
nucliadb-6.7.0.post4742.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
|
382
|
+
nucliadb-6.7.0.post4742.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
|
383
|
+
nucliadb-6.7.0.post4742.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|