nucliadb 6.3.3.post3626__py3-none-any.whl → 6.3.3.post3628__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/datamanagers/__init__.py +2 -0
- nucliadb/common/datamanagers/atomic.py +5 -0
- nucliadb/common/datamanagers/search_configurations.py +68 -0
- nucliadb/reader/api/v1/services.py +39 -0
- nucliadb/search/api/v1/ask.py +18 -0
- nucliadb/search/api/v1/find.py +21 -0
- nucliadb/search/search/query_parser/parsers/graph.py +3 -6
- nucliadb/writer/api/v1/services.py +75 -0
- {nucliadb-6.3.3.post3626.dist-info → nucliadb-6.3.3.post3628.dist-info}/METADATA +6 -6
- {nucliadb-6.3.3.post3626.dist-info → nucliadb-6.3.3.post3628.dist-info}/RECORD +13 -12
- {nucliadb-6.3.3.post3626.dist-info → nucliadb-6.3.3.post3628.dist-info}/WHEEL +0 -0
- {nucliadb-6.3.3.post3626.dist-info → nucliadb-6.3.3.post3628.dist-info}/entry_points.txt +0 -0
- {nucliadb-6.3.3.post3626.dist-info → nucliadb-6.3.3.post3628.dist-info}/top_level.txt +0 -0
@@ -39,6 +39,7 @@ from . import (
|
|
39
39
|
processing,
|
40
40
|
resources,
|
41
41
|
rollover,
|
42
|
+
search_configurations,
|
42
43
|
synonyms,
|
43
44
|
vectorsets,
|
44
45
|
)
|
@@ -55,6 +56,7 @@ __all__ = (
|
|
55
56
|
"processing",
|
56
57
|
"resources",
|
57
58
|
"rollover",
|
59
|
+
"search_configurations",
|
58
60
|
"synonyms",
|
59
61
|
"vectorsets",
|
60
62
|
"with_transaction",
|
@@ -45,6 +45,7 @@ from nucliadb.common.maindb.driver import Transaction
|
|
45
45
|
from . import kb as kb_dm
|
46
46
|
from . import labels as labels_dm
|
47
47
|
from . import resources as resources_dm
|
48
|
+
from . import search_configurations as search_configurations_dm
|
48
49
|
from . import synonyms as synonyms_dm
|
49
50
|
from .utils import with_ro_transaction, with_transaction
|
50
51
|
|
@@ -94,3 +95,7 @@ class labelset:
|
|
94
95
|
class synonyms:
|
95
96
|
get = ro_txn_wrap(synonyms_dm.get)
|
96
97
|
set = rw_txn_wrap(synonyms_dm.set)
|
98
|
+
|
99
|
+
|
100
|
+
class search_configurations:
|
101
|
+
get = ro_txn_wrap(search_configurations_dm.get)
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
+
#
|
3
|
+
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
+
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
+
#
|
6
|
+
# AGPL:
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Affero General Public License as
|
9
|
+
# published by the Free Software Foundation, either version 3 of the
|
10
|
+
# License, or (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Affero General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Affero General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
import logging
|
21
|
+
from typing import Optional
|
22
|
+
|
23
|
+
from pydantic import TypeAdapter
|
24
|
+
|
25
|
+
from nucliadb.common.maindb.driver import Transaction
|
26
|
+
from nucliadb_models.configuration import SearchConfiguration
|
27
|
+
|
28
|
+
logger = logging.getLogger(__name__)
|
29
|
+
|
30
|
+
KB_SEARCH_CONFIGURATION_PREFIX = "/kbs/{kbid}/search_configuration"
|
31
|
+
KB_SEARCH_CONFIGURATION = "/kbs/{kbid}/search_configuration/{name}"
|
32
|
+
|
33
|
+
|
34
|
+
async def get(txn: Transaction, *, kbid: str, name: str) -> Optional[SearchConfiguration]:
|
35
|
+
key = KB_SEARCH_CONFIGURATION.format(kbid=kbid, name=name)
|
36
|
+
data = await txn.get(key, for_update=True)
|
37
|
+
if not data:
|
38
|
+
return None
|
39
|
+
return TypeAdapter(SearchConfiguration).validate_json(data)
|
40
|
+
|
41
|
+
|
42
|
+
async def list(txn: Transaction, *, kbid: str) -> dict[str, SearchConfiguration]:
|
43
|
+
keys = []
|
44
|
+
async for key in txn.keys(KB_SEARCH_CONFIGURATION_PREFIX.format(kbid=kbid)):
|
45
|
+
keys.append(key)
|
46
|
+
|
47
|
+
configs_data = await txn.batch_get(keys)
|
48
|
+
|
49
|
+
configs = {}
|
50
|
+
for key, data in zip(keys, configs_data):
|
51
|
+
if data is None:
|
52
|
+
continue
|
53
|
+
name = key.split("/")[-1]
|
54
|
+
config: SearchConfiguration = TypeAdapter(SearchConfiguration).validate_json(data)
|
55
|
+
configs[name] = config
|
56
|
+
|
57
|
+
return configs
|
58
|
+
|
59
|
+
|
60
|
+
async def set(txn: Transaction, *, kbid: str, name: str, config: SearchConfiguration) -> None:
|
61
|
+
key = KB_SEARCH_CONFIGURATION.format(kbid=kbid, name=name)
|
62
|
+
data = config.model_dump_json(exclude_unset=True)
|
63
|
+
await txn.set(key, data.encode("utf-8"))
|
64
|
+
|
65
|
+
|
66
|
+
async def delete(txn: Transaction, *, kbid: str, name: str) -> None:
|
67
|
+
key = KB_SEARCH_CONFIGURATION.format(kbid=kbid, name=name)
|
68
|
+
await txn.delete(key)
|
@@ -38,6 +38,7 @@ from nucliadb.models.responses import HTTPClientError
|
|
38
38
|
from nucliadb.reader import SERVICE_NAME
|
39
39
|
from nucliadb.reader.api.v1.router import KB_PREFIX, api
|
40
40
|
from nucliadb.reader.reader.notifications import kb_notifications_stream
|
41
|
+
from nucliadb_models.configuration import SearchConfiguration
|
41
42
|
from nucliadb_models.entities import (
|
42
43
|
EntitiesGroup,
|
43
44
|
KnowledgeBoxEntities,
|
@@ -315,3 +316,41 @@ async def processing_status(
|
|
315
316
|
# overwrite result with only resources that exist in the database.
|
316
317
|
results.results = result_items
|
317
318
|
return results
|
319
|
+
|
320
|
+
|
321
|
+
@api.get(
|
322
|
+
f"/{KB_PREFIX}/{{kbid}}/search_configurations/{{config_name}}",
|
323
|
+
status_code=200,
|
324
|
+
summary="Get search configuration",
|
325
|
+
tags=["Knowledge Box Services"],
|
326
|
+
response_model_exclude_unset=True,
|
327
|
+
)
|
328
|
+
@requires(NucliaDBRoles.READER)
|
329
|
+
@version(1)
|
330
|
+
async def get_search_configuration(request: Request, kbid: str, config_name: str) -> SearchConfiguration:
|
331
|
+
async with datamanagers.with_transaction() as txn:
|
332
|
+
if not await datamanagers.kb.exists_kb(txn, kbid=kbid):
|
333
|
+
raise HTTPException(status_code=404, detail="Knowledge Box does not exist")
|
334
|
+
|
335
|
+
config = await datamanagers.search_configurations.get(txn, kbid=kbid, name=config_name)
|
336
|
+
if config is None:
|
337
|
+
raise HTTPException(status_code=404, detail="Search configuration does not exist")
|
338
|
+
|
339
|
+
return config
|
340
|
+
|
341
|
+
|
342
|
+
@api.get(
|
343
|
+
f"/{KB_PREFIX}/{{kbid}}/search_configurations",
|
344
|
+
status_code=200,
|
345
|
+
summary="List search configurations",
|
346
|
+
tags=["Knowledge Box Services"],
|
347
|
+
response_model_exclude_unset=True,
|
348
|
+
)
|
349
|
+
@requires(NucliaDBRoles.READER)
|
350
|
+
@version(1)
|
351
|
+
async def list_search_configurations(request: Request, kbid: str) -> dict[str, SearchConfiguration]:
|
352
|
+
async with datamanagers.with_transaction() as txn:
|
353
|
+
if not await datamanagers.kb.exists_kb(txn, kbid=kbid):
|
354
|
+
raise HTTPException(status_code=404, detail="Knowledge Box does not exist")
|
355
|
+
|
356
|
+
return await datamanagers.search_configurations.list(txn, kbid=kbid)
|
nucliadb/search/api/v1/ask.py
CHANGED
@@ -23,12 +23,14 @@ from fastapi import Header, Request, Response
|
|
23
23
|
from fastapi_versioning import version
|
24
24
|
from starlette.responses import StreamingResponse
|
25
25
|
|
26
|
+
from nucliadb.common import datamanagers
|
26
27
|
from nucliadb.models.responses import HTTPClientError
|
27
28
|
from nucliadb.search.api.v1.router import KB_PREFIX, api
|
28
29
|
from nucliadb.search.search import cache
|
29
30
|
from nucliadb.search.search.chat.ask import AskResult, ask, handled_ask_exceptions
|
30
31
|
from nucliadb.search.search.chat.exceptions import AnswerJsonSchemaTooLong
|
31
32
|
from nucliadb.search.search.utils import maybe_log_request_payload
|
33
|
+
from nucliadb_models.configuration import AskConfig
|
32
34
|
from nucliadb_models.resource import NucliaDBRoles
|
33
35
|
from nucliadb_models.search import (
|
34
36
|
AskRequest,
|
@@ -72,6 +74,22 @@ async def ask_knowledgebox_endpoint(
|
|
72
74
|
else:
|
73
75
|
item.security.groups = current_user.security_groups
|
74
76
|
|
77
|
+
if item.search_configuration is not None:
|
78
|
+
search_config = await datamanagers.atomic.search_configurations.get(
|
79
|
+
kbid=kbid, name=item.search_configuration
|
80
|
+
)
|
81
|
+
if search_config is None:
|
82
|
+
return HTTPClientError(status_code=400, detail="Search configuration not found")
|
83
|
+
|
84
|
+
if not isinstance(search_config.config, AskConfig):
|
85
|
+
return HTTPClientError(
|
86
|
+
status_code=400, detail="This search configuration is not valid for `ask`"
|
87
|
+
)
|
88
|
+
|
89
|
+
item = AskRequest.model_validate(
|
90
|
+
search_config.config.model_dump(exclude_unset=True) | item.model_dump(exclude_unset=True)
|
91
|
+
)
|
92
|
+
|
75
93
|
return await create_ask_response(
|
76
94
|
kbid, item, x_nucliadb_user, x_ndb_client, x_forwarded_for, x_synchronous
|
77
95
|
)
|
nucliadb/search/api/v1/find.py
CHANGED
@@ -25,6 +25,7 @@ from fastapi.openapi.models import Example
|
|
25
25
|
from fastapi_versioning import version
|
26
26
|
from pydantic import ValidationError
|
27
27
|
|
28
|
+
from nucliadb.common import datamanagers
|
28
29
|
from nucliadb.common.datamanagers.exceptions import KnowledgeBoxNotFound
|
29
30
|
from nucliadb.models.responses import HTTPClientError
|
30
31
|
from nucliadb.search import predict
|
@@ -35,6 +36,7 @@ from nucliadb.search.search.exceptions import InvalidQueryError
|
|
35
36
|
from nucliadb.search.search.find import find
|
36
37
|
from nucliadb.search.search.utils import maybe_log_request_payload, min_score_from_query_params
|
37
38
|
from nucliadb_models.common import FieldTypeName
|
39
|
+
from nucliadb_models.configuration import FindConfig
|
38
40
|
from nucliadb_models.filters import FilterExpression
|
39
41
|
from nucliadb_models.resource import ExtractedDataTypeName, NucliaDBRoles
|
40
42
|
from nucliadb_models.search import (
|
@@ -129,6 +131,9 @@ async def find_knowledgebox(
|
|
129
131
|
show_hidden: bool = fastapi_query(SearchParamDefaults.show_hidden),
|
130
132
|
rank_fusion: RankFusionName = fastapi_query(SearchParamDefaults.rank_fusion),
|
131
133
|
reranker: Union[RerankerName, Reranker] = fastapi_query(SearchParamDefaults.reranker),
|
134
|
+
search_configuration: Optional[str] = Query(
|
135
|
+
default=None, description="Load find parameters from this configuration"
|
136
|
+
),
|
132
137
|
x_ndb_client: NucliaDBClientType = Header(NucliaDBClientType.API),
|
133
138
|
x_nucliadb_user: str = Header(""),
|
134
139
|
x_forwarded_for: str = Header(""),
|
@@ -203,6 +208,22 @@ async def _find_endpoint(
|
|
203
208
|
x_nucliadb_user: str,
|
204
209
|
x_forwarded_for: str,
|
205
210
|
) -> Union[KnowledgeboxFindResults, HTTPClientError]:
|
211
|
+
if item.search_configuration is not None:
|
212
|
+
search_config = await datamanagers.atomic.search_configurations.get(
|
213
|
+
kbid=kbid, name=item.search_configuration
|
214
|
+
)
|
215
|
+
if search_config is None:
|
216
|
+
return HTTPClientError(status_code=400, detail="Search configuration not found")
|
217
|
+
|
218
|
+
if not isinstance(search_config.config, FindConfig):
|
219
|
+
return HTTPClientError(
|
220
|
+
status_code=400, detail="This search configuration is not valid for `find`"
|
221
|
+
)
|
222
|
+
|
223
|
+
item = FindRequest.model_validate(
|
224
|
+
search_config.config.model_dump(exclude_unset=True) | item.model_dump(exclude_unset=True)
|
225
|
+
)
|
226
|
+
|
206
227
|
try:
|
207
228
|
maybe_log_request_payload(kbid, "/find", item)
|
208
229
|
with cache.request_caches():
|
@@ -29,6 +29,7 @@ def parse_graph_search(item: graph_requests.GraphSearchRequest) -> GraphRetrieva
|
|
29
29
|
pb = nodereader_pb2.GraphSearchRequest()
|
30
30
|
pb.query.path.CopyFrom(_parse_path_query(item.query))
|
31
31
|
pb.top_k = item.top_k
|
32
|
+
pb.kind = nodereader_pb2.GraphSearchRequest.QueryKind.PATH
|
32
33
|
return pb
|
33
34
|
|
34
35
|
|
@@ -36,6 +37,7 @@ def parse_graph_node_search(item: graph_requests.GraphNodesSearchRequest) -> Gra
|
|
36
37
|
pb = nodereader_pb2.GraphSearchRequest()
|
37
38
|
pb.query.path.CopyFrom(_parse_node_query(item.query))
|
38
39
|
pb.top_k = item.top_k
|
40
|
+
pb.kind = nodereader_pb2.GraphSearchRequest.QueryKind.NODES
|
39
41
|
return pb
|
40
42
|
|
41
43
|
|
@@ -43,6 +45,7 @@ def parse_graph_relation_search(item: graph_requests.GraphRelationsSearchRequest
|
|
43
45
|
pb = nodereader_pb2.GraphSearchRequest()
|
44
46
|
pb.query.path.CopyFrom(_parse_relation_query(item.query))
|
45
47
|
pb.top_k = item.top_k
|
48
|
+
pb.kind = nodereader_pb2.GraphSearchRequest.QueryKind.RELATIONS
|
46
49
|
return pb
|
47
50
|
|
48
51
|
|
@@ -110,12 +113,6 @@ def _parse_node_query(expr: graph_requests.GraphNodesQuery) -> nodereader_pb2.Gr
|
|
110
113
|
elif isinstance(expr, graph_requests.Not):
|
111
114
|
pb.bool_not.CopyFrom(_parse_node_query(expr.operand))
|
112
115
|
|
113
|
-
elif isinstance(expr, graph_requests.SourceNode):
|
114
|
-
_set_node_to_pb(expr, pb.path.source)
|
115
|
-
|
116
|
-
elif isinstance(expr, graph_requests.DestinationNode):
|
117
|
-
_set_node_to_pb(expr, pb.path.destination)
|
118
|
-
|
119
116
|
elif isinstance(expr, graph_requests.AnyNode):
|
120
117
|
_set_node_to_pb(expr, pb.path.source)
|
121
118
|
pb.path.undirected = True
|
@@ -30,6 +30,7 @@ from nucliadb.models.responses import (
|
|
30
30
|
HTTPNotFound,
|
31
31
|
)
|
32
32
|
from nucliadb.writer.api.v1.router import KB_PREFIX, api
|
33
|
+
from nucliadb_models.configuration import SearchConfiguration
|
33
34
|
from nucliadb_models.entities import (
|
34
35
|
CreateEntitiesGroupPayload,
|
35
36
|
UpdateEntitiesGroupPayload,
|
@@ -272,3 +273,77 @@ async def delete_custom_synonyms(request: Request, kbid: str):
|
|
272
273
|
await txn.commit()
|
273
274
|
|
274
275
|
return Response(status_code=204)
|
276
|
+
|
277
|
+
|
278
|
+
@api.post(
|
279
|
+
f"/{KB_PREFIX}/{{kbid}}/search_configurations/{{config_name}}",
|
280
|
+
status_code=201,
|
281
|
+
summary="Create search configuration",
|
282
|
+
tags=["Knowledge Box Services"],
|
283
|
+
)
|
284
|
+
@requires(NucliaDBRoles.WRITER)
|
285
|
+
@version(1)
|
286
|
+
async def create_search_configuration(
|
287
|
+
request: Request, kbid: str, config_name: str, search_configuration: SearchConfiguration
|
288
|
+
):
|
289
|
+
async with datamanagers.with_transaction() as txn:
|
290
|
+
if not await datamanagers.kb.exists_kb(txn, kbid=kbid):
|
291
|
+
raise HTTPException(status_code=404, detail="Knowledge Box does not exist")
|
292
|
+
|
293
|
+
if await datamanagers.search_configurations.get(txn, kbid=kbid, name=config_name) is not None:
|
294
|
+
raise HTTPException(status_code=409, detail="Search configuration already exists")
|
295
|
+
|
296
|
+
await datamanagers.search_configurations.set(
|
297
|
+
txn, kbid=kbid, name=config_name, config=search_configuration
|
298
|
+
)
|
299
|
+
await txn.commit()
|
300
|
+
|
301
|
+
return Response(status_code=201)
|
302
|
+
|
303
|
+
|
304
|
+
@api.patch(
|
305
|
+
f"/{KB_PREFIX}/{{kbid}}/search_configurations/{{config_name}}",
|
306
|
+
status_code=200,
|
307
|
+
summary="Update search configuration",
|
308
|
+
tags=["Knowledge Box Services"],
|
309
|
+
)
|
310
|
+
@requires(NucliaDBRoles.WRITER)
|
311
|
+
@version(1)
|
312
|
+
async def update_search_configuration(
|
313
|
+
request: Request, kbid: str, config_name: str, search_configuration: SearchConfiguration
|
314
|
+
):
|
315
|
+
async with datamanagers.with_transaction() as txn:
|
316
|
+
if not await datamanagers.kb.exists_kb(txn, kbid=kbid):
|
317
|
+
raise HTTPException(status_code=404, detail="Knowledge Box does not exist")
|
318
|
+
|
319
|
+
if await datamanagers.search_configurations.get(txn, kbid=kbid, name=config_name) is None:
|
320
|
+
raise HTTPException(status_code=404, detail="Search configuration does not exist")
|
321
|
+
|
322
|
+
await datamanagers.search_configurations.set(
|
323
|
+
txn, kbid=kbid, name=config_name, config=search_configuration
|
324
|
+
)
|
325
|
+
await txn.commit()
|
326
|
+
|
327
|
+
return Response(status_code=200)
|
328
|
+
|
329
|
+
|
330
|
+
@api.delete(
|
331
|
+
f"/{KB_PREFIX}/{{kbid}}/search_configurations/{{config_name}}",
|
332
|
+
status_code=204,
|
333
|
+
summary="Delete search configuration",
|
334
|
+
tags=["Knowledge Box Services"],
|
335
|
+
)
|
336
|
+
@requires(NucliaDBRoles.WRITER)
|
337
|
+
@version(1)
|
338
|
+
async def delete_search_configuration(request: Request, kbid: str, config_name: str):
|
339
|
+
async with datamanagers.with_transaction() as txn:
|
340
|
+
if not await datamanagers.kb.exists_kb(txn, kbid=kbid):
|
341
|
+
raise HTTPException(status_code=404, detail="Knowledge Box does not exist")
|
342
|
+
|
343
|
+
if await datamanagers.search_configurations.get(txn, kbid=kbid, name=config_name) is None:
|
344
|
+
raise HTTPException(status_code=404, detail="Search configuration does not exist")
|
345
|
+
|
346
|
+
await datamanagers.search_configurations.delete(txn, kbid=kbid, name=config_name)
|
347
|
+
await txn.commit()
|
348
|
+
|
349
|
+
return Response(status_code=204)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: nucliadb
|
3
|
-
Version: 6.3.3.
|
3
|
+
Version: 6.3.3.post3628
|
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.3.3.
|
24
|
-
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.3.
|
25
|
-
Requires-Dist: nucliadb-protos>=6.3.3.
|
26
|
-
Requires-Dist: nucliadb-models>=6.3.3.
|
27
|
-
Requires-Dist: nidx-protos>=6.3.3.
|
23
|
+
Requires-Dist: nucliadb-telemetry[all]>=6.3.3.post3628
|
24
|
+
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.3.post3628
|
25
|
+
Requires-Dist: nucliadb-protos>=6.3.3.post3628
|
26
|
+
Requires-Dist: nucliadb-models>=6.3.3.post3628
|
27
|
+
Requires-Dist: nidx-protos>=6.3.3.post3628
|
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
|
@@ -67,8 +67,8 @@ nucliadb/common/cluster/standalone/__init__.py,sha256=itSI7dtTwFP55YMX4iK7JzdMHS
|
|
67
67
|
nucliadb/common/cluster/standalone/utils.py,sha256=af3r-x_GF7A6dwIAhZLR-r-SZQEVxsFrDKeMfUTA6G0,1908
|
68
68
|
nucliadb/common/context/__init__.py,sha256=ZLUvKuIPaolKeA3aeZa2JcHwCIaEauNu8WpdKsiINXo,3354
|
69
69
|
nucliadb/common/context/fastapi.py,sha256=j3HZ3lne6mIfw1eEar2het8RWzv6UruUZpXaKieSLOs,1527
|
70
|
-
nucliadb/common/datamanagers/__init__.py,sha256=
|
71
|
-
nucliadb/common/datamanagers/atomic.py,sha256=
|
70
|
+
nucliadb/common/datamanagers/__init__.py,sha256=jksw4pXyXb05SG3EN-BPBrhc1u1Ge_m21PYqD7NYQEs,2118
|
71
|
+
nucliadb/common/datamanagers/atomic.py,sha256=WihdtBWQIAuElZQjh1xQ--q5dJowwlkovqsW-OB_t2k,3230
|
72
72
|
nucliadb/common/datamanagers/cluster.py,sha256=psTwAWSLj83vhFnC1iJJ6holrolAI4nKos9PuEWspYY,1500
|
73
73
|
nucliadb/common/datamanagers/entities.py,sha256=gI-0mbMlqrr9FiyhexEh6czhgYcMxE2s9m4o866EK9o,5340
|
74
74
|
nucliadb/common/datamanagers/exceptions.py,sha256=Atz_PP_GGq4jgJaWcAkcRbHBoBaGcC9yJvFteylKtTE,883
|
@@ -78,6 +78,7 @@ nucliadb/common/datamanagers/labels.py,sha256=Zm0GQpSPoGXEEysUY7VsDIcyKSIIQsMVph
|
|
78
78
|
nucliadb/common/datamanagers/processing.py,sha256=ByxdZzdbAfJGqC6__mY-zryjk040TyQfcUq3rxujeoY,1587
|
79
79
|
nucliadb/common/datamanagers/resources.py,sha256=5EJk7P-G4A_YiobiUexz_yuZUTuxS5zqzjMdJN6Sm6k,11297
|
80
80
|
nucliadb/common/datamanagers/rollover.py,sha256=c_DE3jtZusNL_9aOVjHOB9PV5OSVg7GJ5J-Ny0goHBE,7833
|
81
|
+
nucliadb/common/datamanagers/search_configurations.py,sha256=O-8eW43CE46GcxO6TB5hpi27NBguv4BL4SI1vLlN8os,2463
|
81
82
|
nucliadb/common/datamanagers/synonyms.py,sha256=zk3GEH38KF5vV_VcuL6DCg-2JwgXJfQl7Io6VPqv2cw,1566
|
82
83
|
nucliadb/common/datamanagers/utils.py,sha256=McHlXvE4P3x-bBY3pr0n8djbTDQvI1G5WusJrnRdhLA,1827
|
83
84
|
nucliadb/common/datamanagers/vectorsets.py,sha256=ciYb5uD435Zo8ZbqgPUAszFW9Svp_-R2hY2FEhQ411Y,4304
|
@@ -182,7 +183,7 @@ nucliadb/reader/api/v1/knowledgebox.py,sha256=Uu-yPB8KKZt1VaFrFNMMaXOvLsclBJDK9d
|
|
182
183
|
nucliadb/reader/api/v1/learning_config.py,sha256=CZ7pFXzBZkJE2dXbC1wArszJw_ZLpuEb6gnsz2MKEz0,5525
|
183
184
|
nucliadb/reader/api/v1/resource.py,sha256=SFIv_vpgkdJQv7L_UgYZS5FvubipJ0ligpExGDjKHV0,14064
|
184
185
|
nucliadb/reader/api/v1/router.py,sha256=eyNmEGSP9zHkCIG5XlAXl6sukq950B7gFT3X2peMtIE,1011
|
185
|
-
nucliadb/reader/api/v1/services.py,sha256=
|
186
|
+
nucliadb/reader/api/v1/services.py,sha256=bL3s-qNLWS2uOC6KNgT6b3V_GGP4Pw7ZaOYI-x_qs18,13431
|
186
187
|
nucliadb/reader/api/v1/vectorsets.py,sha256=insTwaykshz442cMKa2VP74wJwvZrIYi0U7M9EM3aCM,1822
|
187
188
|
nucliadb/reader/reader/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
188
189
|
nucliadb/reader/reader/notifications.py,sha256=HVZNUlfbSuoZ9BsSs8wmzPeYurl0U0O2ooVlR9KSM3U,7792
|
@@ -198,10 +199,10 @@ nucliadb/search/settings.py,sha256=vem3EcyYlTPSim0kEK-xe-erF4BZg0CT_LAb8ZRQAE8,1
|
|
198
199
|
nucliadb/search/utilities.py,sha256=9SsRDw0rJVXVoLBfF7rBb6q080h-thZc7u8uRcTiBeY,1037
|
199
200
|
nucliadb/search/api/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
200
201
|
nucliadb/search/api/v1/__init__.py,sha256=DH16OYnw9jQ38OpKlmdXeoq2j40ZPXZRtGvClKOkMhw,1239
|
201
|
-
nucliadb/search/api/v1/ask.py,sha256=
|
202
|
+
nucliadb/search/api/v1/ask.py,sha256=SFNjvhY3xAVniMChitILdtzwn7HmgV_k_ecn71egca0,5117
|
202
203
|
nucliadb/search/api/v1/catalog.py,sha256=Nw4wIj4AjGp-p64FFVQFN4v2LFcV3A0UJIxfo3_XGmY,7670
|
203
204
|
nucliadb/search/api/v1/feedback.py,sha256=kNLc4dHz2SXHzV0PwC1WiRAwY88fDptPcP-kO0q-FrQ,2620
|
204
|
-
nucliadb/search/api/v1/find.py,sha256=
|
205
|
+
nucliadb/search/api/v1/find.py,sha256=OOeqCVE88o4t1XzWgcknTWR0e3WcwzLDcnUhCeA1Pcc,10495
|
205
206
|
nucliadb/search/api/v1/graph.py,sha256=5APs0-W-jNQfH-mRLrdRkk6B_mnsJxLb68t0NE_KZUk,4238
|
206
207
|
nucliadb/search/api/v1/knowledgebox.py,sha256=rWhx3PYWryingu19qwwFDbVvVYynq5Ky23FSlzmTutQ,8721
|
207
208
|
nucliadb/search/api/v1/predict_proxy.py,sha256=QrGzo0hKjtmyGZ6pjlJHYAh4hxwVUIOTcVcerRCw7eE,3047
|
@@ -255,7 +256,7 @@ nucliadb/search/search/query_parser/old_filters.py,sha256=-zbfN-RsXoj_DRjh3Lfp-w
|
|
255
256
|
nucliadb/search/search/query_parser/parsers/__init__.py,sha256=ySCNSdbesLXGZyR88919njulA6UE10_3PhqMG_Yj1o4,1034
|
256
257
|
nucliadb/search/search/query_parser/parsers/catalog.py,sha256=XdBiTweGTQkj8m_V_i2xbwp7P5pPO8K1Tud692XKhMw,7149
|
257
258
|
nucliadb/search/search/query_parser/parsers/find.py,sha256=q3wH_i0DGceeKckYEH3c5MqM5EvRiMCL7r-6nCAId9Q,4666
|
258
|
-
nucliadb/search/search/query_parser/parsers/graph.py,sha256=
|
259
|
+
nucliadb/search/search/query_parser/parsers/graph.py,sha256=stD17_cXhLagJgNZu4Vqk0YJTU15BVSANHrB4sX2qCQ,6244
|
259
260
|
nucliadb/standalone/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
260
261
|
nucliadb/standalone/api_router.py,sha256=hgq9FXpihzgjHkwcVGfGCSwyXy67fqXTfLFHuINzIi0,5567
|
261
262
|
nucliadb/standalone/app.py,sha256=mAApNK_iVsQgJyd-mtwCeZq5csSimwnXmlQGH9a70pE,5586
|
@@ -332,7 +333,7 @@ nucliadb/writer/api/v1/knowledgebox.py,sha256=MLeIuym4jPrJgfy1NTcN9CpUGwuBiqDHMc
|
|
332
333
|
nucliadb/writer/api/v1/learning_config.py,sha256=CKBjqcbewkfPwGUPLDWzZSpro6XkmCaVppe5Qtpu5Go,3117
|
333
334
|
nucliadb/writer/api/v1/resource.py,sha256=A8fAHlN5XFsg6XFYKhfWJS8czgNH6yXr-PsnUqz2WUE,18757
|
334
335
|
nucliadb/writer/api/v1/router.py,sha256=RjuoWLpZer6Kl2BW_wznpNo6XL3BOpdTGqXZCn3QrrQ,1034
|
335
|
-
nucliadb/writer/api/v1/services.py,sha256=
|
336
|
+
nucliadb/writer/api/v1/services.py,sha256=HLQW18AEC5zQp5azpeAtRi7ZTzQSwG6SbmkHlmjTIFA,13165
|
336
337
|
nucliadb/writer/api/v1/slug.py,sha256=xlVBDBpRi9bNulpBHZwhyftVvulfE0zFm1XZIWl-AKY,2389
|
337
338
|
nucliadb/writer/api/v1/transaction.py,sha256=d2Vbgnkk_-FLGSTt3vfldwiJIUf0XoyD0wP1jQNz_DY,2430
|
338
339
|
nucliadb/writer/api/v1/upload.py,sha256=VOeqNTrZx1_z8iaKjM7p8fVlVcIYMtnQNK1dm72ct6k,33161
|
@@ -351,8 +352,8 @@ nucliadb/writer/tus/local.py,sha256=7jYa_w9b-N90jWgN2sQKkNcomqn6JMVBOVeDOVYJHto,
|
|
351
352
|
nucliadb/writer/tus/s3.py,sha256=vF0NkFTXiXhXq3bCVXXVV-ED38ECVoUeeYViP8uMqcU,8357
|
352
353
|
nucliadb/writer/tus/storage.py,sha256=ToqwjoYnjI4oIcwzkhha_MPxi-k4Jk3Lt55zRwaC1SM,2903
|
353
354
|
nucliadb/writer/tus/utils.py,sha256=MSdVbRsRSZVdkaum69_0wku7X3p5wlZf4nr6E0GMKbw,2556
|
354
|
-
nucliadb-6.3.3.
|
355
|
-
nucliadb-6.3.3.
|
356
|
-
nucliadb-6.3.3.
|
357
|
-
nucliadb-6.3.3.
|
358
|
-
nucliadb-6.3.3.
|
355
|
+
nucliadb-6.3.3.post3628.dist-info/METADATA,sha256=QfPZhPdO_j-wFfhn94ixkXxeI61hltnRWHwhQUpf5tc,4291
|
356
|
+
nucliadb-6.3.3.post3628.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
357
|
+
nucliadb-6.3.3.post3628.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
|
358
|
+
nucliadb-6.3.3.post3628.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
|
359
|
+
nucliadb-6.3.3.post3628.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|