Skip to content

Commit 1c866e3

Browse files
committed
[MODEL-1474] Quality modes as list
1 parent dc86872 commit 1c866e3

File tree

4 files changed

+67
-43
lines changed

4 files changed

+67
-43
lines changed

examples/project_configuration/project_setup.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
},
119119
{
120120
"metadata": {},
121-
"source": "batch_project = client.create_project(\n name=\"Project Setup Demo\",\n quality_mode=QualityMode.\n Consensus, # For benchmarks use quality_mode = QualityMode.Benchmark\n media_type=lb.MediaType.Image,\n)\n\nbatch_project.setup_editor(ontology)",
121+
"source": "batch_project = client.create_project(\n name=\"Project Setup Demo\",\n quality_modes=[QualityMode.\n Consensus], # For benchmarks use quality_mode = QualityMode.Benchmark\n media_type=lb.MediaType.Image,\n)\n\nbatch_project.setup_editor(ontology)",
122122
"cell_type": "code",
123123
"outputs": [],
124124
"execution_count": null

examples/project_configuration/queue_management.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
},
9191
{
9292
"metadata": {},
93-
"source": "# Create Labelbox project\n\nproject = client.create_project(\n name=\"batch-test-project\",\n description=\"a description\",\n quality_mode=QualityMode.\n Benchmark, # For Consensus projects use quality_mode = QualityMode.Consensus\n media_type=lb.MediaType.Image,\n)\n\ndataset = client.create_dataset(name=\"queue_dataset\")",
93+
"source": "# Create Labelbox project\n\nproject = client.create_project(\n name=\"batch-test-project\",\n description=\"a description\",\n quality_modes=[QualityMode.\n Benchmark], # For Consensus projects use quality_mode = QualityMode.Consensus\n media_type=lb.MediaType.Image,\n)\n\ndataset = client.create_dataset(name=\"queue_dataset\")",
9494
"cell_type": "code",
9595
"outputs": [],
9696
"execution_count": null

lbx_prompt.txt

Lines changed: 54 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3360,7 +3360,7 @@ def conversation_entity_data_row(client, rand_gen):
33603360
@pytest.fixture
33613361
def project(client, rand_gen):
33623362
project = client.create_project(name=rand_gen(str),
3363-
queue_mode=QueueMode.Batch,
3363+
queue_modes=[QueueMode.Batch],
33643364
media_type=MediaType.Image)
33653365
yield project
33663366
project.delete()
@@ -3370,7 +3370,7 @@ def project(client, rand_gen):
33703370
def consensus_project(client, rand_gen):
33713371
project = client.create_project(name=rand_gen(str),
33723372
quality_mode=QualityMode.Consensus,
3373-
queue_mode=QueueMode.Batch,
3373+
queue_modes=[QueueMode.Batch],
33743374
media_type=MediaType.Image)
33753375
yield project
33763376
project.delete()
@@ -3560,7 +3560,7 @@ def project_based_user(client, rand_gen):
35603560
def project_pack(client):
35613561
projects = [
35623562
client.create_project(name=f"user-proj-{idx}",
3563-
queue_mode=QueueMode.Batch,
3563+
queue_modes=[QueueMode.Batch],
35643564
media_type=MediaType.Image) for idx in range(2)
35653565
]
35663566
yield projects
@@ -3729,7 +3729,7 @@ def _setup_ontology(project):
37293729
def configured_project_with_complex_ontology(client, initial_dataset, rand_gen,
37303730
image_url):
37313731
project = client.create_project(name=rand_gen(str),
3732-
queue_mode=QueueMode.Batch,
3732+
queue_modes=[QueueMode.Batch],
37333733
media_type=MediaType.Image)
37343734
dataset = initial_dataset
37353735
data_row = dataset.create_data_row(row_data=image_url)
@@ -6650,7 +6650,7 @@ def test_project_dataset(client, rand_gen):
66506650
):
66516651
client.create_project(
66526652
name=rand_gen(str),
6653-
queue_mode=QueueMode.Dataset,
6653+
queue_modes=[QueueMode.Dataset],
66546654
)
66556655

66566656

@@ -8348,9 +8348,9 @@ def project_to_test_where(client, rand_gen):
83488348
p_b_name = f"b-{rand_gen(str)}"
83498349
p_c_name = f"c-{rand_gen(str)}"
83508350

