agenta 0.48.8__tar.gz → 0.48.10__tar.gz

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.

Potentially problematic release.


This version of agenta might be problematic. Click here for more details.

Files changed (393) hide show
  1. {agenta-0.48.8 → agenta-0.48.10}/PKG-INFO +1 -1
  2. {agenta-0.48.8 → agenta-0.48.10}/agenta/__init__.py +3 -2
  3. agenta-0.48.10/agenta/client/Readme.md +282 -0
  4. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/__init__.py +205 -29
  5. agenta-0.48.10/agenta/client/backend/__init__.py +461 -0
  6. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/access_control/__init__.py +2 -0
  7. agenta-0.48.10/agenta/client/backend/access_control/client.py +147 -0
  8. agenta-0.48.8/agenta/client/backend/access_control/client.py → agenta-0.48.10/agenta/client/backend/access_control/raw_client.py +62 -49
  9. {agenta-0.48.8/agenta/client/backend/apps → agenta-0.48.10/agenta/client/backend/admin}/__init__.py +2 -0
  10. agenta-0.48.10/agenta/client/backend/admin/client.py +783 -0
  11. agenta-0.48.10/agenta/client/backend/admin/raw_client.py +1017 -0
  12. {agenta-0.48.8/agenta/client/backend/admin → agenta-0.48.10/agenta/client/backend/api_keys}/__init__.py +2 -0
  13. agenta-0.48.10/agenta/client/backend/api_keys/client.py +298 -0
  14. agenta-0.48.8/agenta/client/backend/api_keys/client.py → agenta-0.48.10/agenta/client/backend/api_keys/raw_client.py +95 -262
  15. agenta-0.48.10/agenta/client/backend/apps/__init__.py +3 -0
  16. agenta-0.48.10/agenta/client/backend/apps/client.py +1088 -0
  17. agenta-0.48.8/agenta/client/backend/apps/client.py → agenta-0.48.10/agenta/client/backend/apps/raw_client.py +380 -715
  18. agenta-0.48.10/agenta/client/backend/bases/__init__.py +3 -0
  19. agenta-0.48.10/agenta/client/backend/bases/client.py +150 -0
  20. agenta-0.48.8/agenta/client/backend/bases/client.py → agenta-0.48.10/agenta/client/backend/bases/raw_client.py +43 -54
  21. agenta-0.48.10/agenta/client/backend/billing/__init__.py +3 -0
  22. agenta-0.48.10/agenta/client/backend/billing/client.py +564 -0
  23. agenta-0.48.10/agenta/client/backend/billing/raw_client.py +805 -0
  24. agenta-0.48.10/agenta/client/backend/client.py +1268 -0
  25. agenta-0.48.10/agenta/client/backend/configs/__init__.py +3 -0
  26. agenta-0.48.10/agenta/client/backend/configs/client.py +292 -0
  27. agenta-0.48.8/agenta/client/backend/configs/client.py → agenta-0.48.10/agenta/client/backend/configs/raw_client.py +117 -319
  28. agenta-0.48.10/agenta/client/backend/containers/__init__.py +3 -0
  29. agenta-0.48.10/agenta/client/backend/containers/client.py +107 -0
  30. agenta-0.48.10/agenta/client/backend/containers/raw_client.py +112 -0
  31. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/__init__.py +5 -0
  32. agenta-0.48.10/agenta/client/backend/core/api_error.py +23 -0
  33. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/client_wrapper.py +4 -4
  34. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/file.py +1 -3
  35. agenta-0.48.10/agenta/client/backend/core/force_multipart.py +16 -0
  36. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/http_client.py +78 -34
  37. agenta-0.48.10/agenta/client/backend/core/http_response.py +55 -0
  38. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/jsonable_encoder.py +0 -1
  39. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/pydantic_utilities.py +88 -113
  40. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/serialization.py +9 -3
  41. agenta-0.48.10/agenta/client/backend/environment.py +7 -0
  42. agenta-0.48.10/agenta/client/backend/environments/__init__.py +3 -0
  43. agenta-0.48.10/agenta/client/backend/environments/client.py +158 -0
  44. agenta-0.48.8/agenta/client/backend/environments/client.py → agenta-0.48.10/agenta/client/backend/environments/raw_client.py +54 -55
  45. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/errors/__init__.py +2 -0
  46. agenta-0.48.10/agenta/client/backend/errors/unprocessable_entity_error.py +15 -0
  47. agenta-0.48.10/agenta/client/backend/evals/__init__.py +3 -0
  48. agenta-0.48.10/agenta/client/backend/evals/client.py +1042 -0
  49. agenta-0.48.10/agenta/client/backend/evals/raw_client.py +1549 -0
  50. agenta-0.48.10/agenta/client/backend/evaluations/__init__.py +3 -0
  51. agenta-0.48.10/agenta/client/backend/evaluations/client.py +979 -0
  52. agenta-0.48.8/agenta/client/backend/evaluations/client.py → agenta-0.48.10/agenta/client/backend/evaluations/raw_client.py +344 -463
  53. agenta-0.48.10/agenta/client/backend/evaluators/__init__.py +3 -0
  54. agenta-0.48.10/agenta/client/backend/evaluators/client.py +866 -0
  55. agenta-0.48.8/agenta/client/backend/evaluators/client.py → agenta-0.48.10/agenta/client/backend/evaluators/raw_client.py +282 -383
  56. agenta-0.48.10/agenta/client/backend/human_evaluations/__init__.py +3 -0
  57. agenta-0.48.10/agenta/client/backend/human_evaluations/client.py +1130 -0
  58. agenta-0.48.8/agenta/client/backend/human_evaluations/client.py → agenta-0.48.10/agenta/client/backend/human_evaluations/raw_client.py +377 -490
  59. agenta-0.48.10/agenta/client/backend/observability/__init__.py +17 -0
  60. agenta-0.48.10/agenta/client/backend/observability/client.py +705 -0
  61. agenta-0.48.8/agenta/client/backend/observability/client.py → agenta-0.48.10/agenta/client/backend/observability/raw_client.py +331 -249
  62. agenta-0.48.10/agenta/client/backend/observability/types/__init__.py +15 -0
  63. agenta-0.48.8/agenta/client/backend/observability/types/format.py → agenta-0.48.10/agenta/client/backend/observability/types/fetch_trace_by_id_request_trace_id.py +1 -1
  64. agenta-0.48.10/agenta/client/backend/observability/types/fetch_trace_by_id_response.py +15 -0
  65. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/observability/types/query_analytics_response.py +2 -1
  66. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/observability/types/query_traces_response.py +7 -3
  67. agenta-0.48.10/agenta/client/backend/organization/__init__.py +3 -0
  68. agenta-0.48.10/agenta/client/backend/organization/client.py +583 -0
  69. agenta-0.48.8/agenta/client/backend/organization/client.py → agenta-0.48.10/agenta/client/backend/organization/raw_client.py +248 -313
  70. agenta-0.48.10/agenta/client/backend/raw_client.py +1432 -0
  71. agenta-0.48.10/agenta/client/backend/scopes/__init__.py +3 -0
  72. agenta-0.48.10/agenta/client/backend/scopes/client.py +100 -0
  73. agenta-0.48.8/agenta/client/backend/scopes/client.py → agenta-0.48.10/agenta/client/backend/scopes/raw_client.py +36 -45
  74. agenta-0.48.10/agenta/client/backend/testsets/__init__.py +15 -0
  75. agenta-0.48.10/agenta/client/backend/testsets/client.py +1565 -0
  76. agenta-0.48.10/agenta/client/backend/testsets/raw_client.py +2348 -0
  77. agenta-0.48.10/agenta/client/backend/testsets/types/__init__.py +17 -0
  78. agenta-0.48.10/agenta/client/backend/testsets/types/create_testset_from_file_request_file_type.py +7 -0
  79. agenta-0.48.10/agenta/client/backend/testsets/types/fetch_testset_to_file_request_file_type.py +7 -0
  80. agenta-0.48.10/agenta/client/backend/testsets/types/update_testset_from_file_request_file_type.py +7 -0
  81. agenta-0.48.10/agenta/client/backend/tracing/__init__.py +7 -0
  82. agenta-0.48.10/agenta/client/backend/tracing/client.py +782 -0
  83. agenta-0.48.10/agenta/client/backend/tracing/raw_client.py +1223 -0
  84. agenta-0.48.10/agenta/client/backend/tracing/types/__init__.py +8 -0
  85. agenta-0.48.10/agenta/client/backend/tracing/types/fetch_trace_request_trace_id.py +5 -0
  86. agenta-0.48.10/agenta/client/backend/tracing/types/remove_trace_request_trace_id.py +5 -0
  87. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/__init__.py +153 -26
  88. agenta-0.48.10/agenta/client/backend/types/account_request.py +24 -0
  89. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/account_response.py +5 -7
  90. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/agenta_node_dto.py +13 -13
  91. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/agenta_node_dto_nodes_value.py +1 -0
  92. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/agenta_nodes_response.py +14 -8
  93. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/agenta_root_dto.py +16 -8
  94. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/agenta_roots_response.py +16 -8
  95. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/agenta_tree_dto.py +16 -8
  96. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/agenta_trees_response.py +16 -8
  97. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/aggregated_result.py +5 -7
  98. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/aggregated_result_evaluator_config.py +1 -0
  99. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/analytics_response.py +4 -6
  100. agenta-0.48.10/agenta/client/backend/types/annotation.py +50 -0
  101. agenta-0.48.10/agenta/client/backend/types/annotation_create.py +39 -0
  102. agenta-0.48.10/agenta/client/backend/types/annotation_edit.py +31 -0
  103. agenta-0.48.10/agenta/client/backend/types/annotation_kind.py +5 -0
  104. agenta-0.48.8/agenta/client/backend/types/uri.py → agenta-0.48.10/agenta/client/backend/types/annotation_link.py +6 -7
  105. agenta-0.48.10/agenta/client/backend/types/annotation_link_response.py +20 -0
  106. agenta-0.48.10/agenta/client/backend/types/annotation_query.py +40 -0
  107. agenta-0.48.10/agenta/client/backend/types/annotation_query_request.py +20 -0
  108. agenta-0.48.8/agenta/client/backend/types/reference.py → agenta-0.48.10/agenta/client/backend/types/annotation_reference.py +5 -6
  109. agenta-0.48.10/agenta/client/backend/types/annotation_references.py +22 -0
  110. agenta-0.48.10/agenta/client/backend/types/annotation_response.py +20 -0
  111. agenta-0.48.10/agenta/client/backend/types/annotation_source.py +5 -0
  112. agenta-0.48.10/agenta/client/backend/types/annotations_response.py +24 -0
  113. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/app.py +3 -5
  114. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/app_variant_response.py +3 -6
  115. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/app_variant_revision.py +5 -6
  116. agenta-0.48.10/agenta/client/backend/types/artifact.py +44 -0
  117. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/base_output.py +3 -5
  118. agenta-0.48.10/agenta/client/backend/types/body_fetch_workflow_revision.py +21 -0
  119. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/body_import_testset.py +3 -5
  120. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/bucket_dto.py +4 -6
  121. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/collect_status_response.py +3 -5
  122. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/config_db.py +3 -5
  123. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/config_dto.py +5 -7
  124. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/config_response_model.py +5 -7
  125. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/correct_answer.py +3 -5
  126. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/create_app_output.py +3 -5
  127. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/custom_model_settings_dto.py +3 -5
  128. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/custom_provider_dto.py +6 -9
  129. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/custom_provider_settings_dto.py +3 -5
  130. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/data.py +2 -1
  131. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/delete_evaluation.py +3 -5
  132. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/environment_output.py +3 -5
  133. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/environment_output_extended.py +4 -6
  134. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/environment_revision.py +5 -5
  135. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/error.py +3 -5
  136. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluation.py +6 -8
  137. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluation_scenario.py +5 -7
  138. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluation_scenario_input.py +3 -5
  139. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluation_scenario_output.py +4 -6
  140. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluation_scenario_result.py +4 -6
  141. agenta-0.48.10/agenta/client/backend/types/evaluator.py +47 -0
  142. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluator_config.py +3 -5
  143. agenta-0.48.10/agenta/client/backend/types/evaluator_flags.py +21 -0
  144. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluator_mapping_output_interface.py +3 -5
  145. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluator_output_interface.py +3 -5
  146. agenta-0.48.10/agenta/client/backend/types/evaluator_query.py +32 -0
  147. agenta-0.48.10/agenta/client/backend/types/evaluator_query_request.py +30 -0
  148. agenta-0.48.10/agenta/client/backend/types/evaluator_request.py +20 -0
  149. agenta-0.48.10/agenta/client/backend/types/evaluator_response.py +21 -0
  150. agenta-0.48.10/agenta/client/backend/types/evaluators_response.py +21 -0
  151. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/exception_dto.py +3 -5
  152. agenta-0.48.8/agenta/client/backend/types/o_tel_spans_response.py → agenta-0.48.10/agenta/client/backend/types/extended_o_tel_tracing_response.py +5 -7
  153. agenta-0.48.10/agenta/client/backend/types/focus.py +5 -0
  154. agenta-0.48.10/agenta/client/backend/types/format.py +5 -0
  155. agenta-0.48.10/agenta/client/backend/types/full_json_input.py +34 -0
  156. agenta-0.48.10/agenta/client/backend/types/full_json_output.py +29 -0
  157. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/get_config_response.py +3 -5
  158. agenta-0.48.8/agenta/client/backend/types/header_dto.py → agenta-0.48.10/agenta/client/backend/types/header.py +4 -6
  159. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/http_validation_error.py +4 -6
  160. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/human_evaluation.py +3 -5
  161. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/human_evaluation_scenario.py +4 -6
  162. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/human_evaluation_scenario_input.py +3 -5
  163. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/human_evaluation_scenario_output.py +3 -5
  164. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/invite_request.py +4 -6
  165. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/legacy_analytics_response.py +4 -6
  166. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/legacy_data_point.py +3 -5
  167. agenta-0.48.8/agenta/client/backend/types/evaluator.py → agenta-0.48.10/agenta/client/backend/types/legacy_evaluator.py +4 -6
  168. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/legacy_scope_request.py +4 -6
  169. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/legacy_scopes_response.py +3 -5
  170. agenta-0.48.10/agenta/client/backend/types/legacy_subscription_request.py +19 -0
  171. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/legacy_user_request.py +5 -7
  172. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/legacy_user_response.py +3 -5
  173. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/lifecycle_dto.py +3 -5
  174. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/link_dto.py +4 -6
  175. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/list_api_keys_response.py +3 -5
  176. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/llm_run_rate_limit.py +3 -5
  177. agenta-0.48.10/agenta/client/backend/types/meta_request.py +30 -0
  178. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/metrics_dto.py +3 -5
  179. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/new_testset.py +3 -5
  180. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/node_dto.py +4 -6
  181. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/o_tel_context_dto.py +3 -5
  182. agenta-0.48.10/agenta/client/backend/types/o_tel_event.py +35 -0
  183. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/o_tel_event_dto.py +3 -5
  184. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/o_tel_extra_dto.py +4 -6
  185. agenta-0.48.10/agenta/client/backend/types/o_tel_flat_span.py +56 -0
  186. agenta-0.48.10/agenta/client/backend/types/o_tel_flat_span_input_end_time.py +6 -0
  187. agenta-0.48.10/agenta/client/backend/types/o_tel_flat_span_input_start_time.py +6 -0
  188. agenta-0.48.10/agenta/client/backend/types/o_tel_flat_span_output_end_time.py +6 -0
  189. agenta-0.48.10/agenta/client/backend/types/o_tel_flat_span_output_start_time.py +6 -0
  190. agenta-0.48.10/agenta/client/backend/types/o_tel_link.py +34 -0
  191. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/o_tel_link_dto.py +4 -6
  192. agenta-0.48.10/agenta/client/backend/types/o_tel_links_response.py +22 -0
  193. agenta-0.48.10/agenta/client/backend/types/o_tel_span.py +58 -0
  194. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/o_tel_span_dto.py +8 -10
  195. agenta-0.48.10/agenta/client/backend/types/o_tel_span_input_end_time.py +6 -0
  196. agenta-0.48.10/agenta/client/backend/types/o_tel_span_input_spans_value.py +7 -0
  197. agenta-0.48.10/agenta/client/backend/types/o_tel_span_input_start_time.py +6 -0
  198. agenta-0.48.10/agenta/client/backend/types/o_tel_span_output_end_time.py +6 -0
  199. agenta-0.48.10/agenta/client/backend/types/o_tel_span_output_spans_value.py +30 -0
  200. agenta-0.48.10/agenta/client/backend/types/o_tel_span_output_start_time.py +6 -0
  201. agenta-0.48.10/agenta/client/backend/types/o_tel_spans_tree.py +22 -0
  202. agenta-0.48.10/agenta/client/backend/types/o_tel_spans_tree_input_spans_value.py +7 -0
  203. agenta-0.48.10/agenta/client/backend/types/o_tel_spans_tree_output_spans_value.py +5 -0
  204. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/o_tel_status_code.py +1 -1
  205. agenta-0.48.10/agenta/client/backend/types/o_tel_tracing_data_response.py +22 -0
  206. agenta-0.48.10/agenta/client/backend/types/o_tel_tracing_request.py +22 -0
  207. agenta-0.48.10/agenta/client/backend/types/o_tel_tracing_response.py +27 -0
  208. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/organization.py +3 -5
  209. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/organization_details.py +3 -5
  210. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/organization_membership_request.py +5 -7
  211. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/organization_output.py +3 -5
  212. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/organization_request.py +3 -5
  213. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/parent_dto.py +3 -5
  214. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/permission.py +11 -0
  215. agenta-0.48.10/agenta/client/backend/types/plan.py +14 -0
  216. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/project_membership_request.py +5 -7
  217. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/project_request.py +4 -6
  218. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/project_scope.py +5 -7
  219. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/projects_response.py +3 -5
  220. agenta-0.48.10/agenta/client/backend/types/recursive_types.py +23 -0
  221. agenta-0.48.10/agenta/client/backend/types/reference.py +35 -0
  222. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/reference_dto.py +4 -5
  223. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/reference_request_model.py +4 -5
  224. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/result.py +4 -6
  225. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/root_dto.py +3 -5
  226. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/scopes_response_model.py +4 -6
  227. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/secret_dto.py +5 -7
  228. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/secret_response_dto.py +11 -11
  229. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/simple_evaluation_output.py +4 -6
  230. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/span_dto.py +18 -14
  231. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/span_dto_nodes_value.py +1 -1
  232. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/standard_provider_dto.py +5 -7
  233. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/standard_provider_settings_dto.py +3 -5
  234. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/status_dto.py +4 -6
  235. agenta-0.48.10/agenta/client/backend/types/tags_request.py +30 -0
  236. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/test_set_output_response.py +5 -7
  237. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/test_set_simple_response.py +3 -5
  238. agenta-0.48.10/agenta/client/backend/types/testcase_response.py +33 -0
  239. agenta-0.48.10/agenta/client/backend/types/testset.py +46 -0
  240. agenta-0.48.10/agenta/client/backend/types/testset_request.py +20 -0
  241. agenta-0.48.10/agenta/client/backend/types/testset_response.py +21 -0
  242. agenta-0.48.10/agenta/client/backend/types/testsets_response.py +21 -0
  243. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/time_dto.py +3 -5
  244. agenta-0.48.10/agenta/client/backend/types/timestamp.py +6 -0
  245. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/tree_dto.py +4 -6
  246. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/update_app_output.py +3 -5
  247. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/user_request.py +3 -5
  248. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/validation_error.py +4 -6
  249. agenta-0.48.10/agenta/client/backend/types/workflow_artifact.py +45 -0
  250. agenta-0.48.10/agenta/client/backend/types/workflow_data.py +20 -0
  251. agenta-0.48.10/agenta/client/backend/types/workflow_flags.py +21 -0
  252. agenta-0.48.10/agenta/client/backend/types/workflow_request.py +20 -0
  253. agenta-0.48.10/agenta/client/backend/types/workflow_response.py +21 -0
  254. agenta-0.48.10/agenta/client/backend/types/workflow_revision.py +57 -0
  255. agenta-0.48.10/agenta/client/backend/types/workflow_revision_request.py +20 -0
  256. agenta-0.48.10/agenta/client/backend/types/workflow_revision_response.py +21 -0
  257. agenta-0.48.10/agenta/client/backend/types/workflow_revisions_response.py +21 -0
  258. agenta-0.48.10/agenta/client/backend/types/workflow_variant.py +48 -0
  259. agenta-0.48.10/agenta/client/backend/types/workflow_variant_request.py +20 -0
  260. agenta-0.48.10/agenta/client/backend/types/workflow_variant_response.py +21 -0
  261. agenta-0.48.10/agenta/client/backend/types/workflow_variants_response.py +21 -0
  262. agenta-0.48.10/agenta/client/backend/types/workflows_response.py +21 -0
  263. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/workspace.py +3 -5
  264. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/workspace_member_response.py +4 -6
  265. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/workspace_membership_request.py +5 -7
  266. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/workspace_permission.py +5 -7
  267. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/workspace_request.py +4 -6
  268. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/workspace_response.py +4 -6
  269. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/variants/__init__.py +2 -0
  270. agenta-0.48.10/agenta/client/backend/variants/client.py +1629 -0
  271. agenta-0.48.8/agenta/client/backend/variants/client.py → agenta-0.48.10/agenta/client/backend/variants/raw_client.py +720 -1212
  272. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/variants/types/__init__.py +2 -0
  273. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/variants/types/add_variant_from_base_and_config_response.py +1 -0
  274. agenta-0.48.10/agenta/client/backend/vault/__init__.py +3 -0
  275. agenta-0.48.10/agenta/client/backend/vault/client.py +451 -0
  276. agenta-0.48.8/agenta/client/backend/vault/client.py → agenta-0.48.10/agenta/client/backend/vault/raw_client.py +185 -274
  277. agenta-0.48.10/agenta/client/backend/workflows/__init__.py +3 -0
  278. agenta-0.48.10/agenta/client/backend/workflows/client.py +2398 -0
  279. agenta-0.48.10/agenta/client/backend/workflows/raw_client.py +3639 -0
  280. agenta-0.48.10/agenta/client/backend/workspace/__init__.py +3 -0
  281. agenta-0.48.10/agenta/client/backend/workspace/client.py +304 -0
  282. agenta-0.48.8/agenta/client/backend/workspace/client.py → agenta-0.48.10/agenta/client/backend/workspace/raw_client.py +102 -131
  283. agenta-0.48.10/agenta/client/types.py +4 -0
  284. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/decorators/tracing.py +2 -4
  285. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/processors.py +26 -39
  286. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/types.py +28 -1
  287. {agenta-0.48.8 → agenta-0.48.10}/pyproject.toml +1 -1
  288. agenta-0.48.8/agenta/client/Readme.md +0 -104
  289. agenta-0.48.8/agenta/client/backend/admin/client.py +0 -578
  290. agenta-0.48.8/agenta/client/backend/api_keys/__init__.py +0 -1
  291. agenta-0.48.8/agenta/client/backend/bases/__init__.py +0 -1
  292. agenta-0.48.8/agenta/client/backend/configs/__init__.py +0 -1
  293. agenta-0.48.8/agenta/client/backend/containers/__init__.py +0 -5
  294. agenta-0.48.8/agenta/client/backend/containers/client.py +0 -630
  295. agenta-0.48.8/agenta/client/backend/containers/types/__init__.py +0 -5
  296. agenta-0.48.8/agenta/client/backend/containers/types/container_templates_response.py +0 -6
  297. agenta-0.48.8/agenta/client/backend/core/api_error.py +0 -17
  298. agenta-0.48.8/agenta/client/backend/environments/__init__.py +0 -1
  299. agenta-0.48.8/agenta/client/backend/errors/unprocessable_entity_error.py +0 -9
  300. agenta-0.48.8/agenta/client/backend/evaluations/__init__.py +0 -1
  301. agenta-0.48.8/agenta/client/backend/evaluators/__init__.py +0 -1
  302. agenta-0.48.8/agenta/client/backend/human_evaluations/__init__.py +0 -1
  303. agenta-0.48.8/agenta/client/backend/observability/__init__.py +0 -5
  304. agenta-0.48.8/agenta/client/backend/observability/types/__init__.py +0 -7
  305. agenta-0.48.8/agenta/client/backend/organization/__init__.py +0 -1
  306. agenta-0.48.8/agenta/client/backend/scopes/__init__.py +0 -1
  307. agenta-0.48.8/agenta/client/backend/testsets/__init__.py +0 -1
  308. agenta-0.48.8/agenta/client/backend/testsets/client.py +0 -1120
  309. agenta-0.48.8/agenta/client/backend/types/docker_env_vars.py +0 -21
  310. agenta-0.48.8/agenta/client/backend/types/image.py +0 -25
  311. agenta-0.48.8/agenta/client/backend/types/provider_key_dto.py +0 -21
  312. agenta-0.48.8/agenta/client/backend/types/provider_kind.py +0 -21
  313. agenta-0.48.8/agenta/client/backend/types/template.py +0 -23
  314. agenta-0.48.8/agenta/client/backend/types/template_image_info.py +0 -29
  315. agenta-0.48.8/agenta/client/backend/types/variant_action.py +0 -22
  316. agenta-0.48.8/agenta/client/backend/types/variant_action_enum.py +0 -5
  317. agenta-0.48.8/agenta/client/backend/vault/__init__.py +0 -1
  318. agenta-0.48.8/agenta/client/backend/workspace/__init__.py +0 -1
  319. {agenta-0.48.8 → agenta-0.48.10}/README.md +0 -0
  320. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/datetime_utils.py +0 -0
  321. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/query_encoder.py +0 -0
  322. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/remove_none_from_dict.py +0 -0
  323. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/core/request_options.py +0 -0
  324. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/custom_provider_kind.py +5 -5
  325. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluation_status_enum.py +0 -0
  326. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/evaluation_type.py +0 -0
  327. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/node_type.py +0 -0
  328. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/o_tel_span_kind.py +0 -0
  329. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/role.py +0 -0
  330. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/score.py +0 -0
  331. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/secret_kind.py +0 -0
  332. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/standard_provider_kind.py +0 -0
  333. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/status_code.py +0 -0
  334. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/tree_type.py +0 -0
  335. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/validation_error_loc_item.py +0 -0
  336. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/workspace_role.py +0 -0
  337. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/backend/types/workspace_role_response.py +0 -0
  338. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/client.py +0 -0
  339. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/types/provider_key_dto.py~HEAD +0 -0
  340. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/types/provider_key_dto.py~feat_model-registry +0 -0
  341. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/types/provider_kind.py~HEAD +0 -0
  342. {agenta-0.48.8 → agenta-0.48.10}/agenta/client/types/provider_kind.py~feat_model-registry +0 -0
  343. {agenta-0.48.8 → agenta-0.48.10}/agenta/config.py +0 -0
  344. {agenta-0.48.8 → agenta-0.48.10}/agenta/config.toml +0 -0
  345. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/__init__.py +0 -0
  346. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/agenta_init.py +0 -0
  347. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/assets.py +0 -0
  348. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/context/__init__.py +0 -0
  349. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/context/exporting.py +0 -0
  350. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/context/routing.py +0 -0
  351. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/context/tracing.py +0 -0
  352. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/decorators/__init__.py +0 -0
  353. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/decorators/routing.py +0 -0
  354. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/litellm/__init__.py +0 -0
  355. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/litellm/litellm.py +0 -0
  356. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/litellm/mockllm.py +0 -0
  357. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/litellm/mocks/__init__.py +0 -0
  358. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/managers/__init__.py +0 -0
  359. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/managers/apps.py +0 -0
  360. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/managers/config.py +0 -0
  361. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/managers/deployment.py +0 -0
  362. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/managers/secrets.py +0 -0
  363. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/managers/shared.py +0 -0
  364. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/managers/variant.py +0 -0
  365. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/managers/vault.py +0 -0
  366. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/middleware/__init__.py +0 -0
  367. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/middleware/auth.py +0 -0
  368. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/middleware/config.py +0 -0
  369. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/middleware/cors.py +0 -0
  370. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/middleware/inline.py +0 -0
  371. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/middleware/mock.py +0 -0
  372. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/middleware/otel.py +0 -0
  373. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/middleware/vault.py +0 -0
  374. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/router.py +0 -0
  375. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/__init__.py +0 -0
  376. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/attributes.py +0 -0
  377. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/conventions.py +0 -0
  378. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/exporters.py +0 -0
  379. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/inline.py +0 -0
  380. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/propagation.py +0 -0
  381. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/spans.py +0 -0
  382. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/tracing/tracing.py +0 -0
  383. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/__init__.py +0 -0
  384. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/cache.py +0 -0
  385. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/constants.py +0 -0
  386. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/costs.py +0 -0
  387. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/exceptions.py +0 -0
  388. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/globals.py +0 -0
  389. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/helpers.py +0 -0
  390. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/logging.py +0 -0
  391. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/preinit.py +0 -0
  392. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/singleton.py +0 -0
  393. {agenta-0.48.8 → agenta-0.48.10}/agenta/sdk/utils/timing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: agenta
