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,89 +0,0 @@
1
- """This module contains the `GroqCallResponseChunk` class.
2
-
3
- usage docs: learn/streams.md#handling-streamed-responses
4
- """
5
-
6
- from groq.types.chat import ChatCompletionChunk
7
- from groq.types.chat.chat_completion import Choice
8
- from groq.types.completion_usage import CompletionUsage
9
-
10
- from ..base import BaseCallResponseChunk
11
-
12
- FinishReason = Choice.__annotations__["finish_reason"]
13
-
14
-
15
- class GroqCallResponseChunk(BaseCallResponseChunk[ChatCompletionChunk, FinishReason]):
16
- """A convenience wrapper around the Groq `ChatCompletionChunk` streamed chunks.
17
-
18
- When calling the Groq API using a function decorated with `groq_call` and
19
- `stream` set to `True`, the stream will contain `GroqResponseChunk` instances with
20
- properties that allow for more convenient access to commonly used attributes.
21
-
22
- Example:
23
-
24
- ```python
25
- from mirascope.core import prompt_template
26
- from mirascope.core.groq import groq_call
27
-
28
-
29
- @groq_call("llama-3.1-8b-instant", stream=True)
30
- @prompt_template("Recommend a {genre} book")
31
- def recommend_book(genre: str):
32
- ...
33
-
34
-
35
- stream = recommend_book("fantasy") # response is an `GroqStream`
36
- for chunk, _ in stream:
37
- print(chunk.content, end="", flush=True)
38
- ```
39
- """
40
-
41
- @property
42
- def content(self) -> str:
43
- """Returns the content for the 0th choice delta."""
44
- delta = None
45
- if self.chunk.choices:
46
- delta = self.chunk.choices[0].delta
47
- return delta.content if delta is not None and delta.content else ""
48
-
49
- @property
50
- def finish_reasons(
51
- self,
52
- ) -> list[FinishReason]:
53
- """Returns the finish reasons of the response."""
54
- return [
55
- choice.finish_reason
56
- for choice in self.chunk.choices
57
- if choice.finish_reason
58
- ]
59
-
60
- @property
61
- def model(self) -> str:
62
- """Returns the name of the response model."""
63
- return self.chunk.model
64
-
65
- @property
66
- def id(self) -> str:
67
- """Returns the id of the response."""
68
- return self.chunk.id
69
-
70
- @property
71
- def usage(self) -> CompletionUsage | None:
72
- """Returns the usage of the chat completion."""
73
- if self.chunk.usage:
74
- return self.chunk.usage
75
- return None
76
-
77
- @property
78
- def input_tokens(self) -> int | None:
79
- """Returns the number of input tokens."""
80
- if self.usage:
81
- return self.usage.prompt_tokens
82
- return None
83
-
84
- @property
85
- def output_tokens(self) -> int | None:
86
- """Returns the number of output tokens."""
87
- if self.usage:
88
- return self.usage.completion_tokens
89
- return None
@@ -1,26 +0,0 @@
1
- """This module defines the function return type for functions as LLM calls.
2
-
3
- usage docs: learn/dynamic_configuration.md#dynamic-configuration-options
4
- """
5
-
6
- from groq.types.chat import ChatCompletionMessageParam
7
-
8
- from ..base import BaseDynamicConfig
9
- from .call_params import GroqCallParams
10
-
11
- GroqDynamicConfig = BaseDynamicConfig[ChatCompletionMessageParam, GroqCallParams]
12
- """The function return type for functions wrapped with the `groq_call` decorator.
13
-
14
- Example:
15
-
16
- ```python
17
- from mirascope.core import prompt_template
18
- from mirascope.core.groq import GroqDynamicConfig, groq_call
19
-
20
-
21
- @groq_call("llama-3.1-8b-instant")
22
- @prompt_template("Recommend a {capitalized_genre} book")
23
- def recommend_book(genre: str) -> GroqDynamicConfig:
24
- return {"computed_fields": {"capitalized_genre": genre.capitalize()}}
25
- ```
26
- """
File without changes
@@ -1,136 +0,0 @@
1
- """The `GroqStream` class for convenience around streaming LLM calls.
2
-
3
- usage docs: learn/streams.md
4
- """
5
-
6
- from groq.types.chat import (
7
- ChatCompletion,
8
- ChatCompletionAssistantMessageParam,
9
- ChatCompletionMessageParam,
10
- ChatCompletionMessageToolCallParam,
11
- ChatCompletionToolMessageParam,
12
- ChatCompletionUserMessageParam,
13
- )
14
- from groq.types.chat.chat_completion import Choice
15
- from groq.types.chat.chat_completion_message import ChatCompletionMessage
16
- from groq.types.completion_usage import CompletionUsage
17
-
18
- from ..base.stream import BaseStream
19
- from ._utils import calculate_cost
20
- from .call_params import GroqCallParams
21
- from .call_response import GroqCallResponse
22
- from .call_response_chunk import GroqCallResponseChunk
23
- from .dynamic_config import GroqDynamicConfig
24
- from .tool import GroqTool
25
-
26
- FinishReason = Choice.__annotations__["finish_reason"]
27
-
28
-
29
- class GroqStream(
30
- BaseStream[
31
- GroqCallResponse,
32
- GroqCallResponseChunk,
33
- ChatCompletionUserMessageParam,
34
- ChatCompletionAssistantMessageParam,
35
- ChatCompletionToolMessageParam,
36
- ChatCompletionMessageParam,
37
- GroqTool,
38
- GroqDynamicConfig,
39
- GroqCallParams,
40
- FinishReason,
41
- ]
42
- ):
43
- """A class for convenience around streaming Groq LLM calls.
44
-
45
- Example:
46
-
47
- ```python
48
- from mirascope.core import prompt_template
49
- from mirascope.core.groq import groq_call
50
-
51
-
52
- @groq_call("llama-3.1-8b-instant", stream=True)
53
- @prompt_template("Recommend a {genre} book")
54
- def recommend_book(genre: str):
55
- ...
56
-
57
-
58
- stream = recommend_book("fantasy") # returns `GroqStream` instance
59
- for chunk, _ in stream:
60
- print(chunk.content, end="", flush=True)
61
- ```
62
- """
63
-
64
- _provider = "groq"
65
-
66
- @property
67
- def cost(self) -> float | None:
68
- """Returns the cost of the call."""
69
- return calculate_cost(self.input_tokens, self.output_tokens, self.model)
70
-
71
- def _construct_message_param(
72
- self,
73
- tool_calls: list[ChatCompletionMessageToolCallParam] | None = None,
74
- content: str | None = None,
75
- ) -> ChatCompletionAssistantMessageParam:
76
- message_param = ChatCompletionAssistantMessageParam(
77
- role="assistant",
78
- content=content,
79
- )
80
- if tool_calls:
81
- message_param["tool_calls"] = tool_calls
82
- return message_param
83
-
84
- def construct_call_response(self) -> GroqCallResponse:
85
- """Constructs the call response from a consumed GroqStream.
86
-
87
- Raises:
88
- ValueError: if the stream has not yet been consumed.
89
- """
90
- if not hasattr(self, "message_param"):
91
- raise ValueError(
92
- "No stream response, check if the stream has been consumed."
93
- )
94
- message = {
95
- "role": self.message_param["role"],
96
- "content": self.message_param.get("content", ""),
97
- "tool_calls": self.message_param.get("tool_calls", []),
98
- }
99
- if not self.input_tokens and not self.output_tokens:
100
- usage = None
101
- else:
102
- usage = CompletionUsage(
103
- prompt_tokens=int(self.input_tokens or 0),
104
- completion_tokens=int(self.output_tokens or 0),
105
- total_tokens=int(self.input_tokens or 0) + int(self.output_tokens or 0),
106
- )
107
- completion = ChatCompletion(
108
- id=self.id if self.id else "",
109
- model=self.model,
110
- choices=[
111
- Choice(
112
- finish_reason=self.finish_reasons[0]
113
- if self.finish_reasons and self.finish_reasons[0]
114
- else "stop",
115
- index=0,
116
- message=ChatCompletionMessage.model_validate(message),
117
- )
118
- ],
119
- created=0,
120
- object="chat.completion",
121
- usage=usage,
122
- )
123
- return GroqCallResponse(
124
- metadata=self.metadata,
125
- response=completion,
126
- tool_types=self.tool_types,
127
- prompt_template=self.prompt_template,
128
- fn_args=self.fn_args if self.fn_args else {},
129
- dynamic_config=self.dynamic_config,
130
- messages=self.messages,
131
- call_params=self.call_params,
132
- call_kwargs=self.call_kwargs,
133
- user_message_param=self.user_message_param,
134
- start_time=self.start_time,
135
- end_time=self.end_time,
136
- )
@@ -1,79 +0,0 @@
1
- """The `GroqTool` class for easy tool usage with Groq LLM calls.
2
-
3
- usage docs: learn/tools.md#using-tools-with-standard-calls
4
- """
5
-
6
- from __future__ import annotations
7
-
8
- import jiter
9
- from groq.types.chat import (
10
- ChatCompletionMessageToolCall,
11
- ChatCompletionToolParam,
12
- )
13
- from groq.types.shared_params import FunctionDefinition
14
- from pydantic.json_schema import SkipJsonSchema
15
-
16
- from ..base import BaseTool
17
-
18
-
19
- class GroqTool(BaseTool):
20
- """A class for defining tools for Groq LLM calls.
21
-
22
- Example:
23
-
24
- ```python
25
- from mirascope.core import prompt_template
26
- from mirascope.core.groq import groq_call
27
-
28
-
29
- def format_book(title: str, author: str) -> str:
30
- return f"{title} by {author}"
31
-
32
-
33
- @groq_call("llama-3.1-8b-instant", tools=[format_book])
34
- @prompt_template("Recommend a {genre} book")
35
- def recommend_book(genre: str):
36
- ...
37
-
38
-
39
- response = recommend_book("fantasy")
40
- if tool := response.tool: # returns an `GroqTool` instance
41
- print(tool.call())
42
- ```
43
- """
44
-
45
- tool_call: SkipJsonSchema[ChatCompletionMessageToolCall]
46
-
47
- @classmethod
48
- def tool_schema(cls) -> ChatCompletionToolParam:
49
- """Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
50
-
51
- Example:
52
- ```python
53
- from mirascope.core.groq import GroqTool
54
-
55
-
56
- def format_book(title: str, author: str) -> str:
57
- return f"{title} by {author}"
58
-
59
-
60
- tool_type = GroqTool.type_from_fn(format_book)
61
- print(tool_type.tool_schema()) # prints the Groq-specific tool schema
62
- ```
63
- """
64
- fn = FunctionDefinition(name=cls._name(), description=cls._description())
65
- model_schema = cls.model_tool_schema()
66
- if model_schema["properties"]:
67
- fn["parameters"] = model_schema
68
- return ChatCompletionToolParam(function=fn, type="function")
69
-
70
- @classmethod
71
- def from_tool_call(cls, tool_call: ChatCompletionMessageToolCall) -> GroqTool:
72
- """Constructs an `GroqTool` instance from a `tool_call`.
73
-
74
- Args:
75
- tool_call: The Groq tool call from which to construct this tool instance.
76
- """
77
- model_json = jiter.from_json(tool_call.function.arguments.encode())
78
- model_json["tool_call"] = tool_call.model_dump()
79
- return cls.model_validate(model_json)
@@ -1,6 +0,0 @@
1
- """The Mirascope LiteLLM Module."""
2
-
3
- from ._call import litellm_call
4
- from ._call import litellm_call as call
5
-
6
- __all__ = ["call", "litellm_call"]
@@ -1,73 +0,0 @@
1
- """The `litellm_call` decorator for functions as LLM calls."""
2
-
3
- from ..base import call_factory
4
- from ..openai import (
5
- OpenAICallParams,
6
- OpenAICallResponse,
7
- OpenAICallResponseChunk,
8
- OpenAIDynamicConfig,
9
- OpenAIStream,
10
- OpenAITool,
11
- )
12
- from ..openai._utils import (
13
- get_json_output,
14
- handle_stream,
15
- handle_stream_async,
16
- )
17
- from ._utils import setup_call
18
-
19
- litellm_call = call_factory(
20
- TCallResponse=OpenAICallResponse,
21
- TCallResponseChunk=OpenAICallResponseChunk,
22
- TDynamicConfig=OpenAIDynamicConfig,
23
- TToolType=OpenAITool,
24
- TStream=OpenAIStream,
25
- TCallParams=OpenAICallParams,
26
- default_call_params=OpenAICallParams(),
27
- setup_call=setup_call, # type: ignore
28
- get_json_output=get_json_output, # type: ignore
29
- handle_stream=handle_stream,
30
- handle_stream_async=handle_stream_async,
31
- )
32
- """A decorator for calling the LiteLLM API with a typed function.
33
-
34
- usage docs: learn/calls.md
35
-
36
- This decorator is used to wrap a typed function that calls the LiteLLM API. It parses
37
- the docstring of the wrapped function as the messages array and templates the input
38
- arguments for the function into each message's template.
39
-
40
- Example:
41
-
42
- ```python
43
- from mirascope.core import prompt_template
44
- from mirascope.core.litellm import litellm_call
45
-
46
-
47
- @litellm_call("gpt-4o-mini")
48
- @prompt_template("Recommend a {genre} book")
49
- def recommend_book(genre: str):
50
- ...
51
-
52
- response = recommend_book("fantasy")
53
- print(response.content)
54
- ```
55
-
56
- Args:
57
- model (str): The model to use in the API call.
58
- stream (bool): Whether to stream the response from the API call.
59
- tools (list[BaseTool | Callable]): The tools to use in the API call.
60
- response_model (BaseModel | BaseType): The response model into which the response
61
- should be structured.
62
- output_parser (Callable[[OpenAICallResponse | ResponseModelT], Any]): A function for
63
- parsing the call response whose value will be returned in place of the original
64
- call response.
65
- json_mode (bool): Whether to use JSON Mode.
66
- client (None): LiteLLM does not support a custom client.
67
- call_params (OpenAICallParams): The `OpenAICallParams` call parameters to use in the
68
- API call.
69
-
70
- Returns:
71
- decorator (Callable): The decorator for turning a typed function into a LiteLLM
72
- routed LLM API call.
73
- """
@@ -1,5 +0,0 @@
1
- """LiteLLM utilities for decorator factories."""
2
-
3
- from ._setup_call import setup_call
4
-
5
- __all__ = ["setup_call"]
@@ -1,46 +0,0 @@
1
- """This module contains the setup_call function for OpenAI tools."""
2
-
3
- import inspect
4
- from collections.abc import Awaitable, Callable
5
- from typing import Any
6
-
7
- from litellm import acompletion, completion
8
- from openai import OpenAI
9
- from openai.types.chat import ChatCompletion, ChatCompletionMessageParam
10
-
11
- from ...base import BaseTool
12
- from ...openai import OpenAICallParams, OpenAIDynamicConfig, OpenAITool
13
- from ...openai._utils import setup_call as setup_call_openai
14
-
15
-
16
- def setup_call(
17
- *,
18
- model: str,
19
- client: None,
20
- fn: Callable[..., OpenAIDynamicConfig | Awaitable[OpenAIDynamicConfig]],
21
- fn_args: dict[str, Any],
22
- dynamic_config: OpenAIDynamicConfig,
23
- tools: list[type[BaseTool] | Callable] | None,
24
- json_mode: bool,
25
- call_params: OpenAICallParams,
26
- extract: bool,
27
- ) -> tuple[
28
- Callable[..., ChatCompletion] | Callable[..., Awaitable[ChatCompletion]],
29
- str,
30
- list[ChatCompletionMessageParam],
31
- list[type[OpenAITool]] | None,
32
- dict[str, Any],
33
- ]:
34
- _, prompt_template, messages, tool_types, call_kwargs = setup_call_openai(
35
- model=model,
36
- client=OpenAI(api_key="NOT_USED"),
37
- fn=fn,
38
- fn_args=fn_args,
39
- dynamic_config=dynamic_config,
40
- tools=tools,
41
- json_mode=json_mode,
42
- call_params=call_params,
43
- extract=extract,
44
- )
45
- create = acompletion if inspect.iscoroutinefunction(fn) else completion
46
- return create, prompt_template, messages, tool_types, call_kwargs # type: ignore
File without changes
@@ -1,21 +0,0 @@
1
- """The Mirascope Mistral Module."""
2
-
3
- from ._call import mistral_call
4
- from ._call import mistral_call as call
5
- from .call_params import MistralCallParams
6
- from .call_response import MistralCallResponse
7
- from .call_response_chunk import MistralCallResponseChunk
8
- from .dynamic_config import MistralDynamicConfig
9
- from .stream import MistralStream
10
- from .tool import MistralTool
11
-
12
- __all__ = [
13
- "call",
14
- "MistralDynamicConfig",
15
- "MistralCallParams",
16
- "MistralCallResponse",
17
- "MistralCallResponseChunk",
18
- "MistralStream",
19
- "MistralTool",
20
- "mistral_call",
21
- ]
@@ -1,69 +0,0 @@
1
- """The `mistral_call` decorator for functions as LLM calls."""
2
-
3
- from ..base import call_factory
4
- from ._utils import (
5
- get_json_output,
6
- handle_stream,
7
- handle_stream_async,
8
- setup_call,
9
- )
10
- from .call_params import MistralCallParams
11
- from .call_response import MistralCallResponse
12
- from .call_response_chunk import MistralCallResponseChunk
13
- from .dynamic_config import MistralDynamicConfig
14
- from .stream import MistralStream
15
- from .tool import MistralTool
16
-
17
- mistral_call = call_factory(
18
- TCallResponse=MistralCallResponse,
19
- TCallResponseChunk=MistralCallResponseChunk,
20
- TDynamicConfig=MistralDynamicConfig,
21
- TToolType=MistralTool,
22
- TStream=MistralStream,
23
- TCallParams=MistralCallParams,
24
- default_call_params=MistralCallParams(),
25
- setup_call=setup_call, # type: ignore
26
- get_json_output=get_json_output,
27
- handle_stream=handle_stream,
28
- handle_stream_async=handle_stream_async,
29
- )
30
- """A decorator for calling the Mistral API with a typed function.
31
-
32
- usage docs: learn/calls.md
33
-
34
- This decorator is used to wrap a typed function that calls the Mistral API. It parses
35
- the docstring of the wrapped function as the messages array and templates the input
36
- arguments for the function into each message's template.
37
-
38
- Example:
39
-
40
- ```python
41
- from mirascope.core import prompt_template
42
- from mirascope.core.mistral import mistral_call
43
-
44
-
45
- @mistral_call("mistral-large-latest")
46
- @prompt_template("Recommend a {genre} book")
47
- def recommend_book(genre: str):
48
- ...
49
-
50
- response = recommend_book("fantasy")
51
- print(response.content)
52
- ```
53
-
54
- Args:
55
- model (str): The Mistral model to use in the API call.
56
- stream (bool): Whether to stream the response from the API call.
57
- tools (list[BaseTool | Callable]): The tools to use in the Mistral API call.
58
- response_model (BaseModel | BaseType): The response model into which the response should be structured.
59
- output_parser (Callable[[MistralCallResponse | ResponseModelT], Any]): A function for
60
- parsing the call response whose value will be returned in place of the original call response.
61
- json_mode (bool): Whether to use JSON Mode.
62
- client (object): An optional custom client to use in place of the default client.
63
- call_params (MistralCallParams): The `MistralCallParams` call parameters to use in
64
- the API call.
65
-
66
- Returns:
67
- decorator (Callable): The decorator for turning a typed function into a Mistral API
68
- call.
69
- """
@@ -1,16 +0,0 @@
1
- """Mistral utilities for decorator factories."""
2
-
3
- from ._calculate_cost import calculate_cost
4
- from ._convert_message_params import convert_message_params
5
- from ._get_json_output import get_json_output
6
- from ._handle_stream import handle_stream, handle_stream_async
7
- from ._setup_call import setup_call
8
-
9
- __all__ = [
10
- "calculate_cost",
11
- "convert_message_params",
12
- "get_json_output",
13
- "handle_stream",
14
- "handle_stream_async",
15
- "setup_call",
16
- ]
@@ -1,47 +0,0 @@
1
- """Calculate the cost of a completion using the Mistral API."""
2
-
3
-
4
- def calculate_cost(
5
- input_tokens: int | float | None,
6
- output_tokens: int | float | None,
7
- model: str = "open-mistral-7b",
8
- ) -> float | None:
9
- """Calculate the cost of a completion using the Mistral API.
10
-
11
- https://mistral.ai/technology/#pricing
12
-
13
- Model Input Output
14
- open-mistral-nemo $0.3/1M tokens $0.3/1M tokens
15
- mistral-large-latest $3/1M tokens $9/1M tokens
16
- codestral-2405 $1/1M tokens $3/1M tokens
17
- open-mistral-7b $0.25/1M tokens $0.25/1M tokens
18
- open-mixtral-8x7b $0.7/1M tokens $0.7/1M tokens
19
- open-mixtral-8x22b $2/1M tokens $6/1M tokens
20
- mistral-small-latest $2/1M tokens $6/1M tokens
21
- mistral-medium-latest $2.75/1M tokens $8.1/1M tokens
22
- """
23
- pricing = {
24
- "open-mistral-nemo": {"prompt": 0.000_000_3, "completion": 0.000_000_3},
25
- "open-mistral-nemo-2407": {"prompt": 0.000_000_3, "completion": 0.000_000_3},
26
- "mistral-large-latest": {"prompt": 0.000_003, "completion": 0.000_009},
27
- "mistral-large-2407": {"prompt": 0.000_003, "completion": 0.000_009},
28
- "open-mistral-7b": {"prompt": 0.000_000_25, "completion": 0.000_000_25},
29
- "open-mixtral-8x7b": {"prompt": 0.000_000_7, "completion": 0.000_000_7},
30
- "open-mixtral-8x22b": {"prompt": 0.000_002, "completion": 0.000_006},
31
- "mistral-small-latest": {"prompt": 0.000_002, "completion": 0.000_006},
32
- "mistral-medium-latest": {"prompt": 0.000_002_75, "completion": 0.000_008_1},
33
- }
34
-
35
- if input_tokens is None or output_tokens is None:
36
- return None
37
-
38
- try:
39
- model_pricing = pricing[model]
40
- except KeyError:
41
- return None
42
-
43
- prompt_cost = input_tokens * model_pricing["prompt"]
44
- completion_cost = output_tokens * model_pricing["completion"]
45
- total_cost = prompt_cost + completion_cost
46
-
47
- return total_cost
@@ -1,23 +0,0 @@
1
- """Utility for converting `BaseMessageParam` to `ChatMessage`."""
2
-
3
- from mistralai.models.chat_completion import ChatMessage
4
-
5
- from ...base import BaseMessageParam
6
-
7
-
8
- def convert_message_params(
9
- message_params: list[BaseMessageParam | ChatMessage],
10
- ) -> list[ChatMessage]:
11
- converted_message_params = []
12
- for message_param in message_params:
13
- if isinstance(message_param, ChatMessage):
14
- converted_message_params.append(message_param)
15
- elif isinstance(content := message_param.content, str):
16
- converted_message_params.append(ChatMessage(**message_param.model_dump()))
17
- else:
18
- if len(content) != 1 or content[0].type != "text":
19
- raise ValueError("Mistral does not currently support multimodalities.")
20
- converted_message_params.append(
21
- ChatMessage(role=message_param.role, content=content[0].text)
22
- )
23
- return converted_message_params
@@ -1,28 +0,0 @@
1
- """Get the JSON output from a completion response."""
2
-
3
- from ..call_response import MistralCallResponse
4
- from ..call_response_chunk import MistralCallResponseChunk
5
-
6
-
7
- def get_json_output(
8
- response: MistralCallResponse | MistralCallResponseChunk, json_mode: bool
9
- ) -> str:
10
- """Get the JSON output from a completion response."""
11
- if isinstance(response, MistralCallResponse):
12
- if json_mode and response.content:
13
- return response.content
14
- elif tool_calls := response.response.choices[0].message.tool_calls:
15
- return tool_calls[0].function.arguments
16
- raise ValueError("No tool call or JSON object found in response.")
17
- else:
18
- # raise ValueError("Mistral does not support structured streaming... :(")
19
- if json_mode:
20
- return response.content
21
- elif (
22
- (choices := response.chunk.choices)
23
- and (tool_calls := choices[0].delta.tool_calls)
24
- and (function := tool_calls[0].function)
25
- and (arguments := function.arguments) is not None
26
- ):
27
- return arguments
28
- return ""