nucliadb 2.46.1.post382__py3-none-any.whl → 6.2.1.post2777__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.
- migrations/0002_rollover_shards.py +1 -2
- migrations/0003_allfields_key.py +2 -37
- migrations/0004_rollover_shards.py +1 -2
- migrations/0005_rollover_shards.py +1 -2
- migrations/0006_rollover_shards.py +2 -4
- migrations/0008_cleanup_leftover_rollover_metadata.py +1 -2
- migrations/0009_upgrade_relations_and_texts_to_v2.py +5 -4
- migrations/0010_fix_corrupt_indexes.py +11 -12
- migrations/0011_materialize_labelset_ids.py +2 -18
- migrations/0012_rollover_shards.py +6 -12
- migrations/0013_rollover_shards.py +2 -4
- migrations/0014_rollover_shards.py +5 -7
- migrations/0015_targeted_rollover.py +6 -12
- migrations/0016_upgrade_to_paragraphs_v2.py +27 -32
- migrations/0017_multiple_writable_shards.py +3 -6
- migrations/0018_purge_orphan_kbslugs.py +59 -0
- migrations/0019_upgrade_to_paragraphs_v3.py +66 -0
- migrations/0020_drain_nodes_from_cluster.py +83 -0
- nucliadb/standalone/tests/unit/test_run.py → migrations/0021_overwrite_vectorsets_key.py +17 -18
- nucliadb/tests/unit/test_openapi.py → migrations/0022_fix_paragraph_deletion_bug.py +16 -11
- migrations/0023_backfill_pg_catalog.py +80 -0
- migrations/0025_assign_models_to_kbs_v2.py +113 -0
- migrations/0026_fix_high_cardinality_content_types.py +61 -0
- migrations/0027_rollover_texts3.py +73 -0
- nucliadb/ingest/fields/date.py → migrations/pg/0001_bootstrap.py +10 -12
- migrations/pg/0002_catalog.py +42 -0
- nucliadb/ingest/tests/unit/test_settings.py → migrations/pg/0003_catalog_kbid_index.py +5 -3
- nucliadb/common/cluster/base.py +41 -24
- nucliadb/common/cluster/discovery/base.py +6 -14
- nucliadb/common/cluster/discovery/k8s.py +9 -19
- nucliadb/common/cluster/discovery/manual.py +1 -3
- nucliadb/common/cluster/discovery/single.py +1 -2
- nucliadb/common/cluster/discovery/utils.py +1 -3
- nucliadb/common/cluster/grpc_node_dummy.py +11 -16
- nucliadb/common/cluster/index_node.py +10 -19
- nucliadb/common/cluster/manager.py +223 -102
- nucliadb/common/cluster/rebalance.py +42 -37
- nucliadb/common/cluster/rollover.py +377 -204
- nucliadb/common/cluster/settings.py +16 -9
- nucliadb/common/cluster/standalone/grpc_node_binding.py +24 -76
- nucliadb/common/cluster/standalone/index_node.py +4 -11
- nucliadb/common/cluster/standalone/service.py +2 -6
- nucliadb/common/cluster/standalone/utils.py +9 -6
- nucliadb/common/cluster/utils.py +43 -29
- nucliadb/common/constants.py +20 -0
- nucliadb/common/context/__init__.py +6 -4
- nucliadb/common/context/fastapi.py +8 -5
- nucliadb/{tests/knowledgeboxes/__init__.py → common/counters.py} +8 -2
- nucliadb/common/datamanagers/__init__.py +24 -5
- nucliadb/common/datamanagers/atomic.py +102 -0
- nucliadb/common/datamanagers/cluster.py +5 -5
- nucliadb/common/datamanagers/entities.py +6 -16
- nucliadb/common/datamanagers/fields.py +84 -0
- nucliadb/common/datamanagers/kb.py +101 -24
- nucliadb/common/datamanagers/labels.py +26 -56
- nucliadb/common/datamanagers/processing.py +2 -6
- nucliadb/common/datamanagers/resources.py +214 -117
- nucliadb/common/datamanagers/rollover.py +77 -16
- nucliadb/{ingest/orm → common/datamanagers}/synonyms.py +16 -28
- nucliadb/common/datamanagers/utils.py +19 -11
- nucliadb/common/datamanagers/vectorsets.py +110 -0
- nucliadb/common/external_index_providers/base.py +257 -0
- nucliadb/{ingest/tests/unit/test_cache.py → common/external_index_providers/exceptions.py} +9 -8
- nucliadb/common/external_index_providers/manager.py +101 -0
- nucliadb/common/external_index_providers/pinecone.py +933 -0
- nucliadb/common/external_index_providers/settings.py +52 -0
- nucliadb/common/http_clients/auth.py +3 -6
- nucliadb/common/http_clients/processing.py +6 -11
- nucliadb/common/http_clients/utils.py +1 -3
- nucliadb/common/ids.py +240 -0
- nucliadb/common/locking.py +43 -13
- nucliadb/common/maindb/driver.py +11 -35
- nucliadb/common/maindb/exceptions.py +6 -6
- nucliadb/common/maindb/local.py +22 -9
- nucliadb/common/maindb/pg.py +206 -111
- nucliadb/common/maindb/utils.py +13 -44
- nucliadb/common/models_utils/from_proto.py +479 -0
- nucliadb/common/models_utils/to_proto.py +60 -0
- nucliadb/common/nidx.py +260 -0
- nucliadb/export_import/datamanager.py +25 -19
- nucliadb/export_import/exceptions.py +8 -0
- nucliadb/export_import/exporter.py +20 -7
- nucliadb/export_import/importer.py +6 -11
- nucliadb/export_import/models.py +5 -5
- nucliadb/export_import/tasks.py +4 -4
- nucliadb/export_import/utils.py +94 -54
- nucliadb/health.py +1 -3
- nucliadb/ingest/app.py +15 -11
- nucliadb/ingest/consumer/auditing.py +30 -147
- nucliadb/ingest/consumer/consumer.py +96 -52
- nucliadb/ingest/consumer/materializer.py +10 -12
- nucliadb/ingest/consumer/pull.py +12 -27
- nucliadb/ingest/consumer/service.py +20 -19
- nucliadb/ingest/consumer/shard_creator.py +7 -14
- nucliadb/ingest/consumer/utils.py +1 -3
- nucliadb/ingest/fields/base.py +139 -188
- nucliadb/ingest/fields/conversation.py +18 -5
- nucliadb/ingest/fields/exceptions.py +1 -4
- nucliadb/ingest/fields/file.py +7 -25
- nucliadb/ingest/fields/link.py +11 -16
- nucliadb/ingest/fields/text.py +9 -4
- nucliadb/ingest/orm/brain.py +255 -262
- nucliadb/ingest/orm/broker_message.py +181 -0
- nucliadb/ingest/orm/entities.py +36 -51
- nucliadb/ingest/orm/exceptions.py +12 -0
- nucliadb/ingest/orm/knowledgebox.py +334 -278
- nucliadb/ingest/orm/processor/__init__.py +2 -697
- nucliadb/ingest/orm/processor/auditing.py +117 -0
- nucliadb/ingest/orm/processor/data_augmentation.py +164 -0
- nucliadb/ingest/orm/processor/pgcatalog.py +84 -0
- nucliadb/ingest/orm/processor/processor.py +752 -0
- nucliadb/ingest/orm/processor/sequence_manager.py +1 -1
- nucliadb/ingest/orm/resource.py +280 -520
- nucliadb/ingest/orm/utils.py +25 -31
- nucliadb/ingest/partitions.py +3 -9
- nucliadb/ingest/processing.py +76 -81
- nucliadb/ingest/py.typed +0 -0
- nucliadb/ingest/serialize.py +37 -173
- nucliadb/ingest/service/__init__.py +1 -3
- nucliadb/ingest/service/writer.py +186 -577
- nucliadb/ingest/settings.py +13 -22
- nucliadb/ingest/utils.py +3 -6
- nucliadb/learning_proxy.py +264 -51
- nucliadb/metrics_exporter.py +30 -19
- nucliadb/middleware/__init__.py +1 -3
- nucliadb/migrator/command.py +1 -3
- nucliadb/migrator/datamanager.py +13 -13
- nucliadb/migrator/migrator.py +57 -37
- nucliadb/migrator/settings.py +2 -1
- nucliadb/migrator/utils.py +18 -10
- nucliadb/purge/__init__.py +139 -33
- nucliadb/purge/orphan_shards.py +7 -13
- nucliadb/reader/__init__.py +1 -3
- nucliadb/reader/api/models.py +3 -14
- nucliadb/reader/api/v1/__init__.py +0 -1
- nucliadb/reader/api/v1/download.py +27 -94
- nucliadb/reader/api/v1/export_import.py +4 -4
- nucliadb/reader/api/v1/knowledgebox.py +13 -13
- nucliadb/reader/api/v1/learning_config.py +8 -12
- nucliadb/reader/api/v1/resource.py +67 -93
- nucliadb/reader/api/v1/services.py +70 -125
- nucliadb/reader/app.py +16 -46
- nucliadb/reader/lifecycle.py +18 -4
- nucliadb/reader/py.typed +0 -0
- nucliadb/reader/reader/notifications.py +10 -31
- nucliadb/search/__init__.py +1 -3
- nucliadb/search/api/v1/__init__.py +2 -2
- nucliadb/search/api/v1/ask.py +112 -0
- nucliadb/search/api/v1/catalog.py +184 -0
- nucliadb/search/api/v1/feedback.py +17 -25
- nucliadb/search/api/v1/find.py +41 -41
- nucliadb/search/api/v1/knowledgebox.py +90 -62
- nucliadb/search/api/v1/predict_proxy.py +2 -2
- nucliadb/search/api/v1/resource/ask.py +66 -117
- nucliadb/search/api/v1/resource/search.py +51 -72
- nucliadb/search/api/v1/router.py +1 -0
- nucliadb/search/api/v1/search.py +50 -197
- nucliadb/search/api/v1/suggest.py +40 -54
- nucliadb/search/api/v1/summarize.py +9 -5
- nucliadb/search/api/v1/utils.py +2 -1
- nucliadb/search/app.py +16 -48
- nucliadb/search/lifecycle.py +10 -3
- nucliadb/search/predict.py +176 -188
- nucliadb/search/py.typed +0 -0
- nucliadb/search/requesters/utils.py +41 -63
- nucliadb/search/search/cache.py +149 -20
- nucliadb/search/search/chat/ask.py +918 -0
- nucliadb/search/{tests/unit/test_run.py → search/chat/exceptions.py} +14 -13
- nucliadb/search/search/chat/images.py +41 -17
- nucliadb/search/search/chat/prompt.py +851 -282
- nucliadb/search/search/chat/query.py +274 -267
- nucliadb/{writer/resource/slug.py → search/search/cut.py} +8 -6
- nucliadb/search/search/fetch.py +43 -36
- nucliadb/search/search/filters.py +9 -15
- nucliadb/search/search/find.py +214 -54
- nucliadb/search/search/find_merge.py +408 -391
- nucliadb/search/search/hydrator.py +191 -0
- nucliadb/search/search/merge.py +198 -234
- nucliadb/search/search/metrics.py +73 -2
- nucliadb/search/search/paragraphs.py +64 -106
- nucliadb/search/search/pgcatalog.py +233 -0
- nucliadb/search/search/predict_proxy.py +1 -1
- nucliadb/search/search/query.py +386 -257
- nucliadb/search/search/query_parser/exceptions.py +22 -0
- nucliadb/search/search/query_parser/models.py +101 -0
- nucliadb/search/search/query_parser/parser.py +183 -0
- nucliadb/search/search/rank_fusion.py +204 -0
- nucliadb/search/search/rerankers.py +270 -0
- nucliadb/search/search/shards.py +4 -38
- nucliadb/search/search/summarize.py +14 -18
- nucliadb/search/search/utils.py +27 -4
- nucliadb/search/settings.py +15 -1
- nucliadb/standalone/api_router.py +4 -10
- nucliadb/standalone/app.py +17 -14
- nucliadb/standalone/auth.py +7 -21
- nucliadb/standalone/config.py +9 -12
- nucliadb/standalone/introspect.py +5 -5
- nucliadb/standalone/lifecycle.py +26 -25
- nucliadb/standalone/migrations.py +58 -0
- nucliadb/standalone/purge.py +9 -8
- nucliadb/standalone/py.typed +0 -0
- nucliadb/standalone/run.py +25 -18
- nucliadb/standalone/settings.py +10 -14
- nucliadb/standalone/versions.py +15 -5
- nucliadb/tasks/consumer.py +8 -12
- nucliadb/tasks/producer.py +7 -6
- nucliadb/tests/config.py +53 -0
- nucliadb/train/__init__.py +1 -3
- nucliadb/train/api/utils.py +1 -2
- nucliadb/train/api/v1/shards.py +2 -2
- nucliadb/train/api/v1/trainset.py +4 -6
- nucliadb/train/app.py +14 -47
- nucliadb/train/generator.py +10 -19
- nucliadb/train/generators/field_classifier.py +7 -19
- nucliadb/train/generators/field_streaming.py +156 -0
- nucliadb/train/generators/image_classifier.py +12 -18
- nucliadb/train/generators/paragraph_classifier.py +5 -9
- nucliadb/train/generators/paragraph_streaming.py +6 -9
- nucliadb/train/generators/question_answer_streaming.py +19 -20
- nucliadb/train/generators/sentence_classifier.py +9 -15
- nucliadb/train/generators/token_classifier.py +45 -36
- nucliadb/train/generators/utils.py +14 -18
- nucliadb/train/lifecycle.py +7 -3
- nucliadb/train/nodes.py +23 -32
- nucliadb/train/py.typed +0 -0
- nucliadb/train/servicer.py +13 -21
- nucliadb/train/settings.py +2 -6
- nucliadb/train/types.py +13 -10
- nucliadb/train/upload.py +3 -6
- nucliadb/train/uploader.py +20 -25
- nucliadb/train/utils.py +1 -1
- nucliadb/writer/__init__.py +1 -3
- nucliadb/writer/api/constants.py +0 -5
- nucliadb/{ingest/fields/keywordset.py → writer/api/utils.py} +13 -10
- nucliadb/writer/api/v1/export_import.py +102 -49
- nucliadb/writer/api/v1/field.py +196 -620
- nucliadb/writer/api/v1/knowledgebox.py +221 -71
- nucliadb/writer/api/v1/learning_config.py +2 -2
- nucliadb/writer/api/v1/resource.py +114 -216
- nucliadb/writer/api/v1/services.py +64 -132
- nucliadb/writer/api/v1/slug.py +61 -0
- nucliadb/writer/api/v1/transaction.py +67 -0
- nucliadb/writer/api/v1/upload.py +184 -215
- nucliadb/writer/app.py +11 -61
- nucliadb/writer/back_pressure.py +62 -43
- nucliadb/writer/exceptions.py +0 -4
- nucliadb/writer/lifecycle.py +21 -15
- nucliadb/writer/py.typed +0 -0
- nucliadb/writer/resource/audit.py +2 -1
- nucliadb/writer/resource/basic.py +48 -62
- nucliadb/writer/resource/field.py +45 -135
- nucliadb/writer/resource/origin.py +1 -2
- nucliadb/writer/settings.py +14 -5
- nucliadb/writer/tus/__init__.py +17 -15
- nucliadb/writer/tus/azure.py +111 -0
- nucliadb/writer/tus/dm.py +17 -5
- nucliadb/writer/tus/exceptions.py +1 -3
- nucliadb/writer/tus/gcs.py +56 -84
- nucliadb/writer/tus/local.py +21 -37
- nucliadb/writer/tus/s3.py +28 -68
- nucliadb/writer/tus/storage.py +5 -56
- nucliadb/writer/vectorsets.py +125 -0
- nucliadb-6.2.1.post2777.dist-info/METADATA +148 -0
- nucliadb-6.2.1.post2777.dist-info/RECORD +343 -0
- {nucliadb-2.46.1.post382.dist-info → nucliadb-6.2.1.post2777.dist-info}/WHEEL +1 -1
- nucliadb/common/maindb/redis.py +0 -194
- nucliadb/common/maindb/tikv.py +0 -412
- nucliadb/ingest/fields/layout.py +0 -58
- nucliadb/ingest/tests/conftest.py +0 -30
- nucliadb/ingest/tests/fixtures.py +0 -771
- nucliadb/ingest/tests/integration/consumer/__init__.py +0 -18
- nucliadb/ingest/tests/integration/consumer/test_auditing.py +0 -80
- nucliadb/ingest/tests/integration/consumer/test_materializer.py +0 -89
- nucliadb/ingest/tests/integration/consumer/test_pull.py +0 -144
- nucliadb/ingest/tests/integration/consumer/test_service.py +0 -81
- nucliadb/ingest/tests/integration/consumer/test_shard_creator.py +0 -68
- nucliadb/ingest/tests/integration/ingest/test_ingest.py +0 -691
- nucliadb/ingest/tests/integration/ingest/test_processing_engine.py +0 -95
- nucliadb/ingest/tests/integration/ingest/test_relations.py +0 -272
- nucliadb/ingest/tests/unit/consumer/__init__.py +0 -18
- nucliadb/ingest/tests/unit/consumer/test_auditing.py +0 -140
- nucliadb/ingest/tests/unit/consumer/test_consumer.py +0 -69
- nucliadb/ingest/tests/unit/consumer/test_pull.py +0 -60
- nucliadb/ingest/tests/unit/consumer/test_shard_creator.py +0 -139
- nucliadb/ingest/tests/unit/consumer/test_utils.py +0 -67
- nucliadb/ingest/tests/unit/orm/__init__.py +0 -19
- nucliadb/ingest/tests/unit/orm/test_brain.py +0 -247
- nucliadb/ingest/tests/unit/orm/test_processor.py +0 -131
- nucliadb/ingest/tests/unit/orm/test_resource.py +0 -275
- nucliadb/ingest/tests/unit/test_partitions.py +0 -40
- nucliadb/ingest/tests/unit/test_processing.py +0 -171
- nucliadb/middleware/transaction.py +0 -117
- nucliadb/reader/api/v1/learning_collector.py +0 -63
- nucliadb/reader/tests/__init__.py +0 -19
- nucliadb/reader/tests/conftest.py +0 -31
- nucliadb/reader/tests/fixtures.py +0 -136
- nucliadb/reader/tests/test_list_resources.py +0 -75
- nucliadb/reader/tests/test_reader_file_download.py +0 -273
- nucliadb/reader/tests/test_reader_resource.py +0 -379
- nucliadb/reader/tests/test_reader_resource_field.py +0 -219
- nucliadb/search/api/v1/chat.py +0 -258
- nucliadb/search/api/v1/resource/chat.py +0 -94
- nucliadb/search/tests/__init__.py +0 -19
- nucliadb/search/tests/conftest.py +0 -33
- nucliadb/search/tests/fixtures.py +0 -199
- nucliadb/search/tests/node.py +0 -465
- nucliadb/search/tests/unit/__init__.py +0 -18
- nucliadb/search/tests/unit/api/__init__.py +0 -19
- nucliadb/search/tests/unit/api/v1/__init__.py +0 -19
- nucliadb/search/tests/unit/api/v1/resource/__init__.py +0 -19
- nucliadb/search/tests/unit/api/v1/resource/test_ask.py +0 -67
- nucliadb/search/tests/unit/api/v1/resource/test_chat.py +0 -97
- nucliadb/search/tests/unit/api/v1/test_chat.py +0 -96
- nucliadb/search/tests/unit/api/v1/test_predict_proxy.py +0 -98
- nucliadb/search/tests/unit/api/v1/test_summarize.py +0 -93
- nucliadb/search/tests/unit/search/__init__.py +0 -18
- nucliadb/search/tests/unit/search/requesters/__init__.py +0 -18
- nucliadb/search/tests/unit/search/requesters/test_utils.py +0 -210
- nucliadb/search/tests/unit/search/search/__init__.py +0 -19
- nucliadb/search/tests/unit/search/search/test_shards.py +0 -45
- nucliadb/search/tests/unit/search/search/test_utils.py +0 -82
- nucliadb/search/tests/unit/search/test_chat_prompt.py +0 -266
- nucliadb/search/tests/unit/search/test_fetch.py +0 -108
- nucliadb/search/tests/unit/search/test_filters.py +0 -125
- nucliadb/search/tests/unit/search/test_paragraphs.py +0 -157
- nucliadb/search/tests/unit/search/test_predict_proxy.py +0 -106
- nucliadb/search/tests/unit/search/test_query.py +0 -201
- nucliadb/search/tests/unit/test_app.py +0 -79
- nucliadb/search/tests/unit/test_find_merge.py +0 -112
- nucliadb/search/tests/unit/test_merge.py +0 -34
- nucliadb/search/tests/unit/test_predict.py +0 -584
- nucliadb/standalone/tests/__init__.py +0 -19
- nucliadb/standalone/tests/conftest.py +0 -33
- nucliadb/standalone/tests/fixtures.py +0 -38
- nucliadb/standalone/tests/unit/__init__.py +0 -18
- nucliadb/standalone/tests/unit/test_api_router.py +0 -61
- nucliadb/standalone/tests/unit/test_auth.py +0 -169
- nucliadb/standalone/tests/unit/test_introspect.py +0 -35
- nucliadb/standalone/tests/unit/test_versions.py +0 -68
- nucliadb/tests/benchmarks/__init__.py +0 -19
- nucliadb/tests/benchmarks/test_search.py +0 -99
- nucliadb/tests/conftest.py +0 -32
- nucliadb/tests/fixtures.py +0 -736
- nucliadb/tests/knowledgeboxes/philosophy_books.py +0 -203
- nucliadb/tests/knowledgeboxes/ten_dummy_resources.py +0 -109
- nucliadb/tests/migrations/__init__.py +0 -19
- nucliadb/tests/migrations/test_migration_0017.py +0 -80
- nucliadb/tests/tikv.py +0 -240
- nucliadb/tests/unit/__init__.py +0 -19
- nucliadb/tests/unit/common/__init__.py +0 -19
- nucliadb/tests/unit/common/cluster/__init__.py +0 -19
- nucliadb/tests/unit/common/cluster/discovery/__init__.py +0 -19
- nucliadb/tests/unit/common/cluster/discovery/test_k8s.py +0 -170
- nucliadb/tests/unit/common/cluster/standalone/__init__.py +0 -18
- nucliadb/tests/unit/common/cluster/standalone/test_service.py +0 -113
- nucliadb/tests/unit/common/cluster/standalone/test_utils.py +0 -59
- nucliadb/tests/unit/common/cluster/test_cluster.py +0 -399
- nucliadb/tests/unit/common/cluster/test_kb_shard_manager.py +0 -178
- nucliadb/tests/unit/common/cluster/test_rollover.py +0 -279
- nucliadb/tests/unit/common/maindb/__init__.py +0 -18
- nucliadb/tests/unit/common/maindb/test_driver.py +0 -127
- nucliadb/tests/unit/common/maindb/test_tikv.py +0 -53
- nucliadb/tests/unit/common/maindb/test_utils.py +0 -81
- nucliadb/tests/unit/common/test_context.py +0 -36
- nucliadb/tests/unit/export_import/__init__.py +0 -19
- nucliadb/tests/unit/export_import/test_datamanager.py +0 -37
- nucliadb/tests/unit/export_import/test_utils.py +0 -294
- nucliadb/tests/unit/migrator/__init__.py +0 -19
- nucliadb/tests/unit/migrator/test_migrator.py +0 -87
- nucliadb/tests/unit/tasks/__init__.py +0 -19
- nucliadb/tests/unit/tasks/conftest.py +0 -42
- nucliadb/tests/unit/tasks/test_consumer.py +0 -93
- nucliadb/tests/unit/tasks/test_producer.py +0 -95
- nucliadb/tests/unit/tasks/test_tasks.py +0 -60
- nucliadb/tests/unit/test_field_ids.py +0 -49
- nucliadb/tests/unit/test_health.py +0 -84
- nucliadb/tests/unit/test_kb_slugs.py +0 -54
- nucliadb/tests/unit/test_learning_proxy.py +0 -252
- nucliadb/tests/unit/test_metrics_exporter.py +0 -77
- nucliadb/tests/unit/test_purge.py +0 -138
- nucliadb/tests/utils/__init__.py +0 -74
- nucliadb/tests/utils/aiohttp_session.py +0 -44
- nucliadb/tests/utils/broker_messages/__init__.py +0 -167
- nucliadb/tests/utils/broker_messages/fields.py +0 -181
- nucliadb/tests/utils/broker_messages/helpers.py +0 -33
- nucliadb/tests/utils/entities.py +0 -78
- nucliadb/train/api/v1/check.py +0 -60
- nucliadb/train/tests/__init__.py +0 -19
- nucliadb/train/tests/conftest.py +0 -29
- nucliadb/train/tests/fixtures.py +0 -342
- nucliadb/train/tests/test_field_classification.py +0 -122
- nucliadb/train/tests/test_get_entities.py +0 -80
- nucliadb/train/tests/test_get_info.py +0 -51
- nucliadb/train/tests/test_get_ontology.py +0 -34
- nucliadb/train/tests/test_get_ontology_count.py +0 -63
- nucliadb/train/tests/test_image_classification.py +0 -222
- nucliadb/train/tests/test_list_fields.py +0 -39
- nucliadb/train/tests/test_list_paragraphs.py +0 -73
- nucliadb/train/tests/test_list_resources.py +0 -39
- nucliadb/train/tests/test_list_sentences.py +0 -71
- nucliadb/train/tests/test_paragraph_classification.py +0 -123
- nucliadb/train/tests/test_paragraph_streaming.py +0 -118
- nucliadb/train/tests/test_question_answer_streaming.py +0 -239
- nucliadb/train/tests/test_sentence_classification.py +0 -143
- nucliadb/train/tests/test_token_classification.py +0 -136
- nucliadb/train/tests/utils.py +0 -108
- nucliadb/writer/layouts/__init__.py +0 -51
- nucliadb/writer/layouts/v1.py +0 -59
- nucliadb/writer/resource/vectors.py +0 -120
- nucliadb/writer/tests/__init__.py +0 -19
- nucliadb/writer/tests/conftest.py +0 -31
- nucliadb/writer/tests/fixtures.py +0 -192
- nucliadb/writer/tests/test_fields.py +0 -486
- nucliadb/writer/tests/test_files.py +0 -743
- nucliadb/writer/tests/test_knowledgebox.py +0 -49
- nucliadb/writer/tests/test_reprocess_file_field.py +0 -139
- nucliadb/writer/tests/test_resources.py +0 -546
- nucliadb/writer/tests/test_service.py +0 -137
- nucliadb/writer/tests/test_tus.py +0 -203
- nucliadb/writer/tests/utils.py +0 -35
- nucliadb/writer/tus/pg.py +0 -125
- nucliadb-2.46.1.post382.dist-info/METADATA +0 -134
- nucliadb-2.46.1.post382.dist-info/RECORD +0 -451
- {nucliadb/ingest/tests → migrations/pg}/__init__.py +0 -0
- /nucliadb/{ingest/tests/integration → common/external_index_providers}/__init__.py +0 -0
- /nucliadb/{ingest/tests/integration/ingest → common/models_utils}/__init__.py +0 -0
- /nucliadb/{ingest/tests/unit → search/search/query_parser}/__init__.py +0 -0
- /nucliadb/{ingest/tests → tests}/vectors.py +0 -0
- {nucliadb-2.46.1.post382.dist-info → nucliadb-6.2.1.post2777.dist-info}/entry_points.txt +0 -0
- {nucliadb-2.46.1.post382.dist-info → nucliadb-6.2.1.post2777.dist-info}/top_level.txt +0 -0
- {nucliadb-2.46.1.post382.dist-info → nucliadb-6.2.1.post2777.dist-info}/zip-safe +0 -0
nucliadb/reader/api/models.py
CHANGED
@@ -22,15 +22,12 @@ from typing import TYPE_CHECKING, Any, Optional, Union
|
|
22
22
|
from pydantic import BaseModel
|
23
23
|
|
24
24
|
import nucliadb_models as models
|
25
|
-
from nucliadb_models.common import
|
25
|
+
from nucliadb_models.common import FieldTypeName
|
26
26
|
from nucliadb_models.resource import (
|
27
27
|
ConversationFieldExtractedData,
|
28
|
-
DatetimeFieldExtractedData,
|
29
28
|
Error,
|
30
29
|
ExtractedDataType,
|
31
30
|
FileFieldExtractedData,
|
32
|
-
KeywordsetFieldExtractedData,
|
33
|
-
LayoutFieldExtractedData,
|
34
31
|
LinkFieldExtractedData,
|
35
32
|
TextFieldExtractedData,
|
36
33
|
)
|
@@ -41,10 +38,7 @@ if TYPE_CHECKING: # pragma: no cover
|
|
41
38
|
models.FieldText,
|
42
39
|
models.FieldFile,
|
43
40
|
models.FieldLink,
|
44
|
-
models.FieldLayout,
|
45
41
|
models.Conversation,
|
46
|
-
models.FieldKeywordset,
|
47
|
-
models.FieldDatetime,
|
48
42
|
]
|
49
43
|
]
|
50
44
|
else:
|
@@ -55,19 +49,14 @@ else:
|
|
55
49
|
class ResourceField(BaseModel):
|
56
50
|
field_type: FieldTypeName
|
57
51
|
field_id: str
|
58
|
-
value: ValueType
|
59
|
-
extracted: ExtractedDataType
|
52
|
+
value: ValueType = None
|
53
|
+
extracted: Optional[ExtractedDataType] = None
|
60
54
|
error: Optional[Error] = None
|
61
55
|
|
62
56
|
|
63
|
-
FIELD_NAMES_TO_PB_TYPE_MAP = {v: k for k, v in FIELD_TYPES_MAP.items()}
|
64
|
-
|
65
57
|
FIELD_NAME_TO_EXTRACTED_DATA_FIELD_MAP: dict[FieldTypeName, Any] = {
|
66
58
|
FieldTypeName.TEXT: TextFieldExtractedData,
|
67
59
|
FieldTypeName.FILE: FileFieldExtractedData,
|
68
60
|
FieldTypeName.LINK: LinkFieldExtractedData,
|
69
|
-
FieldTypeName.DATETIME: DatetimeFieldExtractedData,
|
70
|
-
FieldTypeName.KEYWORDSET: KeywordsetFieldExtractedData,
|
71
|
-
FieldTypeName.LAYOUT: LayoutFieldExtractedData,
|
72
61
|
FieldTypeName.CONVERSATION: ConversationFieldExtractedData,
|
73
62
|
}
|
@@ -28,14 +28,14 @@ from fastapi_versioning import version
|
|
28
28
|
from starlette.datastructures import Headers
|
29
29
|
from starlette.responses import StreamingResponse
|
30
30
|
|
31
|
-
from nucliadb.
|
31
|
+
from nucliadb.common.ids import FIELD_TYPE_PB_TO_STR
|
32
|
+
from nucliadb.common.models_utils import to_proto
|
32
33
|
from nucliadb.ingest.serialize import get_resource_uuid_by_slug
|
33
34
|
from nucliadb.reader import SERVICE_NAME, logger
|
34
|
-
from nucliadb.reader.api.models import FIELD_NAMES_TO_PB_TYPE_MAP
|
35
35
|
from nucliadb_models.common import FieldTypeName
|
36
36
|
from nucliadb_models.resource import NucliaDBRoles
|
37
37
|
from nucliadb_utils.authentication import requires_one
|
38
|
-
from nucliadb_utils.storages.storage import
|
38
|
+
from nucliadb_utils.storages.storage import ObjectMetadata, Range, StorageField
|
39
39
|
from nucliadb_utils.utilities import get_storage
|
40
40
|
|
41
41
|
from .router import KB_PREFIX, RESOURCE_PREFIX, RSLUG_PREFIX, api
|
@@ -50,7 +50,7 @@ class DownloadType(Enum):
|
|
50
50
|
f"/{KB_PREFIX}/{{kbid}}/{RSLUG_PREFIX}/{{rslug}}/{{field_type}}/{{field_id}}/download/extracted/{{download_field:path}}", # noqa
|
51
51
|
tags=["Resource fields"],
|
52
52
|
status_code=200,
|
53
|
-
|
53
|
+
summary="Download extracted binary file (by slug)",
|
54
54
|
)
|
55
55
|
@requires_one([NucliaDBRoles.READER])
|
56
56
|
@version(1)
|
@@ -62,16 +62,14 @@ async def download_extract_file_rslug_prefix(
|
|
62
62
|
field_id: str,
|
63
63
|
download_field: str,
|
64
64
|
) -> Response:
|
65
|
-
return await _download_extract_file(
|
66
|
-
request, kbid, field_type, field_id, download_field, rslug=rslug
|
67
|
-
)
|
65
|
+
return await _download_extract_file(request, kbid, field_type, field_id, download_field, rslug=rslug)
|
68
66
|
|
69
67
|
|
70
68
|
@api.get(
|
71
69
|
f"/{KB_PREFIX}/{{kbid}}/{RESOURCE_PREFIX}/{{rid}}/{{field_type}}/{{field_id}}/download/extracted/{{download_field:path}}", # noqa
|
72
70
|
tags=["Resource fields"],
|
73
71
|
status_code=200,
|
74
|
-
|
72
|
+
summary="Download extracted binary file (by id)",
|
75
73
|
)
|
76
74
|
@requires_one([NucliaDBRoles.READER])
|
77
75
|
@version(1)
|
@@ -83,9 +81,7 @@ async def download_extract_file_rid_prefix(
|
|
83
81
|
field_id: str,
|
84
82
|
download_field: str,
|
85
83
|
) -> Response:
|
86
|
-
return await _download_extract_file(
|
87
|
-
request, kbid, field_type, field_id, download_field, rid=rid
|
88
|
-
)
|
84
|
+
return await _download_extract_file(request, kbid, field_type, field_id, download_field, rid=rid)
|
89
85
|
|
90
86
|
|
91
87
|
async def _download_extract_file(
|
@@ -101,8 +97,8 @@ async def _download_extract_file(
|
|
101
97
|
|
102
98
|
storage = await get_storage(service_name=SERVICE_NAME)
|
103
99
|
|
104
|
-
pb_field_type =
|
105
|
-
field_type_letter =
|
100
|
+
pb_field_type = to_proto.field_type_name(field_type)
|
101
|
+
field_type_letter = FIELD_TYPE_PB_TO_STR[pb_field_type]
|
106
102
|
|
107
103
|
sf = storage.file_extracted(kbid, rid, field_type_letter, field_id, download_field)
|
108
104
|
|
@@ -113,7 +109,7 @@ async def _download_extract_file(
|
|
113
109
|
f"/{KB_PREFIX}/{{kbid}}/{RSLUG_PREFIX}/{{rslug}}/file/{{field_id}}/download/field",
|
114
110
|
tags=["Resource fields"],
|
115
111
|
status_code=200,
|
116
|
-
|
112
|
+
summary="Download field binary field (by slug)",
|
117
113
|
)
|
118
114
|
@requires_one([NucliaDBRoles.READER])
|
119
115
|
@version(1)
|
@@ -124,16 +120,14 @@ async def download_field_file_rslug_prefix(
|
|
124
120
|
field_id: str,
|
125
121
|
inline: bool = False,
|
126
122
|
) -> Response:
|
127
|
-
return await _download_field_file(
|
128
|
-
request, kbid, field_id, rslug=rslug, inline=inline
|
129
|
-
)
|
123
|
+
return await _download_field_file(request, kbid, field_id, rslug=rslug, inline=inline)
|
130
124
|
|
131
125
|
|
132
126
|
@api.get(
|
133
127
|
f"/{KB_PREFIX}/{{kbid}}/{RESOURCE_PREFIX}/{{rid}}/file/{{field_id}}/download/field",
|
134
128
|
tags=["Resource fields"],
|
135
129
|
status_code=200,
|
136
|
-
|
130
|
+
summary="Download field binary field (by id)",
|
137
131
|
)
|
138
132
|
@requires_one([NucliaDBRoles.READER])
|
139
133
|
@version(1)
|
@@ -164,68 +158,11 @@ async def _download_field_file(
|
|
164
158
|
return await download_api(sf, request.headers, inline=inline)
|
165
159
|
|
166
160
|
|
167
|
-
@api.get(
|
168
|
-
f"/{KB_PREFIX}/{{kbid}}/{RSLUG_PREFIX}/{{rslug}}/layout/{{field_id}}/download/field/{{download_field}}",
|
169
|
-
tags=["Resource fields"],
|
170
|
-
status_code=200,
|
171
|
-
name="Download layout binary field (by slug)",
|
172
|
-
)
|
173
|
-
@requires_one([NucliaDBRoles.READER])
|
174
|
-
@version(1)
|
175
|
-
async def download_field_layout_rslug_prefix(
|
176
|
-
request: Request,
|
177
|
-
kbid: str,
|
178
|
-
rslug: str,
|
179
|
-
field_id: str,
|
180
|
-
download_field: str,
|
181
|
-
) -> Response:
|
182
|
-
return await _download_field_layout(
|
183
|
-
request, kbid, field_id, download_field, rslug=rslug
|
184
|
-
)
|
185
|
-
|
186
|
-
|
187
|
-
@api.get(
|
188
|
-
f"/{KB_PREFIX}/{{kbid}}/{RESOURCE_PREFIX}/{{rid}}/layout/{{field_id}}/download/field/{{download_field}}",
|
189
|
-
tags=["Resource fields"],
|
190
|
-
status_code=200,
|
191
|
-
name="Download layout binary field (by id)",
|
192
|
-
)
|
193
|
-
@requires_one([NucliaDBRoles.READER])
|
194
|
-
@version(1)
|
195
|
-
async def download_field_layout_rid_prefix(
|
196
|
-
request: Request,
|
197
|
-
kbid: str,
|
198
|
-
rid: str,
|
199
|
-
field_id: str,
|
200
|
-
download_field: str,
|
201
|
-
) -> Response:
|
202
|
-
return await _download_field_layout(
|
203
|
-
request, kbid, field_id, download_field, rid=rid
|
204
|
-
)
|
205
|
-
|
206
|
-
|
207
|
-
async def _download_field_layout(
|
208
|
-
request: Request,
|
209
|
-
kbid: str,
|
210
|
-
field_id: str,
|
211
|
-
download_field: str,
|
212
|
-
rid: Optional[str] = None,
|
213
|
-
rslug: Optional[str] = None,
|
214
|
-
) -> Response:
|
215
|
-
rid = await _get_resource_uuid_from_params(kbid, rid, rslug)
|
216
|
-
|
217
|
-
storage = await get_storage(service_name=SERVICE_NAME)
|
218
|
-
|
219
|
-
sf = storage.layout_field(kbid, rid, field_id, download_field)
|
220
|
-
|
221
|
-
return await download_api(sf, request.headers)
|
222
|
-
|
223
|
-
|
224
161
|
@api.get(
|
225
162
|
f"/{KB_PREFIX}/{{kbid}}/{RSLUG_PREFIX}/{{rslug}}/conversation/{{field_id}}/download/field/{{message_id}}/{{file_num}}", # noqa
|
226
163
|
tags=["Resource fields"],
|
227
164
|
status_code=200,
|
228
|
-
|
165
|
+
summary="Download conversation binary field (by slug)",
|
229
166
|
)
|
230
167
|
@requires_one([NucliaDBRoles.READER])
|
231
168
|
@version(1)
|
@@ -237,16 +174,14 @@ async def download_field_conversation_rslug_prefix(
|
|
237
174
|
message_id: str,
|
238
175
|
file_num: int,
|
239
176
|
) -> Response:
|
240
|
-
return await _download_field_conversation(
|
241
|
-
request, kbid, field_id, message_id, file_num, rslug=rslug
|
242
|
-
)
|
177
|
+
return await _download_field_conversation(request, kbid, field_id, message_id, file_num, rslug=rslug)
|
243
178
|
|
244
179
|
|
245
180
|
@api.get(
|
246
181
|
f"/{KB_PREFIX}/{{kbid}}/{RESOURCE_PREFIX}/{{rid}}/conversation/{{field_id}}/download/field/{{message_id}}/{{file_num}}", # noqa
|
247
182
|
tags=["Resource fields"],
|
248
183
|
status_code=200,
|
249
|
-
|
184
|
+
summary="Download conversation binary field (by id)",
|
250
185
|
)
|
251
186
|
@requires_one([NucliaDBRoles.READER])
|
252
187
|
@version(1)
|
@@ -258,9 +193,7 @@ async def download_field_conversation_rid_prefix(
|
|
258
193
|
message_id: str,
|
259
194
|
file_num: int,
|
260
195
|
) -> Response:
|
261
|
-
return await _download_field_conversation(
|
262
|
-
request, kbid, field_id, message_id, file_num, rid=rid
|
263
|
-
)
|
196
|
+
return await _download_field_conversation(request, kbid, field_id, message_id, file_num, rid=rid)
|
264
197
|
|
265
198
|
|
266
199
|
async def _download_field_conversation(
|
@@ -282,13 +215,13 @@ async def _download_field_conversation(
|
|
282
215
|
|
283
216
|
|
284
217
|
async def download_api(sf: StorageField, headers: Headers, inline: bool = False):
|
285
|
-
metadata = await sf.exists()
|
218
|
+
metadata: Optional[ObjectMetadata] = await sf.exists()
|
286
219
|
if metadata is None:
|
287
220
|
raise HTTPException(status_code=404, detail="Specified file doesn't exist")
|
288
221
|
|
289
|
-
file_size =
|
290
|
-
content_type = metadata.
|
291
|
-
filename = metadata.
|
222
|
+
file_size = metadata.size or -1
|
223
|
+
content_type = metadata.content_type or "application/octet-stream"
|
224
|
+
filename = metadata.filename or "file"
|
292
225
|
filename = safe_http_header_encode(filename)
|
293
226
|
|
294
227
|
status_code = 200
|
@@ -299,8 +232,10 @@ async def download_api(sf: StorageField, headers: Headers, inline: bool = False)
|
|
299
232
|
"Content-Type": content_type,
|
300
233
|
"Content-Disposition": content_disposition,
|
301
234
|
}
|
302
|
-
|
235
|
+
|
236
|
+
range = Range()
|
303
237
|
if "range" in headers and file_size > -1:
|
238
|
+
status_code = 206
|
304
239
|
range_request = headers["range"]
|
305
240
|
try:
|
306
241
|
start, end, range_size = parse_media_range(range_request, file_size)
|
@@ -341,23 +276,21 @@ async def download_api(sf: StorageField, headers: Headers, inline: bool = False)
|
|
341
276
|
headers={"Content-Range": f"bytes */{file_size}"},
|
342
277
|
status_code=416,
|
343
278
|
)
|
344
|
-
status_code = 206
|
345
279
|
logger.debug(f"Range request: {range_request}")
|
346
280
|
extra_headers["Content-Length"] = f"{range_size}"
|
347
281
|
extra_headers["Content-Range"] = f"bytes {start}-{end}/{file_size}"
|
348
|
-
|
282
|
+
range.start = start
|
283
|
+
range.end = end
|
349
284
|
|
350
285
|
return StreamingResponse(
|
351
|
-
sf.storage.download(sf.bucket, sf.key,
|
286
|
+
sf.storage.download(sf.bucket, sf.key, range=range),
|
352
287
|
status_code=status_code,
|
353
288
|
media_type=content_type,
|
354
289
|
headers=extra_headers,
|
355
290
|
)
|
356
291
|
|
357
292
|
|
358
|
-
async def _get_resource_uuid_from_params(
|
359
|
-
kbid, rid: Optional[str], rslug: Optional[str]
|
360
|
-
) -> str:
|
293
|
+
async def _get_resource_uuid_from_params(kbid, rid: Optional[str], rslug: Optional[str]) -> str:
|
361
294
|
if not any([rid, rslug]):
|
362
295
|
raise ValueError("Either rid or slug must be set")
|
363
296
|
|
@@ -41,7 +41,7 @@ from nucliadb_utils.authentication import requires_one
|
|
41
41
|
@api.get(
|
42
42
|
f"/{KB_PREFIX}/{{kbid}}/export/{{export_id}}",
|
43
43
|
status_code=200,
|
44
|
-
|
44
|
+
summary="Download a Knowledge Box export",
|
45
45
|
tags=["Knowledge Boxes"],
|
46
46
|
response_class=StreamingResponse,
|
47
47
|
)
|
@@ -100,7 +100,7 @@ async def download_export_and_delete(
|
|
100
100
|
@api.get(
|
101
101
|
f"/{KB_PREFIX}/{{kbid}}/export/{{export_id}}/status",
|
102
102
|
status_code=200,
|
103
|
-
|
103
|
+
summary="Get the status of a Knowledge Box Export",
|
104
104
|
response_model=StatusResponse,
|
105
105
|
tags=["Knowledge Boxes"],
|
106
106
|
)
|
@@ -119,7 +119,7 @@ async def get_export_status_endpoint(
|
|
119
119
|
@api.get(
|
120
120
|
f"/{KB_PREFIX}/{{kbid}}/import/{{import_id}}/status",
|
121
121
|
status_code=200,
|
122
|
-
|
122
|
+
summary="Get the status of a Knowledge Box Import",
|
123
123
|
response_model=StatusResponse,
|
124
124
|
tags=["Knowledge Boxes"],
|
125
125
|
)
|
@@ -160,5 +160,5 @@ async def _get_status(
|
|
160
160
|
|
161
161
|
|
162
162
|
async def exists_kb(kbid: str) -> bool:
|
163
|
-
async with datamanagers.
|
163
|
+
async with datamanagers.with_ro_transaction() as txn:
|
164
164
|
return await datamanagers.kb.exists_kb(txn, kbid=kbid)
|
@@ -18,14 +18,14 @@
|
|
18
18
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
#
|
20
20
|
from fastapi import HTTPException
|
21
|
-
from fastapi_versioning import version
|
21
|
+
from fastapi_versioning import version
|
22
22
|
from starlette.requests import Request
|
23
23
|
|
24
24
|
from nucliadb.common import datamanagers
|
25
25
|
from nucliadb.common.maindb.utils import get_driver
|
26
|
+
from nucliadb.common.models_utils import from_proto
|
26
27
|
from nucliadb.reader.api.v1.router import KB_PREFIX, KBS_PREFIX, api
|
27
28
|
from nucliadb_models.resource import (
|
28
|
-
KnowledgeBoxConfig,
|
29
29
|
KnowledgeBoxList,
|
30
30
|
KnowledgeBoxObj,
|
31
31
|
KnowledgeBoxObjSummary,
|
@@ -37,7 +37,7 @@ from nucliadb_utils.authentication import requires, requires_one
|
|
37
37
|
@api.get(
|
38
38
|
f"/{KBS_PREFIX}",
|
39
39
|
status_code=200,
|
40
|
-
|
40
|
+
summary="List Knowledge Boxes",
|
41
41
|
response_model=KnowledgeBoxList,
|
42
42
|
tags=["Knowledge Boxes"],
|
43
43
|
include_in_schema=False,
|
@@ -46,17 +46,17 @@ from nucliadb_utils.authentication import requires, requires_one
|
|
46
46
|
@version(1)
|
47
47
|
async def get_kbs(request: Request, prefix: str = "") -> KnowledgeBoxList:
|
48
48
|
driver = get_driver()
|
49
|
-
async with driver.transaction() as txn:
|
49
|
+
async with driver.transaction(read_only=True) as txn:
|
50
50
|
response = KnowledgeBoxList()
|
51
51
|
async for kbid, slug in datamanagers.kb.get_kbs(txn, prefix=prefix):
|
52
|
-
response.kbs.append(KnowledgeBoxObjSummary(slug=slug or None, uuid=kbid))
|
52
|
+
response.kbs.append(KnowledgeBoxObjSummary(slug=slug or None, uuid=kbid))
|
53
53
|
return response
|
54
54
|
|
55
55
|
|
56
56
|
@api.get(
|
57
57
|
f"/{KB_PREFIX}/{{kbid}}",
|
58
58
|
status_code=200,
|
59
|
-
|
59
|
+
summary="Get Knowledge Box",
|
60
60
|
response_model=KnowledgeBoxObj,
|
61
61
|
tags=["Knowledge Boxes"],
|
62
62
|
)
|
@@ -64,22 +64,22 @@ async def get_kbs(request: Request, prefix: str = "") -> KnowledgeBoxList:
|
|
64
64
|
@version(1)
|
65
65
|
async def get_kb(request: Request, kbid: str) -> KnowledgeBoxObj:
|
66
66
|
driver = get_driver()
|
67
|
-
async with driver.transaction() as txn:
|
67
|
+
async with driver.transaction(read_only=True) as txn:
|
68
68
|
kb_config = await datamanagers.kb.get_config(txn, kbid=kbid)
|
69
69
|
if kb_config is None:
|
70
70
|
raise HTTPException(status_code=404, detail="Knowledge Box does not exist")
|
71
71
|
|
72
72
|
return KnowledgeBoxObj(
|
73
73
|
uuid=kbid,
|
74
|
-
slug=kb_config.slug,
|
75
|
-
config=
|
74
|
+
slug=kb_config.slug,
|
75
|
+
config=from_proto.knowledgebox_config(kb_config),
|
76
76
|
)
|
77
77
|
|
78
78
|
|
79
79
|
@api.get(
|
80
80
|
f"/{KB_PREFIX}/s/{{slug}}",
|
81
81
|
status_code=200,
|
82
|
-
|
82
|
+
summary="Get Knowledge Box (by slug)",
|
83
83
|
response_model=KnowledgeBoxObj,
|
84
84
|
tags=["Knowledge Boxes"],
|
85
85
|
)
|
@@ -87,7 +87,7 @@ async def get_kb(request: Request, kbid: str) -> KnowledgeBoxObj:
|
|
87
87
|
@version(1)
|
88
88
|
async def get_kb_by_slug(request: Request, slug: str) -> KnowledgeBoxObj:
|
89
89
|
driver = get_driver()
|
90
|
-
async with driver.transaction() as txn:
|
90
|
+
async with driver.transaction(read_only=True) as txn:
|
91
91
|
kbid = await datamanagers.kb.get_kb_uuid(txn, slug=slug)
|
92
92
|
if kbid is None:
|
93
93
|
raise HTTPException(status_code=404, detail="Knowledge Box does not exist")
|
@@ -98,6 +98,6 @@ async def get_kb_by_slug(request: Request, slug: str) -> KnowledgeBoxObj:
|
|
98
98
|
|
99
99
|
return KnowledgeBoxObj(
|
100
100
|
uuid=kbid,
|
101
|
-
slug=kb_config.slug,
|
102
|
-
config=
|
101
|
+
slug=kb_config.slug,
|
102
|
+
config=from_proto.knowledgebox_config(kb_config),
|
103
103
|
)
|
@@ -31,7 +31,7 @@ from nucliadb_utils.settings import is_onprem_nucliadb
|
|
31
31
|
@api.get(
|
32
32
|
path=f"/{KB_PREFIX}/{{kbid}}/models/{{model_id}}/{{filename:path}}",
|
33
33
|
status_code=200,
|
34
|
-
|
34
|
+
summary="Download the Knowledege Box model",
|
35
35
|
description="Download the trained model or any other generated file as a result of a training task on a Knowledge Box.", # noqa
|
36
36
|
response_model=None,
|
37
37
|
tags=["Models"],
|
@@ -44,15 +44,13 @@ async def download_model(
|
|
44
44
|
model_id: str,
|
45
45
|
filename: str,
|
46
46
|
):
|
47
|
-
return await learning_config_proxy(
|
48
|
-
request, "GET", f"/download/{kbid}/model/{model_id}/{filename}"
|
49
|
-
)
|
47
|
+
return await learning_config_proxy(request, "GET", f"/download/{kbid}/model/{model_id}/{filename}")
|
50
48
|
|
51
49
|
|
52
50
|
@api.get(
|
53
51
|
path=f"/{KB_PREFIX}/{{kbid}}/configuration",
|
54
52
|
status_code=200,
|
55
|
-
|
53
|
+
summary="Get Knowledge Box models configuration",
|
56
54
|
description="Current configuration of models assigned to a Knowledge Box",
|
57
55
|
response_model=None,
|
58
56
|
tags=["Models"],
|
@@ -74,7 +72,7 @@ async def get_configuration(
|
|
74
72
|
@api.get(
|
75
73
|
path=f"/{KB_PREFIX}/{{kbid}}/models",
|
76
74
|
status_code=200,
|
77
|
-
|
75
|
+
summary="Get available models",
|
78
76
|
description="Get available models",
|
79
77
|
response_model=None,
|
80
78
|
tags=["Models"],
|
@@ -91,7 +89,7 @@ async def get_models(
|
|
91
89
|
@api.get(
|
92
90
|
path=f"/{KB_PREFIX}/{{kbid}}/model/{{model_id}}",
|
93
91
|
status_code=200,
|
94
|
-
|
92
|
+
summary="Get model metadata",
|
95
93
|
description="Get metadata for a particular model",
|
96
94
|
response_model=None,
|
97
95
|
tags=["Models"],
|
@@ -114,7 +112,7 @@ async def get_model(
|
|
114
112
|
@api.get(
|
115
113
|
path=f"/{KB_PREFIX}/{{kbid}}/schema",
|
116
114
|
status_code=200,
|
117
|
-
|
115
|
+
summary="Learning configuration schema",
|
118
116
|
description="Get jsonschema definition to update the `learning_configuration` of your Knowledge Box",
|
119
117
|
response_model=None,
|
120
118
|
tags=["Models"],
|
@@ -131,7 +129,7 @@ async def get_schema_for_configuration_updates(
|
|
131
129
|
@api.get(
|
132
130
|
path=f"/nua/schema",
|
133
131
|
status_code=200,
|
134
|
-
|
132
|
+
summary="Learning configuration schema for Knowledge Box creation",
|
135
133
|
description="Get jsonschema definition for `learning_configuration` field for the Knowledge Box creation payload",
|
136
134
|
response_model=None,
|
137
135
|
tags=["Models"],
|
@@ -143,7 +141,5 @@ async def get_schema_for_configuration_creation(
|
|
143
141
|
request: Request,
|
144
142
|
):
|
145
143
|
if not is_onprem_nucliadb():
|
146
|
-
return HTTPClientError(
|
147
|
-
status_code=404, detail="Endpoint not available for Hosted NucliaDB"
|
148
|
-
)
|
144
|
+
return HTTPClientError(status_code=404, detail="Endpoint not available for Hosted NucliaDB")
|
149
145
|
return await learning_config_proxy(request, "GET", f"/schema")
|