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