everyrow 0.1.0__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.
Files changed (183) hide show
  1. everyrow/__init__.py +4 -0
  2. everyrow/api_utils.py +45 -0
  3. everyrow/citations.py +46 -0
  4. everyrow/constants.py +4 -0
  5. everyrow/generated/__init__.py +8 -0
  6. everyrow/generated/api/__init__.py +1 -0
  7. everyrow/generated/api/default/__init__.py +1 -0
  8. everyrow/generated/api/default/continue_task_endpoint_tasks_continue_post.py +208 -0
  9. everyrow/generated/api/default/copy_artifacts_artifacts_copy_post.py +166 -0
  10. everyrow/generated/api/default/copy_workflow_endpoint_workflows_copy_post.py +166 -0
  11. everyrow/generated/api/default/create_api_key_endpoint_api_keys_create_post.py +186 -0
  12. everyrow/generated/api/default/create_session_endpoint_sessions_create_post.py +198 -0
  13. everyrow/generated/api/default/create_workflow_from_artifact_workflows_from_artifact_post.py +174 -0
  14. everyrow/generated/api/default/export_to_google_sheets_export_post.py +168 -0
  15. everyrow/generated/api/default/generate_feedback_endpoint_tasks_generate_feedback_post.py +186 -0
  16. everyrow/generated/api/default/get_artifacts_artifacts_get.py +260 -0
  17. everyrow/generated/api/default/get_default_timeout_seconds_models_default_timeout_seconds_get.py +165 -0
  18. everyrow/generated/api/default/get_job_progress_for_task_jobs_progress_get.py +167 -0
  19. everyrow/generated/api/default/get_metrics_metrics_get.py +80 -0
  20. everyrow/generated/api/default/get_queues_stats_jobs_queues_get.py +123 -0
  21. everyrow/generated/api/default/get_task_status_endpoint_tasks_task_id_status_get.py +193 -0
  22. everyrow/generated/api/default/get_user_usage_usage_get.py +123 -0
  23. everyrow/generated/api/default/healthz_healthz_get.py +127 -0
  24. everyrow/generated/api/default/import_from_google_sheets_import_post.py +170 -0
  25. everyrow/generated/api/default/interrupt_chat_task_tasks_chat_interrupt_post.py +172 -0
  26. everyrow/generated/api/default/list_api_keys_endpoint_api_keys_get.py +186 -0
  27. everyrow/generated/api/default/re_execute_task_endpoint_tasks_re_execute_post.py +192 -0
  28. everyrow/generated/api/default/revoke_api_key_endpoint_api_keys_key_id_revoke_post.py +181 -0
  29. everyrow/generated/api/default/revoke_jobs_for_task_jobs_revoke_post.py +164 -0
  30. everyrow/generated/api/default/rollback_to_message_endpoint_tasks_chat_rollback_post.py +186 -0
  31. everyrow/generated/api/default/submit_chat_task_tasks_chat_post.py +164 -0
  32. everyrow/generated/api/default/submit_task_tasks_post.py +172 -0
  33. everyrow/generated/api/default/task_resource_estimation_task_resource_estimation_post.py +319 -0
  34. everyrow/generated/api/default/trigger_workflow_execution_endpoint_workflows_trigger_post.py +166 -0
  35. everyrow/generated/api/default/whoami_whoami_get.py +127 -0
  36. everyrow/generated/client.py +268 -0
  37. everyrow/generated/errors.py +16 -0
  38. everyrow/generated/models/__init__.py +281 -0
  39. everyrow/generated/models/agent_improvement_instruction.py +69 -0
  40. everyrow/generated/models/agent_query_params.py +362 -0
  41. everyrow/generated/models/agent_query_params_system_prompt_kind_type_0.py +10 -0
  42. everyrow/generated/models/agent_task_args.py +163 -0
  43. everyrow/generated/models/agent_task_args_processing_mode.py +9 -0
  44. everyrow/generated/models/allowed_suggestions.py +8 -0
  45. everyrow/generated/models/api_key_info.py +163 -0
  46. everyrow/generated/models/artifact_changed_payload.py +89 -0
  47. everyrow/generated/models/artifact_group_record.py +330 -0
  48. everyrow/generated/models/artifact_group_record_metadata_type_0.py +46 -0
  49. everyrow/generated/models/artifact_group_record_trace_mapping_type_0.py +46 -0
  50. everyrow/generated/models/artifact_status.py +14 -0
  51. everyrow/generated/models/auto_cohort_conversation_message.py +533 -0
  52. everyrow/generated/models/aux_data.py +128 -0
  53. everyrow/generated/models/aux_data_source_bank.py +59 -0
  54. everyrow/generated/models/chat_completion_message_tool_call.py +46 -0
  55. everyrow/generated/models/chat_message_metadata.py +193 -0
  56. everyrow/generated/models/concatenate_query_params.py +46 -0
  57. everyrow/generated/models/concatenate_request.py +306 -0
  58. everyrow/generated/models/continue_reason.py +9 -0
  59. everyrow/generated/models/continue_task_request.py +133 -0
  60. everyrow/generated/models/controller_improvement_round.py +79 -0
  61. everyrow/generated/models/conversation_changed_payload.py +89 -0
  62. everyrow/generated/models/copy_artifacts_request.py +70 -0
  63. everyrow/generated/models/copy_artifacts_response.py +70 -0
  64. everyrow/generated/models/copy_workflow_request.py +62 -0
  65. everyrow/generated/models/copy_workflow_response.py +70 -0
  66. everyrow/generated/models/create_api_key_request.py +95 -0
  67. everyrow/generated/models/create_api_key_response.py +96 -0
  68. everyrow/generated/models/create_group_query_params.py +61 -0
  69. everyrow/generated/models/create_group_request.py +305 -0
  70. everyrow/generated/models/create_query_params.py +61 -0
  71. everyrow/generated/models/create_request.py +305 -0
  72. everyrow/generated/models/create_session_request.py +62 -0
  73. everyrow/generated/models/create_session_response.py +63 -0
  74. everyrow/generated/models/create_workflow_from_artifact_request.py +92 -0
  75. everyrow/generated/models/create_workflow_from_artifact_response.py +70 -0
  76. everyrow/generated/models/data_frame_method.py +18 -0
  77. everyrow/generated/models/date_cutoffs.py +145 -0
  78. everyrow/generated/models/dedupe_mode.py +9 -0
  79. everyrow/generated/models/dedupe_query_params.py +174 -0
  80. everyrow/generated/models/dedupe_request_params.py +311 -0
  81. everyrow/generated/models/deep_merge_public_params.py +143 -0
  82. everyrow/generated/models/deep_merge_request.py +313 -0
  83. everyrow/generated/models/deep_rank_public_params.py +99 -0
  84. everyrow/generated/models/deep_rank_request.py +313 -0
  85. everyrow/generated/models/deep_screen_public_params.py +122 -0
  86. everyrow/generated/models/deep_screen_request.py +313 -0
  87. everyrow/generated/models/derive_expression.py +69 -0
  88. everyrow/generated/models/derive_query_params.py +75 -0
  89. everyrow/generated/models/derive_request.py +307 -0
  90. everyrow/generated/models/document_query_tool.py +12 -0
  91. everyrow/generated/models/drop_columns_query_params.py +61 -0
  92. everyrow/generated/models/drop_columns_request.py +305 -0
  93. everyrow/generated/models/embedding_models.py +9 -0
  94. everyrow/generated/models/event_type.py +14 -0
  95. everyrow/generated/models/execution_metadata.py +146 -0
  96. everyrow/generated/models/export_request.py +75 -0
  97. everyrow/generated/models/export_request_token_data.py +46 -0
  98. everyrow/generated/models/export_to_google_sheets_export_post_response_export_to_google_sheets_export_post.py +46 -0
  99. everyrow/generated/models/filter_query_params.py +91 -0
  100. everyrow/generated/models/filter_request.py +305 -0
  101. everyrow/generated/models/flatten_query_params.py +46 -0
  102. everyrow/generated/models/flatten_request.py +305 -0
  103. everyrow/generated/models/generate_feedback_request.py +62 -0
  104. everyrow/generated/models/group_by_query_params.py +62 -0
  105. everyrow/generated/models/group_by_request.py +305 -0
  106. everyrow/generated/models/healthz_healthz_get_response_healthz_healthz_get.py +46 -0
  107. everyrow/generated/models/http_validation_error.py +79 -0
  108. everyrow/generated/models/image_chat_content_part.py +80 -0
  109. everyrow/generated/models/image_chat_content_part_image_url.py +46 -0
  110. everyrow/generated/models/import_from_google_sheets_import_post_response_import_from_google_sheets_import_post.py +46 -0
  111. everyrow/generated/models/import_request.py +83 -0
  112. everyrow/generated/models/import_request_token_data.py +46 -0
  113. everyrow/generated/models/insufficient_balance_error.py +81 -0
  114. everyrow/generated/models/join_query_params.py +73 -0
  115. everyrow/generated/models/join_request.py +305 -0
  116. everyrow/generated/models/llm_enum.py +54 -0
  117. everyrow/generated/models/map_agent_request_params.py +313 -0
  118. everyrow/generated/models/map_multi_agent_request_params.py +313 -0
  119. everyrow/generated/models/message_created_payload.py +98 -0
  120. everyrow/generated/models/multi_agent_effort_level.py +10 -0
  121. everyrow/generated/models/multi_agent_query_params.py +264 -0
  122. everyrow/generated/models/multi_modal_chat_message.py +160 -0
  123. everyrow/generated/models/multi_modal_chat_message_role.py +10 -0
  124. everyrow/generated/models/preview_metadata.py +144 -0
  125. everyrow/generated/models/processing_mode.py +10 -0
  126. everyrow/generated/models/progress_status.py +83 -0
  127. everyrow/generated/models/queue_stats.py +77 -0
  128. everyrow/generated/models/reduce_agent_request_params.py +305 -0
  129. everyrow/generated/models/reduce_multi_agent_request_params.py +305 -0
  130. everyrow/generated/models/resource_estimation_response.py +85 -0
  131. everyrow/generated/models/response_schema_type.py +9 -0
  132. everyrow/generated/models/revoke_api_key_response.py +61 -0
  133. everyrow/generated/models/rollback_to_message_request.py +62 -0
  134. everyrow/generated/models/rollback_to_message_response.py +77 -0
  135. everyrow/generated/models/session_changed_payload.py +69 -0
  136. everyrow/generated/models/simple_chat_message.py +121 -0
  137. everyrow/generated/models/simple_chat_message_role.py +10 -0
  138. everyrow/generated/models/simple_chat_message_with_tool_calls.py +156 -0
  139. everyrow/generated/models/source_database_entry.py +92 -0
  140. everyrow/generated/models/standalone_artifact_record.py +278 -0
  141. everyrow/generated/models/standalone_artifact_record_metadata_type_0.py +46 -0
  142. everyrow/generated/models/standalone_artifact_record_trace_mapping_type_0.py +46 -0
  143. everyrow/generated/models/status_count.py +71 -0
  144. everyrow/generated/models/status_count_status.py +13 -0
  145. everyrow/generated/models/submit_chat_task_body.py +497 -0
  146. everyrow/generated/models/submit_chat_task_body_selected_task_type_type_0.py +11 -0
  147. everyrow/generated/models/submit_task_body.py +745 -0
  148. everyrow/generated/models/task_changed_payload.py +105 -0
  149. everyrow/generated/models/task_effort.py +10 -0
  150. everyrow/generated/models/task_id_request.py +62 -0
  151. everyrow/generated/models/task_insert.py +725 -0
  152. everyrow/generated/models/task_insert_query_params.py +46 -0
  153. everyrow/generated/models/task_metadata.py +323 -0
  154. everyrow/generated/models/task_metadata_cols_to_rename_type_0.py +46 -0
  155. everyrow/generated/models/task_response.py +62 -0
  156. everyrow/generated/models/task_status.py +12 -0
  157. everyrow/generated/models/task_status_response.py +112 -0
  158. everyrow/generated/models/task_type.py +31 -0
  159. everyrow/generated/models/text_chat_content_part.py +74 -0
  160. everyrow/generated/models/tool_response_message.py +127 -0
  161. everyrow/generated/models/toolkit_constants.py +80 -0
  162. everyrow/generated/models/trace_changed_payload.py +94 -0
  163. everyrow/generated/models/trace_info.py +78 -0
  164. everyrow/generated/models/trigger_workflow_execution_request.py +112 -0
  165. everyrow/generated/models/trigger_workflow_execution_request_task_params.py +65 -0
  166. everyrow/generated/models/trigger_workflow_execution_request_task_params_additional_property.py +46 -0
  167. everyrow/generated/models/trigger_workflow_execution_response.py +69 -0
  168. everyrow/generated/models/upload_csv_payload.py +310 -0
  169. everyrow/generated/models/upload_csv_query_params.py +114 -0
  170. everyrow/generated/models/usage_response.py +77 -0
  171. everyrow/generated/models/validation_error.py +90 -0
  172. everyrow/generated/models/whoami_whoami_get_response_whoami_whoami_get.py +46 -0
  173. everyrow/generated/models/workflow_leaf_node_input.py +70 -0
  174. everyrow/generated/py.typed +1 -0
  175. everyrow/generated/types.py +54 -0
  176. everyrow/ops.py +672 -0
  177. everyrow/result.py +25 -0
  178. everyrow/session.py +53 -0
  179. everyrow/task.py +143 -0
  180. everyrow-0.1.0.dist-info/METADATA +238 -0
  181. everyrow-0.1.0.dist-info/RECORD +183 -0
  182. everyrow-0.1.0.dist-info/WHEEL +4 -0
  183. everyrow-0.1.0.dist-info/licenses/LICENSE.txt +21 -0
