mirascope 1.22.4__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 (812) hide show
  1. mirascope/__init__.py +5 -50
  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 +309 -13
  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-2.1.1.dist-info/WHEEL +4 -0
  437. mirascope-2.1.1.dist-info/licenses/LICENSE +21 -0
  438. mirascope/beta/__init__.py +0 -3
  439. mirascope/beta/openai/__init__.py +0 -17
  440. mirascope/beta/openai/realtime/__init__.py +0 -13
  441. mirascope/beta/openai/realtime/_utils/__init__.py +0 -3
  442. mirascope/beta/openai/realtime/_utils/_audio.py +0 -74
  443. mirascope/beta/openai/realtime/_utils/_protocols.py +0 -50
  444. mirascope/beta/openai/realtime/realtime.py +0 -500
  445. mirascope/beta/openai/realtime/recording.py +0 -98
  446. mirascope/beta/openai/realtime/tool.py +0 -113
  447. mirascope/beta/rag/__init__.py +0 -24
  448. mirascope/beta/rag/base/__init__.py +0 -22
  449. mirascope/beta/rag/base/chunkers/__init__.py +0 -2
  450. mirascope/beta/rag/base/chunkers/base_chunker.py +0 -37
  451. mirascope/beta/rag/base/chunkers/text_chunker.py +0 -33
  452. mirascope/beta/rag/base/config.py +0 -8
  453. mirascope/beta/rag/base/document.py +0 -11
  454. mirascope/beta/rag/base/embedders.py +0 -35
  455. mirascope/beta/rag/base/embedding_params.py +0 -18
  456. mirascope/beta/rag/base/embedding_response.py +0 -30
  457. mirascope/beta/rag/base/query_results.py +0 -7
  458. mirascope/beta/rag/base/vectorstore_params.py +0 -18
  459. mirascope/beta/rag/base/vectorstores.py +0 -37
  460. mirascope/beta/rag/chroma/__init__.py +0 -11
  461. mirascope/beta/rag/chroma/types.py +0 -57
  462. mirascope/beta/rag/chroma/vectorstores.py +0 -97
  463. mirascope/beta/rag/cohere/__init__.py +0 -11
  464. mirascope/beta/rag/cohere/embedders.py +0 -87
  465. mirascope/beta/rag/cohere/embedding_params.py +0 -29
  466. mirascope/beta/rag/cohere/embedding_response.py +0 -29
  467. mirascope/beta/rag/cohere/py.typed +0 -0
  468. mirascope/beta/rag/openai/__init__.py +0 -11
  469. mirascope/beta/rag/openai/embedders.py +0 -144
  470. mirascope/beta/rag/openai/embedding_params.py +0 -18
  471. mirascope/beta/rag/openai/embedding_response.py +0 -14
  472. mirascope/beta/rag/openai/py.typed +0 -0
  473. mirascope/beta/rag/pinecone/__init__.py +0 -19
  474. mirascope/beta/rag/pinecone/types.py +0 -143
  475. mirascope/beta/rag/pinecone/vectorstores.py +0 -148
  476. mirascope/beta/rag/weaviate/__init__.py +0 -6
  477. mirascope/beta/rag/weaviate/types.py +0 -92
  478. mirascope/beta/rag/weaviate/vectorstores.py +0 -103
  479. mirascope/core/__init__.py +0 -107
  480. mirascope/core/anthropic/__init__.py +0 -31
  481. mirascope/core/anthropic/_call.py +0 -67
  482. mirascope/core/anthropic/_call_kwargs.py +0 -13
  483. mirascope/core/anthropic/_utils/__init__.py +0 -16
  484. mirascope/core/anthropic/_utils/_convert_common_call_params.py +0 -25
  485. mirascope/core/anthropic/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
  486. mirascope/core/anthropic/_utils/_convert_message_params.py +0 -102
  487. mirascope/core/anthropic/_utils/_get_json_output.py +0 -31
  488. mirascope/core/anthropic/_utils/_handle_stream.py +0 -113
  489. mirascope/core/anthropic/_utils/_message_param_converter.py +0 -142
  490. mirascope/core/anthropic/_utils/_setup_call.py +0 -134
  491. mirascope/core/anthropic/call_params.py +0 -41
  492. mirascope/core/anthropic/call_response.py +0 -206
  493. mirascope/core/anthropic/call_response_chunk.py +0 -132
  494. mirascope/core/anthropic/dynamic_config.py +0 -40
  495. mirascope/core/anthropic/py.typed +0 -0
  496. mirascope/core/anthropic/stream.py +0 -147
  497. mirascope/core/anthropic/tool.py +0 -101
  498. mirascope/core/azure/__init__.py +0 -31
  499. mirascope/core/azure/_call.py +0 -67
  500. mirascope/core/azure/_call_kwargs.py +0 -13
  501. mirascope/core/azure/_utils/__init__.py +0 -14
  502. mirascope/core/azure/_utils/_convert_common_call_params.py +0 -26
  503. mirascope/core/azure/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
  504. mirascope/core/azure/_utils/_convert_message_params.py +0 -121
  505. mirascope/core/azure/_utils/_get_credential.py +0 -33
  506. mirascope/core/azure/_utils/_get_json_output.py +0 -27
  507. mirascope/core/azure/_utils/_handle_stream.py +0 -130
  508. mirascope/core/azure/_utils/_message_param_converter.py +0 -117
  509. mirascope/core/azure/_utils/_setup_call.py +0 -183
  510. mirascope/core/azure/call_params.py +0 -59
  511. mirascope/core/azure/call_response.py +0 -215
  512. mirascope/core/azure/call_response_chunk.py +0 -105
  513. mirascope/core/azure/dynamic_config.py +0 -30
  514. mirascope/core/azure/py.typed +0 -0
  515. mirascope/core/azure/stream.py +0 -147
  516. mirascope/core/azure/tool.py +0 -93
  517. mirascope/core/base/__init__.py +0 -84
  518. mirascope/core/base/_call_factory.py +0 -256
  519. mirascope/core/base/_create.py +0 -253
  520. mirascope/core/base/_extract.py +0 -175
  521. mirascope/core/base/_extract_with_tools.py +0 -189
  522. mirascope/core/base/_partial.py +0 -95
  523. mirascope/core/base/_utils/__init__.py +0 -92
  524. mirascope/core/base/_utils/_base_message_param_converter.py +0 -22
  525. mirascope/core/base/_utils/_base_type.py +0 -26
  526. mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -48
  527. mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
  528. mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -139
  529. mirascope/core/base/_utils/_convert_messages_to_message_params.py +0 -171
  530. mirascope/core/base/_utils/_convert_provider_finish_reason_to_finish_reason.py +0 -20
  531. mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
  532. mirascope/core/base/_utils/_extract_tool_return.py +0 -42
  533. mirascope/core/base/_utils/_fn_is_async.py +0 -15
  534. mirascope/core/base/_utils/_format_template.py +0 -32
  535. mirascope/core/base/_utils/_get_audio_type.py +0 -18
  536. mirascope/core/base/_utils/_get_common_usage.py +0 -20
  537. mirascope/core/base/_utils/_get_create_fn_or_async_create_fn.py +0 -137
  538. mirascope/core/base/_utils/_get_document_type.py +0 -7
  539. mirascope/core/base/_utils/_get_dynamic_configuration.py +0 -69
  540. mirascope/core/base/_utils/_get_fields_from_call_args.py +0 -34
  541. mirascope/core/base/_utils/_get_fn_args.py +0 -23
  542. mirascope/core/base/_utils/_get_image_dimensions.py +0 -39
  543. mirascope/core/base/_utils/_get_image_type.py +0 -26
  544. mirascope/core/base/_utils/_get_metadata.py +0 -17
  545. mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -21
  546. mirascope/core/base/_utils/_get_prompt_template.py +0 -28
  547. mirascope/core/base/_utils/_get_template_values.py +0 -51
  548. mirascope/core/base/_utils/_get_template_variables.py +0 -38
  549. mirascope/core/base/_utils/_get_unsupported_tool_config_keys.py +0 -10
  550. mirascope/core/base/_utils/_is_prompt_template.py +0 -24
  551. mirascope/core/base/_utils/_json_mode_content.py +0 -17
  552. mirascope/core/base/_utils/_messages_decorator.py +0 -121
  553. mirascope/core/base/_utils/_parse_content_template.py +0 -321
  554. mirascope/core/base/_utils/_parse_prompt_messages.py +0 -63
  555. mirascope/core/base/_utils/_pil_image_to_bytes.py +0 -13
  556. mirascope/core/base/_utils/_protocols.py +0 -901
  557. mirascope/core/base/_utils/_setup_call.py +0 -79
  558. mirascope/core/base/_utils/_setup_extract_tool.py +0 -30
  559. mirascope/core/base/call_kwargs.py +0 -13
  560. mirascope/core/base/call_params.py +0 -36
  561. mirascope/core/base/call_response.py +0 -340
  562. mirascope/core/base/call_response_chunk.py +0 -130
  563. mirascope/core/base/dynamic_config.py +0 -82
  564. mirascope/core/base/from_call_args.py +0 -30
  565. mirascope/core/base/merge_decorators.py +0 -59
  566. mirascope/core/base/message_param.py +0 -162
  567. mirascope/core/base/messages.py +0 -111
  568. mirascope/core/base/metadata.py +0 -13
  569. mirascope/core/base/prompt.py +0 -497
  570. mirascope/core/base/response_model_config_dict.py +0 -9
  571. mirascope/core/base/stream.py +0 -479
  572. mirascope/core/base/stream_config.py +0 -11
  573. mirascope/core/base/structured_stream.py +0 -296
  574. mirascope/core/base/tool.py +0 -205
  575. mirascope/core/base/toolkit.py +0 -176
  576. mirascope/core/base/types.py +0 -344
  577. mirascope/core/bedrock/__init__.py +0 -34
  578. mirascope/core/bedrock/_call.py +0 -68
  579. mirascope/core/bedrock/_call_kwargs.py +0 -12
  580. mirascope/core/bedrock/_types.py +0 -104
  581. mirascope/core/bedrock/_utils/__init__.py +0 -14
  582. mirascope/core/bedrock/_utils/_convert_common_call_params.py +0 -39
  583. mirascope/core/bedrock/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  584. mirascope/core/bedrock/_utils/_convert_message_params.py +0 -111
  585. mirascope/core/bedrock/_utils/_get_json_output.py +0 -30
  586. mirascope/core/bedrock/_utils/_handle_stream.py +0 -104
  587. mirascope/core/bedrock/_utils/_message_param_converter.py +0 -171
  588. mirascope/core/bedrock/_utils/_setup_call.py +0 -258
  589. mirascope/core/bedrock/call_params.py +0 -38
  590. mirascope/core/bedrock/call_response.py +0 -249
  591. mirascope/core/bedrock/call_response_chunk.py +0 -111
  592. mirascope/core/bedrock/dynamic_config.py +0 -37
  593. mirascope/core/bedrock/py.typed +0 -0
  594. mirascope/core/bedrock/stream.py +0 -154
  595. mirascope/core/bedrock/tool.py +0 -96
  596. mirascope/core/cohere/__init__.py +0 -30
  597. mirascope/core/cohere/_call.py +0 -67
  598. mirascope/core/cohere/_call_kwargs.py +0 -11
  599. mirascope/core/cohere/_types.py +0 -20
  600. mirascope/core/cohere/_utils/__init__.py +0 -14
  601. mirascope/core/cohere/_utils/_convert_common_call_params.py +0 -26
  602. mirascope/core/cohere/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -24
  603. mirascope/core/cohere/_utils/_convert_message_params.py +0 -32
  604. mirascope/core/cohere/_utils/_get_json_output.py +0 -30
  605. mirascope/core/cohere/_utils/_handle_stream.py +0 -35
  606. mirascope/core/cohere/_utils/_message_param_converter.py +0 -54
  607. mirascope/core/cohere/_utils/_setup_call.py +0 -150
  608. mirascope/core/cohere/call_params.py +0 -62
  609. mirascope/core/cohere/call_response.py +0 -205
  610. mirascope/core/cohere/call_response_chunk.py +0 -125
  611. mirascope/core/cohere/dynamic_config.py +0 -32
  612. mirascope/core/cohere/py.typed +0 -0
  613. mirascope/core/cohere/stream.py +0 -113
  614. mirascope/core/cohere/tool.py +0 -93
  615. mirascope/core/costs/__init__.py +0 -5
  616. mirascope/core/costs/_anthropic_calculate_cost.py +0 -219
  617. mirascope/core/costs/_azure_calculate_cost.py +0 -11
  618. mirascope/core/costs/_bedrock_calculate_cost.py +0 -15
  619. mirascope/core/costs/_cohere_calculate_cost.py +0 -44
  620. mirascope/core/costs/_gemini_calculate_cost.py +0 -67
  621. mirascope/core/costs/_google_calculate_cost.py +0 -427
  622. mirascope/core/costs/_groq_calculate_cost.py +0 -156
  623. mirascope/core/costs/_litellm_calculate_cost.py +0 -11
  624. mirascope/core/costs/_mistral_calculate_cost.py +0 -64
  625. mirascope/core/costs/_openai_calculate_cost.py +0 -416
  626. mirascope/core/costs/_vertex_calculate_cost.py +0 -67
  627. mirascope/core/costs/_xai_calculate_cost.py +0 -104
  628. mirascope/core/costs/calculate_cost.py +0 -86
  629. mirascope/core/gemini/__init__.py +0 -40
  630. mirascope/core/gemini/_call.py +0 -67
  631. mirascope/core/gemini/_call_kwargs.py +0 -12
  632. mirascope/core/gemini/_utils/__init__.py +0 -14
  633. mirascope/core/gemini/_utils/_convert_common_call_params.py +0 -39
  634. mirascope/core/gemini/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  635. mirascope/core/gemini/_utils/_convert_message_params.py +0 -156
  636. mirascope/core/gemini/_utils/_get_json_output.py +0 -35
  637. mirascope/core/gemini/_utils/_handle_stream.py +0 -33
  638. mirascope/core/gemini/_utils/_message_param_converter.py +0 -209
  639. mirascope/core/gemini/_utils/_setup_call.py +0 -149
  640. mirascope/core/gemini/call_params.py +0 -52
  641. mirascope/core/gemini/call_response.py +0 -216
  642. mirascope/core/gemini/call_response_chunk.py +0 -100
  643. mirascope/core/gemini/dynamic_config.py +0 -26
  644. mirascope/core/gemini/stream.py +0 -120
  645. mirascope/core/gemini/tool.py +0 -104
  646. mirascope/core/google/__init__.py +0 -29
  647. mirascope/core/google/_call.py +0 -67
  648. mirascope/core/google/_call_kwargs.py +0 -13
  649. mirascope/core/google/_utils/__init__.py +0 -14
  650. mirascope/core/google/_utils/_convert_common_call_params.py +0 -38
  651. mirascope/core/google/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -27
  652. mirascope/core/google/_utils/_convert_message_params.py +0 -206
  653. mirascope/core/google/_utils/_get_json_output.py +0 -37
  654. mirascope/core/google/_utils/_handle_stream.py +0 -35
  655. mirascope/core/google/_utils/_message_param_converter.py +0 -162
  656. mirascope/core/google/_utils/_setup_call.py +0 -201
  657. mirascope/core/google/_utils/_validate_media_type.py +0 -34
  658. mirascope/core/google/call_params.py +0 -22
  659. mirascope/core/google/call_response.py +0 -232
  660. mirascope/core/google/call_response_chunk.py +0 -110
  661. mirascope/core/google/dynamic_config.py +0 -26
  662. mirascope/core/google/stream.py +0 -143
  663. mirascope/core/google/tool.py +0 -146
  664. mirascope/core/groq/__init__.py +0 -30
  665. mirascope/core/groq/_call.py +0 -67
  666. mirascope/core/groq/_call_kwargs.py +0 -13
  667. mirascope/core/groq/_utils/__init__.py +0 -14
  668. mirascope/core/groq/_utils/_convert_common_call_params.py +0 -26
  669. mirascope/core/groq/_utils/_convert_message_params.py +0 -112
  670. mirascope/core/groq/_utils/_get_json_output.py +0 -27
  671. mirascope/core/groq/_utils/_handle_stream.py +0 -123
  672. mirascope/core/groq/_utils/_message_param_converter.py +0 -89
  673. mirascope/core/groq/_utils/_setup_call.py +0 -132
  674. mirascope/core/groq/call_params.py +0 -52
  675. mirascope/core/groq/call_response.py +0 -213
  676. mirascope/core/groq/call_response_chunk.py +0 -104
  677. mirascope/core/groq/dynamic_config.py +0 -29
  678. mirascope/core/groq/py.typed +0 -0
  679. mirascope/core/groq/stream.py +0 -135
  680. mirascope/core/groq/tool.py +0 -80
  681. mirascope/core/litellm/__init__.py +0 -28
  682. mirascope/core/litellm/_call.py +0 -67
  683. mirascope/core/litellm/_utils/__init__.py +0 -5
  684. mirascope/core/litellm/_utils/_setup_call.py +0 -109
  685. mirascope/core/litellm/call_params.py +0 -10
  686. mirascope/core/litellm/call_response.py +0 -24
  687. mirascope/core/litellm/call_response_chunk.py +0 -14
  688. mirascope/core/litellm/dynamic_config.py +0 -8
  689. mirascope/core/litellm/py.typed +0 -0
  690. mirascope/core/litellm/stream.py +0 -86
  691. mirascope/core/litellm/tool.py +0 -13
  692. mirascope/core/mistral/__init__.py +0 -36
  693. mirascope/core/mistral/_call.py +0 -65
  694. mirascope/core/mistral/_call_kwargs.py +0 -19
  695. mirascope/core/mistral/_utils/__init__.py +0 -14
  696. mirascope/core/mistral/_utils/_convert_common_call_params.py +0 -24
  697. mirascope/core/mistral/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -22
  698. mirascope/core/mistral/_utils/_convert_message_params.py +0 -122
  699. mirascope/core/mistral/_utils/_get_json_output.py +0 -34
  700. mirascope/core/mistral/_utils/_handle_stream.py +0 -139
  701. mirascope/core/mistral/_utils/_message_param_converter.py +0 -176
  702. mirascope/core/mistral/_utils/_setup_call.py +0 -154
  703. mirascope/core/mistral/call_params.py +0 -36
  704. mirascope/core/mistral/call_response.py +0 -205
  705. mirascope/core/mistral/call_response_chunk.py +0 -105
  706. mirascope/core/mistral/dynamic_config.py +0 -33
  707. mirascope/core/mistral/py.typed +0 -0
  708. mirascope/core/mistral/stream.py +0 -120
  709. mirascope/core/mistral/tool.py +0 -80
  710. mirascope/core/openai/__init__.py +0 -31
  711. mirascope/core/openai/_call.py +0 -67
  712. mirascope/core/openai/_call_kwargs.py +0 -13
  713. mirascope/core/openai/_utils/__init__.py +0 -14
  714. mirascope/core/openai/_utils/_convert_common_call_params.py +0 -26
  715. mirascope/core/openai/_utils/_convert_message_params.py +0 -146
  716. mirascope/core/openai/_utils/_get_json_output.py +0 -31
  717. mirascope/core/openai/_utils/_handle_stream.py +0 -138
  718. mirascope/core/openai/_utils/_message_param_converter.py +0 -105
  719. mirascope/core/openai/_utils/_setup_call.py +0 -155
  720. mirascope/core/openai/call_params.py +0 -91
  721. mirascope/core/openai/call_response.py +0 -273
  722. mirascope/core/openai/call_response_chunk.py +0 -139
  723. mirascope/core/openai/dynamic_config.py +0 -34
  724. mirascope/core/openai/py.typed +0 -0
  725. mirascope/core/openai/stream.py +0 -185
  726. mirascope/core/openai/tool.py +0 -101
  727. mirascope/core/py.typed +0 -0
  728. mirascope/core/vertex/__init__.py +0 -45
  729. mirascope/core/vertex/_call.py +0 -62
  730. mirascope/core/vertex/_call_kwargs.py +0 -12
  731. mirascope/core/vertex/_utils/__init__.py +0 -14
  732. mirascope/core/vertex/_utils/_convert_common_call_params.py +0 -37
  733. mirascope/core/vertex/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
  734. mirascope/core/vertex/_utils/_convert_message_params.py +0 -171
  735. mirascope/core/vertex/_utils/_get_json_output.py +0 -36
  736. mirascope/core/vertex/_utils/_handle_stream.py +0 -33
  737. mirascope/core/vertex/_utils/_message_param_converter.py +0 -133
  738. mirascope/core/vertex/_utils/_setup_call.py +0 -160
  739. mirascope/core/vertex/call_params.py +0 -24
  740. mirascope/core/vertex/call_response.py +0 -206
  741. mirascope/core/vertex/call_response_chunk.py +0 -99
  742. mirascope/core/vertex/dynamic_config.py +0 -28
  743. mirascope/core/vertex/stream.py +0 -119
  744. mirascope/core/vertex/tool.py +0 -101
  745. mirascope/core/xai/__init__.py +0 -28
  746. mirascope/core/xai/_call.py +0 -67
  747. mirascope/core/xai/_utils/__init__.py +0 -5
  748. mirascope/core/xai/_utils/_setup_call.py +0 -113
  749. mirascope/core/xai/call_params.py +0 -10
  750. mirascope/core/xai/call_response.py +0 -16
  751. mirascope/core/xai/call_response_chunk.py +0 -14
  752. mirascope/core/xai/dynamic_config.py +0 -8
  753. mirascope/core/xai/py.typed +0 -0
  754. mirascope/core/xai/stream.py +0 -57
  755. mirascope/core/xai/tool.py +0 -13
  756. mirascope/experimental/graphs/__init__.py +0 -5
  757. mirascope/experimental/graphs/finite_state_machine.py +0 -714
  758. mirascope/integrations/__init__.py +0 -16
  759. mirascope/integrations/_middleware_factory.py +0 -403
  760. mirascope/integrations/langfuse/__init__.py +0 -3
  761. mirascope/integrations/langfuse/_utils.py +0 -114
  762. mirascope/integrations/langfuse/_with_langfuse.py +0 -70
  763. mirascope/integrations/logfire/__init__.py +0 -3
  764. mirascope/integrations/logfire/_utils.py +0 -225
  765. mirascope/integrations/logfire/_with_logfire.py +0 -63
  766. mirascope/integrations/otel/__init__.py +0 -10
  767. mirascope/integrations/otel/_utils.py +0 -270
  768. mirascope/integrations/otel/_with_hyperdx.py +0 -60
  769. mirascope/integrations/otel/_with_otel.py +0 -59
  770. mirascope/integrations/tenacity.py +0 -14
  771. mirascope/llm/_call.py +0 -401
  772. mirascope/llm/_context.py +0 -384
  773. mirascope/llm/_override.py +0 -3639
  774. mirascope/llm/_protocols.py +0 -500
  775. mirascope/llm/_response_metaclass.py +0 -31
  776. mirascope/llm/call_response.py +0 -167
  777. mirascope/llm/call_response_chunk.py +0 -66
  778. mirascope/llm/stream.py +0 -162
  779. mirascope/llm/tool.py +0 -64
  780. mirascope/mcp/__init__.py +0 -7
  781. mirascope/mcp/_utils.py +0 -277
  782. mirascope/mcp/client.py +0 -167
  783. mirascope/mcp/server.py +0 -356
  784. mirascope/mcp/tools.py +0 -110
  785. mirascope/py.typed +0 -0
  786. mirascope/retries/__init__.py +0 -11
  787. mirascope/retries/fallback.py +0 -128
  788. mirascope/retries/tenacity.py +0 -50
  789. mirascope/tools/__init__.py +0 -37
  790. mirascope/tools/base.py +0 -98
  791. mirascope/tools/system/__init__.py +0 -0
  792. mirascope/tools/system/_docker_operation.py +0 -166
  793. mirascope/tools/system/_file_system.py +0 -267
  794. mirascope/tools/web/__init__.py +0 -0
  795. mirascope/tools/web/_duckduckgo.py +0 -111
  796. mirascope/tools/web/_httpx.py +0 -125
  797. mirascope/tools/web/_parse_url_content.py +0 -94
  798. mirascope/tools/web/_requests.py +0 -54
  799. mirascope/v0/__init__.py +0 -43
  800. mirascope/v0/anthropic.py +0 -54
  801. mirascope/v0/base/__init__.py +0 -12
  802. mirascope/v0/base/calls.py +0 -118
  803. mirascope/v0/base/extractors.py +0 -122
  804. mirascope/v0/base/ops_utils.py +0 -207
  805. mirascope/v0/base/prompts.py +0 -48
  806. mirascope/v0/base/types.py +0 -14
  807. mirascope/v0/base/utils.py +0 -21
  808. mirascope/v0/openai.py +0 -54
  809. mirascope-1.22.4.dist-info/METADATA +0 -169
  810. mirascope-1.22.4.dist-info/RECORD +0 -377
  811. mirascope-1.22.4.dist-info/WHEEL +0 -4
  812. mirascope-1.22.4.dist-info/licenses/LICENSE +0 -21
