clarifai 10.3.0__tar.gz → 10.3.2__tar.gz
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.
- {clarifai-10.3.0/clarifai.egg-info → clarifai-10.3.2}/PKG-INFO +20 -3
- {clarifai-10.3.0 → clarifai-10.3.2}/README.md +19 -2
- clarifai-10.3.2/VERSION +1 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/input.py +32 -9
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/model.py +355 -36
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/search.py +90 -15
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/constants/model.py +1 -0
- clarifai-10.3.2/clarifai/constants/search.py +3 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/features.py +4 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/image.py +25 -2
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/loaders/coco_captions.py +7 -2
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/loaders/coco_detection.py +7 -2
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/text.py +2 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/README.md +3 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/upload.py +65 -68
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/docs/cli.md +17 -6
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/rag/rag.py +1 -1
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/rag/utils.py +2 -2
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/versions.py +1 -1
- {clarifai-10.3.0 → clarifai-10.3.2/clarifai.egg-info}/PKG-INFO +20 -3
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_app.py +1 -1
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_search.py +17 -3
- clarifai-10.3.0/VERSION +0 -1
- clarifai-10.3.0/clarifai/constants/search.py +0 -2
- {clarifai-10.3.0 → clarifai-10.3.2}/LICENSE +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/MANIFEST.in +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/cli.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/app.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/auth/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/auth/helper.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/auth/register.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/auth/stub.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/base.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/dataset.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/lister.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/module.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/user.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/client/workflow.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/constants/dataset.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/constants/input.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/constants/rag.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/constants/workflow.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/export/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/export/inputs_annotations.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/base.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/loaders/README.md +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/loaders/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/datasets/upload/utils.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/errors.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/api.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/_utils.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/base.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/build.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/clarifai_clis.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/create.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/example_cli.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/cli/login.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/constants.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/docs/concepts.md +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/docs/dependencies.md +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/docs/inference_parameters.md +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/docs/model_types.md +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/base.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/config.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/inference_parameter.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/multimodal-embedder.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/text-classifier.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/text-embedder.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/text-to-image.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/text-to-text.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/visual-classifier.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/visual-detector.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/visual-embedder.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/model_types_config/visual-segmenter.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/output.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/triton/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/triton/serializer.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/triton/triton_config.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/model_config/triton/wrappers.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/repo_build/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/repo_build/build.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/repo_build/static_files/_requirements.txt +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/repo_build/static_files/base_test.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/repo_build/static_files/inference.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/repo_build/static_files/sample_clarifai_config.yaml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/repo_build/static_files/test.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/repo_build/static_files/triton/model.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/models/model_serving/utils.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/modules/README.md +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/modules/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/modules/css.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/modules/pages.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/modules/style.css +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/rag/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/schema/search.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/urls/helper.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/utils/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/utils/evaluation/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/utils/evaluation/helpers.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/utils/evaluation/main.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/utils/logging.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/utils/misc.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/utils/model_train.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/workflows/__init__.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/workflows/export.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/workflows/utils.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai/workflows/validate.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai.egg-info/SOURCES.txt +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai.egg-info/dependency_links.txt +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai.egg-info/entry_points.txt +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai.egg-info/requires.txt +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/clarifai.egg-info/top_level.txt +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/pyproject.toml +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/requirements.txt +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/setup.cfg +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/setup.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_auth.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_data_upload.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_eval.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_misc.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_model_predict.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_model_train.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_modules.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_rag.py +0 -0
- {clarifai-10.3.0 → clarifai-10.3.2}/tests/test_stub.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: clarifai
|
3
|
-
Version: 10.3.
|
3
|
+
Version: 10.3.2
|
4
4
|
Summary: Clarifai Python SDK
|
5
5
|
Home-page: https://github.com/Clarifai/clarifai-python
|
6
6
|
Author: Clarifai
|
@@ -83,6 +83,7 @@ Give the repo a star ⭐
|
|
83
83
|
* [Smart Image Search](#smart-image-search)
|
84
84
|
* [Smart Text Search](#smart-text-search)
|
85
85
|
* [Filters](#filters)
|
86
|
+
* [Pagination](#pagination)
|
86
87
|
* **[Retrieval Augmented Generation (RAG)](#retrieval-augmented-generation-rag)**
|
87
88
|
* **[More Examples](#pushpin-more-examples)**
|
88
89
|
|
@@ -163,13 +164,13 @@ dataset = app.create_dataset(dataset_id="demo_dataset")
|
|
163
164
|
# execute data upload to Clarifai app dataset
|
164
165
|
from clarifai.datasets.upload.laoders.coco_detection import COCODetectionDataLoader
|
165
166
|
coco_dataloader = COCODetectionDataLoader("images_dir", "coco_annotation_filepath")
|
166
|
-
dataset.upload_dataset(dataloader=coco_dataloader, get_upload_status=True
|
167
|
+
dataset.upload_dataset(dataloader=coco_dataloader, get_upload_status=True)
|
167
168
|
|
168
169
|
|
169
170
|
#Try upload and record the failed outputs in log file.
|
170
171
|
from clarifai.datasets.upload.utils import load_module_dataloader
|
171
172
|
cifar_dataloader = load_module_dataloader('./image_classification/cifar10')
|
172
|
-
dataset.upload_dataset(dataloader=cifar_dataloader,
|
173
|
+
dataset.upload_dataset(dataloader=cifar_dataloader, log_warnings =True)
|
173
174
|
|
174
175
|
#Retry upload from logs for `upload_dataset`
|
175
176
|
dataset.retry_upload_from_logs(dataloader=cifar_dataloader, log_file_path='log_file.log',
|
@@ -478,6 +479,22 @@ Input filters allows to filter by input_type, status of inputs and by inputs_dat
|
|
478
479
|
results = search.query(filters=[{'input_types': ['image', 'text']}])
|
479
480
|
```
|
480
481
|
|
482
|
+
#### Pagination
|
483
|
+
|
484
|
+
Below is an example of using Search with Pagination.
|
485
|
+
|
486
|
+
```python
|
487
|
+
# Note: CLARIFAI_PAT must be set as env variable.
|
488
|
+
from clarifai.client.search import Search
|
489
|
+
search = Search(user_id="user_id", app_id="app_id", metric="cosine", pagination=True)
|
490
|
+
|
491
|
+
# Search by image url
|
492
|
+
results = search.query(ranks=[{"image_url": "https://samples.clarifai.com/metro-north.jpg"}],page_no=2,per_page=5)
|
493
|
+
|
494
|
+
for data in results:
|
495
|
+
print(data.hits[0].input.data.image.url)
|
496
|
+
```
|
497
|
+
|
481
498
|
## Retrieval Augmented Generation (RAG)
|
482
499
|
|
483
500
|
You can setup and start your RAG pipeline in 4 lines of code. The setup method automatically creates a new app and the necessary components under the hood. By default it uses the [mistral-7B-Instruct](https://clarifai.com/mistralai/completion/models/mistral-7B-Instruct) model.
|
@@ -48,6 +48,7 @@ Give the repo a star ⭐
|
|
48
48
|
* [Smart Image Search](#smart-image-search)
|
49
49
|
* [Smart Text Search](#smart-text-search)
|
50
50
|
* [Filters](#filters)
|
51
|
+
* [Pagination](#pagination)
|
51
52
|
* **[Retrieval Augmented Generation (RAG)](#retrieval-augmented-generation-rag)**
|
52
53
|
* **[More Examples](#pushpin-more-examples)**
|
53
54
|
|
@@ -128,13 +129,13 @@ dataset = app.create_dataset(dataset_id="demo_dataset")
|
|
128
129
|
# execute data upload to Clarifai app dataset
|
129
130
|
from clarifai.datasets.upload.laoders.coco_detection import COCODetectionDataLoader
|
130
131
|
coco_dataloader = COCODetectionDataLoader("images_dir", "coco_annotation_filepath")
|
131
|
-
dataset.upload_dataset(dataloader=coco_dataloader, get_upload_status=True
|
132
|
+
dataset.upload_dataset(dataloader=coco_dataloader, get_upload_status=True)
|
132
133
|
|
133
134
|
|
134
135
|
#Try upload and record the failed outputs in log file.
|
135
136
|
from clarifai.datasets.upload.utils import load_module_dataloader
|
136
137
|
cifar_dataloader = load_module_dataloader('./image_classification/cifar10')
|
137
|
-
dataset.upload_dataset(dataloader=cifar_dataloader,
|
138
|
+
dataset.upload_dataset(dataloader=cifar_dataloader, log_warnings =True)
|
138
139
|
|
139
140
|
#Retry upload from logs for `upload_dataset`
|
140
141
|
dataset.retry_upload_from_logs(dataloader=cifar_dataloader, log_file_path='log_file.log',
|
@@ -443,6 +444,22 @@ Input filters allows to filter by input_type, status of inputs and by inputs_dat
|
|
443
444
|
results = search.query(filters=[{'input_types': ['image', 'text']}])
|
444
445
|
```
|
445
446
|
|
447
|
+
#### Pagination
|
448
|
+
|
449
|
+
Below is an example of using Search with Pagination.
|
450
|
+
|
451
|
+
```python
|
452
|
+
# Note: CLARIFAI_PAT must be set as env variable.
|
453
|
+
from clarifai.client.search import Search
|
454
|
+
search = Search(user_id="user_id", app_id="app_id", metric="cosine", pagination=True)
|
455
|
+
|
456
|
+
# Search by image url
|
457
|
+
results = search.query(ranks=[{"image_url": "https://samples.clarifai.com/metro-north.jpg"}],page_no=2,per_page=5)
|
458
|
+
|
459
|
+
for data in results:
|
460
|
+
print(data.hits[0].input.data.image.url)
|
461
|
+
```
|
462
|
+
|
446
463
|
## Retrieval Augmented Generation (RAG)
|
447
464
|
|
448
465
|
You can setup and start your RAG pipeline in 4 lines of code. The setup method automatically creates a new app and the necessary components under the hood. By default it uses the [mistral-7B-Instruct](https://clarifai.com/mistralai/completion/models/mistral-7B-Instruct) model.
|
clarifai-10.3.2/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
10.3.2
|
@@ -72,6 +72,7 @@ class Inputs(Lister, BaseClient):
|
|
72
72
|
text_pb: Text = None,
|
73
73
|
geo_info: List = None,
|
74
74
|
labels: List = None,
|
75
|
+
label_ids: List = None,
|
75
76
|
metadata: Struct = None) -> Input:
|
76
77
|
"""Create input proto for image data type.
|
77
78
|
Args:
|
@@ -82,7 +83,8 @@ class Inputs(Lister, BaseClient):
|
|
82
83
|
audio_pb (Audio): The audio proto to be used for the input.
|
83
84
|
text_pb (Text): The text proto to be used for the input.
|
84
85
|
geo_info (list): A list of longitude and latitude for the geo point.
|
85
|
-
labels (list): A list of
|
86
|
+
labels (list): A list of label names for the input.
|
87
|
+
label_ids (list): A list of label ids for the input.
|
86
88
|
metadata (Struct): A Struct of metadata for the input.
|
87
89
|
Returns:
|
88
90
|
Input: An Input object for the specified input ID.
|
@@ -90,14 +92,26 @@ class Inputs(Lister, BaseClient):
|
|
90
92
|
assert geo_info is None or isinstance(
|
91
93
|
geo_info, list), "geo_info must be a list of longitude and latitude"
|
92
94
|
assert labels is None or isinstance(labels, list), "labels must be a list of strings"
|
95
|
+
assert label_ids is None or isinstance(label_ids, list), "label_ids must be a list of strings"
|
93
96
|
assert metadata is None or isinstance(metadata, Struct), "metadata must be a Struct"
|
94
97
|
geo_pb = resources_pb2.Geo(geo_point=resources_pb2.GeoPoint(
|
95
98
|
longitude=geo_info[0], latitude=geo_info[1])) if geo_info else None
|
96
|
-
|
99
|
+
if labels:
|
100
|
+
if not label_ids:
|
101
|
+
concepts=[
|
97
102
|
resources_pb2.Concept(
|
98
103
|
id=f"id-{''.join(_label.split(' '))}", name=_label, value=1.)\
|
99
104
|
for _label in labels
|
100
|
-
]
|
105
|
+
]
|
106
|
+
else:
|
107
|
+
assert len(labels) == len(label_ids), "labels and label_ids must be of the same length"
|
108
|
+
concepts=[
|
109
|
+
resources_pb2.Concept(
|
110
|
+
id=label_id, name=_label, value=1.)\
|
111
|
+
for label_id, _label in zip(label_ids, labels)
|
112
|
+
]
|
113
|
+
else:
|
114
|
+
concepts = None
|
101
115
|
|
102
116
|
if dataset_id:
|
103
117
|
return resources_pb2.Input(
|
@@ -467,13 +481,14 @@ class Inputs(Lister, BaseClient):
|
|
467
481
|
return input_protos
|
468
482
|
|
469
483
|
@staticmethod
|
470
|
-
def get_bbox_proto(input_id: str, label: str, bbox: List) -> Annotation:
|
484
|
+
def get_bbox_proto(input_id: str, label: str, bbox: List, label_id: str = None) -> Annotation:
|
471
485
|
"""Create an annotation proto for each bounding box, label input pair.
|
472
486
|
|
473
487
|
Args:
|
474
488
|
input_id (str): The input ID for the annotation to create.
|
475
|
-
label (str): annotation label
|
489
|
+
label (str): annotation label name
|
476
490
|
bbox (List): a list of a single bbox's coordinates. # bbox ordering: [xmin, ymin, xmax, ymax]
|
491
|
+
label_id (str): annotation label ID
|
477
492
|
|
478
493
|
Returns:
|
479
494
|
An annotation object for the specified input ID.
|
@@ -500,19 +515,22 @@ class Inputs(Lister, BaseClient):
|
|
500
515
|
data=resources_pb2.Data(concepts=[
|
501
516
|
resources_pb2.Concept(
|
502
517
|
id=f"id-{''.join(label.split(' '))}", name=label, value=1.)
|
518
|
+
if not label_id else resources_pb2.Concept(id=label_id, name=label, value=1.)
|
503
519
|
]))
|
504
520
|
]))
|
505
521
|
|
506
522
|
return input_annot_proto
|
507
523
|
|
508
524
|
@staticmethod
|
509
|
-
def get_mask_proto(input_id: str, label: str, polygons: List[List[float]]
|
525
|
+
def get_mask_proto(input_id: str, label: str, polygons: List[List[float]],
|
526
|
+
label_id: str = None) -> Annotation:
|
510
527
|
"""Create an annotation proto for each polygon box, label input pair.
|
511
528
|
|
512
529
|
Args:
|
513
530
|
input_id (str): The input ID for the annotation to create.
|
514
|
-
label (str): annotation label
|
531
|
+
label (str): annotation label name
|
515
532
|
polygons (List): Polygon x,y points iterable
|
533
|
+
label_id (str): annotation label ID
|
516
534
|
|
517
535
|
Returns:
|
518
536
|
An annotation object for the specified input ID.
|
@@ -537,6 +555,7 @@ class Inputs(Lister, BaseClient):
|
|
537
555
|
data=resources_pb2.Data(concepts=[
|
538
556
|
resources_pb2.Concept(
|
539
557
|
id=f"id-{''.join(label.split(' '))}", name=label, value=1.)
|
558
|
+
if not label_id else resources_pb2.Concept(id=label_id, name=label, value=1.)
|
540
559
|
]))
|
541
560
|
]))
|
542
561
|
|
@@ -726,16 +745,20 @@ class Inputs(Lister, BaseClient):
|
|
726
745
|
request = service_pb2.PostAnnotationsRequest(
|
727
746
|
user_app_id=self.user_app_id, annotations=batch_annot)
|
728
747
|
response = self._grpc_request(self.STUB.PostAnnotations, request)
|
748
|
+
response_dict = MessageToDict(response)
|
729
749
|
if response.status.code != status_code_pb2.SUCCESS:
|
730
750
|
try:
|
731
|
-
|
751
|
+
for annot in response_dict["annotations"]:
|
752
|
+
if annot['status']['code'] != status_code_pb2.ANNOTATION_SUCCESS:
|
753
|
+
self.logger.warning(f"Post annotations failed, status: {annot['status']}")
|
732
754
|
except Exception:
|
733
|
-
self.logger.warning(f"Post annotations failed
|
755
|
+
self.logger.warning(f"Post annotations failed due to {response.status}")
|
734
756
|
finally:
|
735
757
|
retry_upload.extend(batch_annot)
|
736
758
|
else:
|
737
759
|
if show_log:
|
738
760
|
self.logger.info("\nAnnotations Uploaded\n%s", response.status)
|
761
|
+
|
739
762
|
return retry_upload
|
740
763
|
|
741
764
|
def _upload_batch(self, inputs: List[Input]) -> List[Input]:
|