@@ -0,0 +1,145 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime
4
+ from collections.abc import Mapping
5
+ from typing import Any, TypeVar, cast
6
+
7
+ from attrs import define as _attrs_define
8
+ from attrs import field as _attrs_field
9
+ from dateutil.parser import isoparse
10
+
11
+ from ..types import UNSET, Unset
12
+
13
+ T = TypeVar("T", bound="DateCutoffs")
14
+
15
+
16
+ @_attrs_define
17
+ class DateCutoffs:
18
+ """
19
+ Attributes:
20
+ start (datetime.datetime | None | Unset):
21
+ end (datetime.datetime | None | Unset):
22
+ present_date (datetime.datetime | None | Unset):
23
+ """
24
+
25
+ start: datetime.datetime | None | Unset = UNSET
26
+ end: datetime.datetime | None | Unset = UNSET
27
+ present_date: datetime.datetime | None | Unset = UNSET
28
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
29
+
30
+ def to_dict(self) -> dict[str, Any]:
31
+ start: None | str | Unset
32
+ if isinstance(self.start, Unset):
33
+ start = UNSET
34
+ elif isinstance(self.start, datetime.datetime):
35
+ start = self.start.isoformat()
36
+ else:
37
+ start = self.start
38
+
39
+ end: None | str | Unset
40
+ if isinstance(self.end, Unset):
41
+ end = UNSET
42
+ elif isinstance(self.end, datetime.datetime):
43
+ end = self.end.isoformat()
44
+ else:
45
+ end = self.end
46
+
47
+ present_date: None | str | Unset
48
+ if isinstance(self.present_date, Unset):
49
+ present_date = UNSET
50
+ elif isinstance(self.present_date, datetime.datetime):
51
+ present_date = self.present_date.isoformat()
52
+ else:
53
+ present_date = self.present_date
54
+
55
+ field_dict: dict[str, Any] = {}
56
+ field_dict.update(self.additional_properties)
57
+ field_dict.update({})
58
+ if start is not UNSET:
59
+ field_dict["start"] = start
60
+ if end is not UNSET:
61
+ field_dict["end"] = end
62
+ if present_date is not UNSET:
63
+ field_dict["present_date"] = present_date
64
+
65
+ return field_dict
66
+
67
+ @classmethod
68
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
69
+ d = dict(src_dict)
70
+
71
+ def _parse_start(data: object) -> datetime.datetime | None | Unset:
72
+ if data is None:
73
+ return data
74
+ if isinstance(data, Unset):
75
+ return data
76
+ try:
77
+ if not isinstance(data, str):
78
+ raise TypeError()
79
+ start_type_0 = isoparse(data)
80
+
81
+ return start_type_0
82
+ except (TypeError, ValueError, AttributeError, KeyError):
83
+ pass
84
+ return cast(datetime.datetime | None | Unset, data)
85
+
86
+ start = _parse_start(d.pop("start", UNSET))
87
+
88
+ def _parse_end(data: object) -> datetime.datetime | None | Unset:
89
+ if data is None:
90
+ return data
91
+ if isinstance(data, Unset):
92
+ return data
93
+ try:
94
+ if not isinstance(data, str):
95
+ raise TypeError()
96
+ end_type_0 = isoparse(data)
97
+
98
+ return end_type_0
99
+ except (TypeError, ValueError, AttributeError, KeyError):
100
+ pass
101
+ return cast(datetime.datetime | None | Unset, data)
102
+
103
+ end = _parse_end(d.pop("end", UNSET))
104
+
105
+ def _parse_present_date(data: object) -> datetime.datetime | None | Unset:
106
+ if data is None:
107
+ return data
108
+ if isinstance(data, Unset):
109
+ return data
110
+ try:
111
+ if not isinstance(data, str):
112
+ raise TypeError()
113
+ present_date_type_0 = isoparse(data)
114
+
115
+ return present_date_type_0
116
+ except (TypeError, ValueError, AttributeError, KeyError):
117
+ pass
118
+ return cast(datetime.datetime | None | Unset, data)
119
+
120
+ present_date = _parse_present_date(d.pop("present_date", UNSET))
121
+
122
+ date_cutoffs = cls(
123
+ start=start,
124
+ end=end,
125
+ present_date=present_date,
126
+ )
127
+
128
+ date_cutoffs.additional_properties = d
129
+ return date_cutoffs
130
+
131
+ @property
132
+ def additional_keys(self) -> list[str]:
133
+ return list(self.additional_properties.keys())
134
+
135
+ def __getitem__(self, key: str) -> Any:
136
+ return self.additional_properties[key]
137
+
138
+ def __setitem__(self, key: str, value: Any) -> None:
139
+ self.additional_properties[key] = value
140
+
141
+ def __delitem__(self, key: str) -> None:
142
+ del self.additional_properties[key]
143
+
144
+ def __contains__(self, key: str) -> bool:
145
+ return key in self.additional_properties
@@ -0,0 +1,9 @@
1
+ from enum import Enum
2
+
3
+
4
+ class DedupeMode(str, Enum):
5
+ AGENTIC = "agentic"
6
+ DIRECT = "direct"
7
+
8
+ def __str__(self) -> str:
9
+ return str(self.value)
@@ -0,0 +1,174 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..models.dedupe_mode import DedupeMode
10
+ from ..models.embedding_models import EmbeddingModels
11
+ from ..models.llm_enum import LLMEnum
12
+ from ..types import UNSET, Unset
13
+
14
+ T = TypeVar("T", bound="DedupeQueryParams")
15
+
16
+
17
+ @_attrs_define
18
+ class DedupeQueryParams:
19
+ """Service-specific parameters for the deduplication service.
20
+
21
+ Attributes:
22
+ equivalence_relation (str): Description of what makes items equivalent
23
+ llm (LLMEnum | Unset):
24
+ chunk_size (int | Unset): Maximum number of items to process in a single LLM call Default: 25.
25
+ mode (DedupeMode | Unset):
26
+ preview (bool | Unset): When true, process only the first few items Default: False.
27
+ embedding_model (EmbeddingModels | Unset):
28
+ validate_groups (bool | Unset): Validate equivalence classes and split incorrectly merged groups before
29
+ selecting representatives Default: False.
30
+ use_clustering (bool | Unset): When true, cluster items by embedding similarity and only compare neighboring
31
+ clusters. When false, use sequential chunking and compare all chunks (O(n²)) Default: True.
32
+ early_stop_threshold (int | None | Unset): Stop cross-chunk comparisons for a row after this many consecutive
33
+ comparisons with no matches. None disables early stopping.
34
+ """
35
+
36
+ equivalence_relation: str
37
+ llm: LLMEnum | Unset = UNSET
38
+ chunk_size: int | Unset = 25
39
+ mode: DedupeMode | Unset = UNSET
40
+ preview: bool | Unset = False
41
+ embedding_model: EmbeddingModels | Unset = UNSET
42
+ validate_groups: bool | Unset = False
43
+ use_clustering: bool | Unset = True
44
+ early_stop_threshold: int | None | Unset = UNSET
45
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
46
+
47
+ def to_dict(self) -> dict[str, Any]:
48
+ equivalence_relation = self.equivalence_relation
49
+
50
+ llm: str | Unset = UNSET
51
+ if not isinstance(self.llm, Unset):
52
+ llm = self.llm.value
53
+
54
+ chunk_size = self.chunk_size
55
+
56
+ mode: str | Unset = UNSET
57
+ if not isinstance(self.mode, Unset):
58
+ mode = self.mode.value
59
+
60
+ preview = self.preview
61
+
62
+ embedding_model: str | Unset = UNSET
63
+ if not isinstance(self.embedding_model, Unset):
64
+ embedding_model = self.embedding_model.value
65
+
66
+ validate_groups = self.validate_groups
67
+
68
+ use_clustering = self.use_clustering
69
+
70
+ early_stop_threshold: int | None | Unset
71
+ if isinstance(self.early_stop_threshold, Unset):
72
+ early_stop_threshold = UNSET
73
+ else:
74
+ early_stop_threshold = self.early_stop_threshold
75
+
76
+ field_dict: dict[str, Any] = {}
77
+ field_dict.update(self.additional_properties)
78
+ field_dict.update(
79
+ {
80
+ "equivalence_relation": equivalence_relation,
81
+ }
82
+ )
83
+ if llm is not UNSET:
84
+ field_dict["llm"] = llm
85
+ if chunk_size is not UNSET:
86
+ field_dict["chunk_size"] = chunk_size
87
+ if mode is not UNSET:
88
+ field_dict["mode"] = mode
89
+ if preview is not UNSET:
90
+ field_dict["preview"] = preview
91
+ if embedding_model is not UNSET:
92
+ field_dict["embedding_model"] = embedding_model
93
+ if validate_groups is not UNSET:
94
+ field_dict["validate_groups"] = validate_groups
95
+ if use_clustering is not UNSET:
96
+ field_dict["use_clustering"] = use_clustering
97
+ if early_stop_threshold is not UNSET:
98
+ field_dict["early_stop_threshold"] = early_stop_threshold
99
+
100
+ return field_dict
101
+
102
+ @classmethod
103
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
104
+ d = dict(src_dict)
105
+ equivalence_relation = d.pop("equivalence_relation")
106
+
107
+ _llm = d.pop("llm", UNSET)
108
+ llm: LLMEnum | Unset
109
+ if isinstance(_llm, Unset):
110
+ llm = UNSET
111
+ else:
112
+ llm = LLMEnum(_llm)
113
+
114
+ chunk_size = d.pop("chunk_size", UNSET)
115
+
116
+ _mode = d.pop("mode", UNSET)
117
+ mode: DedupeMode | Unset
118
+ if isinstance(_mode, Unset):
119
+ mode = UNSET
120
+ else:
121
+ mode = DedupeMode(_mode)
122
+
123
+ preview = d.pop("preview", UNSET)
124
+
125
+ _embedding_model = d.pop("embedding_model", UNSET)
126
+ embedding_model: EmbeddingModels | Unset
127
+ if isinstance(_embedding_model, Unset):
128
+ embedding_model = UNSET
129
+ else:
130
+ embedding_model = EmbeddingModels(_embedding_model)
131
+
132
+ validate_groups = d.pop("validate_groups", UNSET)
133
+
134
+ use_clustering = d.pop("use_clustering", UNSET)
135
+
136
+ def _parse_early_stop_threshold(data: object) -> int | None | Unset:
137
+ if data is None:
138
+ return data
139
+ if isinstance(data, Unset):
140
+ return data
141
+ return cast(int | None | Unset, data)
142
+
143
+ early_stop_threshold = _parse_early_stop_threshold(d.pop("early_stop_threshold", UNSET))
144
+
145
+ dedupe_query_params = cls(
146
+ equivalence_relation=equivalence_relation,
147
+ llm=llm,
148
+ chunk_size=chunk_size,
149
+ mode=mode,
150
+ preview=preview,
151
+ embedding_model=embedding_model,
152
+ validate_groups=validate_groups,
153
+ use_clustering=use_clustering,
154
+ early_stop_threshold=early_stop_threshold,
155
+ )
156
+
157
+ dedupe_query_params.additional_properties = d
158
+ return dedupe_query_params
159
+
160
+ @property
161
+ def additional_keys(self) -> list[str]:
162
+ return list(self.additional_properties.keys())
163
+
164
+ def __getitem__(self, key: str) -> Any:
165
+ return self.additional_properties[key]
166
+
167
+ def __setitem__(self, key: str, value: Any) -> None:
168
+ self.additional_properties[key] = value
169
+
170
+ def __delitem__(self, key: str) -> None:
171
+ del self.additional_properties[key]
172
+
173
+ def __contains__(self, key: str) -> bool:
174
+ return key in self.additional_properties
@@ -0,0 +1,311 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast
5
+ from uuid import UUID
6
+
7
+ from attrs import define as _attrs_define
8
+ from attrs import field as _attrs_field
9
+
10
+ from ..models.processing_mode import ProcessingMode
11
+ from ..types import UNSET, Unset
12
+
13
+ if TYPE_CHECKING:
14
+ from ..models.dedupe_query_params import DedupeQueryParams
15
+
16
+
17
+ T = TypeVar("T", bound="DedupeRequestParams")
18
+
19
+
20
+ @_attrs_define
21
+ class DedupeRequestParams:
22
+ """Request parameters for the deduplication service.
23
+
24
+ Attributes:
25
+ query (DedupeQueryParams): Service-specific parameters for the deduplication service.
26
+ input_artifacts (list[UUID] | None | Unset):
27
+ context_artifacts (list[UUID] | None | Unset):
28
+ label (None | str | Unset): Short task label for use in the UI
29
+ description (None | str | Unset): Task description for use in the UI
30
+ task_id (None | Unset | UUID):
31
+ replaces_task_id (None | Unset | UUID): The ID of the task that this task replaces. Used e.g. by the full
32
+ version of a task that replaces a preview version.
33
+ twin_artifact_id (None | Unset | UUID): The ID of a reference artifact, e.g. the right table in Deep Merge
34
+ operation.
35
+ task_type (Literal['dedupe'] | Unset): Default: 'dedupe'.
36
+ processing_mode (ProcessingMode | Unset):
37
+ """
38
+
39
+ query: DedupeQueryParams
40
+ input_artifacts: list[UUID] | None | Unset = UNSET
41
+ context_artifacts: list[UUID] | None | Unset = UNSET
42
+ label: None | str | Unset = UNSET
43
+ description: None | str | Unset = UNSET
44
+ task_id: None | Unset | UUID = UNSET
45
+ replaces_task_id: None | Unset | UUID = UNSET
46
+ twin_artifact_id: None | Unset | UUID = UNSET
47
+ task_type: Literal["dedupe"] | Unset = "dedupe"
48
+ processing_mode: ProcessingMode | Unset = UNSET
49
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
50
+
51
+ def to_dict(self) -> dict[str, Any]:
52
+ query = self.query.to_dict()
53
+
54
+ input_artifacts: list[str] | None | Unset
55
+ if isinstance(self.input_artifacts, Unset):
56
+ input_artifacts = UNSET
57
+ elif isinstance(self.input_artifacts, list):
58
+ input_artifacts = []
59
+ for componentsschemas_input_artifacts_ids_item_data in self.input_artifacts:
60
+ componentsschemas_input_artifacts_ids_item = str(componentsschemas_input_artifacts_ids_item_data)
61
+ input_artifacts.append(componentsschemas_input_artifacts_ids_item)
62
+
63
+ else:
64
+ input_artifacts = self.input_artifacts
65
+
66
+ context_artifacts: list[str] | None | Unset
67
+ if isinstance(self.context_artifacts, Unset):
68
+ context_artifacts = UNSET
69
+ elif isinstance(self.context_artifacts, list):
70
+ context_artifacts = []
71
+ for componentsschemas_context_artifacts_ids_item_data in self.context_artifacts:
72
+ componentsschemas_context_artifacts_ids_item = str(componentsschemas_context_artifacts_ids_item_data)
73
+ context_artifacts.append(componentsschemas_context_artifacts_ids_item)
74
+
75
+ else:
76
+ context_artifacts = self.context_artifacts
77
+
78
+ label: None | str | Unset
79
+ if isinstance(self.label, Unset):
80
+ label = UNSET
81
+ else:
82
+ label = self.label
83
+
84
+ description: None | str | Unset
85
+ if isinstance(self.description, Unset):
86
+ description = UNSET
87
+ else:
88
+ description = self.description
89
+
90
+ task_id: None | str | Unset
91
+ if isinstance(self.task_id, Unset):
92
+ task_id = UNSET
93
+ elif isinstance(self.task_id, UUID):
94
+ task_id = str(self.task_id)
95
+ else:
96
+ task_id = self.task_id
97
+
98
+ replaces_task_id: None | str | Unset
99
+ if isinstance(self.replaces_task_id, Unset):
100
+ replaces_task_id = UNSET
101
+ elif isinstance(self.replaces_task_id, UUID):
102
+ replaces_task_id = str(self.replaces_task_id)
103
+ else:
104
+ replaces_task_id = self.replaces_task_id
105
+
106
+ twin_artifact_id: None | str | Unset
107
+ if isinstance(self.twin_artifact_id, Unset):
108
+ twin_artifact_id = UNSET
109
+ elif isinstance(self.twin_artifact_id, UUID):
110
+ twin_artifact_id = str(self.twin_artifact_id)
111
+ else:
112
+ twin_artifact_id = self.twin_artifact_id
113
+
114
+ task_type = self.task_type
115
+
116
+ processing_mode: str | Unset = UNSET
117
+ if not isinstance(self.processing_mode, Unset):
118
+ processing_mode = self.processing_mode.value
119
+
120
+ field_dict: dict[str, Any] = {}
121
+ field_dict.update(self.additional_properties)
122
+ field_dict.update(
123
+ {
124
+ "query": query,
125
+ }
126
+ )
127
+ if input_artifacts is not UNSET:
128
+ field_dict["input_artifacts"] = input_artifacts
129
+ if context_artifacts is not UNSET:
130
+ field_dict["context_artifacts"] = context_artifacts
131
+ if label is not UNSET:
132
+ field_dict["label"] = label
133
+ if description is not UNSET:
134
+ field_dict["description"] = description
135
+ if task_id is not UNSET:
136
+ field_dict["task_id"] = task_id
137
+ if replaces_task_id is not UNSET:
138
+ field_dict["replaces_task_id"] = replaces_task_id
139
+ if twin_artifact_id is not UNSET:
140
+ field_dict["twin_artifact_id"] = twin_artifact_id
141
+ if task_type is not UNSET:
142
+ field_dict["task_type"] = task_type
143
+ if processing_mode is not UNSET:
144
+ field_dict["processing_mode"] = processing_mode
145
+
146
+ return field_dict
147
+
148
+ @classmethod
149
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
150
+ from ..models.dedupe_query_params import DedupeQueryParams
151
+
152
+ d = dict(src_dict)
153
+ query = DedupeQueryParams.from_dict(d.pop("query"))
154
+
155
+ def _parse_input_artifacts(data: object) -> list[UUID] | None | Unset:
156
+ if data is None:
157
+ return data
158
+ if isinstance(data, Unset):
159
+ return data
160
+ try:
161
+ if not isinstance(data, list):
162
+ raise TypeError()
163
+ input_artifacts_type_0 = []
164
+ _input_artifacts_type_0 = data
165
+ for componentsschemas_input_artifacts_ids_item_data in _input_artifacts_type_0:
166
+ componentsschemas_input_artifacts_ids_item = UUID(componentsschemas_input_artifacts_ids_item_data)
167
+
168
+ input_artifacts_type_0.append(componentsschemas_input_artifacts_ids_item)
169
+
170
+ return input_artifacts_type_0
171
+ except (TypeError, ValueError, AttributeError, KeyError):
172
+ pass
173
+ return cast(list[UUID] | None | Unset, data)
174
+
175
+ input_artifacts = _parse_input_artifacts(d.pop("input_artifacts", UNSET))
176
+
177
+ def _parse_context_artifacts(data: object) -> list[UUID] | None | Unset:
178
+ if data is None:
179
+ return data
180
+ if isinstance(data, Unset):
181
+ return data
182
+ try:
183
+ if not isinstance(data, list):
184
+ raise TypeError()
185
+ context_artifacts_type_0 = []
186
+ _context_artifacts_type_0 = data
187
+ for componentsschemas_context_artifacts_ids_item_data in _context_artifacts_type_0:
188
+ componentsschemas_context_artifacts_ids_item = UUID(
189
+ componentsschemas_context_artifacts_ids_item_data
190
+ )
191
+
192
+ context_artifacts_type_0.append(componentsschemas_context_artifacts_ids_item)
193
+
194
+ return context_artifacts_type_0
195
+ except (TypeError, ValueError, AttributeError, KeyError):
196
+ pass
197
+ return cast(list[UUID] | None | Unset, data)
198
+
199
+ context_artifacts = _parse_context_artifacts(d.pop("context_artifacts", UNSET))
200
+
201
+ def _parse_label(data: object) -> None | str | Unset:
202
+ if data is None:
203
+ return data
204
+ if isinstance(data, Unset):
205
+ return data
206
+ return cast(None | str | Unset, data)
207
+
208
+ label = _parse_label(d.pop("label", UNSET))
209
+
210
+ def _parse_description(data: object) -> None | str | Unset:
211
+ if data is None:
212
+ return data
213
+ if isinstance(data, Unset):
214
+ return data
215
+ return cast(None | str | Unset, data)
216
+
217
+ description = _parse_description(d.pop("description", UNSET))
218
+
219
+ def _parse_task_id(data: object) -> None | Unset | UUID:
220
+ if data is None:
221
+ return data
222
+ if isinstance(data, Unset):
223
+ return data
224
+ try:
225
+ if not isinstance(data, str):
226
+ raise TypeError()
227
+ task_id_type_0 = UUID(data)
228
+
229
+ return task_id_type_0
230
+ except (TypeError, ValueError, AttributeError, KeyError):
231
+ pass
232
+ return cast(None | Unset | UUID, data)
233
+
234
+ task_id = _parse_task_id(d.pop("task_id", UNSET))
235
+
236
+ def _parse_replaces_task_id(data: object) -> None | Unset | UUID:
237
+ if data is None:
238
+ return data
239
+ if isinstance(data, Unset):
240
+ return data
241
+ try:
242
+ if not isinstance(data, str):
243
+ raise TypeError()
244
+ replaces_task_id_type_0 = UUID(data)
245
+
246
+ return replaces_task_id_type_0
247
+ except (TypeError, ValueError, AttributeError, KeyError):
248
+ pass
249
+ return cast(None | Unset | UUID, data)
250
+
251
+ replaces_task_id = _parse_replaces_task_id(d.pop("replaces_task_id", UNSET))
252
+
253
+ def _parse_twin_artifact_id(data: object) -> None | Unset | UUID:
254
+ if data is None:
255
+ return data
256
+ if isinstance(data, Unset):
257
+ return data
258
+ try:
259
+ if not isinstance(data, str):
260
+ raise TypeError()
261
+ twin_artifact_id_type_0 = UUID(data)
262
+
263
+ return twin_artifact_id_type_0
264
+ except (TypeError, ValueError, AttributeError, KeyError):
265
+ pass
266
+ return cast(None | Unset | UUID, data)
267
+
268
+ twin_artifact_id = _parse_twin_artifact_id(d.pop("twin_artifact_id", UNSET))
269
+
270
+ task_type = cast(Literal["dedupe"] | Unset, d.pop("task_type", UNSET))
271
+ if task_type != "dedupe" and not isinstance(task_type, Unset):
272
+ raise ValueError(f"task_type must match const 'dedupe', got '{task_type}'")
273
+
274
+ _processing_mode = d.pop("processing_mode", UNSET)
275
+ processing_mode: ProcessingMode | Unset
276
+ if isinstance(_processing_mode, Unset):
277
+ processing_mode = UNSET
278
+ else:
279
+ processing_mode = ProcessingMode(_processing_mode)
280
+
281
+ dedupe_request_params = cls(
282
+ query=query,
283
+ input_artifacts=input_artifacts,
284
+ context_artifacts=context_artifacts,
285
+ label=label,
286
+ description=description,
287
+ task_id=task_id,
288
+ replaces_task_id=replaces_task_id,
289
+ twin_artifact_id=twin_artifact_id,
290
+ task_type=task_type,
291
+ processing_mode=processing_mode,
292
+ )
293
+
294
+ dedupe_request_params.additional_properties = d
295
+ return dedupe_request_params
296
+
297
+ @property
298
+ def additional_keys(self) -> list[str]:
299
+ return list(self.additional_properties.keys())
300
+
301
+ def __getitem__(self, key: str) -> Any:
302
+ return self.additional_properties[key]
303
+
304
+ def __setitem__(self, key: str, value: Any) -> None:
305
+ self.additional_properties[key] = value
306
+
307
+ def __delitem__(self, key: str) -> None:
308
+ del self.additional_properties[key]
309
+
310
+ def __contains__(self, key: str) -> bool:
311
+ return key in self.additional_properties