orca-sdk 0.0.78__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.
- orca_sdk/__init__.py +24 -0
- orca_sdk/_generated_api_client/__init__.py +3 -0
- orca_sdk/_generated_api_client/api/__init__.py +205 -0
- orca_sdk/_generated_api_client/api/auth/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/auth/check_authentication_auth_get.py +130 -0
- orca_sdk/_generated_api_client/api/auth/create_api_key_auth_api_key_post.py +172 -0
- orca_sdk/_generated_api_client/api/auth/delete_api_key_auth_api_key_name_or_id_delete.py +158 -0
- orca_sdk/_generated_api_client/api/auth/delete_org_auth_org_delete.py +132 -0
- orca_sdk/_generated_api_client/api/auth/list_api_keys_auth_api_key_get.py +129 -0
- orca_sdk/_generated_api_client/api/classification_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/classification_model/create_evaluation_classification_model_model_name_or_id_evaluation_post.py +185 -0
- orca_sdk/_generated_api_client/api/classification_model/create_model_classification_model_post.py +172 -0
- orca_sdk/_generated_api_client/api/classification_model/delete_evaluation_classification_model_model_name_or_id_evaluation_task_id_delete.py +170 -0
- orca_sdk/_generated_api_client/api/classification_model/delete_model_classification_model_name_or_id_delete.py +156 -0
- orca_sdk/_generated_api_client/api/classification_model/get_evaluation_classification_model_model_name_or_id_evaluation_task_id_get.py +172 -0
- orca_sdk/_generated_api_client/api/classification_model/get_model_classification_model_name_or_id_get.py +158 -0
- orca_sdk/_generated_api_client/api/classification_model/list_evaluations_classification_model_model_name_or_id_evaluation_get.py +163 -0
- orca_sdk/_generated_api_client/api/classification_model/list_models_classification_model_get.py +129 -0
- orca_sdk/_generated_api_client/api/classification_model/predict_gpu_classification_model_name_or_id_prediction_post.py +192 -0
- orca_sdk/_generated_api_client/api/datasource/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/datasource/create_datasource_datasource_post.py +169 -0
- orca_sdk/_generated_api_client/api/datasource/create_embedding_evaluation_datasource_name_or_id_embedding_evaluation_post.py +185 -0
- orca_sdk/_generated_api_client/api/datasource/delete_datasource_datasource_name_or_id_delete.py +158 -0
- orca_sdk/_generated_api_client/api/datasource/get_datasource_datasource_name_or_id_get.py +158 -0
- orca_sdk/_generated_api_client/api/datasource/get_embedding_evaluation_datasource_name_or_id_embedding_evaluation_task_id_get.py +171 -0
- orca_sdk/_generated_api_client/api/datasource/list_datasources_datasource_get.py +129 -0
- orca_sdk/_generated_api_client/api/datasource/list_embedding_evaluations_datasource_name_or_id_embedding_evaluation_get.py +237 -0
- orca_sdk/_generated_api_client/api/default/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/default/healthcheck_get.py +120 -0
- orca_sdk/_generated_api_client/api/default/healthcheck_gpu_get.py +120 -0
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/create_finetuned_embedding_model_finetuned_embedding_model_post.py +170 -0
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/delete_finetuned_embedding_model_finetuned_embedding_model_name_or_id_delete.py +158 -0
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/embed_with_finetuned_model_gpu_finetuned_embedding_model_name_or_id_embedding_post.py +191 -0
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/get_finetuned_embedding_model_finetuned_embedding_model_name_or_id_get.py +158 -0
- orca_sdk/_generated_api_client/api/finetuned_embedding_model/list_finetuned_embedding_models_finetuned_embedding_model_get.py +129 -0
- orca_sdk/_generated_api_client/api/memoryset/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/memoryset/clone_memoryset_memoryset_name_or_id_clone_post.py +183 -0
- orca_sdk/_generated_api_client/api/memoryset/create_analysis_memoryset_name_or_id_analysis_post.py +185 -0
- orca_sdk/_generated_api_client/api/memoryset/create_memoryset_memoryset_post.py +170 -0
- orca_sdk/_generated_api_client/api/memoryset/delete_memories_memoryset_name_or_id_memories_delete_post.py +183 -0
- orca_sdk/_generated_api_client/api/memoryset/delete_memory_memoryset_name_or_id_memory_memory_id_delete.py +169 -0
- orca_sdk/_generated_api_client/api/memoryset/delete_memoryset_memoryset_name_or_id_delete.py +158 -0
- orca_sdk/_generated_api_client/api/memoryset/get_analysis_memoryset_name_or_id_analysis_analysis_task_id_get.py +171 -0
- orca_sdk/_generated_api_client/api/memoryset/get_memories_memoryset_name_or_id_memories_get_post.py +190 -0
- orca_sdk/_generated_api_client/api/memoryset/get_memory_memoryset_name_or_id_memory_memory_id_get.py +171 -0
- orca_sdk/_generated_api_client/api/memoryset/get_memoryset_memoryset_name_or_id_get.py +158 -0
- orca_sdk/_generated_api_client/api/memoryset/insert_memories_gpu_memoryset_name_or_id_memory_post.py +186 -0
- orca_sdk/_generated_api_client/api/memoryset/list_analyses_memoryset_name_or_id_analysis_get.py +262 -0
- orca_sdk/_generated_api_client/api/memoryset/list_memorysets_memoryset_get.py +129 -0
- orca_sdk/_generated_api_client/api/memoryset/memoryset_lookup_gpu_memoryset_name_or_id_lookup_post.py +195 -0
- orca_sdk/_generated_api_client/api/memoryset/query_memoryset_memoryset_name_or_id_memories_post.py +190 -0
- orca_sdk/_generated_api_client/api/memoryset/update_memories_gpu_memoryset_name_or_id_memories_patch.py +193 -0
- orca_sdk/_generated_api_client/api/memoryset/update_memory_gpu_memoryset_name_or_id_memory_patch.py +189 -0
- orca_sdk/_generated_api_client/api/pretrained_embedding_model/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/pretrained_embedding_model/embed_with_pretrained_model_gpu_pretrained_embedding_model_model_name_embedding_post.py +194 -0
- orca_sdk/_generated_api_client/api/pretrained_embedding_model/get_pretrained_embedding_model_pretrained_embedding_model_model_name_get.py +163 -0
- orca_sdk/_generated_api_client/api/pretrained_embedding_model/list_pretrained_embedding_models_pretrained_embedding_model_get.py +129 -0
- orca_sdk/_generated_api_client/api/task/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/task/abort_task_task_task_id_abort_delete.py +156 -0
- orca_sdk/_generated_api_client/api/task/get_task_status_task_task_id_status_get.py +158 -0
- orca_sdk/_generated_api_client/api/task/list_tasks_task_get.py +245 -0
- orca_sdk/_generated_api_client/api/telemetry/__init__.py +0 -0
- orca_sdk/_generated_api_client/api/telemetry/drop_feedback_category_with_data_telemetry_feedback_category_name_or_id_delete.py +164 -0
- orca_sdk/_generated_api_client/api/telemetry/get_feedback_category_telemetry_feedback_category_name_or_id_get.py +158 -0
- orca_sdk/_generated_api_client/api/telemetry/get_prediction_telemetry_prediction_prediction_id_get.py +159 -0
- orca_sdk/_generated_api_client/api/telemetry/list_feedback_categories_telemetry_feedback_category_get.py +129 -0
- orca_sdk/_generated_api_client/api/telemetry/list_predictions_telemetry_prediction_post.py +177 -0
- orca_sdk/_generated_api_client/api/telemetry/record_prediction_feedback_telemetry_prediction_feedback_put.py +173 -0
- orca_sdk/_generated_api_client/api/telemetry/update_prediction_telemetry_prediction_prediction_id_patch.py +183 -0
- orca_sdk/_generated_api_client/client.py +216 -0
- orca_sdk/_generated_api_client/errors.py +38 -0
- orca_sdk/_generated_api_client/models/__init__.py +179 -0
- orca_sdk/_generated_api_client/models/analyze_neighbor_labels_result.py +116 -0
- orca_sdk/_generated_api_client/models/api_key_metadata.py +137 -0
- orca_sdk/_generated_api_client/models/api_key_metadata_scope_item.py +9 -0
- orca_sdk/_generated_api_client/models/base_model.py +55 -0
- orca_sdk/_generated_api_client/models/body_create_datasource_datasource_post.py +176 -0
- orca_sdk/_generated_api_client/models/classification_evaluation_result.py +147 -0
- orca_sdk/_generated_api_client/models/clone_labeled_memoryset_request.py +150 -0
- orca_sdk/_generated_api_client/models/column_info.py +114 -0
- orca_sdk/_generated_api_client/models/column_type.py +14 -0
- orca_sdk/_generated_api_client/models/conflict_error_response.py +80 -0
- orca_sdk/_generated_api_client/models/create_api_key_request.py +120 -0
- orca_sdk/_generated_api_client/models/create_api_key_request_scope_item.py +9 -0
- orca_sdk/_generated_api_client/models/create_api_key_response.py +145 -0
- orca_sdk/_generated_api_client/models/create_api_key_response_scope_item.py +9 -0
- orca_sdk/_generated_api_client/models/create_labeled_memoryset_request.py +279 -0
- orca_sdk/_generated_api_client/models/create_rac_model_request.py +209 -0
- orca_sdk/_generated_api_client/models/datasource_metadata.py +142 -0
- orca_sdk/_generated_api_client/models/delete_memories_request.py +70 -0
- orca_sdk/_generated_api_client/models/embed_request.py +127 -0
- orca_sdk/_generated_api_client/models/embedding_evaluation_request.py +179 -0
- orca_sdk/_generated_api_client/models/embedding_evaluation_response.py +148 -0
- orca_sdk/_generated_api_client/models/embedding_evaluation_result.py +86 -0
- orca_sdk/_generated_api_client/models/embedding_finetuning_method.py +9 -0
- orca_sdk/_generated_api_client/models/embedding_model_result.py +114 -0
- orca_sdk/_generated_api_client/models/evaluation_request.py +180 -0
- orca_sdk/_generated_api_client/models/evaluation_response.py +140 -0
- orca_sdk/_generated_api_client/models/feedback_type.py +9 -0
- orca_sdk/_generated_api_client/models/field_validation_error.py +103 -0
- orca_sdk/_generated_api_client/models/filter_item.py +231 -0
- orca_sdk/_generated_api_client/models/filter_item_field_type_0_item.py +15 -0
- orca_sdk/_generated_api_client/models/filter_item_field_type_2_item_type_1.py +20 -0
- orca_sdk/_generated_api_client/models/filter_item_op.py +16 -0
- orca_sdk/_generated_api_client/models/find_duplicates_analysis_result.py +70 -0
- orca_sdk/_generated_api_client/models/finetune_embedding_model_request.py +259 -0
- orca_sdk/_generated_api_client/models/finetune_embedding_model_request_training_args.py +66 -0
- orca_sdk/_generated_api_client/models/finetuned_embedding_model_metadata.py +166 -0
- orca_sdk/_generated_api_client/models/get_memories_request.py +70 -0
- orca_sdk/_generated_api_client/models/internal_server_error_response.py +80 -0
- orca_sdk/_generated_api_client/models/label_class_metrics.py +108 -0
- orca_sdk/_generated_api_client/models/label_prediction_memory_lookup.py +274 -0
- orca_sdk/_generated_api_client/models/label_prediction_memory_lookup_metadata.py +68 -0
- orca_sdk/_generated_api_client/models/label_prediction_result.py +115 -0
- orca_sdk/_generated_api_client/models/label_prediction_with_memories_and_feedback.py +246 -0
- orca_sdk/_generated_api_client/models/labeled_memory.py +197 -0
- orca_sdk/_generated_api_client/models/labeled_memory_insert.py +128 -0
- orca_sdk/_generated_api_client/models/labeled_memory_insert_metadata.py +68 -0
- orca_sdk/_generated_api_client/models/labeled_memory_lookup.py +258 -0
- orca_sdk/_generated_api_client/models/labeled_memory_lookup_metadata.py +68 -0
- orca_sdk/_generated_api_client/models/labeled_memory_metadata.py +68 -0
- orca_sdk/_generated_api_client/models/labeled_memory_metrics.py +237 -0
- orca_sdk/_generated_api_client/models/labeled_memory_update.py +171 -0
- orca_sdk/_generated_api_client/models/labeled_memory_update_metadata_type_0.py +68 -0
- orca_sdk/_generated_api_client/models/labeled_memoryset_metadata.py +195 -0
- orca_sdk/_generated_api_client/models/list_analyses_memoryset_name_or_id_analysis_get_type_type_0.py +9 -0
- orca_sdk/_generated_api_client/models/list_memories_request.py +104 -0
- orca_sdk/_generated_api_client/models/list_predictions_request.py +257 -0
- orca_sdk/_generated_api_client/models/lookup_request.py +81 -0
- orca_sdk/_generated_api_client/models/memory_metrics.py +156 -0
- orca_sdk/_generated_api_client/models/memoryset_analysis_request.py +83 -0
- orca_sdk/_generated_api_client/models/memoryset_analysis_request_type.py +9 -0
- orca_sdk/_generated_api_client/models/memoryset_analysis_response.py +180 -0
- orca_sdk/_generated_api_client/models/memoryset_analysis_response_config.py +66 -0
- orca_sdk/_generated_api_client/models/memoryset_analysis_response_type.py +9 -0
- orca_sdk/_generated_api_client/models/not_found_error_response.py +100 -0
- orca_sdk/_generated_api_client/models/not_found_error_response_resource_type_0.py +21 -0
- orca_sdk/_generated_api_client/models/precision_recall_curve.py +94 -0
- orca_sdk/_generated_api_client/models/prediction_feedback.py +157 -0
- orca_sdk/_generated_api_client/models/prediction_feedback_category.py +115 -0
- orca_sdk/_generated_api_client/models/prediction_feedback_request.py +122 -0
- orca_sdk/_generated_api_client/models/prediction_feedback_result.py +102 -0
- orca_sdk/_generated_api_client/models/prediction_request.py +169 -0
- orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_0.py +10 -0
- orca_sdk/_generated_api_client/models/prediction_sort_item_item_type_1.py +9 -0
- orca_sdk/_generated_api_client/models/pretrained_embedding_model_metadata.py +97 -0
- orca_sdk/_generated_api_client/models/pretrained_embedding_model_name.py +12 -0
- orca_sdk/_generated_api_client/models/rac_head_type.py +11 -0
- orca_sdk/_generated_api_client/models/rac_model_metadata.py +191 -0
- orca_sdk/_generated_api_client/models/roc_curve.py +94 -0
- orca_sdk/_generated_api_client/models/service_unavailable_error_response.py +80 -0
- orca_sdk/_generated_api_client/models/task.py +198 -0
- orca_sdk/_generated_api_client/models/task_status.py +14 -0
- orca_sdk/_generated_api_client/models/task_status_info.py +133 -0
- orca_sdk/_generated_api_client/models/unauthenticated_error_response.py +72 -0
- orca_sdk/_generated_api_client/models/unauthorized_error_response.py +80 -0
- orca_sdk/_generated_api_client/models/unprocessable_input_error_response.py +94 -0
- orca_sdk/_generated_api_client/models/update_prediction_request.py +93 -0
- orca_sdk/_generated_api_client/py.typed +1 -0
- orca_sdk/_generated_api_client/types.py +56 -0
- orca_sdk/_utils/__init__.py +0 -0
- orca_sdk/_utils/analysis_ui.py +192 -0
- orca_sdk/_utils/analysis_ui_style.css +54 -0
- orca_sdk/_utils/auth.py +68 -0
- orca_sdk/_utils/auth_test.py +31 -0
- orca_sdk/_utils/common.py +37 -0
- orca_sdk/_utils/data_parsing.py +99 -0
- orca_sdk/_utils/data_parsing_test.py +244 -0
- orca_sdk/_utils/prediction_result_ui.css +18 -0
- orca_sdk/_utils/prediction_result_ui.py +64 -0
- orca_sdk/_utils/task.py +73 -0
- orca_sdk/classification_model.py +508 -0
- orca_sdk/classification_model_test.py +272 -0
- orca_sdk/conftest.py +116 -0
- orca_sdk/credentials.py +126 -0
- orca_sdk/credentials_test.py +37 -0
- orca_sdk/datasource.py +333 -0
- orca_sdk/datasource_test.py +96 -0
- orca_sdk/embedding_model.py +347 -0
- orca_sdk/embedding_model_test.py +176 -0
- orca_sdk/memoryset.py +1209 -0
- orca_sdk/memoryset_test.py +287 -0
- orca_sdk/telemetry.py +398 -0
- orca_sdk/telemetry_test.py +109 -0
- orca_sdk-0.0.78.dist-info/METADATA +79 -0
- orca_sdk-0.0.78.dist-info/RECORD +188 -0
- orca_sdk-0.0.78.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This file is generated by the openapi-python-client tool via the generate_api_client.py script
|
|
3
|
+
|
|
4
|
+
It is a customized template from the openapi-python-client tool's default template:
|
|
5
|
+
https://github.com/openapi-generators/openapi-python-client/blob/861ef5622f10fc96d240dc9becb0edf94e61446c/openapi_python_client/templates/model.py.jinja
|
|
6
|
+
|
|
7
|
+
The main change is:
|
|
8
|
+
- Fix typing issues
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# flake8: noqa: C901
|
|
12
|
+
|
|
13
|
+
from typing import Any, Literal, Type, TypeVar, cast
|
|
14
|
+
|
|
15
|
+
from attrs import define as _attrs_define
|
|
16
|
+
from attrs import field as _attrs_field
|
|
17
|
+
|
|
18
|
+
T = TypeVar("T", bound="UnauthenticatedErrorResponse")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@_attrs_define
|
|
22
|
+
class UnauthenticatedErrorResponse:
|
|
23
|
+
"""
|
|
24
|
+
Attributes:
|
|
25
|
+
status_code (Literal[401]):
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
status_code: Literal[401]
|
|
29
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
30
|
+
|
|
31
|
+
def to_dict(self) -> dict[str, Any]:
|
|
32
|
+
status_code = self.status_code
|
|
33
|
+
|
|
34
|
+
field_dict: dict[str, Any] = {}
|
|
35
|
+
field_dict.update(self.additional_properties)
|
|
36
|
+
field_dict.update(
|
|
37
|
+
{
|
|
38
|
+
"status_code": status_code,
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
return field_dict
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def from_dict(cls: Type[T], src_dict: dict[str, Any]) -> T:
|
|
46
|
+
d = src_dict.copy()
|
|
47
|
+
status_code = cast(Literal[401], d.pop("status_code"))
|
|
48
|
+
if status_code != 401:
|
|
49
|
+
raise ValueError(f"status_code must match const 401, got '{status_code}'")
|
|
50
|
+
|
|
51
|
+
unauthenticated_error_response = cls(
|
|
52
|
+
status_code=status_code,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
unauthenticated_error_response.additional_properties = d
|
|
56
|
+
return unauthenticated_error_response
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def additional_keys(self) -> list[str]:
|
|
60
|
+
return list(self.additional_properties.keys())
|
|
61
|
+
|
|
62
|
+
def __getitem__(self, key: str) -> Any:
|
|
63
|
+
return self.additional_properties[key]
|
|
64
|
+
|
|
65
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
66
|
+
self.additional_properties[key] = value
|
|
67
|
+
|
|
68
|
+
def __delitem__(self, key: str) -> None:
|
|
69
|
+
del self.additional_properties[key]
|
|
70
|
+
|
|
71
|
+
def __contains__(self, key: str) -> bool:
|
|
72
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This file is generated by the openapi-python-client tool via the generate_api_client.py script
|
|
3
|
+
|
|
4
|
+
It is a customized template from the openapi-python-client tool's default template:
|
|
5
|
+
https://github.com/openapi-generators/openapi-python-client/blob/861ef5622f10fc96d240dc9becb0edf94e61446c/openapi_python_client/templates/model.py.jinja
|
|
6
|
+
|
|
7
|
+
The main change is:
|
|
8
|
+
- Fix typing issues
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# flake8: noqa: C901
|
|
12
|
+
|
|
13
|
+
from typing import Any, Literal, Type, TypeVar, cast
|
|
14
|
+
|
|
15
|
+
from attrs import define as _attrs_define
|
|
16
|
+
from attrs import field as _attrs_field
|
|
17
|
+
|
|
18
|
+
T = TypeVar("T", bound="UnauthorizedErrorResponse")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@_attrs_define
|
|
22
|
+
class UnauthorizedErrorResponse:
|
|
23
|
+
"""
|
|
24
|
+
Attributes:
|
|
25
|
+
status_code (Literal[403]):
|
|
26
|
+
reason (str):
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
status_code: Literal[403]
|
|
30
|
+
reason: str
|
|
31
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
32
|
+
|
|
33
|
+
def to_dict(self) -> dict[str, Any]:
|
|
34
|
+
status_code = self.status_code
|
|
35
|
+
|
|
36
|
+
reason = self.reason
|
|
37
|
+
|
|
38
|
+
field_dict: dict[str, Any] = {}
|
|
39
|
+
field_dict.update(self.additional_properties)
|
|
40
|
+
field_dict.update(
|
|
41
|
+
{
|
|
42
|
+
"status_code": status_code,
|
|
43
|
+
"reason": reason,
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
return field_dict
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def from_dict(cls: Type[T], src_dict: dict[str, Any]) -> T:
|
|
51
|
+
d = src_dict.copy()
|
|
52
|
+
status_code = cast(Literal[403], d.pop("status_code"))
|
|
53
|
+
if status_code != 403:
|
|
54
|
+
raise ValueError(f"status_code must match const 403, got '{status_code}'")
|
|
55
|
+
|
|
56
|
+
reason = d.pop("reason")
|
|
57
|
+
|
|
58
|
+
unauthorized_error_response = cls(
|
|
59
|
+
status_code=status_code,
|
|
60
|
+
reason=reason,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
unauthorized_error_response.additional_properties = d
|
|
64
|
+
return unauthorized_error_response
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def additional_keys(self) -> list[str]:
|
|
68
|
+
return list(self.additional_properties.keys())
|
|
69
|
+
|
|
70
|
+
def __getitem__(self, key: str) -> Any:
|
|
71
|
+
return self.additional_properties[key]
|
|
72
|
+
|
|
73
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
74
|
+
self.additional_properties[key] = value
|
|
75
|
+
|
|
76
|
+
def __delitem__(self, key: str) -> None:
|
|
77
|
+
del self.additional_properties[key]
|
|
78
|
+
|
|
79
|
+
def __contains__(self, key: str) -> bool:
|
|
80
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This file is generated by the openapi-python-client tool via the generate_api_client.py script
|
|
3
|
+
|
|
4
|
+
It is a customized template from the openapi-python-client tool's default template:
|
|
5
|
+
https://github.com/openapi-generators/openapi-python-client/blob/861ef5622f10fc96d240dc9becb0edf94e61446c/openapi_python_client/templates/model.py.jinja
|
|
6
|
+
|
|
7
|
+
The main change is:
|
|
8
|
+
- Fix typing issues
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# flake8: noqa: C901
|
|
12
|
+
|
|
13
|
+
from typing import TYPE_CHECKING, Any, List, Literal, Type, TypeVar, cast
|
|
14
|
+
|
|
15
|
+
from attrs import define as _attrs_define
|
|
16
|
+
from attrs import field as _attrs_field
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
from ..models.field_validation_error import FieldValidationError
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
T = TypeVar("T", bound="UnprocessableInputErrorResponse")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@_attrs_define
|
|
26
|
+
class UnprocessableInputErrorResponse:
|
|
27
|
+
"""
|
|
28
|
+
Attributes:
|
|
29
|
+
status_code (Literal[422]):
|
|
30
|
+
validation_issues (List['FieldValidationError']):
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
status_code: Literal[422]
|
|
34
|
+
validation_issues: List["FieldValidationError"]
|
|
35
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
36
|
+
|
|
37
|
+
def to_dict(self) -> dict[str, Any]:
|
|
38
|
+
status_code = self.status_code
|
|
39
|
+
|
|
40
|
+
validation_issues = []
|
|
41
|
+
for validation_issues_item_data in self.validation_issues:
|
|
42
|
+
validation_issues_item = validation_issues_item_data.to_dict()
|
|
43
|
+
validation_issues.append(validation_issues_item)
|
|
44
|
+
|
|
45
|
+
field_dict: dict[str, Any] = {}
|
|
46
|
+
field_dict.update(self.additional_properties)
|
|
47
|
+
field_dict.update(
|
|
48
|
+
{
|
|
49
|
+
"status_code": status_code,
|
|
50
|
+
"validation_issues": validation_issues,
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
return field_dict
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def from_dict(cls: Type[T], src_dict: dict[str, Any]) -> T:
|
|
58
|
+
from ..models.field_validation_error import FieldValidationError
|
|
59
|
+
|
|
60
|
+
d = src_dict.copy()
|
|
61
|
+
status_code = cast(Literal[422], d.pop("status_code"))
|
|
62
|
+
if status_code != 422:
|
|
63
|
+
raise ValueError(f"status_code must match const 422, got '{status_code}'")
|
|
64
|
+
|
|
65
|
+
validation_issues = []
|
|
66
|
+
_validation_issues = d.pop("validation_issues")
|
|
67
|
+
for validation_issues_item_data in _validation_issues:
|
|
68
|
+
validation_issues_item = FieldValidationError.from_dict(validation_issues_item_data)
|
|
69
|
+
|
|
70
|
+
validation_issues.append(validation_issues_item)
|
|
71
|
+
|
|
72
|
+
unprocessable_input_error_response = cls(
|
|
73
|
+
status_code=status_code,
|
|
74
|
+
validation_issues=validation_issues,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
unprocessable_input_error_response.additional_properties = d
|
|
78
|
+
return unprocessable_input_error_response
|
|
79
|
+
|
|
80
|
+
@property
|
|
81
|
+
def additional_keys(self) -> list[str]:
|
|
82
|
+
return list(self.additional_properties.keys())
|
|
83
|
+
|
|
84
|
+
def __getitem__(self, key: str) -> Any:
|
|
85
|
+
return self.additional_properties[key]
|
|
86
|
+
|
|
87
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
88
|
+
self.additional_properties[key] = value
|
|
89
|
+
|
|
90
|
+
def __delitem__(self, key: str) -> None:
|
|
91
|
+
del self.additional_properties[key]
|
|
92
|
+
|
|
93
|
+
def __contains__(self, key: str) -> bool:
|
|
94
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This file is generated by the openapi-python-client tool via the generate_api_client.py script
|
|
3
|
+
|
|
4
|
+
It is a customized template from the openapi-python-client tool's default template:
|
|
5
|
+
https://github.com/openapi-generators/openapi-python-client/blob/861ef5622f10fc96d240dc9becb0edf94e61446c/openapi_python_client/templates/model.py.jinja
|
|
6
|
+
|
|
7
|
+
The main change is:
|
|
8
|
+
- Fix typing issues
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# flake8: noqa: C901
|
|
12
|
+
|
|
13
|
+
from typing import Any, List, Type, TypeVar, Union, cast
|
|
14
|
+
|
|
15
|
+
from attrs import define as _attrs_define
|
|
16
|
+
from attrs import field as _attrs_field
|
|
17
|
+
|
|
18
|
+
from ..types import UNSET, Unset
|
|
19
|
+
|
|
20
|
+
T = TypeVar("T", bound="UpdatePredictionRequest")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@_attrs_define
|
|
24
|
+
class UpdatePredictionRequest:
|
|
25
|
+
"""
|
|
26
|
+
Attributes:
|
|
27
|
+
expected_label (Union[None, Unset, int]):
|
|
28
|
+
tags (Union[Unset, List[str]]):
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
expected_label: Union[None, Unset, int] = UNSET
|
|
32
|
+
tags: Union[Unset, List[str]] = UNSET
|
|
33
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
34
|
+
|
|
35
|
+
def to_dict(self) -> dict[str, Any]:
|
|
36
|
+
expected_label: Union[None, Unset, int]
|
|
37
|
+
if isinstance(self.expected_label, Unset):
|
|
38
|
+
expected_label = UNSET
|
|
39
|
+
else:
|
|
40
|
+
expected_label = self.expected_label
|
|
41
|
+
|
|
42
|
+
tags: Union[Unset, List[str]] = UNSET
|
|
43
|
+
if not isinstance(self.tags, Unset):
|
|
44
|
+
tags = self.tags
|
|
45
|
+
|
|
46
|
+
field_dict: dict[str, Any] = {}
|
|
47
|
+
field_dict.update(self.additional_properties)
|
|
48
|
+
field_dict.update({})
|
|
49
|
+
if expected_label is not UNSET:
|
|
50
|
+
field_dict["expected_label"] = expected_label
|
|
51
|
+
if tags is not UNSET:
|
|
52
|
+
field_dict["tags"] = tags
|
|
53
|
+
|
|
54
|
+
return field_dict
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def from_dict(cls: Type[T], src_dict: dict[str, Any]) -> T:
|
|
58
|
+
d = src_dict.copy()
|
|
59
|
+
|
|
60
|
+
def _parse_expected_label(data: object) -> Union[None, Unset, int]:
|
|
61
|
+
if data is None:
|
|
62
|
+
return data
|
|
63
|
+
if isinstance(data, Unset):
|
|
64
|
+
return data
|
|
65
|
+
return cast(Union[None, Unset, int], data)
|
|
66
|
+
|
|
67
|
+
expected_label = _parse_expected_label(d.pop("expected_label", UNSET))
|
|
68
|
+
|
|
69
|
+
tags = cast(List[str], d.pop("tags", UNSET))
|
|
70
|
+
|
|
71
|
+
update_prediction_request = cls(
|
|
72
|
+
expected_label=expected_label,
|
|
73
|
+
tags=tags,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
update_prediction_request.additional_properties = d
|
|
77
|
+
return update_prediction_request
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def additional_keys(self) -> list[str]:
|
|
81
|
+
return list(self.additional_properties.keys())
|
|
82
|
+
|
|
83
|
+
def __getitem__(self, key: str) -> Any:
|
|
84
|
+
return self.additional_properties[key]
|
|
85
|
+
|
|
86
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
87
|
+
self.additional_properties[key] = value
|
|
88
|
+
|
|
89
|
+
def __delitem__(self, key: str) -> None:
|
|
90
|
+
del self.additional_properties[key]
|
|
91
|
+
|
|
92
|
+
def __contains__(self, key: str) -> bool:
|
|
93
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Marker file for PEP 561
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This file is generated by the openapi-python-client tool via the generate_api_client.py script
|
|
3
|
+
|
|
4
|
+
It is a customized template from the openapi-python-client tool's default template:
|
|
5
|
+
https://github.com/openapi-generators/openapi-python-client/blob/861ef5622f10fc96d240dc9becb0edf94e61446c/openapi_python_client/templates/types.py.jinja
|
|
6
|
+
|
|
7
|
+
The main change is:
|
|
8
|
+
- Make Response's parsed type required
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from collections.abc import MutableMapping
|
|
12
|
+
from http import HTTPStatus
|
|
13
|
+
from typing import BinaryIO, Generic, Literal, Optional, TypeVar
|
|
14
|
+
|
|
15
|
+
from attrs import define
|
|
16
|
+
|
|
17
|
+
""" Contains some shared types for properties """
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Unset:
|
|
21
|
+
def __bool__(self) -> Literal[False]:
|
|
22
|
+
return False
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
UNSET: Unset = Unset()
|
|
26
|
+
|
|
27
|
+
FileJsonType = tuple[Optional[str], BinaryIO, Optional[str]]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@define
|
|
31
|
+
class File:
|
|
32
|
+
"""Contains information for file uploads"""
|
|
33
|
+
|
|
34
|
+
payload: BinaryIO
|
|
35
|
+
file_name: Optional[str] = None
|
|
36
|
+
mime_type: Optional[str] = None
|
|
37
|
+
|
|
38
|
+
def to_tuple(self) -> FileJsonType:
|
|
39
|
+
"""Return a tuple representation that httpx will accept for multipart/form-data"""
|
|
40
|
+
return self.file_name, self.payload, self.mime_type
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
T = TypeVar("T")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@define
|
|
47
|
+
class Response(Generic[T]):
|
|
48
|
+
"""A response from an endpoint"""
|
|
49
|
+
|
|
50
|
+
status_code: HTTPStatus
|
|
51
|
+
content: bytes
|
|
52
|
+
headers: MutableMapping[str, str]
|
|
53
|
+
parsed: T
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
__all__ = ["UNSET", "File", "FileJsonType", "Response", "Unset"]
|
|
File without changes
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import re
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import TypedDict, cast
|
|
7
|
+
|
|
8
|
+
import gradio as gr
|
|
9
|
+
|
|
10
|
+
from ..memoryset import LabeledMemory, LabeledMemoryset
|
|
11
|
+
|
|
12
|
+
# Suppress all httpx logs
|
|
13
|
+
logging.getLogger("httpx").setLevel(logging.CRITICAL)
|
|
14
|
+
|
|
15
|
+
# Optionally suppress other libraries Gradio might use
|
|
16
|
+
logging.getLogger("gradio").setLevel(logging.CRITICAL)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class RelabelStatus(TypedDict):
|
|
20
|
+
memory_id: str
|
|
21
|
+
approved: bool
|
|
22
|
+
new_label: int | None
|
|
23
|
+
full_memory: LabeledMemory
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def display_suggested_memory_relabels(memoryset: LabeledMemoryset):
|
|
27
|
+
suggested_relabels = memoryset.query(
|
|
28
|
+
filters=[("metrics.neighbor_predicted_label_matches_current_label", "==", False)]
|
|
29
|
+
)
|
|
30
|
+
# Sort memories by confidence score (higher confidence first)
|
|
31
|
+
suggested_relabels.sort(key=lambda x: (x.metrics["neighbor_predicted_label_confidence"] or 0.0), reverse=True)
|
|
32
|
+
|
|
33
|
+
def update_approved(memory_id: str, selected: bool, current_memory_relabel_map: dict[str, RelabelStatus]):
|
|
34
|
+
current_memory_relabel_map[memory_id]["approved"] = selected
|
|
35
|
+
return current_memory_relabel_map
|
|
36
|
+
|
|
37
|
+
def approve_all(current_all_approved, selected: bool):
|
|
38
|
+
for mem_id in current_all_approved:
|
|
39
|
+
current_all_approved[mem_id]["approved"] = selected
|
|
40
|
+
return current_all_approved, selected
|
|
41
|
+
|
|
42
|
+
def apply_selected(current_memory_relabel_map: dict[str, RelabelStatus], progress=gr.Progress(track_tqdm=True)):
|
|
43
|
+
progress(0, desc="Processing label updates...")
|
|
44
|
+
to_be_deleted = []
|
|
45
|
+
approved_relabels = [mem for mem in current_memory_relabel_map.values() if mem["approved"]]
|
|
46
|
+
for memory in progress.tqdm(approved_relabels, desc="Applying label updates..."):
|
|
47
|
+
memory = cast(RelabelStatus, memory)
|
|
48
|
+
new_label = memory["new_label"]
|
|
49
|
+
assert isinstance(new_label, int)
|
|
50
|
+
memoryset.update(
|
|
51
|
+
{
|
|
52
|
+
"memory_id": memory["memory_id"],
|
|
53
|
+
"label": new_label,
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
to_be_deleted.append(memory["memory_id"])
|
|
57
|
+
for mem_id in to_be_deleted:
|
|
58
|
+
del current_memory_relabel_map[mem_id]
|
|
59
|
+
return (
|
|
60
|
+
current_memory_relabel_map,
|
|
61
|
+
gr.HTML(
|
|
62
|
+
f"<h1 style='display: inline-block; position: fixed; z-index: 1000; left: 36px; top: 14px;'>Suggested Label Updates: {len(current_memory_relabel_map)}</h1>",
|
|
63
|
+
),
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def update_label(mem_id: str, label: str, current_memory_relabel_map: dict[str, RelabelStatus]):
|
|
67
|
+
match = re.search(r".*\((\d+)\)$", label)
|
|
68
|
+
if match:
|
|
69
|
+
new_label = int(match.group(1))
|
|
70
|
+
current_memory_relabel_map[mem_id]["new_label"] = new_label
|
|
71
|
+
confidence = "--"
|
|
72
|
+
current_metrics = current_memory_relabel_map[mem_id]["full_memory"].metrics
|
|
73
|
+
if current_metrics and new_label == current_metrics["neighbor_predicted_label"]:
|
|
74
|
+
confidence = (
|
|
75
|
+
round(current_metrics["neighbor_predicted_label_confidence"] or 0.0, 2) if current_metrics else 0
|
|
76
|
+
)
|
|
77
|
+
return (
|
|
78
|
+
gr.HTML(
|
|
79
|
+
f"<p style='font-size: 10px; color: #888;'>Confidence: {confidence}</p>",
|
|
80
|
+
elem_classes="no-padding",
|
|
81
|
+
),
|
|
82
|
+
current_memory_relabel_map,
|
|
83
|
+
)
|
|
84
|
+
else:
|
|
85
|
+
logging.error(f"Invalid label format: {label}")
|
|
86
|
+
|
|
87
|
+
with gr.Blocks(
|
|
88
|
+
fill_width=True,
|
|
89
|
+
title="Suggested Label Updates",
|
|
90
|
+
css_paths=str(Path(__file__).parent / "analysis_ui_style.css"),
|
|
91
|
+
) as demo:
|
|
92
|
+
label_names = memoryset.label_names
|
|
93
|
+
|
|
94
|
+
refresh = gr.State(False)
|
|
95
|
+
all_approved = gr.State(False)
|
|
96
|
+
memory_relabel_map = gr.State(
|
|
97
|
+
{
|
|
98
|
+
mem.memory_id: RelabelStatus(
|
|
99
|
+
memory_id=mem.memory_id,
|
|
100
|
+
approved=False,
|
|
101
|
+
new_label=(
|
|
102
|
+
mem.metrics["neighbor_predicted_label"]
|
|
103
|
+
if (mem.metrics and isinstance(mem.metrics["neighbor_predicted_label"], int))
|
|
104
|
+
else None
|
|
105
|
+
),
|
|
106
|
+
full_memory=mem,
|
|
107
|
+
)
|
|
108
|
+
for mem in suggested_relabels
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
@gr.render(
|
|
113
|
+
inputs=[memory_relabel_map, all_approved],
|
|
114
|
+
triggers=[demo.load, refresh.change, all_approved.change, memory_relabel_map.change],
|
|
115
|
+
)
|
|
116
|
+
def render_table(current_memory_relabel_map, current_all_approved):
|
|
117
|
+
if len(current_memory_relabel_map):
|
|
118
|
+
with gr.Group(elem_classes="header"):
|
|
119
|
+
title = gr.HTML(
|
|
120
|
+
f"<h1 style='display: inline-block; position: fixed; z-index: 1000; left: 36px; top: 14px;'>Suggested Label Updates: {len(current_memory_relabel_map)}</h1>"
|
|
121
|
+
)
|
|
122
|
+
apply_selected_button = gr.Button("Apply Selected", elem_classes="button")
|
|
123
|
+
apply_selected_button.click(
|
|
124
|
+
apply_selected,
|
|
125
|
+
inputs=[memory_relabel_map],
|
|
126
|
+
outputs=[memory_relabel_map, title],
|
|
127
|
+
show_progress="full",
|
|
128
|
+
)
|
|
129
|
+
with gr.Row(equal_height=True, variant="panel", elem_classes="margin-top"):
|
|
130
|
+
with gr.Column(scale=9):
|
|
131
|
+
gr.Markdown("**Value**")
|
|
132
|
+
with gr.Column(scale=2, min_width=90):
|
|
133
|
+
gr.Markdown("**Current Label**")
|
|
134
|
+
with gr.Column(scale=3, min_width=150):
|
|
135
|
+
gr.Markdown("**Suggested Label**", elem_classes="centered")
|
|
136
|
+
with gr.Column(scale=2, min_width=50):
|
|
137
|
+
approve_all_checkbox = gr.Checkbox(
|
|
138
|
+
show_label=False,
|
|
139
|
+
value=current_all_approved,
|
|
140
|
+
label="",
|
|
141
|
+
container=False,
|
|
142
|
+
elem_classes="centered",
|
|
143
|
+
)
|
|
144
|
+
approve_all_checkbox.change(
|
|
145
|
+
approve_all,
|
|
146
|
+
inputs=[memory_relabel_map, approve_all_checkbox],
|
|
147
|
+
outputs=[memory_relabel_map, all_approved],
|
|
148
|
+
)
|
|
149
|
+
for i, memory_relabel in enumerate(current_memory_relabel_map.values()):
|
|
150
|
+
mem = memory_relabel["full_memory"]
|
|
151
|
+
with gr.Row(equal_height=True, variant="panel", elem_classes="white" if i % 2 == 0 else None):
|
|
152
|
+
with gr.Column(scale=9):
|
|
153
|
+
assert isinstance(mem.value, str)
|
|
154
|
+
gr.Markdown(mem.value, label="Value", height=50)
|
|
155
|
+
with gr.Column(scale=2, min_width=90):
|
|
156
|
+
gr.Markdown(f"{mem.label_name} ({mem.label})", label="Current Label", height=50)
|
|
157
|
+
with gr.Column(scale=3, min_width=150):
|
|
158
|
+
dropdown = gr.Dropdown(
|
|
159
|
+
choices=[f"{label_name} ({i})" for i, label_name in enumerate(label_names)],
|
|
160
|
+
label="SuggestedLabel",
|
|
161
|
+
value=f"{label_names[mem.metrics.neighbor_predicted_label]} ({mem.metrics.neighbor_predicted_label})",
|
|
162
|
+
interactive=True,
|
|
163
|
+
container=False,
|
|
164
|
+
)
|
|
165
|
+
confidence = gr.HTML(
|
|
166
|
+
f"<p style='font-size: 10px; color: #888;'>Confidence: {mem.metrics.neighbor_predicted_label_confidence:.2f}</p>",
|
|
167
|
+
elem_classes="no-padding",
|
|
168
|
+
)
|
|
169
|
+
dropdown.change(
|
|
170
|
+
lambda val, map, mem_id=mem.memory_id: update_label(mem_id, val, map),
|
|
171
|
+
inputs=[dropdown, memory_relabel_map],
|
|
172
|
+
outputs=[confidence, memory_relabel_map],
|
|
173
|
+
)
|
|
174
|
+
with gr.Column(scale=2, min_width=50):
|
|
175
|
+
checkbox = gr.Checkbox(
|
|
176
|
+
show_label=False,
|
|
177
|
+
label="",
|
|
178
|
+
value=current_memory_relabel_map[mem.memory_id]["approved"],
|
|
179
|
+
container=False,
|
|
180
|
+
elem_classes="centered",
|
|
181
|
+
interactive=True,
|
|
182
|
+
)
|
|
183
|
+
checkbox.input(
|
|
184
|
+
lambda selected, map, mem_id=mem.memory_id: update_approved(mem_id, selected, map),
|
|
185
|
+
inputs=[checkbox, memory_relabel_map],
|
|
186
|
+
outputs=[memory_relabel_map],
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
else:
|
|
190
|
+
gr.HTML("<h1>No suggested label updates</h1>")
|
|
191
|
+
|
|
192
|
+
demo.launch()
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
.white {
|
|
2
|
+
background-color: white;
|
|
3
|
+
}
|
|
4
|
+
.centered input {
|
|
5
|
+
margin: auto;
|
|
6
|
+
}
|
|
7
|
+
.centered p {
|
|
8
|
+
text-align: center;
|
|
9
|
+
}
|
|
10
|
+
.button {
|
|
11
|
+
display: inline-block;
|
|
12
|
+
max-width: 250px;
|
|
13
|
+
background-color: #2b9a66;
|
|
14
|
+
color: white;
|
|
15
|
+
position: fixed;
|
|
16
|
+
z-index: 1000;
|
|
17
|
+
right: 36px;
|
|
18
|
+
border-radius: 8px;
|
|
19
|
+
top: 12px;
|
|
20
|
+
}
|
|
21
|
+
.margin-top {
|
|
22
|
+
margin-top: 60px;
|
|
23
|
+
}
|
|
24
|
+
.header {
|
|
25
|
+
position: fixed;
|
|
26
|
+
z-index: 1000;
|
|
27
|
+
height: 64px;
|
|
28
|
+
left: 0;
|
|
29
|
+
top: 0;
|
|
30
|
+
border-radius: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
input[type='checkbox']:checked,
|
|
34
|
+
input[type='checkbox']:checked:hover,
|
|
35
|
+
input[type='checkbox']:checked:focus {
|
|
36
|
+
background-color: #2b9a66;
|
|
37
|
+
border-color: #2b9a66;
|
|
38
|
+
}
|
|
39
|
+
input[type='checkbox']:focus {
|
|
40
|
+
border-color: #2b9a66;
|
|
41
|
+
}
|
|
42
|
+
.html-container:has(.no-padding) {
|
|
43
|
+
padding: 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.progress-bar {
|
|
47
|
+
background-color: #2b9a66;
|
|
48
|
+
}
|
|
49
|
+
.header .full {
|
|
50
|
+
position: fixed !important;
|
|
51
|
+
z-index: 1100;
|
|
52
|
+
background-color: #e4e4e7;
|
|
53
|
+
height: 68px;
|
|
54
|
+
}
|