8351-
p_a = client.create_project(name=p_a_name, queue_mode=QueueMode.Batch)
8352-
p_b = client.create_project(name=p_b_name, queue_mode=QueueMode.Batch)
8353-
p_c = client.create_project(name=p_c_name, queue_mode=QueueMode.Batch)
8351+
p_a = client.create_project(name=p_a_name, queue_modes=[QueueMode.Batch])
8352+
p_b = client.create_project(name=p_b_name, queue_modes=[QueueMode.Batch])
8353+
p_c = client.create_project(name=p_c_name, queue_modes=[QueueMode.Batch])
83548354

83558355
yield p_a, p_b, p_c
83568356

@@ -10053,7 +10053,7 @@ def hardcoded_datarow_id():
1005310053
def configured_project_with_ontology(client, ontology, rand_gen):
1005410054
project = client.create_project(
1005510055
name=rand_gen(str),
10056-
queue_mode=QueueMode.Batch,
10056+
queue_modes=[QueueMode.Batch],
1005710057
media_type=MediaType.Image,
1005810058
)
1005910059
editor = list(
@@ -12803,7 +12803,7 @@ def configured_project_with_ontology(client, initial_dataset, ontology,
1280312803
dataset = initial_dataset
1280412804
project = client.create_project(
1280512805
name=rand_gen(str),
12806-
queue_mode=QueueMode.Batch,
12806+
queue_modes=[QueueMode.Batch],
1280712807
)
1280812808
editor = list(
1280912809
client.get_labeling_frontends(
@@ -12827,7 +12827,7 @@ def configured_project_with_ontology(client, initial_dataset, ontology,
1282712827
def configured_project_without_data_rows(client, ontology, rand_gen):
1282812828
project = client.create_project(name=rand_gen(str),
1282912829
description=rand_gen(str),
12830-
queue_mode=QueueMode.Batch)
12830+
queue_modes=[QueueMode.Batch])
1283112831
editor = list(
1283212832
client.get_labeling_frontends(
1283312833
where=LabelingFrontend.name == "editor"))[0]
@@ -22430,7 +22430,7 @@ class Client:
2243022430
description (str): A short summary for the project
2243122431
media_type (MediaType): The type of assets that this project will accept
2243222432
queue_mode (Optional[QueueMode]): The queue mode to use
22433-
quality_mode (Optional[QualityMode]): The quality mode to use (e.g. Benchmark, Consensus). Defaults to
22433+
quality_modes (Optional[List[QualityMode]]): The quality modes to use (e.g. Benchmark, Consensus). Defaults to
2243422434
Benchmark
2243522435
Returns:
2243622436
A new Project object.
@@ -22461,41 +22461,63 @@ class Client:
2246122461
)
2246222462

2246322463
media_type = kwargs.get("media_type")
22464-
if media_type:
22465-
if MediaType.is_supported(media_type):
22466-
media_type = media_type.value
22467-
else:
22468-
raise TypeError(f"{media_type} is not a valid media type. Use"
22469-
f" any of {MediaType.get_supported_members()}"
22470-
" from MediaType. Example: MediaType.Image.")
22464+
if media_type and MediaType.is_supported(media_type):
22465+
media_type_value = media_type.value
22466+
elif media_type:
22467+
raise TypeError(f"{media_type} is not a valid media type. Use"
22468+
f" any of {MediaType.get_supported_members()}"
22469+
" from MediaType. Example: MediaType.Image.")
2247122470
else:
2247222471
logger.warning(
2247322472
"Creating a project without specifying media_type"
2247422473
" through this method will soon no longer be supported.")
22474+
media_type_value = None
22475+
22476+
ontology_kind = kwargs.pop("ontology_kind", None)
22477+
if ontology_kind and OntologyKind.is_supported(ontology_kind):
22478+
editor_task_type_value = EditorTaskTypeMapper.to_editor_task_type(
22479+
ontology_kind, media_type).value
22480+
elif ontology_kind:
22481+
raise OntologyKind.get_ontology_kind_validation_error(ontology_kind)
22482+
else:
22483+
editor_task_type_value = None
2247522484

22476-
quality_mode = kwargs.get("quality_mode")
22477-
if not quality_mode:
22478-
logger.info("Defaulting quality mode to Benchmark.")
22485+
quality_modes = kwargs.get("quality_modes")
22486+
if not quality_modes:
22487+
logger.info("Defaulting quality modes to Benchmark.")
2247922488

2248022489
data = kwargs
22481-
data.pop("quality_mode", None)
22482-
if quality_mode is None or quality_mode is QualityMode.Benchmark:
22490+
data.pop("quality_modes", None)
22491+
if quality_modes is None or quality_modes == [QualityMode.Benchmark]:
2248322492
data[
2248422493
"auto_audit_number_of_labels"] = BENCHMARK_AUTO_AUDIT_NUMBER_OF_LABELS
2248522494
data["auto_audit_percentage"] = BENCHMARK_AUTO_AUDIT_PERCENTAGE
22486-
elif quality_mode is QualityMode.Consensus:
22495+
data["is_benchmark_enabled"] = True
22496+
elif QualityMode.Consensus in quality_modes:
2248722497
data[
2248822498
"auto_audit_number_of_labels"] = CONSENSUS_AUTO_AUDIT_NUMBER_OF_LABELS
2248922499
data["auto_audit_percentage"] = CONSENSUS_AUTO_AUDIT_PERCENTAGE
22500+
data["is_consensus_enabled"] = True
2249022501
else:
22491-
raise ValueError(f"{quality_mode} is not a valid quality mode.")
22502+
raise ValueError(f"{quality_modes} is not a valid quality modes array. Allowed values are [Benchmark, Consensus]")
22503+
22504+
params = {**data}
22505+
if media_type_value:
22506+
params["media_type"] = media_type_value
22507+
if editor_task_type_value:
22508+
params["editor_task_type"] = editor_task_type_value
22509+
22510+
extra_params = {
22511+
Field.String("dataset_name_or_id"):
22512+
params.pop("dataset_name_or_id", None),
22513+
Field.Boolean("append_to_existing_dataset"):
22514+
params.pop("append_to_existing_dataset", None),
22515+
Field.Int("data_row_count"):
22516+
params.pop("data_row_count", None),
22517+
}
22518+
extra_params = {k: v for k, v in extra_params.items() if v is not None}
2249222519

22493-
return self._create(Entity.Project, {
22494-
**data,
22495-
**({
22496-
"media_type": media_type
22497-
} if media_type else {})
22498-
})
22520+
return self._create(Entity.Project, params, extra_params)
2249922521

2250022522
def get_roles(self) -> List[Role]:
2250122523
"""

libs/labelbox/src/labelbox/client.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -733,8 +733,8 @@ def create_project(self, **kwargs) -> Project:
733733
description (str): A short summary for the project
734734
media_type (MediaType): The type of assets that this project will accept
735735
queue_mode (Optional[QueueMode]): The queue mode to use
736-
quality_mode (Optional[QualityMode]): The quality mode to use (e.g. Benchmark, Consensus). Defaults to
737-
Benchmark
736+
quality_modes (Optional[List[QualityMode]]): The quality modes to use (e.g. Benchmark, Consensus). Defaults to
737+
Benchmark.
738738
Returns:
739739
A new Project object.
740740
Raises:
@@ -785,22 +785,24 @@ def create_project(self, **kwargs) -> Project:
785785
else:
786786
editor_task_type_value = None
787787

788-
quality_mode = kwargs.get("quality_mode")
789-
if not quality_mode:
790-
logger.info("Defaulting quality mode to Benchmark.")
788+
quality_modes = kwargs.get("quality_modes")
789+
if not quality_modes:
790+
logger.info("Defaulting quality modes to Benchmark.")
791791

792792
data = kwargs
793-
data.pop("quality_mode", None)
794-
if quality_mode is None or quality_mode is QualityMode.Benchmark:
793+
data.pop("quality_modes", None)
794+
if quality_modes is None or quality_modes == [QualityMode.Benchmark]:
795795
data[
796796
"auto_audit_number_of_labels"] = BENCHMARK_AUTO_AUDIT_NUMBER_OF_LABELS
797797
data["auto_audit_percentage"] = BENCHMARK_AUTO_AUDIT_PERCENTAGE
798-
elif quality_mode is QualityMode.Consensus:
798+
data["is_benchmark_enabled"] = True
799+
elif QualityMode.Consensus in quality_modes:
799800
data[
800801
"auto_audit_number_of_labels"] = CONSENSUS_AUTO_AUDIT_NUMBER_OF_LABELS
801802
data["auto_audit_percentage"] = CONSENSUS_AUTO_AUDIT_PERCENTAGE
803+
data["is_consensus_enabled"] = True
802804
else:
803-
raise ValueError(f"{quality_mode} is not a valid quality mode.")
805+
raise ValueError(f"{quality_modes} is not a valid quality modes array. Allowed values are [Benchmark, Consensus]")
804806

805807
params = {**data}
806808
if media_type_value:

0 commit comments

Comments
 (0)