shaped 2.0.0__py3-none-any.whl → 2.0.2__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 (323) hide show
  1. shaped/__init__.py +54 -4
  2. shaped/autogen/__init__.py +541 -66
  3. shaped/autogen/api/__init__.py +4 -3
  4. shaped/autogen/api/engine_api.py +1467 -0
  5. shaped/autogen/api/{dataset_api.py → query_api.py} +219 -194
  6. shaped/autogen/api/table_api.py +1494 -0
  7. shaped/autogen/api/{model_management_api.py → view_api.py} +179 -181
  8. shaped/autogen/api_client.py +15 -8
  9. shaped/autogen/configuration.py +20 -9
  10. shaped/autogen/exceptions.py +19 -2
  11. shaped/autogen/models/__init__.py +254 -52
  12. shaped/autogen/models/ai_enrichment_view_config.py +123 -0
  13. shaped/autogen/models/{path.py → algorithm.py} +19 -19
  14. shaped/autogen/models/amplitude_table_config.py +106 -0
  15. shaped/autogen/models/ascending.py +136 -0
  16. shaped/autogen/models/attn_dropout_prob.py +136 -0
  17. shaped/autogen/models/attribute_journey.py +124 -0
  18. shaped/autogen/models/attribute_value.py +178 -0
  19. shaped/autogen/models/autoscaling_config.py +95 -0
  20. shaped/autogen/models/aws_pinpoint_table_config.py +108 -0
  21. shaped/autogen/models/batch_size.py +136 -0
  22. shaped/autogen/models/batch_size1.py +136 -0
  23. shaped/autogen/models/batch_size2.py +136 -0
  24. shaped/autogen/models/big_query_table_config.py +147 -0
  25. shaped/autogen/models/bm25.py +136 -0
  26. shaped/autogen/models/boosted_reorder_step.py +125 -0
  27. shaped/autogen/models/canary_rollout.py +99 -0
  28. shaped/autogen/models/candidate_attributes_retrieve_step.py +126 -0
  29. shaped/autogen/models/candidate_ids_retrieve_step.py +113 -0
  30. shaped/autogen/models/candidate_retrieval_strategy.py +41 -0
  31. shaped/autogen/models/clickhouse_table_config.py +146 -0
  32. shaped/autogen/models/column_order_retrieve_step.py +123 -0
  33. shaped/autogen/models/column_ordering.py +91 -0
  34. shaped/autogen/models/create_table_response.py +87 -0
  35. shaped/autogen/models/create_view_response.py +87 -0
  36. shaped/autogen/models/custom_table_config.py +135 -0
  37. shaped/autogen/models/data_compute_config.py +89 -0
  38. shaped/autogen/models/data_config.py +145 -0
  39. shaped/autogen/models/data_config_interaction_table.py +146 -0
  40. shaped/autogen/models/data_split_config.py +88 -0
  41. shaped/autogen/models/data_split_strategy.py +37 -0
  42. shaped/autogen/models/data_tier.py +37 -0
  43. shaped/autogen/models/default.py +246 -0
  44. shaped/autogen/models/delete_engine_response.py +87 -0
  45. shaped/autogen/models/delete_table_response.py +87 -0
  46. shaped/autogen/models/delete_view_response.py +87 -0
  47. shaped/autogen/models/deployment_config.py +123 -0
  48. shaped/autogen/models/distance_function.py +38 -0
  49. shaped/autogen/models/diversity_reorder_step.py +137 -0
  50. shaped/autogen/models/dropout_rate.py +136 -0
  51. shaped/autogen/models/dynamo_db_table_config.py +160 -0
  52. shaped/autogen/models/dynamo_db_table_config_scan_kwargs_value.py +138 -0
  53. shaped/autogen/models/embedder_batch_size.py +136 -0
  54. shaped/autogen/models/embedding_config.py +93 -0
  55. shaped/autogen/models/embedding_dim.py +136 -0
  56. shaped/autogen/models/embedding_dims.py +136 -0
  57. shaped/autogen/models/embedding_size.py +136 -0
  58. shaped/autogen/models/encoder.py +140 -0
  59. shaped/autogen/models/encoding_pooling_strategy.py +38 -0
  60. shaped/autogen/models/engine.py +109 -0
  61. shaped/autogen/models/engine_config_v2.py +152 -0
  62. shaped/autogen/models/engine_details_response.py +120 -0
  63. shaped/autogen/models/engine_schema.py +113 -0
  64. shaped/autogen/models/engine_schema_user_inner.py +134 -0
  65. shaped/autogen/models/entity_config.py +109 -0
  66. shaped/autogen/models/entity_journey.py +152 -0
  67. shaped/autogen/models/entity_type.py +38 -0
  68. shaped/autogen/models/evaluation_config.py +92 -0
  69. shaped/autogen/models/exploration_reorder_step.py +125 -0
  70. shaped/autogen/models/expression_filter_step.py +106 -0
  71. shaped/autogen/models/factors.py +136 -0
  72. shaped/autogen/models/factors1.py +136 -0
  73. shaped/autogen/models/feature.py +90 -0
  74. shaped/autogen/models/feature_type.py +60 -0
  75. shaped/autogen/models/file_table_config.py +112 -0
  76. shaped/autogen/models/filter_config.py +99 -0
  77. shaped/autogen/models/filter_dataset.py +140 -0
  78. shaped/autogen/models/filter_index_type.py +36 -0
  79. shaped/autogen/models/filter_retrieve_step.py +113 -0
  80. shaped/autogen/models/global_filter.py +102 -0
  81. shaped/autogen/models/hidden_dropout_prob.py +136 -0
  82. shaped/autogen/models/hidden_size.py +136 -0
  83. shaped/autogen/models/hidden_size1.py +136 -0
  84. shaped/autogen/models/http_problem_response.py +115 -0
  85. shaped/autogen/models/http_validation_error.py +2 -2
  86. shaped/autogen/models/hugging_face_encoder.py +113 -0
  87. shaped/autogen/models/iceberg_table_config.py +154 -0
  88. shaped/autogen/models/index_config.py +101 -0
  89. shaped/autogen/models/inner_size.py +136 -0
  90. shaped/autogen/models/inner_size1.py +136 -0
  91. shaped/autogen/models/interaction_config.py +122 -0
  92. shaped/autogen/models/interaction_pooling_encoder.py +104 -0
  93. shaped/autogen/models/interaction_round_robin_encoder.py +104 -0
  94. shaped/autogen/models/item_attribute_pooling_encoder.py +124 -0
  95. shaped/autogen/models/journey.py +140 -0
  96. shaped/autogen/models/kafka_table_config.py +129 -0
  97. shaped/autogen/models/kinesis_table_config.py +140 -0
  98. shaped/autogen/models/kinesis_table_config_column_schema_value.py +136 -0
  99. shaped/autogen/models/label.py +90 -0
  100. shaped/autogen/models/label_type.py +37 -0
  101. shaped/autogen/models/laplace_smoothing.py +136 -0
  102. shaped/autogen/models/latency_scaling_policy.py +112 -0
  103. shaped/autogen/models/learning_rate.py +136 -0
  104. shaped/autogen/models/learning_rate1.py +136 -0
  105. shaped/autogen/models/learning_rate2.py +136 -0
  106. shaped/autogen/models/learning_rate3.py +136 -0
  107. shaped/autogen/models/lexical_search_mode.py +99 -0
  108. shaped/autogen/models/list_engines_response.py +95 -0
  109. shaped/autogen/models/list_tables_response.py +95 -0
  110. shaped/autogen/models/list_views_response.py +95 -0
  111. shaped/autogen/models/loss_types.py +37 -0
  112. shaped/autogen/models/lr.py +136 -0
  113. shaped/autogen/models/lr1.py +136 -0
  114. shaped/autogen/models/lr2.py +136 -0
  115. shaped/autogen/models/max_depth.py +136 -0
  116. shaped/autogen/models/max_leaves.py +136 -0
  117. shaped/autogen/models/max_seq_length.py +136 -0
  118. shaped/autogen/models/max_seq_length1.py +136 -0
  119. shaped/autogen/models/max_seq_length2.py +136 -0
  120. shaped/autogen/models/mode.py +134 -0
  121. shaped/autogen/models/mode1.py +134 -0
  122. shaped/autogen/models/mode2.py +136 -0
  123. shaped/autogen/models/mongo_db_table_config.py +147 -0
  124. shaped/autogen/models/mssql_table_config.py +155 -0
  125. shaped/autogen/models/{my_sql_dataset_config.py → my_sql_table_config.py} +45 -28
  126. shaped/autogen/models/n_epochs.py +136 -0
  127. shaped/autogen/models/n_epochs1.py +136 -0
  128. shaped/autogen/models/n_epochs2.py +136 -0
  129. shaped/autogen/models/n_estimators.py +136 -0
  130. shaped/autogen/models/n_heads.py +136 -0
  131. shaped/autogen/models/n_layers.py +136 -0
  132. shaped/autogen/models/neg_per_positive.py +136 -0
  133. shaped/autogen/models/negative_samples_count.py +136 -0
  134. shaped/autogen/models/ngram_tokenizer.py +103 -0
  135. shaped/autogen/models/no_op_config.py +117 -0
  136. shaped/autogen/models/num_blocks.py +136 -0
  137. shaped/autogen/models/num_heads.py +136 -0
  138. shaped/autogen/models/num_leaves.py +136 -0
  139. shaped/autogen/models/objective.py +40 -0
  140. shaped/autogen/models/objective1.py +134 -0
  141. shaped/autogen/models/online_store_config.py +89 -0
  142. shaped/autogen/models/pagination_config.py +87 -0
  143. shaped/autogen/models/parameter_definition.py +96 -0
  144. shaped/autogen/models/parameters_value.py +240 -0
  145. shaped/autogen/models/passthrough_score.py +104 -0
  146. shaped/autogen/models/personal_filter.py +104 -0
  147. shaped/autogen/models/pipeline_stage_explanation.py +118 -0
  148. shaped/autogen/models/policy.py +134 -0
  149. shaped/autogen/models/pool_fn.py +134 -0
  150. shaped/autogen/models/pooling_function.py +37 -0
  151. shaped/autogen/models/{postgres_dataset_config.py → postgres_table_config.py} +66 -28
  152. shaped/autogen/models/posthog_table_config.py +133 -0
  153. shaped/autogen/models/prebuilt_filter_step.py +113 -0
  154. shaped/autogen/models/precomputed_item_embedding.py +99 -0
  155. shaped/autogen/models/precomputed_user_embedding.py +99 -0
  156. shaped/autogen/models/query.py +136 -0
  157. shaped/autogen/models/query1.py +136 -0
  158. shaped/autogen/models/query_any_of.py +140 -0
  159. shaped/autogen/models/query_definition.py +106 -0
  160. shaped/autogen/models/query_encoder.py +194 -0
  161. shaped/autogen/models/query_explanation.py +197 -0
  162. shaped/autogen/models/query_request.py +121 -0
  163. shaped/autogen/models/query_result.py +113 -0
  164. shaped/autogen/models/query_table_config.py +99 -0
  165. shaped/autogen/models/rank_item_attribute_values_query_config.py +122 -0
  166. shaped/autogen/models/rank_query_config.py +167 -0
  167. shaped/autogen/models/rank_query_config_filter_inner.py +149 -0
  168. shaped/autogen/models/rank_query_config_reorder_inner.py +149 -0
  169. shaped/autogen/models/rank_query_config_retrieve_inner.py +196 -0
  170. shaped/autogen/models/recreate_rollout.py +97 -0
  171. shaped/autogen/models/{redshift_dataset_config.py → redshift_table_config.py} +48 -25
  172. shaped/autogen/models/reference_table_config.py +113 -0
  173. shaped/autogen/models/regularization.py +136 -0
  174. shaped/autogen/models/request.py +378 -0
  175. shaped/autogen/models/request1.py +140 -0
  176. shaped/autogen/models/requests_per_second_scaling_policy.py +112 -0
  177. shaped/autogen/models/response_get_view_details_views_view_name_get.py +134 -0
  178. shaped/autogen/models/result.py +145 -0
  179. shaped/autogen/models/result_embeddings_value.py +127 -0
  180. shaped/autogen/models/retriever.py +196 -0
  181. shaped/autogen/models/retriever1.py +196 -0
  182. shaped/autogen/models/rollout_config.py +91 -0
  183. shaped/autogen/models/rudderstack_table_config.py +106 -0
  184. shaped/autogen/models/sampling_strategy.py +36 -0
  185. shaped/autogen/models/saved_query_info_response.py +89 -0
  186. shaped/autogen/models/saved_query_list_response.py +87 -0
  187. shaped/autogen/models/saved_query_request.py +115 -0
  188. shaped/autogen/models/schema_config.py +117 -0
  189. shaped/autogen/models/score.py +134 -0
  190. shaped/autogen/models/score_ensemble.py +140 -0
  191. shaped/autogen/models/score_ensemble_policy_config.py +141 -0
  192. shaped/autogen/models/score_ensemble_policy_config_policies_inner.py +422 -0
  193. shaped/autogen/models/search_config.py +105 -0
  194. shaped/autogen/models/segment_table_config.py +106 -0
  195. shaped/autogen/models/sequence_length.py +136 -0
  196. shaped/autogen/models/server_config.py +87 -0
  197. shaped/autogen/models/setup_engine_response.py +87 -0
  198. shaped/autogen/models/shaped_internal_recsys_policies_als_model_policy_als_model_policy_config.py +148 -0
  199. shaped/autogen/models/shaped_internal_recsys_policies_beeformer_model_policy_beeformer_model_policy_beeformer_model_policy_config.py +154 -0
  200. shaped/autogen/models/shaped_internal_recsys_policies_bert_model_policy_bert_model_policy_bert_model_policy_config.py +209 -0
  201. shaped/autogen/models/shaped_internal_recsys_policies_chronological_model_policy_chronological_model_policy_config.py +137 -0
  202. shaped/autogen/models/shaped_internal_recsys_policies_elsa_model_policy_elsa_model_policy_elsa_model_policy_config.py +139 -0
  203. shaped/autogen/models/shaped_internal_recsys_policies_gsasrec_model_policy_gsasrec_model_policy_gsas_rec_model_policy_config.py +205 -0
  204. shaped/autogen/models/shaped_internal_recsys_policies_item2vec_model_policy_item2_vec_model_policy_config.py +140 -0
  205. shaped/autogen/models/shaped_internal_recsys_policies_item_content_similarity_model_policy_item_content_similarity_model_policy_config.py +152 -0
  206. shaped/autogen/models/shaped_internal_recsys_policies_lightgbm_model_policy_lightgbm_model_policy_light_gbm_model_policy_config.py +239 -0
  207. shaped/autogen/models/shaped_internal_recsys_policies_ngram_model_policy_ngram_model_policy_config.py +119 -0
  208. shaped/autogen/models/shaped_internal_recsys_policies_popular_model_policy_popular_model_policy_config.py +137 -0
  209. shaped/autogen/models/shaped_internal_recsys_policies_random_model_policy_random_model_policy_config.py +104 -0
  210. shaped/autogen/models/shaped_internal_recsys_policies_recently_popular_policy_recently_popular_policy_config.py +130 -0
  211. shaped/autogen/models/shaped_internal_recsys_policies_rising_popular_policy_rising_popular_policy_config.py +123 -0
  212. shaped/autogen/models/shaped_internal_recsys_policies_sasrec_model_policy_sasrec_model_policy_sas_rec_model_policy_config.py +224 -0
  213. shaped/autogen/models/shaped_internal_recsys_policies_svd_model_policy_svd_model_policy_config.py +119 -0
  214. shaped/autogen/models/shaped_internal_recsys_policies_two_tower_model_policy_two_tower_model_policy_two_tower_model_policy_config.py +159 -0
  215. shaped/autogen/models/shaped_internal_recsys_policies_user_item_content_similarity_model_policy_user_item_content_similarity_model_policy_config.py +131 -0
  216. shaped/autogen/models/shaped_internal_recsys_policies_widedeep_model_policy_wide_deep_model_policy_config.py +131 -0
  217. shaped/autogen/models/shaped_internal_recsys_policies_xgboost_model_policy_xg_boost_model_policy_config.py +149 -0
  218. shaped/autogen/models/shopify_table_config.py +156 -0
  219. shaped/autogen/models/similarity_retrieve_step.py +121 -0
  220. shaped/autogen/models/{snowflake_dataset_config.py → snowflake_table_config.py} +47 -18
  221. shaped/autogen/models/sql_transform_type.py +37 -0
  222. shaped/autogen/models/sql_view_config.py +111 -0
  223. shaped/autogen/models/stemmer_tokenizer.py +105 -0
  224. shaped/autogen/models/step_explanation.py +137 -0
  225. shaped/autogen/models/strategy.py +134 -0
  226. shaped/autogen/models/table.py +102 -0
  227. shaped/autogen/models/table_deployment_type.py +38 -0
  228. shaped/autogen/models/table_insert_arguments.py +87 -0
  229. shaped/autogen/models/table_insert_response.py +87 -0
  230. shaped/autogen/models/text_encoding.py +136 -0
  231. shaped/autogen/models/text_search_retrieve_step.py +121 -0
  232. shaped/autogen/models/time_frequency.py +136 -0
  233. shaped/autogen/models/time_window.py +136 -0
  234. shaped/autogen/models/time_window_in_days.py +142 -0
  235. shaped/autogen/models/tokenizer.py +149 -0
  236. shaped/autogen/models/trained_model_encoder.py +99 -0
  237. shaped/autogen/models/training_compute_config.py +99 -0
  238. shaped/autogen/models/training_config.py +121 -0
  239. shaped/autogen/models/training_config_models_inner.py +308 -0
  240. shaped/autogen/models/training_strategy.py +37 -0
  241. shaped/autogen/models/trending_mode.py +37 -0
  242. shaped/autogen/models/truncate_filter_step.py +106 -0
  243. shaped/autogen/models/tunable_bool.py +97 -0
  244. shaped/autogen/models/tunable_float.py +118 -0
  245. shaped/autogen/models/tunable_int.py +118 -0
  246. shaped/autogen/models/tunable_int_categorical.py +99 -0
  247. shaped/autogen/models/tunable_string.py +99 -0
  248. shaped/autogen/models/tuning_config.py +89 -0
  249. shaped/autogen/models/type.py +134 -0
  250. shaped/autogen/models/update_table_response.py +87 -0
  251. shaped/autogen/models/update_view_response.py +87 -0
  252. shaped/autogen/models/user_attribute_pooling_encoder.py +124 -0
  253. shaped/autogen/models/val_split.py +136 -0
  254. shaped/autogen/models/validation_error.py +13 -3
  255. shaped/autogen/models/validation_error_loc_inner.py +138 -0
  256. shaped/autogen/models/value_type.py +7 -5
  257. shaped/autogen/models/vector_search_mode.py +99 -0
  258. shaped/autogen/models/view.py +104 -0
  259. shaped/autogen/models/view_details_ai.py +140 -0
  260. shaped/autogen/models/view_details_ai_schema_value.py +153 -0
  261. shaped/autogen/models/view_details_sql.py +140 -0
  262. shaped/autogen/models/view_status.py +41 -0
  263. shaped/autogen/models/weight_decay.py +136 -0
  264. shaped/autogen/models/whitespace_tokenizer.py +97 -0
  265. shaped/autogen/models/window_size.py +136 -0
  266. shaped/autogen/rest.py +8 -2
  267. shaped/cli/shaped_cli.py +12 -7
  268. shaped/client.py +587 -174
  269. shaped/config_builders.py +695 -0
  270. shaped/query_builder.py +774 -0
  271. {shaped-2.0.0.dist-info → shaped-2.0.2.dist-info}/METADATA +119 -56
  272. shaped-2.0.2.dist-info/RECORD +278 -0
  273. shaped-2.0.2.dist-info/entry_points.txt +2 -0
  274. shaped/autogen/api/model_inference_api.py +0 -2825
  275. shaped/autogen/models/amplitude_dataset_config.py +0 -96
  276. shaped/autogen/models/aws_pinpoint_dataset_config.py +0 -96
  277. shaped/autogen/models/big_query_dataset_config.py +0 -114
  278. shaped/autogen/models/complement_items_request.py +0 -99
  279. shaped/autogen/models/complement_items_response.py +0 -89
  280. shaped/autogen/models/connectors_inner.py +0 -134
  281. shaped/autogen/models/create_dataset_arguments.py +0 -263
  282. shaped/autogen/models/create_embedding_response.py +0 -87
  283. shaped/autogen/models/create_item_embedding_request.py +0 -89
  284. shaped/autogen/models/create_model_arguments.py +0 -107
  285. shaped/autogen/models/create_model_response.py +0 -87
  286. shaped/autogen/models/create_user_embedding_request.py +0 -89
  287. shaped/autogen/models/custom_dataset_config.py +0 -115
  288. shaped/autogen/models/dataset_config.py +0 -101
  289. shaped/autogen/models/dataset_schema_type.py +0 -47
  290. shaped/autogen/models/datasets_inner.py +0 -91
  291. shaped/autogen/models/delete_model_response.py +0 -87
  292. shaped/autogen/models/fetch_config.py +0 -95
  293. shaped/autogen/models/file_config.py +0 -105
  294. shaped/autogen/models/file_source_config.py +0 -89
  295. shaped/autogen/models/inference_config.py +0 -101
  296. shaped/autogen/models/insert_model_response.py +0 -87
  297. shaped/autogen/models/interaction.py +0 -87
  298. shaped/autogen/models/list_datasets_response.py +0 -95
  299. shaped/autogen/models/list_models_response.py +0 -95
  300. shaped/autogen/models/model_config.py +0 -99
  301. shaped/autogen/models/model_response.py +0 -95
  302. shaped/autogen/models/mongo_db_dataset_config.py +0 -119
  303. shaped/autogen/models/post_rank_request.py +0 -117
  304. shaped/autogen/models/rank_attribute_response.py +0 -89
  305. shaped/autogen/models/rank_grid_attribute_request.py +0 -91
  306. shaped/autogen/models/rank_grid_attribute_request1.py +0 -93
  307. shaped/autogen/models/rank_grid_attribute_response.py +0 -91
  308. shaped/autogen/models/rank_response.py +0 -91
  309. shaped/autogen/models/retrieve_request.py +0 -101
  310. shaped/autogen/models/retrieve_response.py +0 -91
  311. shaped/autogen/models/retriever_top_k_override.py +0 -97
  312. shaped/autogen/models/rudder_stack_dataset_config.py +0 -96
  313. shaped/autogen/models/segment_dataset_config.py +0 -96
  314. shaped/autogen/models/similar_item_request.py +0 -101
  315. shaped/autogen/models/similar_response.py +0 -89
  316. shaped/autogen/models/similar_users_request.py +0 -99
  317. shaped/autogen/models/successful_response.py +0 -87
  318. shaped/autogen/models/view_model_response.py +0 -99
  319. shaped-2.0.0.dist-info/RECORD +0 -73
  320. shaped-2.0.0.dist-info/entry_points.txt +0 -2
  321. {shaped-2.0.0.dist-info → shaped-2.0.2.dist-info}/WHEEL +0 -0
  322. {shaped-2.0.0.dist-info → shaped-2.0.2.dist-info}/top_level.txt +0 -0
  323. {shaped-2.0.0.dist-info → shaped-2.0.2.dist-info}/zip-safe +0 -0
