mirascope 1.0.5__py3-none-any.whl → 2.1.1__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 (632) hide show
  1. mirascope/__init__.py +6 -6
  2. mirascope/_stubs.py +384 -0
  3. mirascope/_utils.py +34 -0
  4. mirascope/api/__init__.py +14 -0
  5. mirascope/api/_generated/README.md +207 -0
  6. mirascope/api/_generated/__init__.py +444 -0
  7. mirascope/api/_generated/annotations/__init__.py +33 -0
  8. mirascope/api/_generated/annotations/client.py +506 -0
  9. mirascope/api/_generated/annotations/raw_client.py +1414 -0
  10. mirascope/api/_generated/annotations/types/__init__.py +31 -0
  11. mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
  12. mirascope/api/_generated/annotations/types/annotations_create_response.py +48 -0
  13. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
  14. mirascope/api/_generated/annotations/types/annotations_get_response.py +48 -0
  15. mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
  16. mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
  17. mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
  18. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +50 -0
  19. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
  20. mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
  21. mirascope/api/_generated/annotations/types/annotations_update_response.py +48 -0
  22. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
  23. mirascope/api/_generated/api_keys/__init__.py +17 -0
  24. mirascope/api/_generated/api_keys/client.py +530 -0
  25. mirascope/api/_generated/api_keys/raw_client.py +1236 -0
  26. mirascope/api/_generated/api_keys/types/__init__.py +15 -0
  27. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
  28. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
  29. mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +40 -0
  30. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
  31. mirascope/api/_generated/client.py +211 -0
  32. mirascope/api/_generated/core/__init__.py +52 -0
  33. mirascope/api/_generated/core/api_error.py +23 -0
  34. mirascope/api/_generated/core/client_wrapper.py +46 -0
  35. mirascope/api/_generated/core/datetime_utils.py +28 -0
  36. mirascope/api/_generated/core/file.py +67 -0
  37. mirascope/api/_generated/core/force_multipart.py +16 -0
  38. mirascope/api/_generated/core/http_client.py +543 -0
  39. mirascope/api/_generated/core/http_response.py +55 -0
  40. mirascope/api/_generated/core/jsonable_encoder.py +100 -0
  41. mirascope/api/_generated/core/pydantic_utilities.py +255 -0
  42. mirascope/api/_generated/core/query_encoder.py +58 -0
  43. mirascope/api/_generated/core/remove_none_from_dict.py +11 -0
  44. mirascope/api/_generated/core/request_options.py +35 -0
  45. mirascope/api/_generated/core/serialization.py +276 -0
  46. mirascope/api/_generated/docs/__init__.py +4 -0
  47. mirascope/api/_generated/docs/client.py +91 -0
  48. mirascope/api/_generated/docs/raw_client.py +178 -0
  49. mirascope/api/_generated/environment.py +9 -0
  50. mirascope/api/_generated/environments/__init__.py +23 -0
  51. mirascope/api/_generated/environments/client.py +649 -0
  52. mirascope/api/_generated/environments/raw_client.py +1567 -0
  53. mirascope/api/_generated/environments/types/__init__.py +25 -0
  54. mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
  55. mirascope/api/_generated/environments/types/environments_get_analytics_response.py +60 -0
  56. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +24 -0
  57. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +22 -0
  58. mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
  59. mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
  60. mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
  61. mirascope/api/_generated/errors/__init__.py +25 -0
  62. mirascope/api/_generated/errors/bad_request_error.py +14 -0
  63. mirascope/api/_generated/errors/conflict_error.py +14 -0
  64. mirascope/api/_generated/errors/forbidden_error.py +11 -0
  65. mirascope/api/_generated/errors/internal_server_error.py +10 -0
  66. mirascope/api/_generated/errors/not_found_error.py +11 -0
  67. mirascope/api/_generated/errors/payment_required_error.py +15 -0
  68. mirascope/api/_generated/errors/service_unavailable_error.py +14 -0
  69. mirascope/api/_generated/errors/too_many_requests_error.py +15 -0
  70. mirascope/api/_generated/errors/unauthorized_error.py +11 -0
  71. mirascope/api/_generated/functions/__init__.py +39 -0
  72. mirascope/api/_generated/functions/client.py +647 -0
  73. mirascope/api/_generated/functions/raw_client.py +1890 -0
  74. mirascope/api/_generated/functions/types/__init__.py +53 -0
  75. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
  76. mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
  77. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
  78. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
  79. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
  80. mirascope/api/_generated/functions/types/functions_get_by_env_response.py +53 -0
  81. mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +22 -0
  82. mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
  83. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
  84. mirascope/api/_generated/functions/types/functions_list_by_env_response.py +25 -0
  85. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +56 -0
  86. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +22 -0
  87. mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
  88. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
  89. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
  90. mirascope/api/_generated/health/__init__.py +7 -0
  91. mirascope/api/_generated/health/client.py +92 -0
  92. mirascope/api/_generated/health/raw_client.py +175 -0
  93. mirascope/api/_generated/health/types/__init__.py +8 -0
  94. mirascope/api/_generated/health/types/health_check_response.py +22 -0
  95. mirascope/api/_generated/health/types/health_check_response_status.py +5 -0
  96. mirascope/api/_generated/organization_invitations/__init__.py +33 -0
  97. mirascope/api/_generated/organization_invitations/client.py +546 -0
  98. mirascope/api/_generated/organization_invitations/raw_client.py +1519 -0
  99. mirascope/api/_generated/organization_invitations/types/__init__.py +53 -0
  100. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +34 -0
  101. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +7 -0
  102. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +7 -0
  103. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +48 -0
  104. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +7 -0
  105. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +7 -0
  106. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +48 -0
  107. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +7 -0
  108. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +7 -0
  109. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +48 -0
  110. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +7 -0
  111. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +7 -0
  112. mirascope/api/_generated/organization_memberships/__init__.py +19 -0
  113. mirascope/api/_generated/organization_memberships/client.py +302 -0
  114. mirascope/api/_generated/organization_memberships/raw_client.py +736 -0
  115. mirascope/api/_generated/organization_memberships/types/__init__.py +27 -0
  116. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +33 -0
  117. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +7 -0
  118. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +7 -0
  119. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +31 -0
  120. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +7 -0
  121. mirascope/api/_generated/organizations/__init__.py +51 -0
  122. mirascope/api/_generated/organizations/client.py +869 -0
  123. mirascope/api/_generated/organizations/raw_client.py +2593 -0
  124. mirascope/api/_generated/organizations/types/__init__.py +71 -0
  125. mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +24 -0
  126. mirascope/api/_generated/organizations/types/organizations_create_response.py +26 -0
  127. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +5 -0
  128. mirascope/api/_generated/organizations/types/organizations_get_response.py +26 -0
  129. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +5 -0
  130. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +26 -0
  131. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +5 -0
  132. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +7 -0
  133. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +47 -0
  134. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +33 -0
  135. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +7 -0
  136. mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +24 -0
  137. mirascope/api/_generated/organizations/types/organizations_subscription_response.py +53 -0
  138. mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +7 -0
  139. mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +26 -0
  140. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +34 -0
  141. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +7 -0
  142. mirascope/api/_generated/organizations/types/organizations_update_response.py +26 -0
  143. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +5 -0
  144. mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +7 -0
  145. mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +35 -0
  146. mirascope/api/_generated/project_memberships/__init__.py +29 -0
  147. mirascope/api/_generated/project_memberships/client.py +528 -0
  148. mirascope/api/_generated/project_memberships/raw_client.py +1278 -0
  149. mirascope/api/_generated/project_memberships/types/__init__.py +33 -0
  150. mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +7 -0
  151. mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +35 -0
  152. mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +7 -0
  153. mirascope/api/_generated/project_memberships/types/project_memberships_get_response.py +33 -0
  154. mirascope/api/_generated/project_memberships/types/project_memberships_get_response_role.py +7 -0
  155. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +33 -0
  156. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +7 -0
  157. mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +7 -0
  158. mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +35 -0
  159. mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +7 -0
  160. mirascope/api/_generated/projects/__init__.py +7 -0
  161. mirascope/api/_generated/projects/client.py +428 -0
  162. mirascope/api/_generated/projects/raw_client.py +1302 -0
  163. mirascope/api/_generated/projects/types/__init__.py +10 -0
  164. mirascope/api/_generated/projects/types/projects_create_response.py +25 -0
  165. mirascope/api/_generated/projects/types/projects_get_response.py +25 -0
  166. mirascope/api/_generated/projects/types/projects_list_response_item.py +25 -0
  167. mirascope/api/_generated/projects/types/projects_update_response.py +25 -0
  168. mirascope/api/_generated/reference.md +4987 -0
  169. mirascope/api/_generated/tags/__init__.py +19 -0
  170. mirascope/api/_generated/tags/client.py +504 -0
  171. mirascope/api/_generated/tags/raw_client.py +1288 -0
  172. mirascope/api/_generated/tags/types/__init__.py +17 -0
  173. mirascope/api/_generated/tags/types/tags_create_response.py +41 -0
  174. mirascope/api/_generated/tags/types/tags_get_response.py +41 -0
  175. mirascope/api/_generated/tags/types/tags_list_response.py +23 -0
  176. mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +41 -0
  177. mirascope/api/_generated/tags/types/tags_update_response.py +41 -0
  178. mirascope/api/_generated/token_cost/__init__.py +7 -0
  179. mirascope/api/_generated/token_cost/client.py +160 -0
  180. mirascope/api/_generated/token_cost/raw_client.py +264 -0
  181. mirascope/api/_generated/token_cost/types/__init__.py +8 -0
  182. mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +54 -0
  183. mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +52 -0
  184. mirascope/api/_generated/traces/__init__.py +97 -0
  185. mirascope/api/_generated/traces/client.py +1103 -0
  186. mirascope/api/_generated/traces/raw_client.py +2322 -0
  187. mirascope/api/_generated/traces/types/__init__.py +155 -0
  188. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +29 -0
  189. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +27 -0
  190. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +23 -0
  191. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +38 -0
  192. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +19 -0
  193. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +22 -0
  194. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +20 -0
  195. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +29 -0
  196. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +31 -0
  197. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +23 -0
  198. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +38 -0
  199. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +19 -0
  200. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +22 -0
  201. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +22 -0
  202. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +48 -0
  203. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +23 -0
  204. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +38 -0
  205. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +19 -0
  206. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +24 -0
  207. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +22 -0
  208. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +20 -0
  209. mirascope/api/_generated/traces/types/traces_create_response.py +24 -0
  210. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +22 -0
  211. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +60 -0
  212. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
  213. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
  214. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +33 -0
  215. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +88 -0
  216. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
  217. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +88 -0
  218. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +25 -0
  219. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +44 -0
  220. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +26 -0
  221. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +7 -0
  222. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +7 -0
  223. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +7 -0
  224. mirascope/api/_generated/traces/types/traces_search_by_env_response.py +26 -0
  225. mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +50 -0
  226. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
  227. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
  228. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
  229. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
  230. mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
  231. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +50 -0
  232. mirascope/api/_generated/types/__init__.py +85 -0
  233. mirascope/api/_generated/types/already_exists_error.py +22 -0
  234. mirascope/api/_generated/types/already_exists_error_tag.py +5 -0
  235. mirascope/api/_generated/types/bad_request_error_body.py +50 -0
  236. mirascope/api/_generated/types/click_house_error.py +22 -0
  237. mirascope/api/_generated/types/database_error.py +22 -0
  238. mirascope/api/_generated/types/database_error_tag.py +5 -0
  239. mirascope/api/_generated/types/date.py +3 -0
  240. mirascope/api/_generated/types/http_api_decode_error.py +27 -0
  241. mirascope/api/_generated/types/http_api_decode_error_tag.py +5 -0
  242. mirascope/api/_generated/types/immutable_resource_error.py +22 -0
  243. mirascope/api/_generated/types/internal_server_error_body.py +49 -0
  244. mirascope/api/_generated/types/issue.py +38 -0
  245. mirascope/api/_generated/types/issue_tag.py +10 -0
  246. mirascope/api/_generated/types/not_found_error_body.py +22 -0
  247. mirascope/api/_generated/types/not_found_error_tag.py +5 -0
  248. mirascope/api/_generated/types/number_from_string.py +3 -0
  249. mirascope/api/_generated/types/permission_denied_error.py +22 -0
  250. mirascope/api/_generated/types/permission_denied_error_tag.py +5 -0
  251. mirascope/api/_generated/types/plan_limit_exceeded_error.py +32 -0
  252. mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +7 -0
  253. mirascope/api/_generated/types/pricing_unavailable_error.py +23 -0
  254. mirascope/api/_generated/types/property_key.py +7 -0
  255. mirascope/api/_generated/types/property_key_key.py +25 -0
  256. mirascope/api/_generated/types/property_key_key_tag.py +5 -0
  257. mirascope/api/_generated/types/rate_limit_error.py +31 -0
  258. mirascope/api/_generated/types/rate_limit_error_tag.py +5 -0
  259. mirascope/api/_generated/types/service_unavailable_error_body.py +24 -0
  260. mirascope/api/_generated/types/service_unavailable_error_tag.py +7 -0
  261. mirascope/api/_generated/types/stripe_error.py +20 -0
  262. mirascope/api/_generated/types/subscription_past_due_error.py +31 -0
  263. mirascope/api/_generated/types/subscription_past_due_error_tag.py +7 -0
  264. mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
  265. mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
  266. mirascope/api/client.py +255 -0
  267. mirascope/api/settings.py +99 -0
  268. mirascope/llm/__init__.py +316 -0
  269. mirascope/llm/calls/__init__.py +17 -0
  270. mirascope/llm/calls/calls.py +348 -0
  271. mirascope/llm/calls/decorator.py +268 -0
  272. mirascope/llm/content/__init__.py +71 -0
  273. mirascope/llm/content/audio.py +173 -0
  274. mirascope/llm/content/document.py +94 -0
  275. mirascope/llm/content/image.py +206 -0
  276. mirascope/llm/content/text.py +47 -0
  277. mirascope/llm/content/thought.py +58 -0
  278. mirascope/llm/content/tool_call.py +69 -0
  279. mirascope/llm/content/tool_output.py +43 -0
  280. mirascope/llm/context/__init__.py +6 -0
  281. mirascope/llm/context/_utils.py +41 -0
  282. mirascope/llm/context/context.py +24 -0
  283. mirascope/llm/exceptions.py +360 -0
  284. mirascope/llm/formatting/__init__.py +39 -0
  285. mirascope/llm/formatting/format.py +291 -0
  286. mirascope/llm/formatting/from_call_args.py +30 -0
  287. mirascope/llm/formatting/output_parser.py +178 -0
  288. mirascope/llm/formatting/partial.py +131 -0
  289. mirascope/llm/formatting/primitives.py +192 -0
  290. mirascope/llm/formatting/types.py +83 -0
  291. mirascope/llm/mcp/__init__.py +5 -0
  292. mirascope/llm/mcp/mcp_client.py +130 -0
  293. mirascope/llm/messages/__init__.py +35 -0
  294. mirascope/llm/messages/_utils.py +34 -0
  295. mirascope/llm/messages/message.py +190 -0
  296. mirascope/llm/models/__init__.py +21 -0
  297. mirascope/llm/models/models.py +1339 -0
  298. mirascope/llm/models/params.py +72 -0
  299. mirascope/llm/models/thinking_config.py +61 -0
  300. mirascope/llm/prompts/__init__.py +34 -0
  301. mirascope/llm/prompts/_utils.py +31 -0
  302. mirascope/llm/prompts/decorator.py +215 -0
  303. mirascope/llm/prompts/prompts.py +484 -0
  304. mirascope/llm/prompts/protocols.py +65 -0
  305. mirascope/llm/providers/__init__.py +65 -0
  306. mirascope/llm/providers/anthropic/__init__.py +11 -0
  307. mirascope/llm/providers/anthropic/_utils/__init__.py +27 -0
  308. mirascope/llm/providers/anthropic/_utils/beta_decode.py +297 -0
  309. mirascope/llm/providers/anthropic/_utils/beta_encode.py +272 -0
  310. mirascope/llm/providers/anthropic/_utils/decode.py +326 -0
  311. mirascope/llm/providers/anthropic/_utils/encode.py +431 -0
  312. mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
  313. mirascope/llm/providers/anthropic/beta_provider.py +338 -0
  314. mirascope/llm/providers/anthropic/model_id.py +23 -0
  315. mirascope/llm/providers/anthropic/model_info.py +87 -0
  316. mirascope/llm/providers/anthropic/provider.py +440 -0
  317. mirascope/llm/providers/base/__init__.py +14 -0
  318. mirascope/llm/providers/base/_utils.py +248 -0
  319. mirascope/llm/providers/base/base_provider.py +1463 -0
  320. mirascope/llm/providers/base/kwargs.py +12 -0
  321. mirascope/llm/providers/google/__init__.py +6 -0
  322. mirascope/llm/providers/google/_utils/__init__.py +17 -0
  323. mirascope/llm/providers/google/_utils/decode.py +357 -0
  324. mirascope/llm/providers/google/_utils/encode.py +418 -0
  325. mirascope/llm/providers/google/_utils/errors.py +50 -0
  326. mirascope/llm/providers/google/message.py +7 -0
  327. mirascope/llm/providers/google/model_id.py +22 -0
  328. mirascope/llm/providers/google/model_info.py +63 -0
  329. mirascope/llm/providers/google/provider.py +456 -0
  330. mirascope/llm/providers/mirascope/__init__.py +5 -0
  331. mirascope/llm/providers/mirascope/_utils.py +73 -0
  332. mirascope/llm/providers/mirascope/provider.py +313 -0
  333. mirascope/llm/providers/mlx/__init__.py +9 -0
  334. mirascope/llm/providers/mlx/_utils.py +141 -0
  335. mirascope/llm/providers/mlx/encoding/__init__.py +8 -0
  336. mirascope/llm/providers/mlx/encoding/base.py +69 -0
  337. mirascope/llm/providers/mlx/encoding/transformers.py +146 -0
  338. mirascope/llm/providers/mlx/mlx.py +242 -0
  339. mirascope/llm/providers/mlx/model_id.py +17 -0
  340. mirascope/llm/providers/mlx/provider.py +416 -0
  341. mirascope/llm/providers/model_id.py +16 -0
  342. mirascope/llm/providers/ollama/__init__.py +7 -0
  343. mirascope/llm/providers/ollama/provider.py +71 -0
  344. mirascope/llm/providers/openai/__init__.py +15 -0
  345. mirascope/llm/providers/openai/_utils/__init__.py +5 -0
  346. mirascope/llm/providers/openai/_utils/errors.py +46 -0
  347. mirascope/llm/providers/openai/completions/__init__.py +7 -0
  348. mirascope/llm/providers/openai/completions/_utils/__init__.py +18 -0
  349. mirascope/llm/providers/openai/completions/_utils/decode.py +252 -0
  350. mirascope/llm/providers/openai/completions/_utils/encode.py +390 -0
  351. mirascope/llm/providers/openai/completions/_utils/feature_info.py +50 -0
  352. mirascope/llm/providers/openai/completions/base_provider.py +522 -0
  353. mirascope/llm/providers/openai/completions/provider.py +28 -0
  354. mirascope/llm/providers/openai/model_id.py +31 -0
  355. mirascope/llm/providers/openai/model_info.py +303 -0
  356. mirascope/llm/providers/openai/provider.py +405 -0
  357. mirascope/llm/providers/openai/responses/__init__.py +5 -0
  358. mirascope/llm/providers/openai/responses/_utils/__init__.py +15 -0
  359. mirascope/llm/providers/openai/responses/_utils/decode.py +289 -0
  360. mirascope/llm/providers/openai/responses/_utils/encode.py +399 -0
  361. mirascope/llm/providers/openai/responses/provider.py +472 -0
  362. mirascope/llm/providers/openrouter/__init__.py +5 -0
  363. mirascope/llm/providers/openrouter/provider.py +67 -0
  364. mirascope/llm/providers/provider_id.py +26 -0
  365. mirascope/llm/providers/provider_registry.py +305 -0
  366. mirascope/llm/providers/together/__init__.py +7 -0
  367. mirascope/llm/providers/together/provider.py +40 -0
  368. mirascope/llm/responses/__init__.py +66 -0
  369. mirascope/llm/responses/_utils.py +146 -0
  370. mirascope/llm/responses/base_response.py +103 -0
  371. mirascope/llm/responses/base_stream_response.py +824 -0
  372. mirascope/llm/responses/finish_reason.py +28 -0
  373. mirascope/llm/responses/response.py +362 -0
  374. mirascope/llm/responses/root_response.py +248 -0
  375. mirascope/llm/responses/stream_response.py +577 -0
  376. mirascope/llm/responses/streams.py +363 -0
  377. mirascope/llm/responses/usage.py +139 -0
  378. mirascope/llm/tools/__init__.py +71 -0
  379. mirascope/llm/tools/_utils.py +34 -0
  380. mirascope/llm/tools/decorator.py +184 -0
  381. mirascope/llm/tools/protocols.py +96 -0
  382. mirascope/llm/tools/provider_tools.py +18 -0
  383. mirascope/llm/tools/tool_schema.py +321 -0
  384. mirascope/llm/tools/toolkit.py +178 -0
  385. mirascope/llm/tools/tools.py +263 -0
  386. mirascope/llm/tools/types.py +112 -0
  387. mirascope/llm/tools/web_search_tool.py +32 -0
  388. mirascope/llm/types/__init__.py +22 -0
  389. mirascope/llm/types/dataclass.py +9 -0
  390. mirascope/llm/types/jsonable.py +44 -0
  391. mirascope/llm/types/type_vars.py +19 -0
  392. mirascope/ops/__init__.py +129 -0
  393. mirascope/ops/_internal/__init__.py +5 -0
  394. mirascope/ops/_internal/closure.py +1172 -0
  395. mirascope/ops/_internal/configuration.py +177 -0
  396. mirascope/ops/_internal/context.py +76 -0
  397. mirascope/ops/_internal/exporters/__init__.py +26 -0
  398. mirascope/ops/_internal/exporters/exporters.py +362 -0
  399. mirascope/ops/_internal/exporters/processors.py +104 -0
  400. mirascope/ops/_internal/exporters/types.py +165 -0
  401. mirascope/ops/_internal/exporters/utils.py +66 -0
  402. mirascope/ops/_internal/instrumentation/__init__.py +28 -0
  403. mirascope/ops/_internal/instrumentation/llm/__init__.py +8 -0
  404. mirascope/ops/_internal/instrumentation/llm/common.py +500 -0
  405. mirascope/ops/_internal/instrumentation/llm/cost.py +190 -0
  406. mirascope/ops/_internal/instrumentation/llm/encode.py +238 -0
  407. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +38 -0
  408. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +31 -0
  409. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +38 -0
  410. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +18 -0
  411. mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +100 -0
  412. mirascope/ops/_internal/instrumentation/llm/llm.py +161 -0
  413. mirascope/ops/_internal/instrumentation/llm/model.py +1777 -0
  414. mirascope/ops/_internal/instrumentation/llm/response.py +521 -0
  415. mirascope/ops/_internal/instrumentation/llm/serialize.py +324 -0
  416. mirascope/ops/_internal/instrumentation/providers/__init__.py +29 -0
  417. mirascope/ops/_internal/instrumentation/providers/anthropic.py +78 -0
  418. mirascope/ops/_internal/instrumentation/providers/base.py +179 -0
  419. mirascope/ops/_internal/instrumentation/providers/google_genai.py +85 -0
  420. mirascope/ops/_internal/instrumentation/providers/openai.py +82 -0
  421. mirascope/ops/_internal/propagation.py +198 -0
  422. mirascope/ops/_internal/protocols.py +133 -0
  423. mirascope/ops/_internal/session.py +139 -0
  424. mirascope/ops/_internal/spans.py +232 -0
  425. mirascope/ops/_internal/traced_calls.py +389 -0
  426. mirascope/ops/_internal/traced_functions.py +528 -0
  427. mirascope/ops/_internal/tracing.py +353 -0
  428. mirascope/ops/_internal/types.py +13 -0
  429. mirascope/ops/_internal/utils.py +131 -0
  430. mirascope/ops/_internal/versioned_calls.py +512 -0
  431. mirascope/ops/_internal/versioned_functions.py +357 -0
  432. mirascope/ops/_internal/versioning.py +303 -0
  433. mirascope/ops/exceptions.py +21 -0
  434. mirascope-2.1.1.dist-info/METADATA +231 -0
  435. mirascope-2.1.1.dist-info/RECORD +437 -0
  436. {mirascope-1.0.5.dist-info → mirascope-2.1.1.dist-info}/WHEEL +1 -1
  437. {mirascope-1.0.5.dist-info → mirascope-2.1.1.dist-info}/licenses/LICENSE +1 -1
  438. mirascope/beta/__init__.py +0 -0
  439. mirascope/beta/openai/__init__.py +0 -5
  440. mirascope/beta/openai/parse.py +0 -129
  441. mirascope/beta/rag/__init__.py +0 -24
  442. mirascope/beta/rag/base/__init__.py +0 -22
  443. mirascope/beta/rag/base/chunkers/__init__.py +0 -2
  444. mirascope/beta/rag/base/chunkers/base_chunker.py +0 -37
  445. mirascope/beta/rag/base/chunkers/text_chunker.py +0 -33
  446. mirascope/beta/rag/base/config.py +0 -8
  447. mirascope/beta/rag/base/document.py +0 -11
  448. mirascope/beta/rag/base/embedders.py +0 -35
  449. mirascope/beta/rag/base/embedding_params.py +0 -18
  450. mirascope/beta/rag/base/embedding_response.py +0 -30
  451. mirascope/beta/rag/base/query_results.py +0 -7
  452. mirascope/beta/rag/base/vectorstore_params.py +0 -18
  453. mirascope/beta/rag/base/vectorstores.py +0 -37
  454. mirascope/beta/rag/chroma/__init__.py +0 -11
  455. mirascope/beta/rag/chroma/types.py +0 -57
  456. mirascope/beta/rag/chroma/vectorstores.py +0 -97
  457. mirascope/beta/rag/cohere/__init__.py +0 -11
  458. mirascope/beta/rag/cohere/embedders.py +0 -87
  459. mirascope/beta/rag/cohere/embedding_params.py +0 -29
  460. mirascope/beta/rag/cohere/embedding_response.py +0 -29
  461. mirascope/beta/rag/cohere/py.typed +0 -0
  462. mirascope/beta/rag/openai/__init__.py +0 -11
  463. mirascope/beta/rag/openai/embedders.py +0 -144
  464. mirascope/beta/rag/openai/embedding_params.py +0 -18
  465. mirascope/beta/rag/openai/embedding_response.py +0 -14
  466. mirascope/beta/rag/openai/py.typed +0 -0
  467. mirascope/beta/rag/pinecone/__init__.py +0 -19
  468. mirascope/beta/rag/pinecone/types.py +0 -143
  469. mirascope/beta/rag/pinecone/vectorstores.py +0 -148
  470. mirascope/beta/rag/weaviate/__init__.py +0 -6
  471. mirascope/beta/rag/weaviate/types.py +0 -92
  472. mirascope/beta/rag/weaviate/vectorstores.py +0 -103
  473. mirascope/core/__init__.py +0 -55
  474. mirascope/core/anthropic/__init__.py +0 -21
  475. mirascope/core/anthropic/_call.py +0 -71
  476. mirascope/core/anthropic/_utils/__init__.py +0 -16
  477. mirascope/core/anthropic/_utils/_calculate_cost.py +0 -63
  478. mirascope/core/anthropic/_utils/_convert_message_params.py +0 -54
  479. mirascope/core/anthropic/_utils/_get_json_output.py +0 -34
  480. mirascope/core/anthropic/_utils/_handle_stream.py +0 -89
  481. mirascope/core/anthropic/_utils/_setup_call.py +0 -76
  482. mirascope/core/anthropic/call_params.py +0 -36
  483. mirascope/core/anthropic/call_response.py +0 -158
  484. mirascope/core/anthropic/call_response_chunk.py +0 -104
  485. mirascope/core/anthropic/dynamic_config.py +0 -26
  486. mirascope/core/anthropic/py.typed +0 -0
  487. mirascope/core/anthropic/stream.py +0 -140
  488. mirascope/core/anthropic/tool.py +0 -77
  489. mirascope/core/base/__init__.py +0 -40
  490. mirascope/core/base/_call_factory.py +0 -323
  491. mirascope/core/base/_create.py +0 -167
  492. mirascope/core/base/_extract.py +0 -139
  493. mirascope/core/base/_partial.py +0 -63
  494. mirascope/core/base/_utils/__init__.py +0 -64
  495. mirascope/core/base/_utils/_base_type.py +0 -17
  496. mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -45
  497. mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
  498. mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -126
  499. mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
  500. mirascope/core/base/_utils/_extract_tool_return.py +0 -36
  501. mirascope/core/base/_utils/_format_template.py +0 -29
  502. mirascope/core/base/_utils/_get_audio_type.py +0 -18
  503. mirascope/core/base/_utils/_get_fn_args.py +0 -14
  504. mirascope/core/base/_utils/_get_image_type.py +0 -26
  505. mirascope/core/base/_utils/_get_metadata.py +0 -17
  506. mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -21
  507. mirascope/core/base/_utils/_get_prompt_template.py +0 -25
  508. mirascope/core/base/_utils/_get_template_values.py +0 -52
  509. mirascope/core/base/_utils/_get_template_variables.py +0 -38
  510. mirascope/core/base/_utils/_json_mode_content.py +0 -15
  511. mirascope/core/base/_utils/_parse_content_template.py +0 -157
  512. mirascope/core/base/_utils/_parse_prompt_messages.py +0 -51
  513. mirascope/core/base/_utils/_protocols.py +0 -215
  514. mirascope/core/base/_utils/_setup_call.py +0 -64
  515. mirascope/core/base/_utils/_setup_extract_tool.py +0 -24
  516. mirascope/core/base/call_params.py +0 -6
  517. mirascope/core/base/call_response.py +0 -189
  518. mirascope/core/base/call_response_chunk.py +0 -91
  519. mirascope/core/base/dynamic_config.py +0 -55
  520. mirascope/core/base/message_param.py +0 -61
  521. mirascope/core/base/metadata.py +0 -13
  522. mirascope/core/base/prompt.py +0 -415
  523. mirascope/core/base/stream.py +0 -365
  524. mirascope/core/base/structured_stream.py +0 -251
  525. mirascope/core/base/tool.py +0 -126
  526. mirascope/core/base/toolkit.py +0 -146
  527. mirascope/core/cohere/__init__.py +0 -21
  528. mirascope/core/cohere/_call.py +0 -71
  529. mirascope/core/cohere/_utils/__init__.py +0 -16
  530. mirascope/core/cohere/_utils/_calculate_cost.py +0 -39
  531. mirascope/core/cohere/_utils/_convert_message_params.py +0 -31
  532. mirascope/core/cohere/_utils/_get_json_output.py +0 -31
  533. mirascope/core/cohere/_utils/_handle_stream.py +0 -33
  534. mirascope/core/cohere/_utils/_setup_call.py +0 -89
  535. mirascope/core/cohere/call_params.py +0 -57
  536. mirascope/core/cohere/call_response.py +0 -167
  537. mirascope/core/cohere/call_response_chunk.py +0 -101
  538. mirascope/core/cohere/dynamic_config.py +0 -24
  539. mirascope/core/cohere/py.typed +0 -0
  540. mirascope/core/cohere/stream.py +0 -113
  541. mirascope/core/cohere/tool.py +0 -92
  542. mirascope/core/gemini/__init__.py +0 -21
  543. mirascope/core/gemini/_call.py +0 -71
  544. mirascope/core/gemini/_utils/__init__.py +0 -16
  545. mirascope/core/gemini/_utils/_calculate_cost.py +0 -8
  546. mirascope/core/gemini/_utils/_convert_message_params.py +0 -74
  547. mirascope/core/gemini/_utils/_get_json_output.py +0 -33
  548. mirascope/core/gemini/_utils/_handle_stream.py +0 -33
  549. mirascope/core/gemini/_utils/_setup_call.py +0 -68
  550. mirascope/core/gemini/call_params.py +0 -28
  551. mirascope/core/gemini/call_response.py +0 -173
  552. mirascope/core/gemini/call_response_chunk.py +0 -85
  553. mirascope/core/gemini/dynamic_config.py +0 -26
  554. mirascope/core/gemini/stream.py +0 -121
  555. mirascope/core/gemini/tool.py +0 -104
  556. mirascope/core/groq/__init__.py +0 -21
  557. mirascope/core/groq/_call.py +0 -71
  558. mirascope/core/groq/_utils/__init__.py +0 -16
  559. mirascope/core/groq/_utils/_calculate_cost.py +0 -68
  560. mirascope/core/groq/_utils/_convert_message_params.py +0 -23
  561. mirascope/core/groq/_utils/_get_json_output.py +0 -27
  562. mirascope/core/groq/_utils/_handle_stream.py +0 -121
  563. mirascope/core/groq/_utils/_setup_call.py +0 -67
  564. mirascope/core/groq/call_params.py +0 -51
  565. mirascope/core/groq/call_response.py +0 -160
  566. mirascope/core/groq/call_response_chunk.py +0 -89
  567. mirascope/core/groq/dynamic_config.py +0 -26
  568. mirascope/core/groq/py.typed +0 -0
  569. mirascope/core/groq/stream.py +0 -136
  570. mirascope/core/groq/tool.py +0 -79
  571. mirascope/core/litellm/__init__.py +0 -6
  572. mirascope/core/litellm/_call.py +0 -73
  573. mirascope/core/litellm/_utils/__init__.py +0 -5
  574. mirascope/core/litellm/_utils/_setup_call.py +0 -46
  575. mirascope/core/litellm/py.typed +0 -0
  576. mirascope/core/mistral/__init__.py +0 -21
  577. mirascope/core/mistral/_call.py +0 -69
  578. mirascope/core/mistral/_utils/__init__.py +0 -16
  579. mirascope/core/mistral/_utils/_calculate_cost.py +0 -47
  580. mirascope/core/mistral/_utils/_convert_message_params.py +0 -23
  581. mirascope/core/mistral/_utils/_get_json_output.py +0 -28
  582. mirascope/core/mistral/_utils/_handle_stream.py +0 -121
  583. mirascope/core/mistral/_utils/_setup_call.py +0 -86
  584. mirascope/core/mistral/call_params.py +0 -36
  585. mirascope/core/mistral/call_response.py +0 -156
  586. mirascope/core/mistral/call_response_chunk.py +0 -84
  587. mirascope/core/mistral/dynamic_config.py +0 -24
  588. mirascope/core/mistral/py.typed +0 -0
  589. mirascope/core/mistral/stream.py +0 -117
  590. mirascope/core/mistral/tool.py +0 -77
  591. mirascope/core/openai/__init__.py +0 -21
  592. mirascope/core/openai/_call.py +0 -71
  593. mirascope/core/openai/_utils/__init__.py +0 -16
  594. mirascope/core/openai/_utils/_calculate_cost.py +0 -110
  595. mirascope/core/openai/_utils/_convert_message_params.py +0 -53
  596. mirascope/core/openai/_utils/_get_json_output.py +0 -27
  597. mirascope/core/openai/_utils/_handle_stream.py +0 -125
  598. mirascope/core/openai/_utils/_setup_call.py +0 -62
  599. mirascope/core/openai/call_params.py +0 -54
  600. mirascope/core/openai/call_response.py +0 -162
  601. mirascope/core/openai/call_response_chunk.py +0 -90
  602. mirascope/core/openai/dynamic_config.py +0 -26
  603. mirascope/core/openai/py.typed +0 -0
  604. mirascope/core/openai/stream.py +0 -148
  605. mirascope/core/openai/tool.py +0 -79
  606. mirascope/core/py.typed +0 -0
  607. mirascope/integrations/__init__.py +0 -20
  608. mirascope/integrations/_middleware_factory.py +0 -277
  609. mirascope/integrations/langfuse/__init__.py +0 -3
  610. mirascope/integrations/langfuse/_utils.py +0 -114
  611. mirascope/integrations/langfuse/_with_langfuse.py +0 -71
  612. mirascope/integrations/logfire/__init__.py +0 -3
  613. mirascope/integrations/logfire/_utils.py +0 -188
  614. mirascope/integrations/logfire/_with_logfire.py +0 -60
  615. mirascope/integrations/otel/__init__.py +0 -5
  616. mirascope/integrations/otel/_utils.py +0 -268
  617. mirascope/integrations/otel/_with_hyperdx.py +0 -61
  618. mirascope/integrations/otel/_with_otel.py +0 -60
  619. mirascope/integrations/tenacity.py +0 -50
  620. mirascope/py.typed +0 -0
  621. mirascope/v0/__init__.py +0 -43
  622. mirascope/v0/anthropic.py +0 -54
  623. mirascope/v0/base/__init__.py +0 -12
  624. mirascope/v0/base/calls.py +0 -118
  625. mirascope/v0/base/extractors.py +0 -122
  626. mirascope/v0/base/ops_utils.py +0 -207
  627. mirascope/v0/base/prompts.py +0 -48
  628. mirascope/v0/base/types.py +0 -14
  629. mirascope/v0/base/utils.py +0 -21
  630. mirascope/v0/openai.py +0 -54
  631. mirascope-1.0.5.dist-info/METADATA +0 -519
  632. mirascope-1.0.5.dist-info/RECORD +0 -198
