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,71 +0,0 @@
1
- """The `groq_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 GroqCallParams
11
- from .call_response import GroqCallResponse
12
- from .call_response_chunk import GroqCallResponseChunk
13
- from .dynamic_config import GroqDynamicConfig
14
- from .stream import GroqStream
15
- from .tool import GroqTool
16
-
17
- groq_call = call_factory(
18
- TCallResponse=GroqCallResponse,
19
- TCallResponseChunk=GroqCallResponseChunk,
20
- TDynamicConfig=GroqDynamicConfig,
21
- TToolType=GroqTool,
22
- TStream=GroqStream,
23
- TCallParams=GroqCallParams,
24
- default_call_params=GroqCallParams(),
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 Groq 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 Groq 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.groq import groq_call
43
-
44
-
45
- @groq_call("llama-3.1-8b-instant")
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 Groq 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 Groq API call.
58
- response_model (BaseModel | BaseType): The response model into which the response
59
- should be structured.
60
- output_parser (Callable[[CohereCallResponse | ResponseModelT], Any]): A function for
61
- parsing the call response whose value will be returned in place of the original
62
- call response.
63
- json_mode (bool): Whether to use JSON Mode.
64
- client (object): An optional custom client to use in place of the default client.
65
- call_params (GroqCallParams): The `GroqCallParams` call parameters to use in the API
66
- call.
67
-
68
- Returns:
69
- decorator (Callable): The decorator for turning a typed function into a Groq API
70
- call.
71
- """
@@ -1,16 +0,0 @@
1
- """Groq 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,68 +0,0 @@
1
- """Calculate the cost of a completion using the Groq API."""
2
-
3
-
4
- def calculate_cost(
5
- input_tokens: int | float | None,
6
- output_tokens: int | float | None,
7
- model: str = "mixtral-8x7b-32768",
8
- ) -> float | None:
9
- """Calculate the cost of a completion using the Groq API.
10
-
11
- https://wow.groq.com/
12
-
13
- Model Input Output
14
- llama-3.1-405b-reasoning N/A N/A
15
- llama-3.1-70b-versatile N/A N/A
16
- llama-3.1-8b-instant N/A N/A
17
- llama3-groq-70b-8192-tool-use-preview $0.89 / 1M tokens $0.89 / 1M tokens
18
- llama3-groq-8b-8192-tool-use-preview $0.19 / 1M tokens $0.19 / 1M tokens
19
- llama3-70b-8192 $0.59 / 1M tokens $0.79 / 1M tokens
20
- llama3-8b-8192 $0.05 / 1M tokens $0.08 / 1M tokens
21
- mixtral-8x7b-32768 $0.27 / 1M tokens $0.27 / 1M tokens
22
- gemma-7b-it $0.07 / 1M tokens $0.07 / 1M tokens
23
- gemma2-9b-it $0.20 / 1M tokens $0.20 / 1M tokens
24
- """
25
- pricing = {
26
- "llama3-groq-70b-8192-tool-use-preview": {
27
- "prompt": 0.000_000_89,
28
- "completion": 0.000_000_89,
29
- },
30
- "llama3-groq-8b-8192-tool-use-preview": {
31
- "prompt": 0.000_000_19,
32
- "completion": 0.000_000_19,
33
- },
34
- "llama3-70b-8192": {
35
- "prompt": 0.000_000_59,
36
- "completion": 0.000_000_79,
37
- },
38
- "llama3-8b-8192": {
39
- "prompt": 0.000_000_05,
40
- "completion": 0.000_000_08,
41
- },
42
- "mixtral-8x7b-32768": {
43
- "prompt": 0.000_000_24,
44
- "completion": 0.000_000_24,
45
- },
46
- "gemma-7b-it": {
47
- "prompt": 0.000_000_07,
48
- "completion": 0.000_000_07,
49
- },
50
- "gemma2-9b-it": {
51
- "prompt": 0.000_000_2,
52
- "completion": 0.000_000_2,
53
- },
54
- }
55
-
56
- if input_tokens is None or output_tokens is None:
57
- return None
58
-
59
- try:
60
- model_pricing = pricing[model]
61
- except KeyError:
62
- return None
63
-
64
- prompt_cost = input_tokens * model_pricing["prompt"]
65
- completion_cost = output_tokens * model_pricing["completion"]
66
- total_cost = prompt_cost + completion_cost
67
-
68
- return total_cost
@@ -1,23 +0,0 @@
1
- """Utility for converting `BaseMessageParam` to `ChatCompletionMessageParam`"""
2
-
3
- from groq.types.chat import ChatCompletionMessageParam
4
-
5
- from ...base import BaseMessageParam
6
-
7
-
8
- def convert_message_params(
9
- message_params: list[BaseMessageParam | ChatCompletionMessageParam],
10
- ) -> list[ChatCompletionMessageParam]:
11
- converted_message_params = []
12
- for message_param in message_params:
13
- if not isinstance(message_param, BaseMessageParam):
14
- converted_message_params.append(message_param)
15
- elif isinstance(content := message_param.content, str):
16
- converted_message_params.append(message_param.model_dump())
17
- else:
18
- if len(content) != 1 or content[0].type != "text":
19
- raise ValueError("Groq does not currently support multimodalities.")
20
- converted_message_params.append(
21
- {"role": message_param.role, "content": content[0].text}
22
- )
23
- return converted_message_params
@@ -1,27 +0,0 @@
1
- """Get the JSON output from a completion response."""
2
-
3
- from ..call_response import GroqCallResponse
4
- from ..call_response_chunk import GroqCallResponseChunk
5
-
6
-
7
- def get_json_output(
8
- response: GroqCallResponse | GroqCallResponseChunk, json_mode: bool
9
- ) -> str:
10
- """Get the JSON output from a completion response."""
11
- if isinstance(response, GroqCallResponse):
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
- if json_mode:
19
- return response.content
20
- elif (
21
- (choices := response.chunk.choices)
22
- and (tool_calls := choices[0].delta.tool_calls)
23
- and (function := tool_calls[0].function)
24
- and (arguments := function.arguments) is not None
25
- ):
26
- return arguments
27
- return ""
@@ -1,121 +0,0 @@
1
- """Handles the stream of completion chunks."""
2
-
3
- from collections.abc import AsyncGenerator, Generator
4
-
5
- from groq.types.chat import ChatCompletionChunk, ChatCompletionMessageToolCall
6
- from groq.types.chat.chat_completion_message_tool_call import Function
7
-
8
- from ..call_response_chunk import GroqCallResponseChunk
9
- from ..tool import GroqTool
10
-
11
-
12
- def _handle_chunk(
13
- chunk: ChatCompletionChunk,
14
- current_tool_call: ChatCompletionMessageToolCall,
15
- current_tool_type: type[GroqTool] | None,
16
- tool_types: list[type[GroqTool]] | None,
17
- ) -> tuple[
18
- GroqTool | None,
19
- ChatCompletionMessageToolCall,
20
- type[GroqTool] | None,
21
- ]:
22
- """Handles a chunk of the stream."""
23
- if not tool_types or not (tool_calls := chunk.choices[0].delta.tool_calls):
24
- return None, current_tool_call, current_tool_type
25
-
26
- tool_call = tool_calls[0]
27
- # Reset on new tool
28
- if tool_call.id and tool_call.function is not None:
29
- previous_tool_call = current_tool_call.model_copy()
30
- previous_tool_type = current_tool_type
31
- current_tool_call = ChatCompletionMessageToolCall(
32
- id=tool_call.id,
33
- function=Function(
34
- arguments="",
35
- name=tool_call.function.name if tool_call.function.name else "",
36
- ),
37
- type="function",
38
- )
39
- current_tool_type = None
40
- for tool_type in tool_types:
41
- if tool_type._name() == tool_call.function.name:
42
- current_tool_type = tool_type
43
- break
44
- if current_tool_type is None:
45
- raise RuntimeError(
46
- f"Unknown tool type in stream: {tool_call.function.name}"
47
- ) # pragma: no cover
48
- if (
49
- previous_tool_call.id
50
- and previous_tool_call.function.arguments
51
- and previous_tool_type is not None
52
- ):
53
- return (
54
- previous_tool_type.from_tool_call(previous_tool_call),
55
- current_tool_call,
56
- current_tool_type,
57
- )
58
-
59
- # Update arguments with each chunk
60
- if tool_call.function and tool_call.function.arguments:
61
- current_tool_call.function.arguments += tool_call.function.arguments
62
-
63
- return None, current_tool_call, current_tool_type
64
-
65
-
66
- def handle_stream(
67
- stream: Generator[ChatCompletionChunk, None, None],
68
- tool_types: list[type[GroqTool]] | None,
69
- ) -> Generator[tuple[GroqCallResponseChunk, GroqTool | None], None, None]:
70
- """Iterator over the stream and constructs tools as they are streamed."""
71
- current_tool_call = ChatCompletionMessageToolCall(
72
- id="", function=Function(arguments="", name=""), type="function"
73
- )
74
- current_tool_type = None
75
- for chunk in stream:
76
- if not tool_types or not chunk.choices[0].delta.tool_calls:
77
- if current_tool_type:
78
- yield (
79
- GroqCallResponseChunk(chunk=chunk),
80
- current_tool_type.from_tool_call(current_tool_call),
81
- )
82
- current_tool_type = None
83
- else:
84
- yield GroqCallResponseChunk(chunk=chunk), None
85
- tool, current_tool_call, current_tool_type = _handle_chunk(
86
- chunk,
87
- current_tool_call,
88
- current_tool_type,
89
- tool_types,
90
- )
91
- if tool is not None:
92
- yield GroqCallResponseChunk(chunk=chunk), tool
93
-
94
-
95
- async def handle_stream_async(
96
- stream: AsyncGenerator[ChatCompletionChunk, None],
97
- tool_types: list[type[GroqTool]] | None,
98
- ) -> AsyncGenerator[tuple[GroqCallResponseChunk, GroqTool | None], None]:
99
- """Async iterator over the stream and constructs tools as they are streamed."""
100
- current_tool_call = ChatCompletionMessageToolCall(
101
- id="", function=Function(arguments="", name=""), type="function"
102
- )
103
- current_tool_type = None
104
- async for chunk in stream:
105
- if not tool_types or not chunk.choices[0].delta.tool_calls:
106
- if current_tool_type:
107
- yield (
108
- GroqCallResponseChunk(chunk=chunk),
109
- current_tool_type.from_tool_call(current_tool_call),
110
- )
111
- current_tool_type = None
112
- else:
113
- yield GroqCallResponseChunk(chunk=chunk), None
114
- tool, current_tool_call, current_tool_type = _handle_chunk(
115
- chunk,
116
- current_tool_call,
117
- current_tool_type,
118
- tool_types,
119
- )
120
- if tool is not None:
121
- yield GroqCallResponseChunk(chunk=chunk), tool
@@ -1,67 +0,0 @@
1
- """This module contains the setup_call function for Groq tools."""
2
-
3
- import inspect
4
- from collections.abc import Awaitable, Callable
5
- from typing import Any, cast
6
-
7
- from groq import AsyncGroq, Groq
8
- from groq.types.chat import ChatCompletion, ChatCompletionMessageParam
9
-
10
- from ...base import BaseMessageParam, BaseTool, _utils
11
- from ..call_params import GroqCallParams
12
- from ..dynamic_config import GroqDynamicConfig
13
- from ..tool import GroqTool
14
- from ._convert_message_params import convert_message_params
15
-
16
-
17
- def setup_call(
18
- *,
19
- model: str,
20
- client: Groq | AsyncGroq | None,
21
- fn: Callable[..., GroqDynamicConfig | Awaitable[GroqDynamicConfig]],
22
- fn_args: dict[str, Any],
23
- dynamic_config: GroqDynamicConfig,
24
- tools: list[type[BaseTool] | Callable] | None,
25
- json_mode: bool,
26
- call_params: GroqCallParams,
27
- extract: bool,
28
- ) -> tuple[
29
- Callable[..., ChatCompletion] | Callable[..., Awaitable[ChatCompletion]],
30
- str,
31
- list[ChatCompletionMessageParam],
32
- list[type[GroqTool]] | None,
33
- dict[str, Any],
34
- ]:
35
- prompt_template, messages, tool_types, call_kwargs = _utils.setup_call(
36
- fn, fn_args, dynamic_config, tools, GroqTool, call_params
37
- )
38
- messages = cast(list[BaseMessageParam | ChatCompletionMessageParam], messages)
39
- messages = convert_message_params(messages)
40
- if json_mode:
41
- call_kwargs["response_format"] = {"type": "json_object"}
42
- json_mode_content = _utils.json_mode_content(
43
- tool_types[0] if tool_types else None
44
- )
45
- if messages[-1]["role"] == "user":
46
- if isinstance(messages[-1]["content"], str):
47
- messages[-1]["content"] += json_mode_content
48
- else:
49
- messages[-1]["content"] = list(messages[-1]["content"]) + [
50
- {"type": "text", "text": json_mode_content.strip()}
51
- ]
52
- else:
53
- messages.append({"role": "user", "content": json_mode_content.strip()})
54
- call_kwargs.pop("tools", None)
55
- elif extract:
56
- assert tool_types, "At least one tool must be provided for extraction."
57
- call_kwargs["tool_choice"] = {
58
- "type": "function",
59
- "function": {"name": tool_types[0]._name()},
60
- }
61
- call_kwargs |= {"model": model, "messages": messages}
62
-
63
- if client is None:
64
- client = AsyncGroq() if inspect.iscoroutinefunction(fn) else Groq()
65
- create = client.chat.completions.create
66
-
67
- return create, prompt_template, messages, tool_types, call_kwargs
@@ -1,51 +0,0 @@
1
- """usage docs: learn/calls.md#provider-specific-parameters"""
2
-
3
- from __future__ import annotations
4
-
5
- from groq.types.chat.chat_completion_tool_choice_option_param import (
6
- ChatCompletionToolChoiceOptionParam,
7
- )
8
- from groq.types.chat.completion_create_params import ResponseFormat
9
- from typing_extensions import NotRequired
10
-
11
- from ..base import BaseCallParams
12
-
13
-
14
- class GroqCallParams(BaseCallParams):
15
- """The parameters to use when calling the Groq API.
16
-
17
- [Groq API Reference](https://console.groq.com/docs/api-reference#chat-create)
18
-
19
- Attributes:
20
- frequency_penalty: ...
21
- logit_bias: ...
22
- logprobs: ...
23
- max_tokens: ...
24
- n: ...
25
- parallel_tool_calls: ...
26
- presence_penalty: ...
27
- response_format: ...
28
- seed: ...
29
- stop: ...
30
- temperature: ...
31
- tool_choice: ...
32
- top_logprobs: ...
33
- top_p: ...
34
- user: ...
35
- """
36
-
37
- frequency_penalty: NotRequired[float | None]
38
- logit_bias: NotRequired[dict[str, int] | None]
39
- logprobs: NotRequired[bool | None]
40
- max_tokens: NotRequired[int | None]
41
- n: NotRequired[int | None]
42
- parallel_tool_calls: NotRequired[bool]
43
- presence_penalty: NotRequired[float | None]
44
- response_format: NotRequired[ResponseFormat]
45
- seed: NotRequired[int | None]
46
- stop: NotRequired[str | list[str] | None]
47
- temperature: NotRequired[float | None]
48
- tool_choice: NotRequired[ChatCompletionToolChoiceOptionParam]
49
- top_logprobs: NotRequired[int | None]
50
- top_p: NotRequired[float | None]
51
- user: NotRequired[str]
@@ -1,160 +0,0 @@
1
- """This module contains the `GroqCallResponse` class.
2
-
3
- usage docs: learn/calls.md#handling-responses
4
- """
5
-
6
- from groq.types.chat import (
7
- ChatCompletion,
8
- ChatCompletionAssistantMessageParam,
9
- ChatCompletionMessageParam,
10
- ChatCompletionToolMessageParam,
11
- ChatCompletionUserMessageParam,
12
- )
13
- from groq.types.completion_usage import CompletionUsage
14
- from pydantic import SerializeAsAny, computed_field
15
-
16
- from ..base import BaseCallResponse
17
- from ._utils import calculate_cost
18
- from .call_params import GroqCallParams
19
- from .dynamic_config import GroqDynamicConfig
20
- from .tool import GroqTool
21
-
22
-
23
- class GroqCallResponse(
24
- BaseCallResponse[
25
- ChatCompletion,
26
- GroqTool,
27
- GroqDynamicConfig,
28
- ChatCompletionMessageParam,
29
- GroqCallParams,
30
- ChatCompletionUserMessageParam,
31
- ]
32
- ):
33
- """A convenience wrapper around the Groq `ChatCompletion` response.
34
-
35
- When calling the Groq API using a function decorated with `groq_call`, the
36
- response will be an `GroqCallResponse` instance with properties that allow for
37
- more convenience access to commonly used attributes.
38
-
39
- Example:
40
-
41
- ```python
42
- from mirascope.core import prompt_template
43
- from mirascope.core.groq import groq_call
44
-
45
-
46
- @groq_call("llama-3.1-8b-instant")
47
- @prompt_template("Recommend a {genre} book")
48
- def recommend_book(genre: str):
49
- ...
50
-
51
-
52
- response = recommend_book("fantasy") # response is an `GroqCallResponse` instance
53
- print(response.content)
54
- ```
55
- """
56
-
57
- _provider = "groq"
58
-
59
- @property
60
- def content(self) -> str:
61
- """Returns the content of the chat completion for the 0th choice."""
62
- message = self.response.choices[0].message
63
- return message.content if message.content is not None else ""
64
-
65
- @property
66
- def finish_reasons(self) -> list[str]:
67
- """Returns the finish reasons of the response."""
68
- return [str(choice.finish_reason) for choice in self.response.choices]
69
-
70
- @property
71
- def model(self) -> str:
72
- """Returns the name of the response model."""
73
- return self.response.model
74
-
75
- @property
76
- def id(self) -> str:
77
- """Returns the id of the response."""
78
- return self.response.id
79
-
80
- @property
81
- def usage(self) -> CompletionUsage | None:
82
- """Returns the usage of the chat completion."""
83
- return self.response.usage
84
-
85
- @property
86
- def input_tokens(self) -> int | None:
87
- """Returns the number of input tokens."""
88
- return self.usage.prompt_tokens if self.usage else None
89
-
90
- @property
91
- def output_tokens(self) -> int | None:
92
- """Returns the number of output tokens."""
93
- return self.usage.completion_tokens if self.usage else None
94
-
95
- @property
96
- def cost(self) -> float | None:
97
- """Returns the cost of the call."""
98
- return calculate_cost(self.input_tokens, self.output_tokens, self.model)
99
-
100
- @computed_field
101
- @property
102
- def message_param(self) -> SerializeAsAny[ChatCompletionAssistantMessageParam]:
103
- """Returns the assistants's response as a message parameter."""
104
- return self.response.choices[0].message.model_dump(exclude={"function_call"}) # type: ignore
105
-
106
- @computed_field
107
- @property
108
- def tools(self) -> list[GroqTool] | None:
109
- """Returns any available tool calls as their `GroqTool` definition.
110
-
111
- Raises:
112
- ValidationError: if a tool call doesn't match the tool's schema.
113
- """
114
- tool_calls = self.response.choices[0].message.tool_calls
115
- if not self.tool_types or not tool_calls:
116
- return None
117
-
118
- extracted_tools = []
119
- for tool_call in tool_calls:
120
- for tool_type in self.tool_types:
121
- if tool_call.function.name == tool_type._name():
122
- extracted_tools.append(tool_type.from_tool_call(tool_call))
123
- break
124
-
125
- return extracted_tools
126
-
127
- @computed_field
128
- @property
129
- def tool(self) -> GroqTool | None:
130
- """Returns the 0th tool for the 0th choice message.
131
-
132
- Raises:
133
- ValidationError: if the tool call doesn't match the tool's schema.
134
- """
135
- if tools := self.tools:
136
- return tools[0]
137
- return None
138
-
139
- @classmethod
140
- def tool_message_params(
141
- cls, tools_and_outputs: list[tuple[GroqTool, str]]
142
- ) -> list[ChatCompletionToolMessageParam]:
143
- """Returns the tool message parameters for tool call results.
144
-
145
- Args:
146
- tools_and_outputs: The list of tools and their outputs from which the tool
147
- message parameters should be constructed.
148
-
149
- Returns:
150
- The list of constructed `ChatCompletionToolMessageParam` parameters.
151
- """
152
- return [
153
- ChatCompletionToolMessageParam(
154
- role="tool",
155
- content=output,
156
- tool_call_id=tool.tool_call.id,
157
- name=tool._name(), # type: ignore
158
- )
159
- for tool, output in tools_and_outputs
160
- ]