mirascope 1.22.4__py3-none-any.whl → 2.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mirascope/__init__.py +5 -50
- mirascope/_stubs.py +384 -0
- mirascope/_utils.py +34 -0
- mirascope/api/__init__.py +14 -0
- mirascope/api/_generated/README.md +207 -0
- mirascope/api/_generated/__init__.py +444 -0
- mirascope/api/_generated/annotations/__init__.py +33 -0
- mirascope/api/_generated/annotations/client.py +506 -0
- mirascope/api/_generated/annotations/raw_client.py +1414 -0
- mirascope/api/_generated/annotations/types/__init__.py +31 -0
- mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_create_response.py +48 -0
- mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_get_response.py +48 -0
- mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +50 -0
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_update_response.py +48 -0
- mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
- mirascope/api/_generated/api_keys/__init__.py +17 -0
- mirascope/api/_generated/api_keys/client.py +530 -0
- mirascope/api/_generated/api_keys/raw_client.py +1236 -0
- mirascope/api/_generated/api_keys/types/__init__.py +15 -0
- mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
- mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
- mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +40 -0
- mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
- mirascope/api/_generated/client.py +211 -0
- mirascope/api/_generated/core/__init__.py +52 -0
- mirascope/api/_generated/core/api_error.py +23 -0
- mirascope/api/_generated/core/client_wrapper.py +46 -0
- mirascope/api/_generated/core/datetime_utils.py +28 -0
- mirascope/api/_generated/core/file.py +67 -0
- mirascope/api/_generated/core/force_multipart.py +16 -0
- mirascope/api/_generated/core/http_client.py +543 -0
- mirascope/api/_generated/core/http_response.py +55 -0
- mirascope/api/_generated/core/jsonable_encoder.py +100 -0
- mirascope/api/_generated/core/pydantic_utilities.py +255 -0
- mirascope/api/_generated/core/query_encoder.py +58 -0
- mirascope/api/_generated/core/remove_none_from_dict.py +11 -0
- mirascope/api/_generated/core/request_options.py +35 -0
- mirascope/api/_generated/core/serialization.py +276 -0
- mirascope/api/_generated/docs/__init__.py +4 -0
- mirascope/api/_generated/docs/client.py +91 -0
- mirascope/api/_generated/docs/raw_client.py +178 -0
- mirascope/api/_generated/environment.py +9 -0
- mirascope/api/_generated/environments/__init__.py +23 -0
- mirascope/api/_generated/environments/client.py +649 -0
- mirascope/api/_generated/environments/raw_client.py +1567 -0
- mirascope/api/_generated/environments/types/__init__.py +25 -0
- mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
- mirascope/api/_generated/environments/types/environments_get_analytics_response.py +60 -0
- mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +24 -0
- mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +22 -0
- mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
- mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
- mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
- mirascope/api/_generated/errors/__init__.py +25 -0
- mirascope/api/_generated/errors/bad_request_error.py +14 -0
- mirascope/api/_generated/errors/conflict_error.py +14 -0
- mirascope/api/_generated/errors/forbidden_error.py +11 -0
- mirascope/api/_generated/errors/internal_server_error.py +10 -0
- mirascope/api/_generated/errors/not_found_error.py +11 -0
- mirascope/api/_generated/errors/payment_required_error.py +15 -0
- mirascope/api/_generated/errors/service_unavailable_error.py +14 -0
- mirascope/api/_generated/errors/too_many_requests_error.py +15 -0
- mirascope/api/_generated/errors/unauthorized_error.py +11 -0
- mirascope/api/_generated/functions/__init__.py +39 -0
- mirascope/api/_generated/functions/client.py +647 -0
- mirascope/api/_generated/functions/raw_client.py +1890 -0
- mirascope/api/_generated/functions/types/__init__.py +53 -0
- mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
- mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
- mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_get_by_env_response.py +53 -0
- mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +22 -0
- mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
- mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_list_by_env_response.py +25 -0
- mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +56 -0
- mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +22 -0
- mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
- mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
- mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
- mirascope/api/_generated/health/__init__.py +7 -0
- mirascope/api/_generated/health/client.py +92 -0
- mirascope/api/_generated/health/raw_client.py +175 -0
- mirascope/api/_generated/health/types/__init__.py +8 -0
- mirascope/api/_generated/health/types/health_check_response.py +22 -0
- mirascope/api/_generated/health/types/health_check_response_status.py +5 -0
- mirascope/api/_generated/organization_invitations/__init__.py +33 -0
- mirascope/api/_generated/organization_invitations/client.py +546 -0
- mirascope/api/_generated/organization_invitations/raw_client.py +1519 -0
- mirascope/api/_generated/organization_invitations/types/__init__.py +53 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +34 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +48 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +48 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +48 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +7 -0
- mirascope/api/_generated/organization_memberships/__init__.py +19 -0
- mirascope/api/_generated/organization_memberships/client.py +302 -0
- mirascope/api/_generated/organization_memberships/raw_client.py +736 -0
- mirascope/api/_generated/organization_memberships/types/__init__.py +27 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +33 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +7 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +7 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +31 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +7 -0
- mirascope/api/_generated/organizations/__init__.py +51 -0
- mirascope/api/_generated/organizations/client.py +869 -0
- mirascope/api/_generated/organizations/raw_client.py +2593 -0
- mirascope/api/_generated/organizations/types/__init__.py +71 -0
- mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +24 -0
- mirascope/api/_generated/organizations/types/organizations_create_response.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_create_response_role.py +5 -0
- mirascope/api/_generated/organizations/types/organizations_get_response.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_get_response_role.py +5 -0
- mirascope/api/_generated/organizations/types/organizations_list_response_item.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +5 -0
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +47 -0
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +33 -0
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +24 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response.py +53 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +34 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_update_response.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_update_response_role.py +5 -0
- mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +35 -0
- mirascope/api/_generated/project_memberships/__init__.py +29 -0
- mirascope/api/_generated/project_memberships/client.py +528 -0
- mirascope/api/_generated/project_memberships/raw_client.py +1278 -0
- mirascope/api/_generated/project_memberships/types/__init__.py +33 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +35 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_get_response.py +33 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_get_response_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +33 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +35 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +7 -0
- mirascope/api/_generated/projects/__init__.py +7 -0
- mirascope/api/_generated/projects/client.py +428 -0
- mirascope/api/_generated/projects/raw_client.py +1302 -0
- mirascope/api/_generated/projects/types/__init__.py +10 -0
- mirascope/api/_generated/projects/types/projects_create_response.py +25 -0
- mirascope/api/_generated/projects/types/projects_get_response.py +25 -0
- mirascope/api/_generated/projects/types/projects_list_response_item.py +25 -0
- mirascope/api/_generated/projects/types/projects_update_response.py +25 -0
- mirascope/api/_generated/reference.md +4987 -0
- mirascope/api/_generated/tags/__init__.py +19 -0
- mirascope/api/_generated/tags/client.py +504 -0
- mirascope/api/_generated/tags/raw_client.py +1288 -0
- mirascope/api/_generated/tags/types/__init__.py +17 -0
- mirascope/api/_generated/tags/types/tags_create_response.py +41 -0
- mirascope/api/_generated/tags/types/tags_get_response.py +41 -0
- mirascope/api/_generated/tags/types/tags_list_response.py +23 -0
- mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +41 -0
- mirascope/api/_generated/tags/types/tags_update_response.py +41 -0
- mirascope/api/_generated/token_cost/__init__.py +7 -0
- mirascope/api/_generated/token_cost/client.py +160 -0
- mirascope/api/_generated/token_cost/raw_client.py +264 -0
- mirascope/api/_generated/token_cost/types/__init__.py +8 -0
- mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +54 -0
- mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +52 -0
- mirascope/api/_generated/traces/__init__.py +97 -0
- mirascope/api/_generated/traces/client.py +1103 -0
- mirascope/api/_generated/traces/raw_client.py +2322 -0
- mirascope/api/_generated/traces/types/__init__.py +155 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +29 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +27 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +23 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +38 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +19 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +22 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +20 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +29 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +31 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +23 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +38 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +19 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +22 -0
- 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
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +48 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +23 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +38 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +19 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +24 -0
- 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
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +20 -0
- mirascope/api/_generated/traces/types/traces_create_response.py +24 -0
- mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +22 -0
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +60 -0
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +33 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +88 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +88 -0
- mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +25 -0
- mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +44 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_response.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +50 -0
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
- mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +50 -0
- mirascope/api/_generated/types/__init__.py +85 -0
- mirascope/api/_generated/types/already_exists_error.py +22 -0
- mirascope/api/_generated/types/already_exists_error_tag.py +5 -0
- mirascope/api/_generated/types/bad_request_error_body.py +50 -0
- mirascope/api/_generated/types/click_house_error.py +22 -0
- mirascope/api/_generated/types/database_error.py +22 -0
- mirascope/api/_generated/types/database_error_tag.py +5 -0
- mirascope/api/_generated/types/date.py +3 -0
- mirascope/api/_generated/types/http_api_decode_error.py +27 -0
- mirascope/api/_generated/types/http_api_decode_error_tag.py +5 -0
- mirascope/api/_generated/types/immutable_resource_error.py +22 -0
- mirascope/api/_generated/types/internal_server_error_body.py +49 -0
- mirascope/api/_generated/types/issue.py +38 -0
- mirascope/api/_generated/types/issue_tag.py +10 -0
- mirascope/api/_generated/types/not_found_error_body.py +22 -0
- mirascope/api/_generated/types/not_found_error_tag.py +5 -0
- mirascope/api/_generated/types/number_from_string.py +3 -0
- mirascope/api/_generated/types/permission_denied_error.py +22 -0
- mirascope/api/_generated/types/permission_denied_error_tag.py +5 -0
- mirascope/api/_generated/types/plan_limit_exceeded_error.py +32 -0
- mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +7 -0
- mirascope/api/_generated/types/pricing_unavailable_error.py +23 -0
- mirascope/api/_generated/types/property_key.py +7 -0
- mirascope/api/_generated/types/property_key_key.py +25 -0
- mirascope/api/_generated/types/property_key_key_tag.py +5 -0
- mirascope/api/_generated/types/rate_limit_error.py +31 -0
- mirascope/api/_generated/types/rate_limit_error_tag.py +5 -0
- mirascope/api/_generated/types/service_unavailable_error_body.py +24 -0
- mirascope/api/_generated/types/service_unavailable_error_tag.py +7 -0
- mirascope/api/_generated/types/stripe_error.py +20 -0
- mirascope/api/_generated/types/subscription_past_due_error.py +31 -0
- mirascope/api/_generated/types/subscription_past_due_error_tag.py +7 -0
- mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
- mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
- mirascope/api/client.py +255 -0
- mirascope/api/settings.py +99 -0
- mirascope/llm/__init__.py +309 -13
- mirascope/llm/calls/__init__.py +17 -0
- mirascope/llm/calls/calls.py +348 -0
- mirascope/llm/calls/decorator.py +268 -0
- mirascope/llm/content/__init__.py +71 -0
- mirascope/llm/content/audio.py +173 -0
- mirascope/llm/content/document.py +94 -0
- mirascope/llm/content/image.py +206 -0
- mirascope/llm/content/text.py +47 -0
- mirascope/llm/content/thought.py +58 -0
- mirascope/llm/content/tool_call.py +69 -0
- mirascope/llm/content/tool_output.py +43 -0
- mirascope/llm/context/__init__.py +6 -0
- mirascope/llm/context/_utils.py +41 -0
- mirascope/llm/context/context.py +24 -0
- mirascope/llm/exceptions.py +360 -0
- mirascope/llm/formatting/__init__.py +39 -0
- mirascope/llm/formatting/format.py +291 -0
- mirascope/llm/formatting/from_call_args.py +30 -0
- mirascope/llm/formatting/output_parser.py +178 -0
- mirascope/llm/formatting/partial.py +131 -0
- mirascope/llm/formatting/primitives.py +192 -0
- mirascope/llm/formatting/types.py +83 -0
- mirascope/llm/mcp/__init__.py +5 -0
- mirascope/llm/mcp/mcp_client.py +130 -0
- mirascope/llm/messages/__init__.py +35 -0
- mirascope/llm/messages/_utils.py +34 -0
- mirascope/llm/messages/message.py +190 -0
- mirascope/llm/models/__init__.py +21 -0
- mirascope/llm/models/models.py +1339 -0
- mirascope/llm/models/params.py +72 -0
- mirascope/llm/models/thinking_config.py +61 -0
- mirascope/llm/prompts/__init__.py +34 -0
- mirascope/llm/prompts/_utils.py +31 -0
- mirascope/llm/prompts/decorator.py +215 -0
- mirascope/llm/prompts/prompts.py +484 -0
- mirascope/llm/prompts/protocols.py +65 -0
- mirascope/llm/providers/__init__.py +65 -0
- mirascope/llm/providers/anthropic/__init__.py +11 -0
- mirascope/llm/providers/anthropic/_utils/__init__.py +27 -0
- mirascope/llm/providers/anthropic/_utils/beta_decode.py +297 -0
- mirascope/llm/providers/anthropic/_utils/beta_encode.py +272 -0
- mirascope/llm/providers/anthropic/_utils/decode.py +326 -0
- mirascope/llm/providers/anthropic/_utils/encode.py +431 -0
- mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
- mirascope/llm/providers/anthropic/beta_provider.py +338 -0
- mirascope/llm/providers/anthropic/model_id.py +23 -0
- mirascope/llm/providers/anthropic/model_info.py +87 -0
- mirascope/llm/providers/anthropic/provider.py +440 -0
- mirascope/llm/providers/base/__init__.py +14 -0
- mirascope/llm/providers/base/_utils.py +248 -0
- mirascope/llm/providers/base/base_provider.py +1463 -0
- mirascope/llm/providers/base/kwargs.py +12 -0
- mirascope/llm/providers/google/__init__.py +6 -0
- mirascope/llm/providers/google/_utils/__init__.py +17 -0
- mirascope/llm/providers/google/_utils/decode.py +357 -0
- mirascope/llm/providers/google/_utils/encode.py +418 -0
- mirascope/llm/providers/google/_utils/errors.py +50 -0
- mirascope/llm/providers/google/message.py +7 -0
- mirascope/llm/providers/google/model_id.py +22 -0
- mirascope/llm/providers/google/model_info.py +63 -0
- mirascope/llm/providers/google/provider.py +456 -0
- mirascope/llm/providers/mirascope/__init__.py +5 -0
- mirascope/llm/providers/mirascope/_utils.py +73 -0
- mirascope/llm/providers/mirascope/provider.py +313 -0
- mirascope/llm/providers/mlx/__init__.py +9 -0
- mirascope/llm/providers/mlx/_utils.py +141 -0
- mirascope/llm/providers/mlx/encoding/__init__.py +8 -0
- mirascope/llm/providers/mlx/encoding/base.py +69 -0
- mirascope/llm/providers/mlx/encoding/transformers.py +146 -0
- mirascope/llm/providers/mlx/mlx.py +242 -0
- mirascope/llm/providers/mlx/model_id.py +17 -0
- mirascope/llm/providers/mlx/provider.py +416 -0
- mirascope/llm/providers/model_id.py +16 -0
- mirascope/llm/providers/ollama/__init__.py +7 -0
- mirascope/llm/providers/ollama/provider.py +71 -0
- mirascope/llm/providers/openai/__init__.py +15 -0
- mirascope/llm/providers/openai/_utils/__init__.py +5 -0
- mirascope/llm/providers/openai/_utils/errors.py +46 -0
- mirascope/llm/providers/openai/completions/__init__.py +7 -0
- mirascope/llm/providers/openai/completions/_utils/__init__.py +18 -0
- mirascope/llm/providers/openai/completions/_utils/decode.py +252 -0
- mirascope/llm/providers/openai/completions/_utils/encode.py +390 -0
- mirascope/llm/providers/openai/completions/_utils/feature_info.py +50 -0
- mirascope/llm/providers/openai/completions/base_provider.py +522 -0
- mirascope/llm/providers/openai/completions/provider.py +28 -0
- mirascope/llm/providers/openai/model_id.py +31 -0
- mirascope/llm/providers/openai/model_info.py +303 -0
- mirascope/llm/providers/openai/provider.py +405 -0
- mirascope/llm/providers/openai/responses/__init__.py +5 -0
- mirascope/llm/providers/openai/responses/_utils/__init__.py +15 -0
- mirascope/llm/providers/openai/responses/_utils/decode.py +289 -0
- mirascope/llm/providers/openai/responses/_utils/encode.py +399 -0
- mirascope/llm/providers/openai/responses/provider.py +472 -0
- mirascope/llm/providers/openrouter/__init__.py +5 -0
- mirascope/llm/providers/openrouter/provider.py +67 -0
- mirascope/llm/providers/provider_id.py +26 -0
- mirascope/llm/providers/provider_registry.py +305 -0
- mirascope/llm/providers/together/__init__.py +7 -0
- mirascope/llm/providers/together/provider.py +40 -0
- mirascope/llm/responses/__init__.py +66 -0
- mirascope/llm/responses/_utils.py +146 -0
- mirascope/llm/responses/base_response.py +103 -0
- mirascope/llm/responses/base_stream_response.py +824 -0
- mirascope/llm/responses/finish_reason.py +28 -0
- mirascope/llm/responses/response.py +362 -0
- mirascope/llm/responses/root_response.py +248 -0
- mirascope/llm/responses/stream_response.py +577 -0
- mirascope/llm/responses/streams.py +363 -0
- mirascope/llm/responses/usage.py +139 -0
- mirascope/llm/tools/__init__.py +71 -0
- mirascope/llm/tools/_utils.py +34 -0
- mirascope/llm/tools/decorator.py +184 -0
- mirascope/llm/tools/protocols.py +96 -0
- mirascope/llm/tools/provider_tools.py +18 -0
- mirascope/llm/tools/tool_schema.py +321 -0
- mirascope/llm/tools/toolkit.py +178 -0
- mirascope/llm/tools/tools.py +263 -0
- mirascope/llm/tools/types.py +112 -0
- mirascope/llm/tools/web_search_tool.py +32 -0
- mirascope/llm/types/__init__.py +22 -0
- mirascope/llm/types/dataclass.py +9 -0
- mirascope/llm/types/jsonable.py +44 -0
- mirascope/llm/types/type_vars.py +19 -0
- mirascope/ops/__init__.py +129 -0
- mirascope/ops/_internal/__init__.py +5 -0
- mirascope/ops/_internal/closure.py +1172 -0
- mirascope/ops/_internal/configuration.py +177 -0
- mirascope/ops/_internal/context.py +76 -0
- mirascope/ops/_internal/exporters/__init__.py +26 -0
- mirascope/ops/_internal/exporters/exporters.py +362 -0
- mirascope/ops/_internal/exporters/processors.py +104 -0
- mirascope/ops/_internal/exporters/types.py +165 -0
- mirascope/ops/_internal/exporters/utils.py +66 -0
- mirascope/ops/_internal/instrumentation/__init__.py +28 -0
- mirascope/ops/_internal/instrumentation/llm/__init__.py +8 -0
- mirascope/ops/_internal/instrumentation/llm/common.py +500 -0
- mirascope/ops/_internal/instrumentation/llm/cost.py +190 -0
- mirascope/ops/_internal/instrumentation/llm/encode.py +238 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +38 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +31 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +38 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +18 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +100 -0
- mirascope/ops/_internal/instrumentation/llm/llm.py +161 -0
- mirascope/ops/_internal/instrumentation/llm/model.py +1777 -0
- mirascope/ops/_internal/instrumentation/llm/response.py +521 -0
- mirascope/ops/_internal/instrumentation/llm/serialize.py +324 -0
- mirascope/ops/_internal/instrumentation/providers/__init__.py +29 -0
- mirascope/ops/_internal/instrumentation/providers/anthropic.py +78 -0
- mirascope/ops/_internal/instrumentation/providers/base.py +179 -0
- mirascope/ops/_internal/instrumentation/providers/google_genai.py +85 -0
- mirascope/ops/_internal/instrumentation/providers/openai.py +82 -0
- mirascope/ops/_internal/propagation.py +198 -0
- mirascope/ops/_internal/protocols.py +133 -0
- mirascope/ops/_internal/session.py +139 -0
- mirascope/ops/_internal/spans.py +232 -0
- mirascope/ops/_internal/traced_calls.py +389 -0
- mirascope/ops/_internal/traced_functions.py +528 -0
- mirascope/ops/_internal/tracing.py +353 -0
- mirascope/ops/_internal/types.py +13 -0
- mirascope/ops/_internal/utils.py +131 -0
- mirascope/ops/_internal/versioned_calls.py +512 -0
- mirascope/ops/_internal/versioned_functions.py +357 -0
- mirascope/ops/_internal/versioning.py +303 -0
- mirascope/ops/exceptions.py +21 -0
- mirascope-2.1.1.dist-info/METADATA +231 -0
- mirascope-2.1.1.dist-info/RECORD +437 -0
- mirascope-2.1.1.dist-info/WHEEL +4 -0
- mirascope-2.1.1.dist-info/licenses/LICENSE +21 -0
- mirascope/beta/__init__.py +0 -3
- mirascope/beta/openai/__init__.py +0 -17
- mirascope/beta/openai/realtime/__init__.py +0 -13
- mirascope/beta/openai/realtime/_utils/__init__.py +0 -3
- mirascope/beta/openai/realtime/_utils/_audio.py +0 -74
- mirascope/beta/openai/realtime/_utils/_protocols.py +0 -50
- mirascope/beta/openai/realtime/realtime.py +0 -500
- mirascope/beta/openai/realtime/recording.py +0 -98
- mirascope/beta/openai/realtime/tool.py +0 -113
- mirascope/beta/rag/__init__.py +0 -24
- mirascope/beta/rag/base/__init__.py +0 -22
- mirascope/beta/rag/base/chunkers/__init__.py +0 -2
- mirascope/beta/rag/base/chunkers/base_chunker.py +0 -37
- mirascope/beta/rag/base/chunkers/text_chunker.py +0 -33
- mirascope/beta/rag/base/config.py +0 -8
- mirascope/beta/rag/base/document.py +0 -11
- mirascope/beta/rag/base/embedders.py +0 -35
- mirascope/beta/rag/base/embedding_params.py +0 -18
- mirascope/beta/rag/base/embedding_response.py +0 -30
- mirascope/beta/rag/base/query_results.py +0 -7
- mirascope/beta/rag/base/vectorstore_params.py +0 -18
- mirascope/beta/rag/base/vectorstores.py +0 -37
- mirascope/beta/rag/chroma/__init__.py +0 -11
- mirascope/beta/rag/chroma/types.py +0 -57
- mirascope/beta/rag/chroma/vectorstores.py +0 -97
- mirascope/beta/rag/cohere/__init__.py +0 -11
- mirascope/beta/rag/cohere/embedders.py +0 -87
- mirascope/beta/rag/cohere/embedding_params.py +0 -29
- mirascope/beta/rag/cohere/embedding_response.py +0 -29
- mirascope/beta/rag/cohere/py.typed +0 -0
- mirascope/beta/rag/openai/__init__.py +0 -11
- mirascope/beta/rag/openai/embedders.py +0 -144
- mirascope/beta/rag/openai/embedding_params.py +0 -18
- mirascope/beta/rag/openai/embedding_response.py +0 -14
- mirascope/beta/rag/openai/py.typed +0 -0
- mirascope/beta/rag/pinecone/__init__.py +0 -19
- mirascope/beta/rag/pinecone/types.py +0 -143
- mirascope/beta/rag/pinecone/vectorstores.py +0 -148
- mirascope/beta/rag/weaviate/__init__.py +0 -6
- mirascope/beta/rag/weaviate/types.py +0 -92
- mirascope/beta/rag/weaviate/vectorstores.py +0 -103
- mirascope/core/__init__.py +0 -107
- mirascope/core/anthropic/__init__.py +0 -31
- mirascope/core/anthropic/_call.py +0 -67
- mirascope/core/anthropic/_call_kwargs.py +0 -13
- mirascope/core/anthropic/_utils/__init__.py +0 -16
- mirascope/core/anthropic/_utils/_convert_common_call_params.py +0 -25
- mirascope/core/anthropic/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
- mirascope/core/anthropic/_utils/_convert_message_params.py +0 -102
- mirascope/core/anthropic/_utils/_get_json_output.py +0 -31
- mirascope/core/anthropic/_utils/_handle_stream.py +0 -113
- mirascope/core/anthropic/_utils/_message_param_converter.py +0 -142
- mirascope/core/anthropic/_utils/_setup_call.py +0 -134
- mirascope/core/anthropic/call_params.py +0 -41
- mirascope/core/anthropic/call_response.py +0 -206
- mirascope/core/anthropic/call_response_chunk.py +0 -132
- mirascope/core/anthropic/dynamic_config.py +0 -40
- mirascope/core/anthropic/py.typed +0 -0
- mirascope/core/anthropic/stream.py +0 -147
- mirascope/core/anthropic/tool.py +0 -101
- mirascope/core/azure/__init__.py +0 -31
- mirascope/core/azure/_call.py +0 -67
- mirascope/core/azure/_call_kwargs.py +0 -13
- mirascope/core/azure/_utils/__init__.py +0 -14
- mirascope/core/azure/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/azure/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
- mirascope/core/azure/_utils/_convert_message_params.py +0 -121
- mirascope/core/azure/_utils/_get_credential.py +0 -33
- mirascope/core/azure/_utils/_get_json_output.py +0 -27
- mirascope/core/azure/_utils/_handle_stream.py +0 -130
- mirascope/core/azure/_utils/_message_param_converter.py +0 -117
- mirascope/core/azure/_utils/_setup_call.py +0 -183
- mirascope/core/azure/call_params.py +0 -59
- mirascope/core/azure/call_response.py +0 -215
- mirascope/core/azure/call_response_chunk.py +0 -105
- mirascope/core/azure/dynamic_config.py +0 -30
- mirascope/core/azure/py.typed +0 -0
- mirascope/core/azure/stream.py +0 -147
- mirascope/core/azure/tool.py +0 -93
- mirascope/core/base/__init__.py +0 -84
- mirascope/core/base/_call_factory.py +0 -256
- mirascope/core/base/_create.py +0 -253
- mirascope/core/base/_extract.py +0 -175
- mirascope/core/base/_extract_with_tools.py +0 -189
- mirascope/core/base/_partial.py +0 -95
- mirascope/core/base/_utils/__init__.py +0 -92
- mirascope/core/base/_utils/_base_message_param_converter.py +0 -22
- mirascope/core/base/_utils/_base_type.py +0 -26
- mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -48
- mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
- mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -139
- mirascope/core/base/_utils/_convert_messages_to_message_params.py +0 -171
- mirascope/core/base/_utils/_convert_provider_finish_reason_to_finish_reason.py +0 -20
- mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
- mirascope/core/base/_utils/_extract_tool_return.py +0 -42
- mirascope/core/base/_utils/_fn_is_async.py +0 -15
- mirascope/core/base/_utils/_format_template.py +0 -32
- mirascope/core/base/_utils/_get_audio_type.py +0 -18
- mirascope/core/base/_utils/_get_common_usage.py +0 -20
- mirascope/core/base/_utils/_get_create_fn_or_async_create_fn.py +0 -137
- mirascope/core/base/_utils/_get_document_type.py +0 -7
- mirascope/core/base/_utils/_get_dynamic_configuration.py +0 -69
- mirascope/core/base/_utils/_get_fields_from_call_args.py +0 -34
- mirascope/core/base/_utils/_get_fn_args.py +0 -23
- mirascope/core/base/_utils/_get_image_dimensions.py +0 -39
- mirascope/core/base/_utils/_get_image_type.py +0 -26
- mirascope/core/base/_utils/_get_metadata.py +0 -17
- mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -21
- mirascope/core/base/_utils/_get_prompt_template.py +0 -28
- mirascope/core/base/_utils/_get_template_values.py +0 -51
- mirascope/core/base/_utils/_get_template_variables.py +0 -38
- mirascope/core/base/_utils/_get_unsupported_tool_config_keys.py +0 -10
- mirascope/core/base/_utils/_is_prompt_template.py +0 -24
- mirascope/core/base/_utils/_json_mode_content.py +0 -17
- mirascope/core/base/_utils/_messages_decorator.py +0 -121
- mirascope/core/base/_utils/_parse_content_template.py +0 -321
- mirascope/core/base/_utils/_parse_prompt_messages.py +0 -63
- mirascope/core/base/_utils/_pil_image_to_bytes.py +0 -13
- mirascope/core/base/_utils/_protocols.py +0 -901
- mirascope/core/base/_utils/_setup_call.py +0 -79
- mirascope/core/base/_utils/_setup_extract_tool.py +0 -30
- mirascope/core/base/call_kwargs.py +0 -13
- mirascope/core/base/call_params.py +0 -36
- mirascope/core/base/call_response.py +0 -340
- mirascope/core/base/call_response_chunk.py +0 -130
- mirascope/core/base/dynamic_config.py +0 -82
- mirascope/core/base/from_call_args.py +0 -30
- mirascope/core/base/merge_decorators.py +0 -59
- mirascope/core/base/message_param.py +0 -162
- mirascope/core/base/messages.py +0 -111
- mirascope/core/base/metadata.py +0 -13
- mirascope/core/base/prompt.py +0 -497
- mirascope/core/base/response_model_config_dict.py +0 -9
- mirascope/core/base/stream.py +0 -479
- mirascope/core/base/stream_config.py +0 -11
- mirascope/core/base/structured_stream.py +0 -296
- mirascope/core/base/tool.py +0 -205
- mirascope/core/base/toolkit.py +0 -176
- mirascope/core/base/types.py +0 -344
- mirascope/core/bedrock/__init__.py +0 -34
- mirascope/core/bedrock/_call.py +0 -68
- mirascope/core/bedrock/_call_kwargs.py +0 -12
- mirascope/core/bedrock/_types.py +0 -104
- mirascope/core/bedrock/_utils/__init__.py +0 -14
- mirascope/core/bedrock/_utils/_convert_common_call_params.py +0 -39
- mirascope/core/bedrock/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/bedrock/_utils/_convert_message_params.py +0 -111
- mirascope/core/bedrock/_utils/_get_json_output.py +0 -30
- mirascope/core/bedrock/_utils/_handle_stream.py +0 -104
- mirascope/core/bedrock/_utils/_message_param_converter.py +0 -171
- mirascope/core/bedrock/_utils/_setup_call.py +0 -258
- mirascope/core/bedrock/call_params.py +0 -38
- mirascope/core/bedrock/call_response.py +0 -249
- mirascope/core/bedrock/call_response_chunk.py +0 -111
- mirascope/core/bedrock/dynamic_config.py +0 -37
- mirascope/core/bedrock/py.typed +0 -0
- mirascope/core/bedrock/stream.py +0 -154
- mirascope/core/bedrock/tool.py +0 -96
- mirascope/core/cohere/__init__.py +0 -30
- mirascope/core/cohere/_call.py +0 -67
- mirascope/core/cohere/_call_kwargs.py +0 -11
- mirascope/core/cohere/_types.py +0 -20
- mirascope/core/cohere/_utils/__init__.py +0 -14
- mirascope/core/cohere/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/cohere/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -24
- mirascope/core/cohere/_utils/_convert_message_params.py +0 -32
- mirascope/core/cohere/_utils/_get_json_output.py +0 -30
- mirascope/core/cohere/_utils/_handle_stream.py +0 -35
- mirascope/core/cohere/_utils/_message_param_converter.py +0 -54
- mirascope/core/cohere/_utils/_setup_call.py +0 -150
- mirascope/core/cohere/call_params.py +0 -62
- mirascope/core/cohere/call_response.py +0 -205
- mirascope/core/cohere/call_response_chunk.py +0 -125
- mirascope/core/cohere/dynamic_config.py +0 -32
- mirascope/core/cohere/py.typed +0 -0
- mirascope/core/cohere/stream.py +0 -113
- mirascope/core/cohere/tool.py +0 -93
- mirascope/core/costs/__init__.py +0 -5
- mirascope/core/costs/_anthropic_calculate_cost.py +0 -219
- mirascope/core/costs/_azure_calculate_cost.py +0 -11
- mirascope/core/costs/_bedrock_calculate_cost.py +0 -15
- mirascope/core/costs/_cohere_calculate_cost.py +0 -44
- mirascope/core/costs/_gemini_calculate_cost.py +0 -67
- mirascope/core/costs/_google_calculate_cost.py +0 -427
- mirascope/core/costs/_groq_calculate_cost.py +0 -156
- mirascope/core/costs/_litellm_calculate_cost.py +0 -11
- mirascope/core/costs/_mistral_calculate_cost.py +0 -64
- mirascope/core/costs/_openai_calculate_cost.py +0 -416
- mirascope/core/costs/_vertex_calculate_cost.py +0 -67
- mirascope/core/costs/_xai_calculate_cost.py +0 -104
- mirascope/core/costs/calculate_cost.py +0 -86
- mirascope/core/gemini/__init__.py +0 -40
- mirascope/core/gemini/_call.py +0 -67
- mirascope/core/gemini/_call_kwargs.py +0 -12
- mirascope/core/gemini/_utils/__init__.py +0 -14
- mirascope/core/gemini/_utils/_convert_common_call_params.py +0 -39
- mirascope/core/gemini/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/gemini/_utils/_convert_message_params.py +0 -156
- mirascope/core/gemini/_utils/_get_json_output.py +0 -35
- mirascope/core/gemini/_utils/_handle_stream.py +0 -33
- mirascope/core/gemini/_utils/_message_param_converter.py +0 -209
- mirascope/core/gemini/_utils/_setup_call.py +0 -149
- mirascope/core/gemini/call_params.py +0 -52
- mirascope/core/gemini/call_response.py +0 -216
- mirascope/core/gemini/call_response_chunk.py +0 -100
- mirascope/core/gemini/dynamic_config.py +0 -26
- mirascope/core/gemini/stream.py +0 -120
- mirascope/core/gemini/tool.py +0 -104
- mirascope/core/google/__init__.py +0 -29
- mirascope/core/google/_call.py +0 -67
- mirascope/core/google/_call_kwargs.py +0 -13
- mirascope/core/google/_utils/__init__.py +0 -14
- mirascope/core/google/_utils/_convert_common_call_params.py +0 -38
- mirascope/core/google/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -27
- mirascope/core/google/_utils/_convert_message_params.py +0 -206
- mirascope/core/google/_utils/_get_json_output.py +0 -37
- mirascope/core/google/_utils/_handle_stream.py +0 -35
- mirascope/core/google/_utils/_message_param_converter.py +0 -162
- mirascope/core/google/_utils/_setup_call.py +0 -201
- mirascope/core/google/_utils/_validate_media_type.py +0 -34
- mirascope/core/google/call_params.py +0 -22
- mirascope/core/google/call_response.py +0 -232
- mirascope/core/google/call_response_chunk.py +0 -110
- mirascope/core/google/dynamic_config.py +0 -26
- mirascope/core/google/stream.py +0 -143
- mirascope/core/google/tool.py +0 -146
- mirascope/core/groq/__init__.py +0 -30
- mirascope/core/groq/_call.py +0 -67
- mirascope/core/groq/_call_kwargs.py +0 -13
- mirascope/core/groq/_utils/__init__.py +0 -14
- mirascope/core/groq/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/groq/_utils/_convert_message_params.py +0 -112
- mirascope/core/groq/_utils/_get_json_output.py +0 -27
- mirascope/core/groq/_utils/_handle_stream.py +0 -123
- mirascope/core/groq/_utils/_message_param_converter.py +0 -89
- mirascope/core/groq/_utils/_setup_call.py +0 -132
- mirascope/core/groq/call_params.py +0 -52
- mirascope/core/groq/call_response.py +0 -213
- mirascope/core/groq/call_response_chunk.py +0 -104
- mirascope/core/groq/dynamic_config.py +0 -29
- mirascope/core/groq/py.typed +0 -0
- mirascope/core/groq/stream.py +0 -135
- mirascope/core/groq/tool.py +0 -80
- mirascope/core/litellm/__init__.py +0 -28
- mirascope/core/litellm/_call.py +0 -67
- mirascope/core/litellm/_utils/__init__.py +0 -5
- mirascope/core/litellm/_utils/_setup_call.py +0 -109
- mirascope/core/litellm/call_params.py +0 -10
- mirascope/core/litellm/call_response.py +0 -24
- mirascope/core/litellm/call_response_chunk.py +0 -14
- mirascope/core/litellm/dynamic_config.py +0 -8
- mirascope/core/litellm/py.typed +0 -0
- mirascope/core/litellm/stream.py +0 -86
- mirascope/core/litellm/tool.py +0 -13
- mirascope/core/mistral/__init__.py +0 -36
- mirascope/core/mistral/_call.py +0 -65
- mirascope/core/mistral/_call_kwargs.py +0 -19
- mirascope/core/mistral/_utils/__init__.py +0 -14
- mirascope/core/mistral/_utils/_convert_common_call_params.py +0 -24
- mirascope/core/mistral/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -22
- mirascope/core/mistral/_utils/_convert_message_params.py +0 -122
- mirascope/core/mistral/_utils/_get_json_output.py +0 -34
- mirascope/core/mistral/_utils/_handle_stream.py +0 -139
- mirascope/core/mistral/_utils/_message_param_converter.py +0 -176
- mirascope/core/mistral/_utils/_setup_call.py +0 -154
- mirascope/core/mistral/call_params.py +0 -36
- mirascope/core/mistral/call_response.py +0 -205
- mirascope/core/mistral/call_response_chunk.py +0 -105
- mirascope/core/mistral/dynamic_config.py +0 -33
- mirascope/core/mistral/py.typed +0 -0
- mirascope/core/mistral/stream.py +0 -120
- mirascope/core/mistral/tool.py +0 -80
- mirascope/core/openai/__init__.py +0 -31
- mirascope/core/openai/_call.py +0 -67
- mirascope/core/openai/_call_kwargs.py +0 -13
- mirascope/core/openai/_utils/__init__.py +0 -14
- mirascope/core/openai/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/openai/_utils/_convert_message_params.py +0 -146
- mirascope/core/openai/_utils/_get_json_output.py +0 -31
- mirascope/core/openai/_utils/_handle_stream.py +0 -138
- mirascope/core/openai/_utils/_message_param_converter.py +0 -105
- mirascope/core/openai/_utils/_setup_call.py +0 -155
- mirascope/core/openai/call_params.py +0 -91
- mirascope/core/openai/call_response.py +0 -273
- mirascope/core/openai/call_response_chunk.py +0 -139
- mirascope/core/openai/dynamic_config.py +0 -34
- mirascope/core/openai/py.typed +0 -0
- mirascope/core/openai/stream.py +0 -185
- mirascope/core/openai/tool.py +0 -101
- mirascope/core/py.typed +0 -0
- mirascope/core/vertex/__init__.py +0 -45
- mirascope/core/vertex/_call.py +0 -62
- mirascope/core/vertex/_call_kwargs.py +0 -12
- mirascope/core/vertex/_utils/__init__.py +0 -14
- mirascope/core/vertex/_utils/_convert_common_call_params.py +0 -37
- mirascope/core/vertex/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/vertex/_utils/_convert_message_params.py +0 -171
- mirascope/core/vertex/_utils/_get_json_output.py +0 -36
- mirascope/core/vertex/_utils/_handle_stream.py +0 -33
- mirascope/core/vertex/_utils/_message_param_converter.py +0 -133
- mirascope/core/vertex/_utils/_setup_call.py +0 -160
- mirascope/core/vertex/call_params.py +0 -24
- mirascope/core/vertex/call_response.py +0 -206
- mirascope/core/vertex/call_response_chunk.py +0 -99
- mirascope/core/vertex/dynamic_config.py +0 -28
- mirascope/core/vertex/stream.py +0 -119
- mirascope/core/vertex/tool.py +0 -101
- mirascope/core/xai/__init__.py +0 -28
- mirascope/core/xai/_call.py +0 -67
- mirascope/core/xai/_utils/__init__.py +0 -5
- mirascope/core/xai/_utils/_setup_call.py +0 -113
- mirascope/core/xai/call_params.py +0 -10
- mirascope/core/xai/call_response.py +0 -16
- mirascope/core/xai/call_response_chunk.py +0 -14
- mirascope/core/xai/dynamic_config.py +0 -8
- mirascope/core/xai/py.typed +0 -0
- mirascope/core/xai/stream.py +0 -57
- mirascope/core/xai/tool.py +0 -13
- mirascope/experimental/graphs/__init__.py +0 -5
- mirascope/experimental/graphs/finite_state_machine.py +0 -714
- mirascope/integrations/__init__.py +0 -16
- mirascope/integrations/_middleware_factory.py +0 -403
- mirascope/integrations/langfuse/__init__.py +0 -3
- mirascope/integrations/langfuse/_utils.py +0 -114
- mirascope/integrations/langfuse/_with_langfuse.py +0 -70
- mirascope/integrations/logfire/__init__.py +0 -3
- mirascope/integrations/logfire/_utils.py +0 -225
- mirascope/integrations/logfire/_with_logfire.py +0 -63
- mirascope/integrations/otel/__init__.py +0 -10
- mirascope/integrations/otel/_utils.py +0 -270
- mirascope/integrations/otel/_with_hyperdx.py +0 -60
- mirascope/integrations/otel/_with_otel.py +0 -59
- mirascope/integrations/tenacity.py +0 -14
- mirascope/llm/_call.py +0 -401
- mirascope/llm/_context.py +0 -384
- mirascope/llm/_override.py +0 -3639
- mirascope/llm/_protocols.py +0 -500
- mirascope/llm/_response_metaclass.py +0 -31
- mirascope/llm/call_response.py +0 -167
- mirascope/llm/call_response_chunk.py +0 -66
- mirascope/llm/stream.py +0 -162
- mirascope/llm/tool.py +0 -64
- mirascope/mcp/__init__.py +0 -7
- mirascope/mcp/_utils.py +0 -277
- mirascope/mcp/client.py +0 -167
- mirascope/mcp/server.py +0 -356
- mirascope/mcp/tools.py +0 -110
- mirascope/py.typed +0 -0
- mirascope/retries/__init__.py +0 -11
- mirascope/retries/fallback.py +0 -128
- mirascope/retries/tenacity.py +0 -50
- mirascope/tools/__init__.py +0 -37
- mirascope/tools/base.py +0 -98
- mirascope/tools/system/__init__.py +0 -0
- mirascope/tools/system/_docker_operation.py +0 -166
- mirascope/tools/system/_file_system.py +0 -267
- mirascope/tools/web/__init__.py +0 -0
- mirascope/tools/web/_duckduckgo.py +0 -111
- mirascope/tools/web/_httpx.py +0 -125
- mirascope/tools/web/_parse_url_content.py +0 -94
- mirascope/tools/web/_requests.py +0 -54
- mirascope/v0/__init__.py +0 -43
- mirascope/v0/anthropic.py +0 -54
- mirascope/v0/base/__init__.py +0 -12
- mirascope/v0/base/calls.py +0 -118
- mirascope/v0/base/extractors.py +0 -122
- mirascope/v0/base/ops_utils.py +0 -207
- mirascope/v0/base/prompts.py +0 -48
- mirascope/v0/base/types.py +0 -14
- mirascope/v0/base/utils.py +0 -21
- mirascope/v0/openai.py +0 -54
- mirascope-1.22.4.dist-info/METADATA +0 -169
- mirascope-1.22.4.dist-info/RECORD +0 -377
- mirascope-1.22.4.dist-info/WHEEL +0 -4
- mirascope-1.22.4.dist-info/licenses/LICENSE +0 -21
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
"""Stream classes for streaming assistant content parts."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from collections.abc import AsyncIterator, Iterator
|
|
5
|
+
from typing import Generic, Literal, TypeAlias, TypeVar
|
|
6
|
+
|
|
7
|
+
from ..content import (
|
|
8
|
+
AssistantContentPart,
|
|
9
|
+
Text,
|
|
10
|
+
TextChunk,
|
|
11
|
+
Thought,
|
|
12
|
+
ThoughtChunk,
|
|
13
|
+
ToolCall,
|
|
14
|
+
ToolCallChunk,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
ContentT = TypeVar("ContentT", bound=AssistantContentPart)
|
|
18
|
+
"""Type variable for content types (Text, Thought, ToolCall)."""
|
|
19
|
+
|
|
20
|
+
DeltaT = TypeVar("DeltaT")
|
|
21
|
+
"""Type variable for the deltas that the stream provides on iteration."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class BaseStream(ABC, Generic[ContentT, DeltaT]):
|
|
25
|
+
"""Base class for synchronous streaming content."""
|
|
26
|
+
|
|
27
|
+
@abstractmethod
|
|
28
|
+
def __iter__(self) -> Iterator[DeltaT]:
|
|
29
|
+
"""Iterate over content deltas as they arrive."""
|
|
30
|
+
...
|
|
31
|
+
|
|
32
|
+
@abstractmethod
|
|
33
|
+
def collect(self) -> ContentT:
|
|
34
|
+
"""Collect all chunks and return the final content."""
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class BaseAsyncStream(ABC, Generic[ContentT, DeltaT]):
|
|
39
|
+
"""Base class for asynchronous streaming content."""
|
|
40
|
+
|
|
41
|
+
@abstractmethod
|
|
42
|
+
def __aiter__(self) -> AsyncIterator[DeltaT]:
|
|
43
|
+
"""Asynchronously iterate over content deltas as they arrive."""
|
|
44
|
+
...
|
|
45
|
+
|
|
46
|
+
@abstractmethod
|
|
47
|
+
async def collect(self) -> ContentT:
|
|
48
|
+
"""Asynchronously collect all chunks and return the final content."""
|
|
49
|
+
...
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class TextStream(BaseStream[Text, str]):
|
|
53
|
+
"""Synchronous text stream implementation."""
|
|
54
|
+
|
|
55
|
+
type: Literal["text_stream"] = "text_stream"
|
|
56
|
+
|
|
57
|
+
content_type: Literal["text"] = "text"
|
|
58
|
+
"""The type of content stored in this stream."""
|
|
59
|
+
|
|
60
|
+
partial_text: str
|
|
61
|
+
"""The accumulated text content as chunks are received."""
|
|
62
|
+
|
|
63
|
+
def __init__(
|
|
64
|
+
self,
|
|
65
|
+
chunk_iterator: Iterator[TextChunk],
|
|
66
|
+
) -> None:
|
|
67
|
+
"""Initialize TextStream with a start chunk and chunk iterator.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
chunk_iterator: Iterator providing subsequent chunks.
|
|
71
|
+
"""
|
|
72
|
+
self.partial_text = ""
|
|
73
|
+
self._chunk_iterator = chunk_iterator
|
|
74
|
+
|
|
75
|
+
def __iter__(self) -> Iterator[str]:
|
|
76
|
+
"""Iterate over text deltas as they are received.
|
|
77
|
+
|
|
78
|
+
Yields:
|
|
79
|
+
str: Each delta string containing text.
|
|
80
|
+
"""
|
|
81
|
+
for chunk in self._chunk_iterator:
|
|
82
|
+
delta = chunk.delta
|
|
83
|
+
self.partial_text += delta
|
|
84
|
+
yield delta
|
|
85
|
+
|
|
86
|
+
def collect(self) -> Text:
|
|
87
|
+
"""Collect all chunks and return the final Text content.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Text: The complete text content after consuming all chunks.
|
|
91
|
+
"""
|
|
92
|
+
for _ in self:
|
|
93
|
+
pass
|
|
94
|
+
return Text(text=self.partial_text)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class AsyncTextStream(BaseAsyncStream[Text, str]):
|
|
98
|
+
"""Asynchronous text stream implementation."""
|
|
99
|
+
|
|
100
|
+
type: Literal["async_text_stream"] = "async_text_stream"
|
|
101
|
+
|
|
102
|
+
content_type: Literal["text"] = "text"
|
|
103
|
+
"""The type of content stored in this stream."""
|
|
104
|
+
|
|
105
|
+
partial_text: str
|
|
106
|
+
"""The accumulated text content as chunks are received."""
|
|
107
|
+
|
|
108
|
+
def __init__(
|
|
109
|
+
self,
|
|
110
|
+
chunk_iterator: AsyncIterator[TextChunk],
|
|
111
|
+
) -> None:
|
|
112
|
+
"""Initialize AsyncTextStream with a chunk iterator.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
chunk_iterator: AsyncIterator providing subsequent chunks.
|
|
116
|
+
"""
|
|
117
|
+
self.partial_text = ""
|
|
118
|
+
self._chunk_iterator = chunk_iterator
|
|
119
|
+
|
|
120
|
+
async def __aiter__(self) -> AsyncIterator[str]:
|
|
121
|
+
"""Asynchronously iterate over text deltas as they are received.
|
|
122
|
+
|
|
123
|
+
Yields:
|
|
124
|
+
str: Each delta string containing text.
|
|
125
|
+
"""
|
|
126
|
+
async for chunk in self._chunk_iterator:
|
|
127
|
+
delta = chunk.delta
|
|
128
|
+
self.partial_text += delta
|
|
129
|
+
yield delta
|
|
130
|
+
|
|
131
|
+
async def collect(self) -> Text:
|
|
132
|
+
"""Asynchronously collect all chunks and return the final Text content.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
Text: The complete text content after consuming all chunks.
|
|
136
|
+
"""
|
|
137
|
+
async for _ in self:
|
|
138
|
+
pass
|
|
139
|
+
return Text(text=self.partial_text)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class ThoughtStream(BaseStream[Thought, str]):
|
|
143
|
+
"""Synchronous thought stream implementation."""
|
|
144
|
+
|
|
145
|
+
type: Literal["thought_stream"] = "thought_stream"
|
|
146
|
+
|
|
147
|
+
content_type: Literal["thought"] = "thought"
|
|
148
|
+
"""The type of content stored in this stream."""
|
|
149
|
+
|
|
150
|
+
partial_thought: str
|
|
151
|
+
"""The accumulated thought content as chunks are received."""
|
|
152
|
+
|
|
153
|
+
def __init__(
|
|
154
|
+
self,
|
|
155
|
+
chunk_iterator: Iterator[ThoughtChunk],
|
|
156
|
+
) -> None:
|
|
157
|
+
"""Initialize ThoughtStream with a chunk iterator.
|
|
158
|
+
|
|
159
|
+
Args:
|
|
160
|
+
chunk_iterator: Iterator providing subsequent chunks.
|
|
161
|
+
"""
|
|
162
|
+
self.partial_thought = ""
|
|
163
|
+
self._chunk_iterator = chunk_iterator
|
|
164
|
+
|
|
165
|
+
def __iter__(self) -> Iterator[str]:
|
|
166
|
+
"""Iterate over thought deltas as they are received.
|
|
167
|
+
|
|
168
|
+
Yields:
|
|
169
|
+
str: Each delta string containing thought text.
|
|
170
|
+
"""
|
|
171
|
+
for chunk in self._chunk_iterator:
|
|
172
|
+
delta = chunk.delta
|
|
173
|
+
self.partial_thought += delta
|
|
174
|
+
yield delta
|
|
175
|
+
|
|
176
|
+
def collect(self) -> Thought:
|
|
177
|
+
"""Collect all chunks and return the final Thought content.
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
Thought: The complete thought content after consuming all chunks.
|
|
181
|
+
"""
|
|
182
|
+
for _ in self:
|
|
183
|
+
pass
|
|
184
|
+
return Thought(thought=self.partial_thought)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class AsyncThoughtStream(BaseAsyncStream[Thought, str]):
|
|
188
|
+
"""Asynchronous thought stream implementation."""
|
|
189
|
+
|
|
190
|
+
type: Literal["async_thought_stream"] = "async_thought_stream"
|
|
191
|
+
|
|
192
|
+
content_type: Literal["thought"] = "thought"
|
|
193
|
+
"""The type of content stored in this stream."""
|
|
194
|
+
|
|
195
|
+
partial_thought: str
|
|
196
|
+
"""The accumulated thought content as chunks are received."""
|
|
197
|
+
|
|
198
|
+
def __init__(
|
|
199
|
+
self,
|
|
200
|
+
chunk_iterator: AsyncIterator[ThoughtChunk],
|
|
201
|
+
) -> None:
|
|
202
|
+
"""Initialize AsyncThoughtStream with a chunk iterator.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
chunk_iterator: AsyncIterator providing subsequent chunks.
|
|
206
|
+
"""
|
|
207
|
+
self.partial_thought = ""
|
|
208
|
+
self._chunk_iterator = chunk_iterator
|
|
209
|
+
|
|
210
|
+
async def __aiter__(self) -> AsyncIterator[str]:
|
|
211
|
+
"""Asynchronously iterate over thought deltas as they are received.
|
|
212
|
+
|
|
213
|
+
Yields:
|
|
214
|
+
str: Each delta string containing thought text.
|
|
215
|
+
"""
|
|
216
|
+
async for chunk in self._chunk_iterator:
|
|
217
|
+
delta = chunk.delta
|
|
218
|
+
self.partial_thought += delta
|
|
219
|
+
yield delta
|
|
220
|
+
|
|
221
|
+
async def collect(self) -> Thought:
|
|
222
|
+
"""Asynchronously collect all chunks and return the final Thought content.
|
|
223
|
+
|
|
224
|
+
Returns:
|
|
225
|
+
Thought: The complete thought content after consuming all chunks.
|
|
226
|
+
"""
|
|
227
|
+
async for _ in self:
|
|
228
|
+
pass
|
|
229
|
+
return Thought(thought=self.partial_thought)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
class ToolCallStream(BaseStream[ToolCall, str]):
|
|
233
|
+
"""Synchronous tool call stream implementation."""
|
|
234
|
+
|
|
235
|
+
type: Literal["tool_call_stream"] = "tool_call_stream"
|
|
236
|
+
|
|
237
|
+
content_type: Literal["tool_call"] = "tool_call"
|
|
238
|
+
"""The type of content stored in this stream."""
|
|
239
|
+
|
|
240
|
+
tool_id: str
|
|
241
|
+
"""A unique identifier for this tool call."""
|
|
242
|
+
|
|
243
|
+
tool_name: str
|
|
244
|
+
"""The name of the tool being called."""
|
|
245
|
+
|
|
246
|
+
partial_args: str
|
|
247
|
+
"""The accumulated tool arguments as chunks are received."""
|
|
248
|
+
|
|
249
|
+
def __init__(
|
|
250
|
+
self,
|
|
251
|
+
tool_id: str,
|
|
252
|
+
tool_name: str,
|
|
253
|
+
chunk_iterator: Iterator[ToolCallChunk],
|
|
254
|
+
) -> None:
|
|
255
|
+
"""Initialize ToolCallStream with tool metadata and chunk iterator.
|
|
256
|
+
|
|
257
|
+
Args:
|
|
258
|
+
tool_id: A unique identifier for this tool call.
|
|
259
|
+
tool_name: The name of the tool being called.
|
|
260
|
+
chunk_iterator: Iterator providing subsequent chunks.
|
|
261
|
+
"""
|
|
262
|
+
self.tool_id = tool_id
|
|
263
|
+
self.tool_name = tool_name
|
|
264
|
+
self.partial_args = ""
|
|
265
|
+
self._chunk_iterator = chunk_iterator
|
|
266
|
+
|
|
267
|
+
def __iter__(self) -> Iterator[str]:
|
|
268
|
+
"""Iterate over tool call argument deltas as they are received.
|
|
269
|
+
|
|
270
|
+
Yields:
|
|
271
|
+
str: Each delta string containing JSON argument fragments.
|
|
272
|
+
"""
|
|
273
|
+
for chunk in self._chunk_iterator:
|
|
274
|
+
delta = chunk.delta
|
|
275
|
+
self.partial_args += delta
|
|
276
|
+
yield delta
|
|
277
|
+
|
|
278
|
+
def collect(self) -> ToolCall:
|
|
279
|
+
"""Collect all chunks and return the final ToolCall content.
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
ToolCall: The complete tool call after consuming all chunks.
|
|
283
|
+
"""
|
|
284
|
+
for _ in self:
|
|
285
|
+
pass
|
|
286
|
+
return ToolCall(id=self.tool_id, name=self.tool_name, args=self.partial_args)
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
class AsyncToolCallStream(BaseAsyncStream[ToolCall, str]):
|
|
290
|
+
"""Asynchronous tool call stream implementation."""
|
|
291
|
+
|
|
292
|
+
type: Literal["async_tool_call_stream"] = "async_tool_call_stream"
|
|
293
|
+
|
|
294
|
+
content_type: Literal["tool_call"] = "tool_call"
|
|
295
|
+
"""The type of content stored in this stream."""
|
|
296
|
+
|
|
297
|
+
tool_id: str
|
|
298
|
+
"""A unique identifier for this tool call."""
|
|
299
|
+
|
|
300
|
+
tool_name: str
|
|
301
|
+
"""The name of the tool being called."""
|
|
302
|
+
|
|
303
|
+
partial_args: str
|
|
304
|
+
"""The accumulated tool arguments as chunks are received."""
|
|
305
|
+
|
|
306
|
+
def __init__(
|
|
307
|
+
self,
|
|
308
|
+
tool_id: str,
|
|
309
|
+
tool_name: str,
|
|
310
|
+
chunk_iterator: AsyncIterator[ToolCallChunk],
|
|
311
|
+
) -> None:
|
|
312
|
+
"""Initialize AsyncToolCallStream with tool metadata and chunk iterator.
|
|
313
|
+
|
|
314
|
+
Args:
|
|
315
|
+
tool_id: A unique identifier for this tool call.
|
|
316
|
+
tool_name: The name of the tool being called.
|
|
317
|
+
chunk_iterator: AsyncIterator providing subsequent chunks.
|
|
318
|
+
"""
|
|
319
|
+
self.tool_id = tool_id
|
|
320
|
+
self.tool_name = tool_name
|
|
321
|
+
self.partial_args = ""
|
|
322
|
+
self._chunk_iterator = chunk_iterator
|
|
323
|
+
|
|
324
|
+
async def __aiter__(self) -> AsyncIterator[str]:
|
|
325
|
+
"""Asynchronously iterate over tool call argument deltas as they are received.
|
|
326
|
+
|
|
327
|
+
Yields:
|
|
328
|
+
str: Each delta string containing JSON argument fragments.
|
|
329
|
+
"""
|
|
330
|
+
async for chunk in self._chunk_iterator:
|
|
331
|
+
delta = chunk.delta
|
|
332
|
+
self.partial_args += delta
|
|
333
|
+
yield delta
|
|
334
|
+
|
|
335
|
+
async def collect(self) -> ToolCall:
|
|
336
|
+
"""Asynchronously collect all chunks and return the final ToolCall content.
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
ToolCall: The complete tool call after consuming all chunks.
|
|
340
|
+
"""
|
|
341
|
+
async for _ in self:
|
|
342
|
+
pass
|
|
343
|
+
return ToolCall(id=self.tool_id, name=self.tool_name, args=self.partial_args)
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
Stream: TypeAlias = TextStream | ToolCallStream | ThoughtStream
|
|
347
|
+
"""A synchronous assistant content stream."""
|
|
348
|
+
|
|
349
|
+
AsyncStream: TypeAlias = AsyncTextStream | AsyncToolCallStream | AsyncThoughtStream
|
|
350
|
+
"""An asynchronous assistant content stream."""
|
|
351
|
+
|
|
352
|
+
__all__ = [
|
|
353
|
+
"AsyncStream",
|
|
354
|
+
"AsyncTextStream",
|
|
355
|
+
"AsyncThoughtStream",
|
|
356
|
+
"AsyncToolCallStream",
|
|
357
|
+
"BaseAsyncStream",
|
|
358
|
+
"BaseStream",
|
|
359
|
+
"Stream",
|
|
360
|
+
"TextStream",
|
|
361
|
+
"ThoughtStream",
|
|
362
|
+
"ToolCallStream",
|
|
363
|
+
]
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""Provider-agnostic usage statistics for LLM API calls."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Any, Literal
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass(kw_only=True)
|
|
10
|
+
class ProviderToolUsage:
|
|
11
|
+
"""Usage data for a provider's server-side tool.
|
|
12
|
+
|
|
13
|
+
Tracks usage of tools executed by the provider that have separate pricing
|
|
14
|
+
beyond standard token costs (e.g., web search, code execution).
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
name: str
|
|
18
|
+
"""Tool name matching our ProviderTool.name (e.g., "web_search").
|
|
19
|
+
|
|
20
|
+
This is the consistent cross-provider identifier that matches
|
|
21
|
+
the corresponding Mirascope ProviderTool class (e.g., WebSearchTool.name).
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
call_count: int = 0
|
|
25
|
+
"""Number of invocations/calls of this tool."""
|
|
26
|
+
|
|
27
|
+
duration_seconds: float | None = None
|
|
28
|
+
"""Duration in seconds for time-based tools (e.g., code execution).
|
|
29
|
+
|
|
30
|
+
None if not applicable to this tool type.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
metadata: dict[str, Any] | None = None
|
|
34
|
+
"""Provider-specific metadata for debugging/analytics.
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
- Google grounding: {"queries": ["query1", "query2"]}
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass(kw_only=True)
|
|
42
|
+
class UsageDeltaChunk:
|
|
43
|
+
"""A chunk containing incremental token usage information from a streaming response.
|
|
44
|
+
|
|
45
|
+
This represents a delta/increment in usage statistics as they arrive during streaming.
|
|
46
|
+
Multiple UsageDeltaChunks are accumulated to produce the final Usage object.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
type: Literal["usage_delta_chunk"] = "usage_delta_chunk"
|
|
50
|
+
|
|
51
|
+
input_tokens: int = 0
|
|
52
|
+
"""Delta in input tokens."""
|
|
53
|
+
|
|
54
|
+
output_tokens: int = 0
|
|
55
|
+
"""Delta in output tokens."""
|
|
56
|
+
|
|
57
|
+
cache_read_tokens: int = 0
|
|
58
|
+
"""Delta in cache read tokens."""
|
|
59
|
+
|
|
60
|
+
cache_write_tokens: int = 0
|
|
61
|
+
"""Delta in cache write tokens."""
|
|
62
|
+
|
|
63
|
+
reasoning_tokens: int = 0
|
|
64
|
+
"""Delta in reasoning/thinking tokens."""
|
|
65
|
+
|
|
66
|
+
provider_tool_usage: list[ProviderToolUsage] | None = None
|
|
67
|
+
"""Provider tool usage (emitted in final chunk only)."""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@dataclass(kw_only=True)
|
|
71
|
+
class Usage:
|
|
72
|
+
"""Token usage statistics from an LLM API call.
|
|
73
|
+
|
|
74
|
+
This abstraction captures common usage metrics across providers while preserving
|
|
75
|
+
access to the raw provider-specific usage data.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
input_tokens: int = 0
|
|
79
|
+
"""The number of input tokens used.
|
|
80
|
+
|
|
81
|
+
This includes ALL input tokens, including cache read and write tokens.
|
|
82
|
+
|
|
83
|
+
Will be 0 if not reported by the provider.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
output_tokens: int = 0
|
|
87
|
+
"""The number of output tokens used.
|
|
88
|
+
|
|
89
|
+
This includes ALL output tokens, including `reasoning_tokens` that may not be
|
|
90
|
+
in the user's visible output, or other "hidden" tokens.
|
|
91
|
+
|
|
92
|
+
Will be 0 if not reported by the provider.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
cache_read_tokens: int = 0
|
|
96
|
+
"""The number of tokens read from cache (prompt caching).
|
|
97
|
+
|
|
98
|
+
These are input tokens that were read from cache. Cache read tokens are generally
|
|
99
|
+
much less expensive than regular input tokens.
|
|
100
|
+
|
|
101
|
+
Will be 0 if not reported by the provider or if caching was not used.
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
cache_write_tokens: int = 0
|
|
105
|
+
"""The number of tokens written to cache (cache creation).
|
|
106
|
+
|
|
107
|
+
These are input tokens that were written to cache, for future reuse and retrieval.
|
|
108
|
+
Cache write tokens are generally more expensive than uncached input tokens,
|
|
109
|
+
but may lead to cost savings down the line when they are re-read as cache_read_tokens.
|
|
110
|
+
|
|
111
|
+
Will be 0 if not reported by the provider or if caching was not used.
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
reasoning_tokens: int = 0
|
|
115
|
+
"""The number of tokens used for reasoning/thinking.
|
|
116
|
+
|
|
117
|
+
Reasoning tokens are a subset of output_tokens that were generated as part of the model's
|
|
118
|
+
interior reasoning process. They are billed as output tokens, though they are generally
|
|
119
|
+
not shown to the user.
|
|
120
|
+
|
|
121
|
+
Will be 0 if not reported by the provider or if the model does not support reasoning.
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
provider_tool_usage: list[ProviderToolUsage] | None = None
|
|
125
|
+
"""Provider tool usage data for tools with separate pricing.
|
|
126
|
+
|
|
127
|
+
Tracks usage of server-side tools executed by the provider (e.g., web search,
|
|
128
|
+
code execution) that have pricing beyond standard token costs.
|
|
129
|
+
|
|
130
|
+
Will be None if no provider tools were used.
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
raw: Any = None
|
|
134
|
+
"""The raw usage object from the provider."""
|
|
135
|
+
|
|
136
|
+
@property
|
|
137
|
+
def total_tokens(self) -> int:
|
|
138
|
+
"""The total number of tokens used (input + output)."""
|
|
139
|
+
return self.input_tokens + self.output_tokens
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""The Tools module for LLMs."""
|
|
2
|
+
|
|
3
|
+
from .decorator import ToolDecorator, tool
|
|
4
|
+
from .protocols import AsyncContextToolFn, AsyncToolFn, ContextToolFn, ToolFn
|
|
5
|
+
from .provider_tools import ProviderTool
|
|
6
|
+
from .tool_schema import (
|
|
7
|
+
FORMAT_TOOL_NAME,
|
|
8
|
+
AnyToolFn,
|
|
9
|
+
AnyToolSchema,
|
|
10
|
+
ToolParameterSchema,
|
|
11
|
+
ToolSchema,
|
|
12
|
+
ToolSchemaT,
|
|
13
|
+
)
|
|
14
|
+
from .toolkit import (
|
|
15
|
+
AsyncContextToolkit,
|
|
16
|
+
AsyncToolkit,
|
|
17
|
+
BaseToolkit,
|
|
18
|
+
ContextToolkit,
|
|
19
|
+
Toolkit,
|
|
20
|
+
ToolkitT,
|
|
21
|
+
)
|
|
22
|
+
from .tools import AsyncContextTool, AsyncTool, ContextTool, Tool, ToolT
|
|
23
|
+
from .types import (
|
|
24
|
+
AnyTools,
|
|
25
|
+
AsyncContextTools,
|
|
26
|
+
AsyncTools,
|
|
27
|
+
ContextTools,
|
|
28
|
+
Tools,
|
|
29
|
+
normalize_async_context_tools,
|
|
30
|
+
normalize_async_tools,
|
|
31
|
+
normalize_context_tools,
|
|
32
|
+
normalize_tools,
|
|
33
|
+
)
|
|
34
|
+
from .web_search_tool import WebSearchTool
|
|
35
|
+
|
|
36
|
+
__all__ = [
|
|
37
|
+
"FORMAT_TOOL_NAME",
|
|
38
|
+
"AnyToolFn",
|
|
39
|
+
"AnyToolSchema",
|
|
40
|
+
"AnyTools",
|
|
41
|
+
"AsyncContextTool",
|
|
42
|
+
"AsyncContextToolFn",
|
|
43
|
+
"AsyncContextToolkit",
|
|
44
|
+
"AsyncContextTools",
|
|
45
|
+
"AsyncTool",
|
|
46
|
+
"AsyncToolFn",
|
|
47
|
+
"AsyncToolkit",
|
|
48
|
+
"AsyncTools",
|
|
49
|
+
"BaseToolkit",
|
|
50
|
+
"ContextTool",
|
|
51
|
+
"ContextToolFn",
|
|
52
|
+
"ContextToolkit",
|
|
53
|
+
"ContextTools",
|
|
54
|
+
"ProviderTool",
|
|
55
|
+
"Tool",
|
|
56
|
+
"ToolDecorator",
|
|
57
|
+
"ToolFn",
|
|
58
|
+
"ToolParameterSchema",
|
|
59
|
+
"ToolSchema",
|
|
60
|
+
"ToolSchemaT",
|
|
61
|
+
"ToolT",
|
|
62
|
+
"Toolkit",
|
|
63
|
+
"ToolkitT",
|
|
64
|
+
"Tools",
|
|
65
|
+
"WebSearchTool",
|
|
66
|
+
"normalize_async_context_tools",
|
|
67
|
+
"normalize_async_tools",
|
|
68
|
+
"normalize_context_tools",
|
|
69
|
+
"normalize_tools",
|
|
70
|
+
"tool",
|
|
71
|
+
]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""Utilities for tool type checking and validation."""
|
|
2
|
+
|
|
3
|
+
import inspect
|
|
4
|
+
from typing_extensions import TypeIs
|
|
5
|
+
|
|
6
|
+
from ..context import DepsT, _utils as _context_utils
|
|
7
|
+
from ..types import JsonableCovariantT, P
|
|
8
|
+
from .protocols import AsyncContextToolFn, AsyncToolFn, ContextToolFn, ToolFn
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def is_context_tool_fn(
|
|
12
|
+
fn: ContextToolFn[DepsT, P, JsonableCovariantT]
|
|
13
|
+
| AsyncContextToolFn[DepsT, P, JsonableCovariantT]
|
|
14
|
+
| ToolFn[P, JsonableCovariantT]
|
|
15
|
+
| AsyncToolFn[P, JsonableCovariantT],
|
|
16
|
+
) -> TypeIs[
|
|
17
|
+
ContextToolFn[DepsT, P, JsonableCovariantT]
|
|
18
|
+
| AsyncContextToolFn[DepsT, P, JsonableCovariantT]
|
|
19
|
+
]:
|
|
20
|
+
"""Type guard to check if a function is a context tool function."""
|
|
21
|
+
return _context_utils.first_param_is_context(fn)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def is_async_tool_fn(
|
|
25
|
+
fn: ContextToolFn[DepsT, P, JsonableCovariantT]
|
|
26
|
+
| AsyncContextToolFn[DepsT, P, JsonableCovariantT]
|
|
27
|
+
| ToolFn[P, JsonableCovariantT]
|
|
28
|
+
| AsyncToolFn[P, JsonableCovariantT],
|
|
29
|
+
) -> TypeIs[
|
|
30
|
+
AsyncContextToolFn[DepsT, P, JsonableCovariantT]
|
|
31
|
+
| AsyncToolFn[P, JsonableCovariantT]
|
|
32
|
+
]:
|
|
33
|
+
"""Type guard to check if a function is an async tool function."""
|
|
34
|
+
return inspect.iscoroutinefunction(fn)
|