@@ -1,64 +0,0 @@
1
- """Internal Utilities."""
2
-
3
- from ._base_type import BaseType, is_base_type
4
- from ._convert_base_model_to_base_tool import convert_base_model_to_base_tool
5
- from ._convert_base_type_to_base_tool import convert_base_type_to_base_tool
6
- from ._convert_function_to_base_tool import convert_function_to_base_tool
7
- from ._default_tool_docstring import DEFAULT_TOOL_DOCSTRING
8
- from ._extract_tool_return import extract_tool_return
9
- from ._format_template import format_template
10
- from ._get_audio_type import get_audio_type
11
- from ._get_fn_args import get_fn_args
12
- from ._get_image_type import get_image_type
13
- from ._get_metadata import get_metadata
14
- from ._get_possible_user_message_param import get_possible_user_message_param
15
- from ._get_prompt_template import get_prompt_template
16
- from ._get_template_values import get_template_values
17
- from ._get_template_variables import get_template_variables
18
- from ._json_mode_content import json_mode_content
19
- from ._parse_content_template import parse_content_template
20
- from ._parse_prompt_messages import parse_prompt_messages
21
- from ._protocols import (
22
- AsyncCreateFn,
23
- CalculateCost,
24
- CreateFn,
25
- GetJsonOutput,
26
- HandleStream,
27
- HandleStreamAsync,
28
- LLMFunctionDecorator,
29
- SetupCall,
30
- )
31
- from ._setup_call import setup_call
32
- from ._setup_extract_tool import setup_extract_tool
33
-
34
- __all__ = [
35
- "AsyncCreateFn",
36
- "BaseType",
37
- "CalculateCost",
38
- "convert_base_model_to_base_tool",
39
- "convert_base_type_to_base_tool",
40
- "convert_function_to_base_tool",
41
- "CreateFn",
42
- "DEFAULT_TOOL_DOCSTRING",
43
- "extract_tool_return",
44
- "format_template",
45
- "GetJsonOutput",
46
- "get_audio_type",
47
- "get_fn_args",
48
- "get_image_type",
49
- "get_metadata",
50
- "get_possible_user_message_param",
51
- "get_prompt_template",
52
- "get_template_values",
53
- "get_template_variables",
54
- "HandleStream",
55
- "HandleStreamAsync",
56
- "is_base_type",
57
- "json_mode_content",
58
- "LLMFunctionDecorator",
59
- "parse_content_template",
60
- "parse_prompt_messages",
61
- "SetupCall",
62
- "setup_call",
63
- "setup_extract_tool",
64
- ]
@@ -1,17 +0,0 @@
1
- """This module contains utility functions for base types."""
2
-
3
- import inspect
4
- from enum import Enum
5
- from typing import Annotated, Any, Literal, TypeGuard, Union, get_origin
6
-
7
- BaseType = str | int | float | bool | bytes | list | set | tuple | dict
8
-
9
-
10
- def is_base_type(type_: Any) -> TypeGuard[type[BaseType]]: # noqa: ANN401
11
- """Check if a type is a base type."""
12
- base_types = {str, int, float, bool, bytes, list, set, tuple, dict}
13
- return (
14
- (inspect.isclass(type_) and issubclass(type_, Enum))
15
- or type_ in base_types
16
- or get_origin(type_) in base_types.union({Literal, Union, Annotated})
17
- )
@@ -1,45 +0,0 @@
1
- """Utility for converting a model into a base tool."""
2
-
3
- import inspect
4
- from abc import update_abstractmethods
5
- from typing import Any, TypeVar, cast
6
-
7
- from pydantic import BaseModel, create_model
8
-
9
- from ._default_tool_docstring import DEFAULT_TOOL_DOCSTRING
10
-
11
- BaseToolT = TypeVar("BaseToolT", bound=BaseModel)
12
-
13
-
14
- def convert_base_model_to_base_tool(
15
- model: type[BaseModel], base: type[BaseToolT]
16
- ) -> type[BaseToolT]:
17
- """Converts a `BaseModel` schema to a `BaseToolT` type.
18
-
19
- By adding a docstring (if needed) and passing on fields and field information in
20
- dictionary format, a Pydantic `BaseModel` can be converted into an `BaseTool` for
21
- performing extraction.
22
-
23
- Args:
24
- model: The `BaseModel` schema to convert.
25
- base: The base type to extend with the `BaseModel` fields.
26
-
27
- Returns:
28
- The constructed `BaseModelT` type.
29
- """
30
- field_definitions = {
31
- field_name: (field_info.annotation, field_info)
32
- for field_name, field_info in model.model_fields.items()
33
- }
34
- tool_type = create_model(
35
- f"{model.__name__}",
36
- __base__=base,
37
- __doc__=model.__doc__ if model.__doc__ else DEFAULT_TOOL_DOCSTRING,
38
- **cast(dict[str, Any], field_definitions),
39
- )
40
- bases = list(tool_type.__bases__)
41
- tool_type.__bases__ = tuple(bases) if model in bases else tuple([model] + bases)
42
- for name, value in inspect.getmembers(model):
43
- if not hasattr(tool_type, name) or name in ["_name", "_description", "call"]:
44
- setattr(tool_type, name, value)
45
- return update_abstractmethods(tool_type)
@@ -1,24 +0,0 @@
1
- """This module contains the `convert_base_type_to_base_tool` function."""
2
-
3
- from typing import Annotated, TypeVar, get_args, get_origin
4
-
5
- from pydantic import BaseModel, create_model
6
-
7
- from ._base_type import BaseType
8
- from ._default_tool_docstring import DEFAULT_TOOL_DOCSTRING
9
-
10
- BaseToolT = TypeVar("BaseToolT", bound=BaseModel)
11
-
12
-
13
- def convert_base_type_to_base_tool(
14
- schema: type[BaseType], base: type[BaseToolT]
15
- ) -> type[BaseToolT]:
16
- """Converts a `BaseType` to a `BaseToolT` type."""
17
- if get_origin(schema) == Annotated:
18
- schema.__name__ = get_args(schema)[0].__name__
19
- return create_model(
20
- schema.__name__,
21
- __base__=base,
22
- __doc__=DEFAULT_TOOL_DOCSTRING,
23
- value=(schema, ...),
24
- )
@@ -1,126 +0,0 @@
1
- import inspect
2
- from abc import update_abstractmethods
3
- from collections.abc import Callable
4
- from typing import Any, TypeVar, cast, get_type_hints
5
-
6
- import jiter
7
- from docstring_parser import parse
8
- from pydantic import BaseModel, create_model
9
- from pydantic.fields import FieldInfo
10
-
11
- from ._default_tool_docstring import DEFAULT_TOOL_DOCSTRING
12
-
13
- BaseToolT = TypeVar("BaseToolT", bound=BaseModel)
14
-
15
-
16
- def convert_function_to_base_tool(
17
- fn: Callable,
18
- base: type[BaseToolT],
19
- __doc__: str | None = None,
20
- __namespace__: str | None = None,
21
- ) -> type[BaseToolT]:
22
- """Constructs a `BaseToolT` type from the given function.
23
-
24
- This method expects all function parameters to be properly documented in identical
25
- order with identical variable names, as well as descriptions of each parameter.
26
- Errors will be raised if any of these conditions are not met.
27
-
28
- Args:
29
- fn: The function to convert.
30
- base: The `BaseToolT` type to which the function is converted.
31
- __doc__: The docstring to use for the constructed `BaseToolT` type.
32
- __namespace__: The namespace to use for the constructed `BaseToolT` type.
33
-
34
- Returns:
35
- The constructed `BaseToolT` type.
36
-
37
- Raises:
38
- ValueError: if the given function's parameters don't have type annotations.
39
- ValueError: if a given function's parameter is in the docstring args section but
40
- the name doesn't match the docstring's parameter name.
41
- ValueError: if a given function's parameter is in the docstring args section but
42
- doesn't have a docstring description.
43
- """
44
- docstring, examples = None, []
45
- func_doc = __doc__ or fn.__doc__
46
- if func_doc:
47
- docstring = parse(func_doc)
48
- for example in docstring.examples or []:
49
- if example.description:
50
- examples.append(jiter.from_json(example.description.encode()))
51
-
52
- field_definitions = {}
53
- hints = get_type_hints(fn)
54
- has_self = False
55
- for i, parameter in enumerate(inspect.signature(fn).parameters.values()):
56
- if parameter.name == "self":
57
- has_self = True
58
- continue
59
- if parameter.name == "cls":
60
- continue
61
- if parameter.annotation == inspect.Parameter.empty:
62
- raise ValueError("All parameters must have a type annotation.")
63
-
64
- docstring_description = None
65
- if docstring and i < len(docstring.params):
66
- docstring_param = docstring.params[i]
67
- if docstring_param.arg_name != parameter.name:
68
- raise ValueError(
69
- f"Function parameter name {parameter.name} does not match docstring "
70
- f"parameter name {docstring_param.arg_name}. Make sure that the "
71
- "parameter names match exactly."
72
- )
73
- if not docstring_param.description:
74
- raise ValueError("All parameters must have a description.")
75
- docstring_description = docstring_param.description
76
-
77
- field_info = FieldInfo(annotation=hints[parameter.name])
78
- if parameter.default != inspect.Parameter.empty:
79
- field_info.default = parameter.default
80
- if docstring_description: # we check falsy here because this comes from docstr
81
- field_info.description = docstring_description
82
-
83
- param_name = parameter.name
84
- if param_name.startswith("model_"): # model_ is a BaseModel reserved namespace
85
- param_name = "aliased_" + param_name
86
- field_info.alias = parameter.name
87
- field_info.validation_alias = parameter.name
88
- field_info.serialization_alias = parameter.name
89
-
90
- field_definitions[param_name] = (
91
- hints[parameter.name],
92
- field_info,
93
- )
94
-
95
- model = create_model(
96
- f"{__namespace__}_{fn.__name__}" if __namespace__ else fn.__name__,
97
- __base__=base,
98
- __doc__=inspect.cleandoc(func_doc) if func_doc else DEFAULT_TOOL_DOCSTRING,
99
- **cast(dict[str, Any], field_definitions),
100
- )
101
- if examples:
102
- model.model_config["json_schema_extra"] = {"examples": examples}
103
-
104
- def call(self: base) -> Any: # noqa: ANN401
105
- return fn(
106
- **(
107
- ({"self": self} if has_self else {})
108
- | {
109
- str(
110
- self.model_fields[field_name].alias
111
- if self.model_fields[field_name].alias
112
- else field_name
113
- ): getattr(self, field_name)
114
- for field_name in self.model_dump(exclude={"tool_call"})
115
- }
116
- )
117
- )
118
-
119
- async def call_async(self: base) -> Callable:
120
- return await call(self)
121
-
122
- if inspect.iscoroutinefunction(fn):
123
- model.call = call_async # pyright: ignore [reportAttributeAccessIssue]
124
- else:
125
- model.call = call # pyright: ignore [reportAttributeAccessIssue]
126
- return update_abstractmethods(model)
@@ -1,6 +0,0 @@
1
- """The default docstring to use when tools don't have a docstring."""
2
-
3
- DEFAULT_TOOL_DOCSTRING = """\
4
- Correctly formatted and typed parameters extracted from the completion. \
5
- Must include required parameters and may exclude optional parameters unless present in the text.\
6
- """
@@ -1,36 +0,0 @@
1
- """This module contains the function to extract the return value of a tool."""
2
-
3
- from typing import TypeVar
4
-
5
- import jiter
6
- from pydantic import BaseModel
7
-
8
- from .._partial import partial
9
- from ._base_type import BaseType, is_base_type
10
- from ._convert_base_type_to_base_tool import convert_base_type_to_base_tool
11
-
12
- _ResponseModelT = TypeVar("_ResponseModelT", bound=BaseModel | BaseType)
13
-
14
-
15
- def extract_tool_return(
16
- response_model: type[_ResponseModelT],
17
- json_output: str | object,
18
- allow_partial: bool,
19
- ) -> _ResponseModelT:
20
- json_obj = (
21
- jiter.from_json(
22
- json_output.encode(),
23
- partial_mode="trailing-strings" if allow_partial else "off",
24
- )
25
- if isinstance(json_output, str)
26
- else json_output
27
- )
28
- if is_base_type(response_model):
29
- temp_model = convert_base_type_to_base_tool(response_model, BaseModel) # type: ignore
30
- if allow_partial:
31
- return partial(temp_model).model_validate(json_obj).value # type: ignore
32
- return temp_model.model_validate(json_obj).value # type: ignore
33
-
34
- if allow_partial:
35
- return partial(response_model).model_validate(json_obj) # type: ignore
36
- return response_model.model_validate(json_obj) # type: ignore
@@ -1,29 +0,0 @@
1
- """This module contains the `format_template` function."""
2
-
3
- import inspect
4
- from typing import Any
5
-
6
- from ._get_template_values import get_template_values
7
- from ._get_template_variables import get_template_variables
8
-
9
-
10
- def format_template(template: str, attrs: dict[str, Any]) -> str:
11
- """Formats the given prompt `template`
12
-
13
- Args:
14
- template: The template to format.
15
- attrs: The attributes to use for formatting.
16
-
17
- Returns:
18
- The formatted template.
19
-
20
- """
21
- dedented_template = inspect.cleandoc(template).strip()
22
- template_vars = get_template_variables(dedented_template, True)
23
-
24
- values = get_template_values(template_vars, attrs)
25
-
26
- # Remove any special format specs that are actually invalid normally
27
- dedented_template = dedented_template.replace(":lists", "").replace(":list", "")
28
-
29
- return dedented_template.format(**values).strip()
@@ -1,18 +0,0 @@
1
- """Utility for determining the type of an audio file from its bytes."""
2
-
3
-
4
- def get_audio_type(audio_data: bytes) -> str:
5
- if audio_data.startswith(b"RIFF") and audio_data[8:12] == b"WAVE":
6
- return "wav"
7
- elif audio_data.startswith(b"ID3") or audio_data.startswith(b"\xff\xfb"):
8
- return "mp3"
9
- elif audio_data.startswith(b"FORM") and audio_data[8:12] == b"AIFF":
10
- return "aiff"
11
- elif audio_data.startswith(b"\xff\xf1") or audio_data.startswith(b"\xff\xf9"):
12
- return "aac"
13
- elif audio_data.startswith(b"OggS"):
14
- return "ogg"
15
- elif audio_data.startswith(b"fLaC"):
16
- return "flac"
17
-
18
- raise ValueError("Unsupported audio type")
@@ -1,14 +0,0 @@
1
- """Function for binding `args` and `kwargs` as a dictionary to the fn's signature."""
2
-
3
- import inspect
4
- from collections.abc import Callable
5
- from typing import Any
6
-
7
-
8
- def get_fn_args(
9
- fn: Callable, args: tuple[object, ...], kwargs: dict[str, Any]
10
- ) -> dict[str, Any]:
11
- """Returns the `args` and `kwargs` as a dictionary bound by `fn`'s signature."""
12
- bound_args = inspect.signature(fn).bind_partial(*args, **kwargs)
13
- bound_args.apply_defaults()
14
- return bound_args.arguments
@@ -1,26 +0,0 @@
1
- """Utility for determining the type of an image from its bytes."""
2
-
3
-
4
- def get_image_type(image_data: bytes) -> str:
5
- if image_data.startswith(b"\xff\xd8\xff"):
6
- return "jpeg"
7
- elif image_data.startswith(b"\x89PNG\r\n\x1a\n"):
8
- return "png"
9
- elif image_data.startswith(b"GIF87a") or image_data.startswith(b"GIF89a"):
10
- return "gif"
11
- elif image_data.startswith(b"RIFF") and image_data[8:12] == b"WEBP":
12
- return "webp"
13
- elif image_data[4:12] in (
14
- b"ftypmif1",
15
- b"ftypmsf1",
16
- b"ftypheic",
17
- b"ftypheix",
18
- b"ftyphevc",
19
- b"ftyphevx",
20
- ):
21
- subtype = image_data[8:12]
22
- if subtype in (b"heic", b"heix"):
23
- return "heic"
24
- elif subtype in (b"mif1", b"msf1", b"hevc", b"hevx"):
25
- return "heif"
26
- raise ValueError("Unsupported image type")
@@ -1,17 +0,0 @@
1
- """Utility for pulling metadata from a call and merging with any dynamic metadata."""
2
-
3
- from collections.abc import Callable
4
-
5
- from pydantic import BaseModel
6
-
7
- from ..dynamic_config import BaseDynamicConfig
8
- from ..metadata import Metadata
9
-
10
-
11
- def get_metadata(
12
- fn: Callable | BaseModel, dynamic_config: BaseDynamicConfig
13
- ) -> Metadata:
14
- """Get the metadata from the function and merge with any dynamic metadata."""
15
- if dynamic_config and "metadata" in dynamic_config:
16
- return dynamic_config["metadata"]
17
- return getattr(fn, "_metadata", Metadata())
@@ -1,21 +0,0 @@
1
- """Utility for getting the possible most recent user message."""
2
-
3
- from typing import TypeVar
4
-
5
- _T = TypeVar("_T")
6
-
7
-
8
- def get_possible_user_message_param(messages: list[_T]) -> _T | None:
9
- """Get the possible most recent user message."""
10
- if not messages:
11
- return None
12
- most_recent_message = messages[-1]
13
- if (
14
- isinstance(most_recent_message, dict)
15
- and "role" in most_recent_message
16
- and most_recent_message["role"] == "user"
17
- ):
18
- return most_recent_message
19
- if hasattr(most_recent_message, "role") and most_recent_message.role == "user": # pyright: ignore [reportAttributeAccessIssue]
20
- return most_recent_message
21
- return None
@@ -1,25 +0,0 @@
1
- """Utility for pulling the `prompt_template` from a call or `BasePrompt`."""
2
-
3
- import inspect
4
- import os
5
- from collections.abc import Callable
6
-
7
- from pydantic import BaseModel
8
-
9
-
10
- def get_prompt_template(fn: Callable | BaseModel) -> str:
11
- """Get the metadata from the function and merge with any dynamic metadata."""
12
- prompt_template = getattr(fn, "_prompt_template", None)
13
- if prompt_template:
14
- return prompt_template
15
-
16
- docstring_prompt_enabled = os.getenv("MIRASCOPE_DOCSTRING_PROMPT_TEMPLATE")
17
- doc = fn.__doc__
18
- if not doc:
19
- raise ValueError("No prompt template set!")
20
- if docstring_prompt_enabled != "ENABLED":
21
- raise ValueError(
22
- "You must explicitly enable docstring prompt templates by setting "
23
- "`MIRASCOPE_DOCSTRING_PROMPT_TEMPLATE=ENABLED` in your environment."
24
- )
25
- return inspect.cleandoc(doc)
@@ -1,52 +0,0 @@
1
- """This module contains the `get_template_values` function."""
2
-
3
- from typing import Any
4
-
5
-
6
- def get_template_values(
7
- template_variables: list[tuple[str, str | None]], attrs: dict[str, Any]
8
- ) -> dict[str, Any]:
9
- """Returns the values of the given `template_variables` from the provided `attrs`.
10
-
11
- Args:
12
- template_variables: The variables to extract from the `attrs`.
13
- attrs: The attributes to extract the variables from.
14
-
15
- Returns:
16
- The values of the template variables.
17
- """
18
- values = {}
19
- attrs.update(attrs.pop("kwargs", {}))
20
- if "self" in attrs:
21
- values["self"] = attrs.get("self")
22
- for var, format_spec in template_variables:
23
- if var.startswith("self"):
24
- values["self"] = attrs.get("self")
25
- elif "." in var:
26
- var = var.split(".")[0]
27
- values[var] = attrs.get(var)
28
- continue
29
- elif format_spec in ["list", "lists"]:
30
- value = attrs[var]
31
- if format_spec == "list":
32
- if not isinstance(value, list):
33
- raise ValueError(
34
- f"Template variable '{var}' must be a list when using the "
35
- "'list' format spec."
36
- )
37
- values[var] = "\n".join([str(item) for item in attrs[var]])
38
- else:
39
- if not isinstance(value, list) or (
40
- value
41
- and not all(isinstance(item, list | tuple | set) for item in value)
42
- ):
43
- raise ValueError(
44
- f"Template variable '{var}' must be a list of lists when using "
45
- "the 'lists' format spec."
46
- )
47
- values[var] = "\n\n".join(
48
- ["\n".join([str(subitem) for subitem in item]) for item in value]
49
- )
50
- else:
51
- values[var] = attrs[var] if attrs[var] is not None else ""
52
- return values
@@ -1,38 +0,0 @@
1
- """This module provides a function to get the variables in a template string."""
2
-
3
- from string import Formatter
4
- from typing import Literal, overload
5
-
6
-
7
- @overload
8
- def get_template_variables(
9
- template: str, include_format_spec: Literal[True]
10
- ) -> list[tuple[str, str | None]]: ...
11
-
12
-
13
- @overload
14
- def get_template_variables(
15
- template: str, include_format_spec: Literal[False]
16
- ) -> list[str]: ...
17
-
18
-
19
- def get_template_variables(
20
- template: str, include_format_spec: bool
21
- ) -> list[str] | list[tuple[str, str | None]]:
22
- """Returns the variables in the given template string.
23
-
24
- Args:
25
- template: The template string to parse.
26
- include_format_spec: A boolean indicating whether to include format specifications.
27
-
28
- Returns:
29
- The variables in the template string.
30
- """
31
- if include_format_spec:
32
- return [
33
- (var, format_spec)
34
- for _, var, format_spec, _ in Formatter().parse(template)
35
- if var
36
- ]
37
- else:
38
- return [var for _, var, _, _ in Formatter().parse(template) if var]
@@ -1,15 +0,0 @@
1
- """A function generating content to request JSON mode from models without it."""
2
-
3
- import json
4
-
5
- from ..tool import BaseTool
6
-
7
-
8
- def json_mode_content(tool_type: type[BaseTool] | None) -> str:
9
- """Returns the content to request JSON mode from models without it."""
10
- if not tool_type:
11
- return "\n\nExtract ONLY a valid JSON dict using the schema."
12
- return f"""
13
-
14
- Extract ONLY a valid JSON dict (NOT THE SCHEMA) from the content that adheres to this schema:
15
- {json.dumps(tool_type.model_json_schema(), indent=2)}"""