3
- Version: 0.48.8
3
+ Version: 0.48.10
4
4
  Summary: The SDK for agenta is an open-source LLMOps platform.
5
5
  Keywords: LLMOps,LLM,evaluation,prompt engineering
6
6
  Author: Mahmoud Mabrouk
@@ -2,6 +2,7 @@ from typing import Any, Callable, Optional
2
2
 
3
3
  from .sdk.utils.preinit import PreInitObject
4
4
 
5
+ from agenta.client import AgentaApi, AsyncAgentaApi
5
6
  import agenta.client.backend.types as client_types # pylint: disable=wrong-import-order
6
7
 
7
8
  from .sdk.types import (
@@ -42,8 +43,8 @@ DEFAULT_AGENTA_SINGLETON_INSTANCE = AgentaSingleton()
42
43
 
43
44
  types = client_types
44
45
 
45
- api = None
46
- async_api = None
46
+ api = AgentaApi
47
+ async_api = AsyncAgentaApi
47
48
 
48
49
  tracing = DEFAULT_AGENTA_SINGLETON_INSTANCE.tracing # type: ignore
49
50
  tracer = get_tracer(tracing)
@@ -0,0 +1,282 @@
1
+ # Common Fern Issues with Pydantic Models
2
+
3
+ When using Fern to generate SDKs from FastAPI applications with Pydantic models, you may encounter several issues related to model naming conflicts, schema generation, and recursive type definitions. This document outlines the most common problems and their solutions.
4
+
5
+ ## Issue 1: Model Name Conflicts
6
+
7
+ ### Problem Description
8
+
9
+ When you have multiple Pydantic models with the same name across different modules/folders and are used by different endpoints, Fern merges them into a single schema, causing field conflicts and unexpected behaviour.
10
+
11
+ **Example:**
12
+ ```python
13
+ # users/models.py
14
+ class User(BaseModel):
15
+ id: int
16
+ username: str
17
+ email: str
18
+
19
+ # admin_users/models.py
20
+ class User(BaseModel):
21
+ id: int
22
+ username: str
23
+ permissions: List[str]
24
+ is_admin: bool
25
+ ```
26
+
27
+ Fern will merge these into one `User` schema, and when you run the `fern generate` command, it results in an error that involves conflicting field definitions.
28
+
29
+ ### Solutions
30
+
31
+ #### Solution 1: Use Unique Model Names
32
+
33
+ Rename your models to be more specific and avoid conflicts:
34
+
35
+ ```python
36
+ # users/models.py
37
+ class RegularUser(BaseModel):
38
+ id: int
39
+ username: str
40
+ email: str
41
+
42
+ # admin_users/models.py
43
+ class AdminUser(BaseModel):
44
+ id: int
45
+ username: str
46
+ permissions: List[str]
47
+ is_admin: bool
48
+ ```
49
+
50
+ #### Solution 2: Use Pydantic's `model_config` with Custom Titles
51
+
52
+ Override the schema title to make models unique:
53
+
54
+ ```python
55
+ # users/models.py
56
+ class User(BaseModel):
57
+ model_config = ConfigDict(title="RegularUser")
58
+
59
+ id: int
60
+ username: str
61
+ email: str
62
+
63
+ # admin_users/models.py
64
+ class User(BaseModel):
65
+ model_config = ConfigDict(title="AdminUser")
66
+
67
+ id: int
68
+ username: str
69
+ permissions: List[str]
70
+ is_admin: bool
71
+ ```
72
+
73
+ #### Solution 3: Use Module-Prefixed Aliases
74
+
75
+ Create type aliases that include module context:
76
+
77
+ ```python
78
+ # users/models.py
79
+ class User(BaseModel):
80
+ id: int
81
+ username: str
82
+ email: str
83
+
84
+ # Create an alias for external use
85
+ UserModel = User
86
+
87
+ # admin_users/models.py
88
+ class User(BaseModel):
89
+ id: int
90
+ username: str
91
+ permissions: List[str]
92
+ is_admin: bool
93
+
94
+ # Create an alias for external use
95
+ AdminUserModel = User
96
+ ```
97
+
98
+ Then use the aliases in your endpoints:
99
+
100
+ ```python
101
+ from users.models import UserModel
102
+ from admin_users.models import AdminUserModel
103
+
104
+ @app.get("/users/{user_id}", response_model=UserModel)
105
+ async def get_user(user_id: int):
106
+ # ...
107
+
108
+ @app.get("/admin/users/{user_id}", response_model=AdminUserModel)
109
+ async def get_admin_user(user_id: int):
110
+ # ...
111
+ ```
112
+
113
+ ## Issue 2: Enum Schema Generation
114
+
115
+ ### Problem Description
116
+
117
+ When multiple Pydantic models reference the same Enum, Fern doesn't create a shared enum schema and instead inlines the enum values in each model, leading to code duplication and inconsistency.
118
+
119
+ **Example:**
120
+ ```python
121
+ class Status(Enum):
122
+ ACTIVE = "active"
123
+ INACTIVE = "inactive"
124
+ PENDING = "pending"
125
+
126
+ class User(BaseModel):
127
+ id: int
128
+ status: Status
129
+
130
+ class Order(BaseModel):
131
+ id: int
132
+ status: Status # Same enum, but Fern will not reuse the schema
133
+ ```
134
+
135
+ ### Solutions
136
+
137
+ #### Solution 1: Explicit Schema Registration
138
+
139
+ Force Pydantic to generate a proper schema reference by using the enum in a standalone model first:
140
+
141
+ ```python
142
+ from enum import Enum
143
+ from typing import Union
144
+ from pydantic import BaseModel
145
+
146
+ class Status(str, Enum):
147
+ ACTIVE = "active"
148
+ INACTIVE = "inactive"
149
+ PENDING = "pending"
150
+
151
+ # Create a dedicated schema model
152
+ class StatusSchema(BaseModel):
153
+ status: Status
154
+
155
+ class User(BaseModel):
156
+ id: int
157
+ status: Status
158
+
159
+ class Order(BaseModel):
160
+ id: int
161
+ status: Status
162
+ ```
163
+
164
+ #### Solution 2: Use Field with Schema Customization
165
+
166
+ Customize the field schema to ensure proper enum handling:
167
+
168
+ ```python
169
+ from pydantic import BaseModel, Field
170
+ from enum import Enum
171
+
172
+ class Status(str, Enum):
173
+ ACTIVE = "active"
174
+ INACTIVE = "inactive"
175
+ PENDING = "pending"
176
+
177
+ class User(BaseModel):
178
+ id: int
179
+ status: Status = Field(
180
+ ...,
181
+ json_schema_extra={
182
+ "$ref": "#/components/schemas/Status"
183
+ }
184
+ )
185
+
186
+ class Order(BaseModel):
187
+ id: int
188
+ status: Status = Field(
189
+ ...,
190
+ json_schema_extra={
191
+ "$ref": "#/components/schemas/Status"
192
+ }
193
+ )
194
+ ```
195
+
196
+ ## Issue 3: Recursive Type Definitions
197
+
198
+ ### Problem Description
199
+
200
+ When using recursive type definitions with Pydantic v2 and Fern-generated SDKs, you may encounter infinite recursion during schema generation. This happens particularly with self-referential or mutually recursive types, such as JSON structures that can contain nested versions of themselves.
201
+
202
+ **Example of problematic recursive type definitions:**
203
+
204
+ ```python
205
+ from typing_extensions import TypeAliasType
206
+ from typing import Union, Dict, List
207
+
208
+ # This approach causes infinite recursion during schema generation
209
+ OTelJson: TypeAliasType = TypeAliasType(
210
+ "OTelJson",
211
+ Union[str, int, float, bool, None, Dict[str, "OTelJson"], List["OTelJson"]],
212
+ )
213
+
214
+ OTelNumericJson: TypeAliasType = TypeAliasType(
215
+ "OTelNumericJson",
216
+ Union[int, float, Dict[str, "OTelNumericJson"], List["OTelNumericJson"]],
217
+ )
218
+ ```
219
+
220
+ Despite `TypeAliasType` being recommended in Pydantic v2 documentation for recursive types, it doesn't work well with Fern-generated models because:
221
+
222
+ 1. Fern's model generation may not properly handle these recursive references
223
+ 2. During schema generation, Pydantic attempts to expand these types infinitely
224
+ 3. Runtime errors occur during initialization or when creating JSON schemas
225
+
226
+ ### Solutions
227
+
228
+ #### Solution: Break Recursion with `Any` Type
229
+
230
+ Replace recursive self-references with `Any` for dictionary values and list items:
231
+
232
+ ```python
233
+ from typing import Any, Union, Dict, List
234
+
235
+ # Safe non-recursive version that prevents schema generation issues
236
+ OTelJson = Union[str, int, float, bool, None, Dict[str, Any], List[Any]]
237
+
238
+ # Using Any to break recursion cycle during schema generation
239
+ OTelNumericJson = Union[int, float, Dict[str, Any], List[Any]]
240
+ ```
241
+
242
+ #### Why This Works
243
+
244
+ 1. **Breaks the recursion cycle**: Using `Any` eliminates the self-reference that causes infinite recursion
245
+ 2. **Maintains functionality**: The types still functionally represent nested JSON structures
246
+ 3. **No schema generation issues**: Pydantic can generate schemas without infinite expansion
247
+ 4. **Simple implementation**: Requires no complex patches or runtime modifications
248
+
249
+ #### What to Avoid
250
+
251
+ 1. **Don't use complex monkey patching**: Patching Pydantic internals to handle recursion is fragile
252
+ 2. **Avoid disabling schema generation globally**: This impacts all models and API documentation
253
+ 3. **Don't use custom serialization for every model**: Introduces unnecessary complexity
254
+
255
+ When Fern generates your SDK, always check for recursive type definitions and convert them to use `Any` at appropriate recursion points to prevent these issues.
256
+
257
+
258
+ ## Troubleshooting
259
+
260
+ ### Debug Schema Generation
261
+
262
+ Add debugging to see what schemas are being generated:
263
+
264
+ ```python
265
+ import json
266
+ from your_app import app
267
+
268
+ # Generate and inspect OpenAPI schema
269
+ schema = app.openapi()
270
+ with open("debug_openapi.json", "w") as f:
271
+ json.dump(schema, f, indent=2)
272
+
273
+ # Check for duplicate schemas
274
+ schemas = schema.get("components", {}).get("schemas", {})
275
+ print("Generated schemas:", list(schemas.keys()))
276
+ ```
277
+
278
+ ### Common Error Patterns
279
+
280
+ 1. **"Schema conflict"** - Usually indicates duplicate model names
281
+ 2. **"Enum already exists"** - Enum not properly registered in other components/schemas
282
+ 3. **"Field type mismatch"** - Different models with same name have conflicting fields