@@ -0,0 +1,484 @@
1
+ """Concrete Prompt classes for generating messages with tools and formatting."""
2
+
3
+ from collections.abc import Callable, Sequence
4
+ from dataclasses import dataclass, field
5
+ from typing import Any, Generic, TypeVar, overload
6
+
7
+ from ..._utils import copy_function_metadata
8
+ from ..context import Context, DepsT
9
+ from ..formatting import FormatSpec, FormattableT
10
+ from ..messages import Message, promote_to_messages
11
+ from ..models import Model
12
+ from ..providers import ModelId
13
+ from ..responses import (
14
+ AsyncContextResponse,
15
+ AsyncContextStreamResponse,
16
+ AsyncResponse,
17
+ AsyncStreamResponse,
18
+ ContextResponse,
19
+ ContextStreamResponse,
20
+ Response,
21
+ StreamResponse,
22
+ )
23
+ from ..tools import AsyncContextToolkit, AsyncToolkit, ContextToolkit, Toolkit
24
+ from ..types import P
25
+ from .protocols import (
26
+ AsyncContextMessageTemplate,
27
+ AsyncMessageTemplate,
28
+ ContextMessageTemplate,
29
+ MessageTemplate,
30
+ )
31
+
32
+ FunctionT = TypeVar("FunctionT", bound=Callable[..., Any])
33
+
34
+
35
+ @dataclass(kw_only=True)
36
+ class BasePrompt(Generic[FunctionT]):
37
+ """Base class for all Prompt types with shared metadata functionality."""
38
+
39
+ fn: FunctionT
40
+ """The underlying prompt function that generates message content."""
41
+
42
+ __name__: str = field(init=False, repr=False, default="")
43
+ """The name of the underlying function (preserved for decorator stacking)."""
44
+
45
+ def __post_init__(self) -> None:
46
+ """Preserve standard function attributes for decorator stacking."""
47
+ copy_function_metadata(self, self.fn)
48
+
49
+
50
+ @dataclass
51
+ class Prompt(BasePrompt[MessageTemplate[P]], Generic[P, FormattableT]):
52
+ """A prompt that can be called with a model to generate a response.
53
+
54
+ Created by decorating a `MessageTemplate` with `llm.prompt`. The decorated
55
+ function becomes callable with a `Model` to generate LLM responses.
56
+
57
+ A `Prompt` is essentially: `MessageTemplate` + tools + format.
58
+ It can be invoked with a model: `prompt(model, *args, **kwargs)`.
59
+ """
60
+
61
+ toolkit: Toolkit
62
+ """The toolkit containing this prompt's tools."""
63
+
64
+ format: FormatSpec[FormattableT] | None
65
+ """The response format for the generated response."""
66
+
67
+ def messages(self, *args: P.args, **kwargs: P.kwargs) -> Sequence[Message]:
68
+ """Return the `Messages` from invoking this prompt."""
69
+ return promote_to_messages(self.fn(*args, **kwargs))
70
+
71
+ @overload
72
+ def __call__(
73
+ self: "Prompt[P, None]",
74
+ model: Model | ModelId,
75
+ *args: P.args,
76
+ **kwargs: P.kwargs,
77
+ ) -> Response: ...
78
+
79
+ @overload
80
+ def __call__(
81
+ self: "Prompt[P, FormattableT]",
82
+ model: Model | ModelId,
83
+ *args: P.args,
84
+ **kwargs: P.kwargs,
85
+ ) -> Response[FormattableT]: ...
86
+
87
+ def __call__(
88
+ self, model: Model | ModelId, *args: P.args, **kwargs: P.kwargs
89
+ ) -> Response | Response[FormattableT]:
90
+ """Generates a response using the provided model."""
91
+ return self.call(model, *args, **kwargs)
92
+
93
+ @overload
94
+ def call(
95
+ self: "Prompt[P, None]",
96
+ model: Model | ModelId,
97
+ *args: P.args,
98
+ **kwargs: P.kwargs,
99
+ ) -> Response: ...
100
+
101
+ @overload
102
+ def call(
103
+ self: "Prompt[P, FormattableT]",
104
+ model: Model | ModelId,
105
+ *args: P.args,
106
+ **kwargs: P.kwargs,
107
+ ) -> Response[FormattableT]: ...
108
+
109
+ def call(
110
+ self, model: Model | ModelId, *args: P.args, **kwargs: P.kwargs
111
+ ) -> Response | Response[FormattableT]:
112
+ """Generates a response using the provided model."""
113
+ if isinstance(model, str):
114
+ model = Model(model)
115
+ messages = self.messages(*args, **kwargs)
116
+ return model.call(messages, tools=self.toolkit, format=self.format)
117
+
118
+ @overload
119
+ def stream(
120
+ self: "Prompt[P, None]",
121
+ model: Model | ModelId,
122
+ *args: P.args,
123
+ **kwargs: P.kwargs,
124
+ ) -> StreamResponse: ...
125
+
126
+ @overload
127
+ def stream(
128
+ self: "Prompt[P, FormattableT]",
129
+ model: Model | ModelId,
130
+ *args: P.args,
131
+ **kwargs: P.kwargs,
132
+ ) -> StreamResponse[FormattableT]: ...
133
+
134
+ def stream(
135
+ self, model: Model | ModelId, *args: P.args, **kwargs: P.kwargs
136
+ ) -> StreamResponse | StreamResponse[FormattableT]:
137
+ """Generates a streaming response using the provided model."""
138
+ if isinstance(model, str):
139
+ model = Model(model)
140
+ messages = self.messages(*args, **kwargs)
141
+ return model.stream(messages, tools=self.toolkit, format=self.format)
142
+
143
+
144
+ @dataclass
145
+ class AsyncPrompt(BasePrompt[AsyncMessageTemplate[P]], Generic[P, FormattableT]):
146
+ """An async prompt that can be called with a model to generate a response.
147
+
148
+ Created by decorating an async `MessageTemplate` with `llm.prompt`. The decorated
149
+ async function becomes callable with a `Model` to generate LLM responses asynchronously.
150
+
151
+ An `AsyncPrompt` is essentially: async `MessageTemplate` + tools + format.
152
+ It can be invoked with a model: `await prompt(model, *args, **kwargs)`.
153
+ """
154
+
155
+ toolkit: AsyncToolkit
156
+ """The toolkit containing this prompt's async tools."""
157
+
158
+ format: FormatSpec[FormattableT] | None
159
+ """The response format for the generated response."""
160
+
161
+ async def messages(self, *args: P.args, **kwargs: P.kwargs) -> Sequence[Message]:
162
+ """Return the `Messages` from invoking this prompt."""
163
+ return promote_to_messages(await self.fn(*args, **kwargs))
164
+
165
+ @overload
166
+ async def __call__(
167
+ self: "AsyncPrompt[P, None]",
168
+ model: Model | ModelId,
169
+ *args: P.args,
170
+ **kwargs: P.kwargs,
171
+ ) -> AsyncResponse: ...
172
+
173
+ @overload
174
+ async def __call__(
175
+ self: "AsyncPrompt[P, FormattableT]",
176
+ model: Model | ModelId,
177
+ *args: P.args,
178
+ **kwargs: P.kwargs,
179
+ ) -> AsyncResponse[FormattableT]: ...
180
+
181
+ async def __call__(
182
+ self, model: Model | ModelId, *args: P.args, **kwargs: P.kwargs
183
+ ) -> AsyncResponse | AsyncResponse[FormattableT]:
184
+ """Generates a response using the provided model asynchronously."""
185
+ return await self.call(model, *args, **kwargs)
186
+
187
+ @overload
188
+ async def call(
189
+ self: "AsyncPrompt[P, None]",
190
+ model: Model | ModelId,
191
+ *args: P.args,
192
+ **kwargs: P.kwargs,
193
+ ) -> AsyncResponse: ...
194
+
195
+ @overload
196
+ async def call(
197
+ self: "AsyncPrompt[P, FormattableT]",
198
+ model: Model | ModelId,
199
+ *args: P.args,
200
+ **kwargs: P.kwargs,
201
+ ) -> AsyncResponse[FormattableT]: ...
202
+
203
+ async def call(
204
+ self, model: Model | ModelId, *args: P.args, **kwargs: P.kwargs
205
+ ) -> AsyncResponse | AsyncResponse[FormattableT]:
206
+ """Generates a response using the provided model asynchronously."""
207
+ if isinstance(model, str):
208
+ model = Model(model)
209
+ messages = await self.messages(*args, **kwargs)
210
+ return await model.call_async(messages, tools=self.toolkit, format=self.format)
211
+
212
+ @overload
213
+ async def stream(
214
+ self: "AsyncPrompt[P, None]",
215
+ model: Model | ModelId,
216
+ *args: P.args,
217
+ **kwargs: P.kwargs,
218
+ ) -> AsyncStreamResponse: ...
219
+
220
+ @overload
221
+ async def stream(
222
+ self: "AsyncPrompt[P, FormattableT]",
223
+ model: Model | ModelId,
224
+ *args: P.args,
225
+ **kwargs: P.kwargs,
226
+ ) -> AsyncStreamResponse[FormattableT]: ...
227
+
228
+ async def stream(
229
+ self, model: Model | ModelId, *args: P.args, **kwargs: P.kwargs
230
+ ) -> AsyncStreamResponse | AsyncStreamResponse[FormattableT]:
231
+ """Generates a streaming response using the provided model asynchronously."""
232
+ if isinstance(model, str):
233
+ model = Model(model)
234
+ messages = await self.messages(*args, **kwargs)
235
+ return await model.stream_async(
236
+ messages, tools=self.toolkit, format=self.format
237
+ )
238
+
239
+
240
+ @dataclass
241
+ class ContextPrompt(
242
+ BasePrompt[ContextMessageTemplate[P, DepsT]], Generic[P, DepsT, FormattableT]
243
+ ):
244
+ """A context-aware prompt that can be called with a model to generate a response.
245
+
246
+ Created by decorating a `ContextMessageTemplate` with `llm.prompt`. The decorated
247
+ function (with first parameter `'ctx'` of type `Context[DepsT]`) becomes callable
248
+ with a `Model` to generate LLM responses with context dependencies.
249
+
250
+ A `ContextPrompt` is essentially: `ContextMessageTemplate` + tools + format.
251
+ It can be invoked with a model: `prompt(model, ctx, *args, **kwargs)`.
252
+ """
253
+
254
+ toolkit: ContextToolkit[DepsT]
255
+ """The toolkit containing this prompt's context-aware tools."""
256
+
257
+ format: FormatSpec[FormattableT] | None
258
+ """The response format for the generated response."""
259
+
260
+ def messages(
261
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
262
+ ) -> Sequence[Message]:
263
+ """Return the `Messages` from invoking this prompt."""
264
+ return promote_to_messages(self.fn(ctx, *args, **kwargs))
265
+
266
+ @overload
267
+ def __call__(
268
+ self: "ContextPrompt[P, DepsT, None]",
269
+ model: Model | ModelId,
270
+ ctx: Context[DepsT],
271
+ *args: P.args,
272
+ **kwargs: P.kwargs,
273
+ ) -> ContextResponse[DepsT, None]: ...
274
+
275
+ @overload
276
+ def __call__(
277
+ self: "ContextPrompt[P, DepsT, FormattableT]",
278
+ model: Model | ModelId,
279
+ ctx: Context[DepsT],
280
+ *args: P.args,
281
+ **kwargs: P.kwargs,
282
+ ) -> ContextResponse[DepsT, FormattableT]: ...
283
+
284
+ def __call__(
285
+ self,
286
+ model: Model | ModelId,
287
+ ctx: Context[DepsT],
288
+ *args: P.args,
289
+ **kwargs: P.kwargs,
290
+ ) -> ContextResponse[DepsT, None] | ContextResponse[DepsT, FormattableT]:
291
+ """Generates a response using the provided model."""
292
+ return self.call(model, ctx, *args, **kwargs)
293
+
294
+ @overload
295
+ def call(
296
+ self: "ContextPrompt[P, DepsT, None]",
297
+ model: Model | ModelId,
298
+ ctx: Context[DepsT],
299
+ *args: P.args,
300
+ **kwargs: P.kwargs,
301
+ ) -> ContextResponse[DepsT, None]: ...
302
+
303
+ @overload
304
+ def call(
305
+ self: "ContextPrompt[P, DepsT, FormattableT]",
306
+ model: Model | ModelId,
307
+ ctx: Context[DepsT],
308
+ *args: P.args,
309
+ **kwargs: P.kwargs,
310
+ ) -> ContextResponse[DepsT, FormattableT]: ...
311
+
312
+ def call(
313
+ self,
314
+ model: Model | ModelId,
315
+ ctx: Context[DepsT],
316
+ *args: P.args,
317
+ **kwargs: P.kwargs,
318
+ ) -> ContextResponse[DepsT, None] | ContextResponse[DepsT, FormattableT]:
319
+ """Generates a response using the provided model."""
320
+ if isinstance(model, str):
321
+ model = Model(model)
322
+ messages = self.messages(ctx, *args, **kwargs)
323
+ return model.context_call(
324
+ messages, ctx=ctx, tools=self.toolkit, format=self.format
325
+ )
326
+
327
+ @overload
328
+ def stream(
329
+ self: "ContextPrompt[P, DepsT, None]",
330
+ model: Model | ModelId,
331
+ ctx: Context[DepsT],
332
+ *args: P.args,
333
+ **kwargs: P.kwargs,
334
+ ) -> ContextStreamResponse[DepsT, None]: ...
335
+
336
+ @overload
337
+ def stream(
338
+ self: "ContextPrompt[P, DepsT, FormattableT]",
339
+ model: Model | ModelId,
340
+ ctx: Context[DepsT],
341
+ *args: P.args,
342
+ **kwargs: P.kwargs,
343
+ ) -> ContextStreamResponse[DepsT, FormattableT]: ...
344
+
345
+ def stream(
346
+ self,
347
+ model: Model | ModelId,
348
+ ctx: Context[DepsT],
349
+ *args: P.args,
350
+ **kwargs: P.kwargs,
351
+ ) -> (
352
+ ContextStreamResponse[DepsT, None] | ContextStreamResponse[DepsT, FormattableT]
353
+ ):
354
+ """Generates a streaming response using the provided model."""
355
+ if isinstance(model, str):
356
+ model = Model(model)
357
+ messages = self.messages(ctx, *args, **kwargs)
358
+ return model.context_stream(
359
+ messages, ctx=ctx, tools=self.toolkit, format=self.format
360
+ )
361
+
362
+
363
+ @dataclass
364
+ class AsyncContextPrompt(
365
+ BasePrompt[AsyncContextMessageTemplate[P, DepsT]], Generic[P, DepsT, FormattableT]
366
+ ):
367
+ """An async context-aware prompt that can be called with a model to generate a response.
368
+
369
+ Created by decorating an async `ContextMessageTemplate` with `llm.prompt`. The decorated
370
+ async function (with first parameter `'ctx'` of type `Context[DepsT]`) becomes callable
371
+ with a `Model` to generate LLM responses asynchronously with context dependencies.
372
+
373
+ An `AsyncContextPrompt` is essentially: async `ContextMessageTemplate` + tools + format.
374
+ It can be invoked with a model: `await prompt(model, ctx, *args, **kwargs)`.
375
+ """
376
+
377
+ toolkit: AsyncContextToolkit[DepsT]
378
+ """The toolkit containing this prompt's async context-aware tools."""
379
+
380
+ format: FormatSpec[FormattableT] | None
381
+ """The response format for the generated response."""
382
+
383
+ async def messages(
384
+ self, ctx: Context[DepsT], *args: P.args, **kwargs: P.kwargs
385
+ ) -> Sequence[Message]:
386
+ """Return the `Messages` from invoking this prompt."""
387
+ return promote_to_messages(await self.fn(ctx, *args, **kwargs))
388
+
389
+ @overload
390
+ async def __call__(
391
+ self: "AsyncContextPrompt[P, DepsT, None]",
392
+ model: Model | ModelId,
393
+ ctx: Context[DepsT],
394
+ *args: P.args,
395
+ **kwargs: P.kwargs,
396
+ ) -> AsyncContextResponse[DepsT, None]: ...
397
+
398
+ @overload
399
+ async def __call__(
400
+ self: "AsyncContextPrompt[P, DepsT, FormattableT]",
401
+ model: Model | ModelId,
402
+ ctx: Context[DepsT],
403
+ *args: P.args,
404
+ **kwargs: P.kwargs,
405
+ ) -> AsyncContextResponse[DepsT, FormattableT]: ...
406
+
407
+ async def __call__(
408
+ self,
409
+ model: Model | ModelId,
410
+ ctx: Context[DepsT],
411
+ *args: P.args,
412
+ **kwargs: P.kwargs,
413
+ ) -> AsyncContextResponse[DepsT, None] | AsyncContextResponse[DepsT, FormattableT]:
414
+ """Generates a response using the provided model asynchronously."""
415
+ return await self.call(model, ctx, *args, **kwargs)
416
+
417
+ @overload
418
+ async def call(
419
+ self: "AsyncContextPrompt[P, DepsT, None]",
420
+ model: Model | ModelId,
421
+ ctx: Context[DepsT],
422
+ *args: P.args,
423
+ **kwargs: P.kwargs,
424
+ ) -> AsyncContextResponse[DepsT, None]: ...
425
+
426
+ @overload
427
+ async def call(
428
+ self: "AsyncContextPrompt[P, DepsT, FormattableT]",
429
+ model: Model | ModelId,
430
+ ctx: Context[DepsT],
431
+ *args: P.args,
432
+ **kwargs: P.kwargs,
433
+ ) -> AsyncContextResponse[DepsT, FormattableT]: ...
434
+
435
+ async def call(
436
+ self,
437
+ model: Model | ModelId,
438
+ ctx: Context[DepsT],
439
+ *args: P.args,
440
+ **kwargs: P.kwargs,
441
+ ) -> AsyncContextResponse[DepsT, None] | AsyncContextResponse[DepsT, FormattableT]:
442
+ """Generates a response using the provided model asynchronously."""
443
+ if isinstance(model, str):
444
+ model = Model(model)
445
+ messages = await self.messages(ctx, *args, **kwargs)
446
+ return await model.context_call_async(
447
+ messages, ctx=ctx, tools=self.toolkit, format=self.format
448
+ )
449
+
450
+ @overload
451
+ async def stream(
452
+ self: "AsyncContextPrompt[P, DepsT, None]",
453
+ model: Model | ModelId,
454
+ ctx: Context[DepsT],
455
+ *args: P.args,
456
+ **kwargs: P.kwargs,
457
+ ) -> AsyncContextStreamResponse[DepsT, None]: ...
458
+
459
+ @overload
460
+ async def stream(
461
+ self: "AsyncContextPrompt[P, DepsT, FormattableT]",
462
+ model: Model | ModelId,
463
+ ctx: Context[DepsT],
464
+ *args: P.args,
465
+ **kwargs: P.kwargs,
466
+ ) -> AsyncContextStreamResponse[DepsT, FormattableT]: ...
467
+
468
+ async def stream(
469
+ self,
470
+ model: Model | ModelId,
471
+ ctx: Context[DepsT],
472
+ *args: P.args,
473
+ **kwargs: P.kwargs,
474
+ ) -> (
475
+ AsyncContextStreamResponse[DepsT, None]
476
+ | AsyncContextStreamResponse[DepsT, FormattableT]
477
+ ):
478
+ """Generates a streaming response using the provided model asynchronously."""
479
+ if isinstance(model, str):
480
+ model = Model(model)
481
+ messages = await self.messages(ctx, *args, **kwargs)
482
+ return await model.context_stream_async(
483
+ messages, ctx=ctx, tools=self.toolkit, format=self.format
484
+ )
@@ -0,0 +1,65 @@
1
+ """Types for prompt functions."""
2
+
3
+ from collections.abc import Sequence
4
+ from typing import Protocol
5
+
6
+ from ..context import Context, DepsT
7
+ from ..messages import Message, UserContent
8
+ from ..types import P
9
+
10
+
11
+ class MessageTemplate(Protocol[P]):
12
+ """Protocol for a prompt function that returns `UserContent` or `Sequence[Message]`.
13
+
14
+ A `MessageTemplate` is a raw function that returns prompt content. It can be
15
+ converted by the `llm.prompt` decorator into a `Prompt` (callable with a `Model`),
16
+ or by the `llm.call` decorator into a `Call` (`Prompt` + `Model`).
17
+ """
18
+
19
+ def __call__(
20
+ self, *args: P.args, **kwargs: P.kwargs
21
+ ) -> UserContent | Sequence[Message]: ...
22
+
23
+
24
+ class AsyncMessageTemplate(Protocol[P]):
25
+ """Protocol for an async prompt function that returns `UserContent` or `Sequence[Message]`.
26
+
27
+ An async `MessageTemplate` that can be converted by the `llm.prompt` decorator
28
+ into an `AsyncPrompt`, or by the `llm.call` decorator into an `AsyncCall`.
29
+ """
30
+
31
+ async def __call__(
32
+ self, *args: P.args, **kwargs: P.kwargs
33
+ ) -> UserContent | Sequence[Message]: ...
34
+
35
+
36
+ class ContextMessageTemplate(Protocol[P, DepsT]):
37
+ """Protocol for a context-aware prompt function that returns `UserContent` or `Sequence[Message]`.
38
+
39
+ A `MessageTemplate` with a first parameter named `'ctx'` of type `Context[DepsT]`.
40
+ Can be converted by the `llm.prompt` decorator into a `ContextPrompt`, or by
41
+ the `llm.call` decorator into a `ContextCall`.
42
+ """
43
+
44
+ def __call__(
45
+ self,
46
+ ctx: Context[DepsT],
47
+ *args: P.args,
48
+ **kwargs: P.kwargs,
49
+ ) -> UserContent | Sequence[Message]: ...
50
+
51
+
52
+ class AsyncContextMessageTemplate(Protocol[P, DepsT]):
53
+ """Protocol for an async context-aware prompt function that returns `UserContent` or `Sequence[Message]`.
54
+
55
+ An async `MessageTemplate` with a first parameter named `'ctx'` of type `Context[DepsT]`.
56
+ Can be converted by the `llm.prompt` decorator into an `AsyncContextPrompt`, or by
57
+ the `llm.call` decorator into an `AsyncContextCall`.
58
+ """
59
+
60
+ async def __call__(
61
+ self,
62
+ ctx: Context[DepsT],
63
+ *args: P.args,
64
+ **kwargs: P.kwargs,
65
+ ) -> UserContent | Sequence[Message]: ...
@@ -0,0 +1,65 @@
1
+ """Interfaces for LLM providers."""
2
+
3
+ from ..._stubs import stub_module_if_missing
4
+
5
+ # Stub modules for missing optional dependencies BEFORE importing
6
+ # This must happen before any imports from these modules
7
+ # Note: We only stub top-level provider modules, not their submodules.
8
+ # The _StubModule will automatically handle nested attribute access.
9
+ stub_module_if_missing("mirascope.llm.providers.anthropic", "anthropic")
10
+ stub_module_if_missing("mirascope.llm.providers.google", "google")
11
+ stub_module_if_missing("mirascope.llm.providers.mlx", "mlx")
12
+ stub_module_if_missing("mirascope.llm.providers.openai", "openai")
13
+ stub_module_if_missing("mirascope.llm.providers.openrouter", "openai")
14
+ stub_module_if_missing("mirascope.llm.providers.together", "openai")
15
+ stub_module_if_missing("mirascope.llm.providers.ollama", "openai")
16
+
17
+ # Now imports work regardless of which packages are installed
18
+ # ruff: noqa: E402
19
+ from .anthropic import (
20
+ AnthropicModelId,
21
+ AnthropicProvider,
22
+ )
23
+ from .base import BaseProvider, Provider
24
+ from .google import GoogleModelId, GoogleProvider
25
+ from .mirascope import MirascopeProvider
26
+ from .mlx import MLXModelId, MLXProvider
27
+ from .model_id import ModelId
28
+ from .ollama import OllamaProvider
29
+ from .openai import (
30
+ OpenAIModelId,
31
+ OpenAIProvider,
32
+ )
33
+ from .openai.completions import BaseOpenAICompletionsProvider
34
+ from .openrouter import OpenRouterProvider
35
+ from .provider_id import KNOWN_PROVIDER_IDS, ProviderId
36
+ from .provider_registry import (
37
+ get_provider_for_model,
38
+ register_provider,
39
+ reset_provider_registry,
40
+ )
41
+ from .together import TogetherProvider
42
+
43
+ __all__ = [
44
+ "KNOWN_PROVIDER_IDS",
45
+ "AnthropicModelId",
46
+ "AnthropicProvider",
47
+ "BaseOpenAICompletionsProvider",
48
+ "BaseProvider",
49
+ "GoogleModelId",
50
+ "GoogleProvider",
51
+ "MLXModelId",
52
+ "MLXProvider",
53
+ "MirascopeProvider",
54
+ "ModelId",
55
+ "OllamaProvider",
56
+ "OpenAIModelId",
57
+ "OpenAIProvider",
58
+ "OpenRouterProvider",
59
+ "Provider",
60
+ "ProviderId",
61
+ "TogetherProvider",
62
+ "get_provider_for_model",
63
+ "register_provider",
64
+ "reset_provider_registry",
65
+ ]
@@ -0,0 +1,11 @@
1
+ """Anthropic client implementation."""
2
+
3
+ from .beta_provider import AnthropicBetaProvider
4
+ from .model_id import AnthropicModelId
5
+ from .provider import AnthropicProvider
6
+
7
+ __all__ = [
8
+ "AnthropicBetaProvider",
9
+ "AnthropicModelId",
10
+ "AnthropicProvider",
11
+ ]
@@ -0,0 +1,27 @@
1
+ """Shared Anthropic utilities."""
2
+
3
+ from ...base._utils import get_include_thoughts
4
+ from .decode import decode_async_stream, decode_response, decode_stream
5
+ from .encode import (
6
+ DEFAULT_FORMAT_MODE,
7
+ DEFAULT_MAX_TOKENS,
8
+ AnthropicImageMimeType,
9
+ encode_image_mime_type,
10
+ encode_request,
11
+ process_params,
12
+ )
13
+ from .errors import ANTHROPIC_ERROR_MAP
14
+
15
+ __all__ = [
16
+ "ANTHROPIC_ERROR_MAP",
17
+ "DEFAULT_FORMAT_MODE",
18
+ "DEFAULT_MAX_TOKENS",
19
+ "AnthropicImageMimeType",
20
+ "decode_async_stream",
21
+ "decode_response",
22
+ "decode_stream",
23
+ "encode_image_mime_type",
24
+ "encode_request",
25
+ "get_include_thoughts",
26
+ "process_params",
27
+ ]