@@ -0,0 +1,695 @@
1
+ """
2
+ Fluent builders for constructing Shaped V2 configurations.
3
+
4
+ This module provides a fluent API for building Engine, Table, and View configurations
5
+ using Python objects instead of raw dictionaries or complex model instantiation.
6
+ """
7
+ from typing import Any, Dict, List, Optional, Union
8
+
9
+ from shaped.autogen.models.engine_config_v2 import EngineConfigV2
10
+ from shaped.autogen.models.data_config import DataConfig
11
+ from shaped.autogen.models.data_config_interaction_table import DataConfigInteractionTable
12
+ from shaped.autogen.models.reference_table_config import ReferenceTableConfig
13
+ from shaped.autogen.models.query_table_config import QueryTableConfig
14
+
15
+ # Table Config Imports
16
+ from shaped.autogen.models.postgres_table_config import PostgresTableConfig
17
+ from shaped.autogen.models.big_query_table_config import BigQueryTableConfig
18
+ from shaped.autogen.models.snowflake_table_config import SnowflakeTableConfig
19
+ from shaped.autogen.models.file_table_config import FileTableConfig
20
+ from shaped.autogen.models.amplitude_table_config import AmplitudeTableConfig
21
+ from shaped.autogen.models.aws_pinpoint_table_config import AWSPinpointTableConfig
22
+ from shaped.autogen.models.clickhouse_table_config import ClickhouseTableConfig
23
+ from shaped.autogen.models.custom_table_config import CustomTableConfig
24
+ from shaped.autogen.models.dynamo_db_table_config import DynamoDBTableConfig
25
+ from shaped.autogen.models.iceberg_table_config import IcebergTableConfig
26
+ from shaped.autogen.models.kafka_table_config import KafkaTableConfig
27
+ from shaped.autogen.models.kinesis_table_config import KinesisTableConfig
28
+ from shaped.autogen.models.mongo_db_table_config import MongoDBTableConfig
29
+ from shaped.autogen.models.mssql_table_config import MSSQLTableConfig
30
+ from shaped.autogen.models.my_sql_table_config import MySQLTableConfig
31
+ from shaped.autogen.models.posthog_table_config import PosthogTableConfig
32
+ from shaped.autogen.models.redshift_table_config import RedshiftTableConfig
33
+ from shaped.autogen.models.rudderstack_table_config import RudderstackTableConfig
34
+ from shaped.autogen.models.segment_table_config import SegmentTableConfig
35
+ from shaped.autogen.models.shopify_table_config import ShopifyTableConfig
36
+
37
+ # View Config Imports
38
+ from shaped.autogen.models.sql_view_config import SQLViewConfig
39
+ from shaped.autogen.models.ai_enrichment_view_config import AIEnrichmentViewConfig
40
+ from shaped.autogen.models.sql_transform_type import SQLTransformType
41
+
42
+ # Other Imports
43
+ from shaped.autogen.models.index_config import IndexConfig
44
+ from shaped.autogen.models.training_config import TrainingConfig
45
+ from shaped.autogen.models.deployment_config import DeploymentConfig
46
+ from shaped.autogen.models.query_definition import QueryDefinition
47
+ from shaped.autogen.models.rank_query_config import RankQueryConfig
48
+
49
+ # Type aliases for better type hints
50
+ TableConfig = Union[
51
+ PostgresTableConfig,
52
+ BigQueryTableConfig,
53
+ SnowflakeTableConfig,
54
+ FileTableConfig,
55
+ AmplitudeTableConfig,
56
+ AWSPinpointTableConfig,
57
+ ClickhouseTableConfig,
58
+ CustomTableConfig,
59
+ DynamoDBTableConfig,
60
+ IcebergTableConfig,
61
+ KafkaTableConfig,
62
+ KinesisTableConfig,
63
+ MongoDBTableConfig,
64
+ MSSQLTableConfig,
65
+ MySQLTableConfig,
66
+ PosthogTableConfig,
67
+ RedshiftTableConfig,
68
+ RudderstackTableConfig,
69
+ SegmentTableConfig,
70
+ ShopifyTableConfig
71
+ ]
72
+ ViewConfig = Union[SQLViewConfig, AIEnrichmentViewConfig]
73
+
74
+
75
+ class Engine:
76
+ """
77
+ Builder for Engine configurations with support for all V2 features.
78
+
79
+ Example:
80
+ engine = (Engine("my-engine")
81
+ .interactions("events")
82
+ .users("users")
83
+ .items("items")
84
+ .with_index_config(...)
85
+ .with_training_config(...)
86
+ .with_deployment_config(...)
87
+ .with_query("recommendations", "SELECT * FROM items ORDER BY score DESC"))
88
+ """
89
+
90
+ def __init__(self, name: str):
91
+ if not name:
92
+ raise ValueError("Engine name is required")
93
+
94
+ self._name = name
95
+ self._description: Optional[str] = None
96
+ self._interactions: Optional[Union[str, Dict[str, Any]]] = None
97
+ self._users: Optional[Union[str, Dict[str, Any]]] = None
98
+ self._items: Optional[Union[str, Dict[str, Any]]] = None
99
+ self._schedule: Optional[str] = None
100
+ self._schema_override: Optional[Dict[str, Any]] = None
101
+ self._compute: Optional[Dict[str, Any]] = None
102
+ self._filters: List[Dict[str, Any]] = []
103
+ self._reference_tables: Dict[str, Any] = {}
104
+ self._tags: Optional[Dict[str, str]] = None
105
+ self._index_config: Optional[IndexConfig] = None
106
+ self._training_config: Dict[str, Any] = {}
107
+ self._deployment_config: Dict[str, Any] = {}
108
+ self._queries: Dict[str, QueryDefinition] = {}
109
+
110
+ def description(self, description: str) -> "Engine":
111
+ """Set the engine description."""
112
+ self._description = description
113
+ return self
114
+
115
+ def interactions(self, table: Union[str, Dict[str, Any]]) -> "Engine":
116
+ """Set the interactions table configuration."""
117
+ self._interactions = table
118
+ return self
119
+
120
+ def users(self, table: Union[str, Dict[str, Any]]) -> "Engine":
121
+ """Set the users table configuration."""
122
+ self._users = table
123
+ return self
124
+
125
+ def items(self, table: Union[str, Dict[str, Any]]) -> "Engine":
126
+ """Set the items table configuration."""
127
+ self._items = table
128
+ return self
129
+
130
+ def schedule(self, schedule: str) -> "Engine":
131
+ """Set the data refresh schedule."""
132
+ self._schedule = schedule
133
+ return self
134
+
135
+ def with_schema_override(self, schema: Dict[str, Any]) -> "Engine":
136
+ """Override the default schema detection with custom schema."""
137
+ self._schema_override = schema
138
+ return self
139
+
140
+ def with_compute(self, compute: Dict[str, Any]) -> "Engine":
141
+ """Configure compute resources for data processing."""
142
+ self._compute = compute
143
+ return self
144
+
145
+ def add_filter(self, filter_config: Dict[str, Any]) -> "Engine":
146
+ """
147
+ Add a filter configuration.
148
+
149
+ Args:
150
+ filter_config: Dictionary containing filter configuration
151
+
152
+ Returns:
153
+ The Engine instance for method chaining
154
+ """
155
+ self._filters.append(filter_config)
156
+ return self
157
+
158
+ def add_filters(self, *filter_configs: Dict[str, Any]) -> "Engine":
159
+ """
160
+ Add multiple filter configurations at once.
161
+
162
+ Args:
163
+ *filter_configs: One or more filter configurations to add
164
+
165
+ Returns:
166
+ The Engine instance for method chaining
167
+ """
168
+ self._filters.extend(filter_configs)
169
+ return self
170
+
171
+ def add_reference_table(self, name: str, config: Dict[str, Any]) -> "Engine":
172
+ """
173
+ Add a reference table configuration.
174
+
175
+ Args:
176
+ name: Name of the reference table
177
+ config: Configuration dictionary for the reference table
178
+
179
+ Returns:
180
+ The Engine instance for method chaining
181
+ """
182
+ self._reference_tables[name] = config
183
+ return self
184
+
185
+ def add_reference_tables(self, **tables: Dict[str, Any]) -> "Engine":
186
+ """
187
+ Add multiple reference tables at once using keyword arguments.
188
+
189
+ Args:
190
+ **tables: Keyword arguments where keys are table names and values are configs
191
+
192
+ Returns:
193
+ The Engine instance for method chaining
194
+ """
195
+ self._reference_tables.update(tables)
196
+ return self
197
+
198
+ def with_tags(self, **tags: str) -> "Engine":
199
+ """Add tags to the engine configuration."""
200
+ if self._tags is None:
201
+ self._tags = {}
202
+ self._tags.update(tags)
203
+ return self
204
+
205
+ def with_index_config(self, config: IndexConfig) -> "Engine":
206
+ """Configure index settings."""
207
+ self._index_config = config
208
+ return self
209
+
210
+ def with_training_config(
211
+ self,
212
+ data_split_strategy: Optional[str] = None,
213
+ data_split_params: Optional[Dict[str, Any]] = None,
214
+ **kwargs
215
+ ) -> "Engine":
216
+ """Configure model training settings."""
217
+ if data_split_strategy:
218
+ self._training_config["data_split"] = {
219
+ "strategy": data_split_strategy,
220
+ **(data_split_params or {})
221
+ }
222
+ self._training_config.update(kwargs)
223
+ return self
224
+
225
+ def with_deployment_config(self, **kwargs) -> "Engine":
226
+ """Configure deployment settings."""
227
+ self._deployment_config.update(kwargs)
228
+ return self
229
+
230
+ def with_query(self, name: str, query: Union[str, Dict[str, Any]]) -> "Engine":
231
+ """Add a named query definition."""
232
+ if isinstance(query, str):
233
+ # Convert SQL string to a RankQueryConfig
234
+ query_def = QueryDefinition(
235
+ query=RankQueryConfig(type="rank", sql=query)
236
+ )
237
+ else:
238
+ query_def = QueryDefinition(**query)
239
+
240
+ self._queries[name] = query_def
241
+ return self
242
+
243
+ def validate(self) -> List[str]:
244
+ """
245
+ Validate the current configuration.
246
+
247
+ Returns:
248
+ List of error messages, empty if configuration is valid
249
+ """
250
+ errors = []
251
+
252
+ if not self._interactions:
253
+ errors.append("Interactions table is required")
254
+
255
+ # Validate reference tables
256
+ for name, config in self._reference_tables.items():
257
+ if not isinstance(config, dict) or not config:
258
+ errors.append(f"Invalid configuration for reference table '{name}'")
259
+
260
+ # Validate queries
261
+ for name, query in self._queries.items():
262
+ if not query or not getattr(query, 'query', None):
263
+ errors.append(f"Invalid query definition for query '{name}'")
264
+
265
+ return errors
266
+
267
+ def is_valid(self) -> bool:
268
+ """
269
+ Check if the current configuration is valid.
270
+
271
+ Returns:
272
+ True if configuration is valid, False otherwise
273
+ """
274
+ return not bool(self.validate())
275
+
276
+ def build(self) -> EngineConfigV2:
277
+ """
278
+ Build the EngineConfigV2 object with all configured settings.
279
+
280
+ Returns:
281
+ EngineConfigV2: The built engine configuration
282
+
283
+ Raises:
284
+ ValueError: If the configuration is invalid
285
+ """
286
+ # Validate before building
287
+ if errors := self.validate():
288
+ raise ValueError(f"Invalid configuration: {', '.join(errors)}")
289
+
290
+ # Build data configuration
291
+ data_config = DataConfig(
292
+ interaction_table=self._create_data_table(self._interactions),
293
+ user_table=self._create_data_table(self._users) if self._users else None,
294
+ item_table=self._create_data_table(self._items) if self._items else None,
295
+ schedule=self._schedule,
296
+ schema=self._schema_override,
297
+ compute=self._compute,
298
+ filters=self._filters if self._filters else None,
299
+ reference_tables=self._reference_tables if self._reference_tables else None
300
+ )
301
+
302
+ # Build engine config
303
+ config = EngineConfigV2(
304
+ name=self._name,
305
+ description=self._description,
306
+ data=data_config,
307
+ version="v2",
308
+ tags=self._tags
309
+ )
310
+
311
+ # Add optional configurations
312
+ if self._index_config:
313
+ config.index = self._index_config
314
+
315
+ if self._training_config:
316
+ config.training = TrainingConfig(**self._training_config)
317
+
318
+ if self._deployment_config:
319
+ config.deployment = DeploymentConfig(**self._deployment_config)
320
+
321
+ if self._queries:
322
+ config.queries = self._queries
323
+
324
+ return config
325
+
326
+ def _create_data_table(self, table: Union[str, Dict[str, Any], Any]) -> Optional[DataConfigInteractionTable]:
327
+ """
328
+ Create a DataConfigInteractionTable from input.
329
+
330
+ Args:
331
+ table: Can be a table name (str), a table config dict, or an existing config object.
332
+
333
+ Returns:
334
+ A properly configured DataConfigInteractionTable instance, or None if input is None.
335
+
336
+ Raises:
337
+ ValueError: If the input cannot be converted to a valid table configuration.
338
+ """
339
+ if table is None:
340
+ return None
341
+
342
+ try:
343
+ if isinstance(table, str):
344
+ # It's a reference to a table by name
345
+ config = ReferenceTableConfig(name=table)
346
+ # Create the DataConfigInteractionTable with the config
347
+ result = DataConfigInteractionTable(actual_instance=config)
348
+ return result
349
+
350
+ if isinstance(table, dict):
351
+ # It's a config dictionary
352
+ if table.get("type") == "query":
353
+ config = QueryTableConfig(**table)
354
+ result = DataConfigInteractionTable(actual_instance=config)
355
+ return result
356
+ else:
357
+ config = ReferenceTableConfig(**table)
358
+ result = DataConfigInteractionTable(actual_instance=config)
359
+ return result
360
+
361
+ # Check if it's already a DataConfigInteractionTable
362
+ if hasattr(table, 'actual_instance') and hasattr(table, 'to_dict'):
363
+ return table
364
+
365
+ raise ValueError(f"Unsupported table configuration type: {type(table).__name__}")
366
+
367
+ except Exception as e:
368
+ raise ValueError(f"Failed to create data table: {str(e)}")
369
+
370
+
371
+ class Table:
372
+ """
373
+ Factory methods for Table configurations.
374
+ """
375
+
376
+ @staticmethod
377
+ def Postgres(
378
+ name: str,
379
+ host: str,
380
+ port: int,
381
+ user: str,
382
+ password: str,
383
+ database: str,
384
+ table: str,
385
+ replication_key: str,
386
+ description: Optional[str] = None,
387
+ schema: Optional[str] = None, # database_schema
388
+ ssl_args: Optional[Dict[str, Any]] = None,
389
+ ) -> PostgresTableConfig:
390
+ """Create a Postgres table configuration."""
391
+ kwargs = {
392
+ "name": name,
393
+ "host": host,
394
+ "port": port,
395
+ "user": user,
396
+ "password": password,
397
+ "database": database,
398
+ "table": table,
399
+ "replication_key": replication_key,
400
+ "description": description,
401
+ "database_schema": schema,
402
+ }
403
+ if ssl_args:
404
+ kwargs.update(ssl_args)
405
+ return PostgresTableConfig(**kwargs)
406
+
407
+ @staticmethod
408
+ def BigQuery(
409
+ name: str,
410
+ project_id: str,
411
+ dataset_id: str,
412
+ table_id: str,
413
+ service_account_key: str,
414
+ replication_key: Optional[str] = None,
415
+ description: Optional[str] = None,
416
+ ) -> BigQueryTableConfig:
417
+ """Create a BigQuery table configuration."""
418
+ return BigQueryTableConfig(
419
+ name=name,
420
+ project=project_id,
421
+ dataset=dataset_id,
422
+ table=table_id,
423
+ service_account_keys=service_account_key,
424
+ replication_key=replication_key,
425
+ description=description,
426
+ )
427
+
428
+ @staticmethod
429
+ def Snowflake(
430
+ name: str,
431
+ account: str,
432
+ user: str,
433
+ password: str,
434
+ database: str,
435
+ schema: str,
436
+ table: str,
437
+ warehouse: str,
438
+ role: str,
439
+ replication_key: Optional[str] = None,
440
+ description: Optional[str] = None,
441
+ ) -> SnowflakeTableConfig:
442
+ """Create a Snowflake table configuration."""
443
+ return SnowflakeTableConfig(
444
+ name=name,
445
+ account=account,
446
+ user=user,
447
+ password=password,
448
+ database=database,
449
+ schema_name=schema,
450
+ table=table,
451
+ warehouse=warehouse,
452
+ role=role,
453
+ replication_key=replication_key,
454
+ description=description,
455
+ )
456
+
457
+ @staticmethod
458
+ def File(
459
+ name: str,
460
+ file_path: str,
461
+ file_type: str = "CSV",
462
+ description: Optional[str] = None,
463
+ ) -> FileTableConfig:
464
+ """Create a File table configuration (for CSV, Parquet, etc)."""
465
+ return FileTableConfig(
466
+ name=name,
467
+ path=file_path,
468
+ mime_type=file_type,
469
+ description=description,
470
+ )
471
+
472
+ @staticmethod
473
+ def MySQL(
474
+ name: str,
475
+ host: str,
476
+ port: int,
477
+ user: str,
478
+ password: str,
479
+ database: str,
480
+ table: str,
481
+ replication_key: str,
482
+ description: Optional[str] = None,
483
+ ssl_args: Optional[Dict[str, Any]] = None,
484
+ ) -> MySQLTableConfig:
485
+ """
486
+ Create a MySQL table configuration.
487
+
488
+ Args:
489
+ name: Name of the table configuration
490
+ host: MySQL server hostname or IP
491
+ port: MySQL server port
492
+ user: MySQL username
493
+ password: MySQL password
494
+ database: Name of the database
495
+ table: Name of the table
496
+ replication_key: Column name to use for change data capture
497
+ description: Optional description of the table
498
+ ssl_args: Optional SSL configuration parameters
499
+
500
+ Returns:
501
+ MySQLTableConfig: Configured MySQL table configuration
502
+ """
503
+ kwargs = {
504
+ "name": name,
505
+ "host": host,
506
+ "port": port,
507
+ "user": user,
508
+ "password": password,
509
+ "database": database,
510
+ "table": table,
511
+ "replication_key": replication_key,
512
+ "description": description,
513
+ }
514
+ if ssl_args:
515
+ kwargs.update(ssl_args)
516
+ return MySQLTableConfig(**kwargs)
517
+
518
+ @staticmethod
519
+ def MSSQL(
520
+ name: str,
521
+ host: str,
522
+ port: int,
523
+ user: str,
524
+ password: str,
525
+ database: str,
526
+ schema: str,
527
+ table: str,
528
+ replication_key: str,
529
+ description: Optional[str] = None,
530
+ ssl_args: Optional[Dict[str, Any]] = None,
531
+ ) -> MSSQLTableConfig:
532
+ """
533
+ Create a Microsoft SQL Server table configuration.
534
+
535
+ Args:
536
+ name: Name of the table configuration
537
+ host: SQL Server hostname or IP
538
+ port: SQL Server port
539
+ user: SQL Server username
540
+ password: SQL Server password
541
+ database: Name of the database
542
+ schema: Database schema name (e.g., 'dbo')
543
+ table: Name of the table
544
+ replication_key: Column name to use for change data capture
545
+ description: Optional description of the table
546
+ ssl_args: Optional SSL configuration parameters
547
+
548
+ Returns:
549
+ MSSQLTableConfig: Configured SQL Server table configuration
550
+ """
551
+ kwargs = {
552
+ "name": name,
553
+ "host": host,
554
+ "port": port,
555
+ "user": user,
556
+ "password": password,
557
+ "database": database,
558
+ "schema_name": schema,
559
+ "table": table,
560
+ "replication_key": replication_key,
561
+ "description": description,
562
+ }
563
+ if ssl_args:
564
+ kwargs.update(ssl_args)
565
+ return MSSQLTableConfig(**kwargs)
566
+
567
+ @staticmethod
568
+ def MongoDB(
569
+ name: str,
570
+ connection_uri: str,
571
+ database: str,
572
+ collection: str,
573
+ replication_key: str,
574
+ description: Optional[str] = None,
575
+ **kwargs: Any,
576
+ ) -> MongoDBTableConfig:
577
+ """
578
+ Create a MongoDB table configuration.
579
+
580
+ Args:
581
+ name: Name of the table configuration
582
+ connection_uri: MongoDB connection URI
583
+ database: Name of the database
584
+ collection: Name of the collection
585
+ replication_key: Field name to use for change data capture
586
+ description: Optional description of the table
587
+ **kwargs: Additional MongoDB connection parameters
588
+
589
+ Returns:
590
+ MongoDBTableConfig: Configured MongoDB table configuration
591
+ """
592
+ return MongoDBTableConfig(
593
+ name=name,
594
+ connection_uri=connection_uri,
595
+ database=database,
596
+ collection=collection,
597
+ replication_key=replication_key,
598
+ description=description,
599
+ **kwargs
600
+ )
601
+
602
+ @staticmethod
603
+ def Redshift(
604
+ name: str,
605
+ host: str,
606
+ port: int,
607
+ user: str,
608
+ password: str,
609
+ database: str,
610
+ schema: str,
611
+ table: str,
612
+ replication_key: str,
613
+ description: Optional[str] = None,
614
+ ssl_args: Optional[Dict[str, Any]] = None,
615
+ ) -> RedshiftTableConfig:
616
+ """
617
+ Create an Amazon Redshift table configuration.
618
+
619
+ Args:
620
+ name: Name of the table configuration
621
+ host: Redshift cluster endpoint
622
+ port: Redshift port (typically 5439)
623
+ user: Redshift username
624
+ password: Redshift password
625
+ database: Name of the database
626
+ schema: Database schema name
627
+ table: Name of the table
628
+ replication_key: Column name to use for change data capture
629
+ description: Optional description of the table
630
+ ssl_args: Optional SSL configuration parameters
631
+
632
+ Returns:
633
+ RedshiftTableConfig: Configured Redshift table configuration
634
+ """
635
+ kwargs = {
636
+ "name": name,
637
+ "host": host,
638
+ "port": port,
639
+ "user": user,
640
+ "password": password,
641
+ "database": database,
642
+ "schema_name": schema,
643
+ "table": table,
644
+ "replication_key": replication_key,
645
+ "description": description,
646
+ }
647
+ if ssl_args:
648
+ kwargs.update(ssl_args)
649
+ return RedshiftTableConfig(**kwargs)
650
+
651
+ class View:
652
+ """
653
+ Factory methods for View configurations.
654
+ """
655
+
656
+ @staticmethod
657
+ def SQL(
658
+ name: str,
659
+ query: str,
660
+ description: Optional[str] = None,
661
+ materialized: bool = False,
662
+ ) -> SQLViewConfig:
663
+ """
664
+ Create a SQL view configuration.
665
+ """
666
+ transform_type = "MATERIALIZED_VIEW" if materialized else "VIEW"
667
+
668
+ return SQLViewConfig(
669
+ name=name,
670
+ sql_query=query,
671
+ sql_transform_type=SQLTransformType(transform_type) if isinstance(transform_type, str) else transform_type,
672
+ description=description,
673
+ )
674
+
675
+ @staticmethod
676
+ def AI(
677
+ name: str,
678
+ source_dataset: str,
679
+ source_columns: List[str],
680
+ output_columns: List[str],
681
+ prompt: str,
682
+ description: Optional[str] = None,
683
+ ) -> AIEnrichmentViewConfig:
684
+ """
685
+ Create an AI enrichment view configuration.
686
+ """
687
+ return AIEnrichmentViewConfig(
688
+ name=name,
689
+ source_dataset=source_dataset,
690
+ source_columns=source_columns,
691
+ source_columns_in_output=source_columns,
692
+ enriched_output_columns=output_columns,
693
+ prompt=prompt,
694
+ description=description,
695
+ )