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,365 +0,0 @@
1
- """This module contains the base classes for streaming responses from LLMs."""
2
-
3
- import datetime
4
- import inspect
5
- from abc import ABC, abstractmethod
6
- from collections.abc import AsyncGenerator, Awaitable, Callable, Generator
7
- from functools import wraps
8
- from typing import (
9
- Any,
10
- ClassVar,
11
- Generic,
12
- ParamSpec,
13
- TypeVar,
14
- overload,
15
- )
16
-
17
- from ._utils import (
18
- HandleStream,
19
- HandleStreamAsync,
20
- SetupCall,
21
- get_fn_args,
22
- get_metadata,
23
- get_possible_user_message_param,
24
- )
25
- from .call_params import BaseCallParams
26
- from .call_response import BaseCallResponse
27
- from .call_response_chunk import BaseCallResponseChunk
28
- from .dynamic_config import BaseDynamicConfig
29
- from .metadata import Metadata
30
- from .tool import BaseTool
31
-
32
- _BaseCallResponseT = TypeVar("_BaseCallResponseT", bound=BaseCallResponse)
33
- _BaseCallResponseChunkT = TypeVar(
34
- "_BaseCallResponseChunkT", bound=BaseCallResponseChunk
35
- )
36
- _UserMessageParamT = TypeVar("_UserMessageParamT")
37
- _AssistantMessageParamT = TypeVar("_AssistantMessageParamT")
38
- _ToolMessageParamT = TypeVar("_ToolMessageParamT")
39
- _MessageParamT = TypeVar("_MessageParamT")
40
- _BaseToolT = TypeVar("_BaseToolT", bound=BaseTool)
41
- _BaseCallParamsT = TypeVar("_BaseCallParamsT", bound=BaseCallParams)
42
- _BaseDynamicConfigT = TypeVar("_BaseDynamicConfigT", bound=BaseDynamicConfig)
43
- _FinishReason = TypeVar("_FinishReason")
44
-
45
-
46
- class BaseStream(
47
- Generic[
48
- _BaseCallResponseT,
49
- _BaseCallResponseChunkT,
50
- _UserMessageParamT,
51
- _AssistantMessageParamT,
52
- _ToolMessageParamT,
53
- _MessageParamT,
54
- _BaseToolT,
55
- _BaseDynamicConfigT,
56
- _BaseCallParamsT,
57
- _FinishReason,
58
- ],
59
- ABC,
60
- ):
61
- """A base class for streaming responses from LLMs."""
62
-
63
- stream: (
64
- Generator[tuple[_BaseCallResponseChunkT, _BaseToolT | None], None, None]
65
- | AsyncGenerator[
66
- tuple[_BaseCallResponseChunkT, _BaseToolT | None],
67
- None,
68
- ]
69
- )
70
- content: str
71
- metadata: Metadata
72
- tool_types: list[type[_BaseToolT]] | None
73
- call_response_type: type[_BaseCallResponseT]
74
- model: str
75
- prompt_template: str | None = None
76
- fn_args: dict[str, Any] | None = None
77
- dynamic_config: _BaseDynamicConfigT
78
- messages: list[_MessageParamT]
79
- call_params: _BaseCallParamsT
80
- call_kwargs: dict[str, Any]
81
- user_message_param: _UserMessageParamT | None = None
82
- message_param: _AssistantMessageParamT
83
- input_tokens: int | float | None = None
84
- output_tokens: int | float | None = None
85
- id: str | None = None
86
- finish_reasons: list[_FinishReason] | None = None
87
- start_time: float = 0
88
- end_time: float = 0
89
-
90
- _provider: ClassVar[str] = "NO PROVIDER"
91
-
92
- def __init__(
93
- self,
94
- *,
95
- stream: Generator[tuple[_BaseCallResponseChunkT, _BaseToolT | None], None, None]
96
- | AsyncGenerator[
97
- tuple[_BaseCallResponseChunkT, _BaseToolT | None],
98
- None,
99
- ],
100
- metadata: Metadata,
101
- tool_types: list[type[_BaseToolT]] | None,
102
- call_response_type: type[_BaseCallResponseT],
103
- model: str,
104
- prompt_template: str,
105
- fn_args: dict[str, Any],
106
- dynamic_config: _BaseDynamicConfigT,
107
- messages: list[_MessageParamT],
108
- call_params: _BaseCallParamsT,
109
- call_kwargs: dict[str, Any],
110
- ) -> None:
111
- """Initializes an instance of `BaseStream`."""
112
- self.content = ""
113
- self.stream = stream
114
- self.metadata = metadata
115
- self.tool_types = tool_types
116
- self.call_response_type = call_response_type
117
- self.model = model
118
- self.prompt_template = prompt_template
119
- self.fn_args = fn_args
120
- self.dynamic_config = dynamic_config
121
- self.messages = messages
122
- self.call_params = call_params
123
- self.call_kwargs = call_kwargs
124
- self.user_message_param = get_possible_user_message_param(messages) # type: ignore
125
-
126
- def __iter__(
127
- self,
128
- ) -> Generator[tuple[_BaseCallResponseChunkT, _BaseToolT | None], None, None]:
129
- """Iterator over the stream and stores useful information."""
130
- assert isinstance(
131
- self.stream, Generator
132
- ), "Stream must be a generator for __iter__"
133
- self.content, tool_calls = "", []
134
- self.start_time = datetime.datetime.now().timestamp() * 1000
135
- for chunk, tool in self.stream:
136
- self._update_properties(chunk)
137
- if tool:
138
- tool_calls.append(tool.tool_call) # type: ignore
139
- yield chunk, tool
140
- self.end_time = datetime.datetime.now().timestamp() * 1000
141
- self.message_param = self._construct_message_param(
142
- tool_calls or None, self.content
143
- )
144
-
145
- def __aiter__(
146
- self,
147
- ) -> AsyncGenerator[tuple[_BaseCallResponseChunkT, _BaseToolT | None], None]:
148
- """Iterates over the stream and stores useful information."""
149
- self.content = ""
150
-
151
- async def generator() -> (
152
- AsyncGenerator[tuple[_BaseCallResponseChunkT, _BaseToolT | None], None]
153
- ):
154
- assert isinstance(
155
- self.stream, AsyncGenerator
156
- ), "Stream must be an async generator for __aiter__"
157
- tool_calls = []
158
- async for chunk, tool in self.stream:
159
- self._update_properties(chunk)
160
- if tool:
161
- tool_calls.append(tool.tool_call) # type: ignore
162
- yield chunk, tool
163
- self.message_param = self._construct_message_param(
164
- tool_calls or None, self.content
165
- )
166
-
167
- return generator()
168
-
169
- def _update_properties(self, chunk: _BaseCallResponseChunkT) -> None:
170
- """Updates the properties of the stream."""
171
- self.content += chunk.content
172
- if chunk.input_tokens is not None:
173
- self.input_tokens = (
174
- chunk.input_tokens
175
- if not self.input_tokens
176
- else self.input_tokens + chunk.input_tokens
177
- )
178
- if chunk.output_tokens is not None:
179
- self.output_tokens = (
180
- chunk.output_tokens
181
- if not self.output_tokens
182
- else self.output_tokens + chunk.output_tokens
183
- )
184
- if chunk.model is not None:
185
- self.model = chunk.model
186
- if chunk.id is not None:
187
- self.id = chunk.id
188
- if chunk.finish_reasons is not None:
189
- self.finish_reasons = chunk.finish_reasons
190
-
191
- @property
192
- @abstractmethod
193
- def cost(self) -> float | None:
194
- """Returns the cost of the stream."""
195
- ...
196
-
197
- @abstractmethod
198
- def _construct_message_param(
199
- self, tool_calls: list[Any] | None = None, content: str | None = None
200
- ) -> _AssistantMessageParamT:
201
- """Constructs the assistant message."""
202
- ...
203
-
204
- def tool_message_params(
205
- self, tools_and_outputs: list[tuple[_BaseToolT, str]]
206
- ) -> list[_ToolMessageParamT]:
207
- """Returns the tool message parameters for tool call results.
208
-
209
- Args:
210
- tools_and_outputs: The list of tools and their outputs from which the tool
211
- message parameters should be constructed.
212
- """
213
- return self.call_response_type.tool_message_params(tools_and_outputs)
214
-
215
- @abstractmethod
216
- def construct_call_response(self) -> _BaseCallResponseT:
217
- """Constructs the call response."""
218
- ...
219
-
220
-
221
- _BaseCallResponseChunkT = TypeVar(
222
- "_BaseCallResponseChunkT", bound=BaseCallResponseChunk
223
- )
224
- _BaseDynamicConfigT = TypeVar("_BaseDynamicConfigT", bound=BaseDynamicConfig)
225
- _BaseClientT = TypeVar("_BaseClientT", bound=object)
226
- _BaseCallParamsT = TypeVar("_BaseCallParamsT", bound=BaseCallParams)
227
- _ResponseT = TypeVar("_ResponseT")
228
- _ResponseChunkT = TypeVar("_ResponseChunkT")
229
- _P = ParamSpec("_P")
230
-
231
-
232
- def stream_factory( # noqa: ANN201
233
- *,
234
- TCallResponse: type[_BaseCallResponseT],
235
- TStream: type[BaseStream],
236
- setup_call: SetupCall[
237
- _BaseClientT,
238
- _BaseDynamicConfigT,
239
- _BaseCallParamsT,
240
- _ResponseT,
241
- _ResponseChunkT,
242
- _BaseToolT,
243
- ],
244
- handle_stream: HandleStream[_ResponseChunkT, _BaseCallResponseChunkT, _BaseToolT],
245
- handle_stream_async: HandleStreamAsync[
246
- _ResponseChunkT, _BaseCallResponseChunkT, _BaseToolT
247
- ],
248
- ):
249
- @overload
250
- def decorator(
251
- fn: Callable[_P, _BaseDynamicConfigT],
252
- model: str,
253
- tools: list[type[BaseTool] | Callable] | None,
254
- json_mode: bool,
255
- client: _BaseClientT | None,
256
- call_params: _BaseCallParamsT,
257
- ) -> Callable[_P, TStream]: ...
258
-
259
- @overload
260
- def decorator(
261
- fn: Callable[_P, Awaitable[_BaseDynamicConfigT]],
262
- model: str,
263
- tools: list[type[BaseTool] | Callable] | None,
264
- json_mode: bool,
265
- client: _BaseClientT | None,
266
- call_params: _BaseCallParamsT,
267
- ) -> Callable[_P, Awaitable[TStream]]: ...
268
-
269
- def decorator(
270
- fn: Callable[_P, _BaseDynamicConfigT | Awaitable[_BaseDynamicConfigT]],
271
- model: str,
272
- tools: list[type[BaseTool] | Callable] | None,
273
- json_mode: bool,
274
- client: _BaseClientT | None,
275
- call_params: _BaseCallParamsT,
276
- ) -> Callable[_P, TStream | Awaitable[TStream]]:
277
- if inspect.iscoroutinefunction(fn):
278
-
279
- @wraps(fn)
280
- async def inner_async(*args: _P.args, **kwargs: _P.kwargs) -> TStream:
281
- assert SetupCall.fn_is_async(fn)
282
- fn_args = get_fn_args(fn, args, kwargs)
283
- dynamic_config = await fn(*args, **kwargs)
284
- create, prompt_template, messages, tool_types, call_kwargs = setup_call(
285
- model=model,
286
- client=client,
287
- fn=fn,
288
- fn_args=fn_args,
289
- dynamic_config=dynamic_config,
290
- tools=tools,
291
- json_mode=json_mode,
292
- call_params=call_params,
293
- extract=False,
294
- )
295
-
296
- async def generator() -> (
297
- AsyncGenerator[
298
- tuple[_BaseCallResponseChunkT, _BaseToolT | None], None
299
- ]
300
- ):
301
- async for chunk, tool in handle_stream_async(
302
- await create(stream=True, **call_kwargs), tool_types
303
- ):
304
- yield chunk, tool
305
-
306
- return TStream(
307
- stream=generator(),
308
- metadata=get_metadata(fn, dynamic_config),
309
- tool_types=tool_types, # type: ignore
310
- call_response_type=TCallResponse,
311
- model=model,
312
- prompt_template=prompt_template,
313
- fn_args=fn_args,
314
- dynamic_config=dynamic_config,
315
- messages=messages,
316
- call_params=call_params,
317
- call_kwargs=call_kwargs,
318
- )
319
-
320
- return inner_async
321
- else:
322
-
323
- @wraps(fn)
324
- def inner(*args: _P.args, **kwargs: _P.kwargs) -> TStream:
325
- assert SetupCall.fn_is_sync(fn)
326
- fn_args = get_fn_args(fn, args, kwargs)
327
- dynamic_config = fn(*args, **kwargs)
328
- create, prompt_template, messages, tool_types, call_kwargs = setup_call(
329
- model=model,
330
- client=client,
331
- fn=fn,
332
- fn_args=fn_args,
333
- dynamic_config=dynamic_config,
334
- tools=tools,
335
- json_mode=json_mode,
336
- call_params=call_params,
337
- extract=False,
338
- )
339
-
340
- def generator() -> (
341
- Generator[
342
- tuple[_BaseCallResponseChunkT, _BaseToolT | None], None, None
343
- ]
344
- ):
345
- yield from handle_stream(
346
- create(stream=True, **call_kwargs), tool_types
347
- )
348
-
349
- return TStream(
350
- stream=generator(),
351
- metadata=get_metadata(fn, dynamic_config),
352
- tool_types=tool_types, # type: ignore
353
- call_response_type=TCallResponse,
354
- model=model,
355
- prompt_template=prompt_template,
356
- fn_args=fn_args,
357
- dynamic_config=dynamic_config,
358
- messages=messages,
359
- call_params=call_params,
360
- call_kwargs=call_kwargs,
361
- )
362
-
363
- return inner
364
-
365
- return decorator
@@ -1,251 +0,0 @@
1
- """This module defines the base class for structured streams."""
2
-
3
- import inspect
4
- from collections.abc import (
5
- AsyncGenerator,
6
- AsyncIterable,
7
- Awaitable,
8
- Callable,
9
- Generator,
10
- Iterable,
11
- )
12
- from functools import wraps
13
- from typing import (
14
- Generic,
15
- ParamSpec,
16
- TypeVar,
17
- cast,
18
- overload,
19
- )
20
-
21
- from pydantic import BaseModel
22
-
23
- from ._utils import (
24
- BaseType,
25
- GetJsonOutput,
26
- SetupCall,
27
- extract_tool_return,
28
- setup_extract_tool,
29
- )
30
- from .call_params import BaseCallParams
31
- from .call_response import BaseCallResponse
32
- from .call_response_chunk import BaseCallResponseChunk
33
- from .dynamic_config import BaseDynamicConfig
34
- from .stream import BaseStream, stream_factory
35
- from .tool import BaseTool
36
-
37
- _BaseCallResponseT = TypeVar("_BaseCallResponseT", bound=BaseCallResponse)
38
- _BaseCallResponseChunkT = TypeVar(
39
- "_BaseCallResponseChunkT", bound=BaseCallResponseChunk
40
- )
41
- _BaseToolT = TypeVar("_BaseToolT", bound=BaseTool)
42
- _BaseCallParamsT = TypeVar("_BaseCallParamsT", bound=BaseCallParams)
43
- _BaseDynamicConfigT = TypeVar("_BaseDynamicConfigT", bound=BaseDynamicConfig)
44
- _ResponseModelT = TypeVar("_ResponseModelT", bound=BaseModel | BaseType)
45
-
46
-
47
- class BaseStructuredStream(Generic[_ResponseModelT]):
48
- """A base class for streaming structured outputs from LLMs."""
49
-
50
- stream: BaseStream
51
- response_model: type[_ResponseModelT]
52
- constructed_response_model: _ResponseModelT
53
-
54
- def __init__(
55
- self,
56
- *,
57
- stream: BaseStream,
58
- response_model: type[_ResponseModelT],
59
- ) -> None:
60
- """Initializes an instance of `BaseStructuredStream`."""
61
- self.stream = stream
62
- self.response_model = response_model
63
-
64
- def __iter__(self) -> Generator[_ResponseModelT, None, None]:
65
- """Iterates over the stream and extracts structured outputs."""
66
- json_output = ""
67
- for chunk, _ in self.stream:
68
- json_output += chunk.content
69
- if json_output and json_output[0] != "{":
70
- try:
71
- json_start = json_output.index("{")
72
- json_output = json_output[json_start:]
73
- except ValueError:
74
- json_output = ""
75
- if chunk.model is not None:
76
- self.stream.model = chunk.model
77
- if json_output:
78
- yield extract_tool_return(self.response_model, json_output, True)
79
- if json_output:
80
- json_output = json_output[: json_output.rfind("}") + 1]
81
- self.constructed_response_model = extract_tool_return(
82
- self.response_model, json_output, False
83
- )
84
- yield self.constructed_response_model
85
-
86
- def __aiter__(self) -> AsyncGenerator[_ResponseModelT, None]:
87
- """Iterates over the stream and extracts structured outputs."""
88
-
89
- async def generator() -> AsyncGenerator[_ResponseModelT, None]:
90
- json_output = ""
91
- async for chunk, _ in self.stream:
92
- json_output += chunk.content
93
- if json_output and json_output[0] != "{":
94
- try:
95
- json_start = json_output.index("{")
96
- json_output = json_output[json_start:]
97
- except ValueError:
98
- json_output = ""
99
- if chunk.model is not None:
100
- self.stream.model = chunk.model
101
- if json_output:
102
- yield extract_tool_return(self.response_model, json_output, True)
103
- if json_output:
104
- json_output = json_output[: json_output.rfind("}") + 1]
105
- self.constructed_response_model = extract_tool_return(
106
- self.response_model, json_output, False
107
- )
108
- yield self.constructed_response_model
109
-
110
- return generator()
111
-
112
-
113
- _BaseDynamicConfigT = TypeVar("_BaseDynamicConfigT", bound=BaseDynamicConfig)
114
- _BaseClientT = TypeVar("_BaseClientT", bound=object)
115
- _ResponseT = TypeVar("_ResponseT")
116
- _ResponseChunkT = TypeVar("_ResponseChunkT")
117
- _P = ParamSpec("_P")
118
-
119
-
120
- def structured_stream_factory( # noqa: ANN201
121
- *,
122
- TCallResponse: type[_BaseCallResponseT],
123
- TCallResponseChunk: type[_BaseCallResponseChunkT],
124
- TStream: type[BaseStream],
125
- TToolType: type[_BaseToolT],
126
- setup_call: SetupCall[
127
- _BaseClientT,
128
- _BaseDynamicConfigT,
129
- _BaseCallParamsT,
130
- _ResponseT,
131
- _ResponseChunkT,
132
- _BaseToolT,
133
- ],
134
- get_json_output: GetJsonOutput[_BaseCallResponseChunkT],
135
- ):
136
- class CustomContentChunk(TCallResponseChunk):
137
- json_output: str
138
-
139
- @property
140
- def content(self) -> str:
141
- return self.json_output
142
-
143
- @overload
144
- def decorator(
145
- fn: Callable[_P, _BaseDynamicConfigT],
146
- model: str,
147
- response_model: type[_ResponseModelT],
148
- json_mode: bool,
149
- client: _BaseClientT | None,
150
- call_params: _BaseCallParamsT,
151
- ) -> Callable[
152
- _P,
153
- Iterable[_ResponseModelT],
154
- ]: ...
155
-
156
- @overload
157
- def decorator(
158
- fn: Callable[_P, Awaitable[_BaseDynamicConfigT]],
159
- model: str,
160
- response_model: type[_ResponseModelT],
161
- json_mode: bool,
162
- client: _BaseClientT | None,
163
- call_params: _BaseCallParamsT,
164
- ) -> Callable[
165
- _P,
166
- Awaitable[AsyncIterable[_ResponseModelT]],
167
- ]: ...
168
-
169
- def decorator(
170
- fn: Callable[_P, _BaseDynamicConfigT | Awaitable[_BaseDynamicConfigT]],
171
- model: str,
172
- response_model: type[_ResponseModelT],
173
- json_mode: bool,
174
- client: _BaseClientT | None,
175
- call_params: _BaseCallParamsT,
176
- ) -> Callable[
177
- _P,
178
- Iterable[_ResponseModelT] | Awaitable[AsyncIterable[_ResponseModelT]],
179
- ]:
180
- def handle_chunk(
181
- chunk: _ResponseChunkT,
182
- ) -> tuple[_BaseCallResponseChunkT, None]:
183
- call_response_chunk = TCallResponseChunk(chunk=chunk)
184
- json_output = get_json_output(call_response_chunk, json_mode)
185
-
186
- call_response_chunk = cast(
187
- _BaseCallResponseChunkT,
188
- CustomContentChunk(chunk=chunk, json_output=json_output), # pyright: ignore [reportAbstractUsage]
189
- )
190
- return call_response_chunk, None
191
-
192
- def handle_stream(
193
- stream: Generator[_ResponseChunkT, None, None],
194
- tool_types: list[type[_BaseToolT]] | None,
195
- ) -> Generator[tuple[_BaseCallResponseChunkT, None], None, None]:
196
- for chunk in stream:
197
- yield handle_chunk(chunk)
198
-
199
- async def handle_stream_async(
200
- stream: AsyncGenerator[_ResponseChunkT, None],
201
- tool_types: list[type[_BaseToolT]] | None,
202
- ) -> AsyncGenerator[tuple[_BaseCallResponseChunkT, None], None]:
203
- async for chunk in stream:
204
- yield handle_chunk(chunk)
205
-
206
- stream_decorator = stream_factory(
207
- TCallResponse=TCallResponse,
208
- TStream=TStream,
209
- setup_call=setup_call,
210
- handle_stream=handle_stream,
211
- handle_stream_async=handle_stream_async,
212
- )
213
-
214
- tool = setup_extract_tool(response_model, TToolType)
215
- stream_decorator_kwargs = {
216
- "model": model,
217
- "tools": [tool],
218
- "json_mode": json_mode,
219
- "client": client,
220
- "call_params": call_params,
221
- }
222
- if inspect.iscoroutinefunction(fn):
223
-
224
- @wraps(fn)
225
- async def inner_async(
226
- *args: _P.args, **kwargs: _P.kwargs
227
- ) -> AsyncIterable[_ResponseModelT]:
228
- assert SetupCall.fn_is_async(fn)
229
- return BaseStructuredStream[_ResponseModelT](
230
- stream=await stream_decorator(fn=fn, **stream_decorator_kwargs)(
231
- *args, **kwargs
232
- ),
233
- response_model=response_model,
234
- )
235
-
236
- return inner_async
237
- else:
238
-
239
- @wraps(fn)
240
- def inner(*args: _P.args, **kwargs: _P.kwargs) -> Iterable[_ResponseModelT]:
241
- assert SetupCall.fn_is_sync(fn)
242
- return BaseStructuredStream[_ResponseModelT](
243
- stream=stream_decorator(fn=fn, **stream_decorator_kwargs)(
244
- *args, **kwargs
245
- ),
246
- response_model=response_model,
247
- )
248
-
249
- return inner
250
-
251
- return decorator