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
mirascope/core/openai/tool.py
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"""The `OpenAITool` class for easy tool usage with OpenAI LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/tools.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
from openai.types.chat import (
|
|
9
|
-
ChatCompletionMessageToolCall,
|
|
10
|
-
ChatCompletionToolParam,
|
|
11
|
-
)
|
|
12
|
-
from openai.types.shared_params import FunctionDefinition
|
|
13
|
-
from pydantic.json_schema import SkipJsonSchema
|
|
14
|
-
|
|
15
|
-
from ..base import BaseTool, GenerateJsonSchemaNoTitles, ToolConfig
|
|
16
|
-
from ..base._partial import partial
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class GenerateOpenAIStrictToolJsonSchema(GenerateJsonSchemaNoTitles):
|
|
20
|
-
_openai_strict = True
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class OpenAIToolConfig(ToolConfig, total=False):
|
|
24
|
-
"""A tool configuration for OpenAI-specific features."""
|
|
25
|
-
|
|
26
|
-
strict: bool
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class OpenAITool(BaseTool):
|
|
30
|
-
"""A class for defining tools for OpenAI LLM calls.
|
|
31
|
-
|
|
32
|
-
Example:
|
|
33
|
-
|
|
34
|
-
```python
|
|
35
|
-
from mirascope.core import prompt_template
|
|
36
|
-
from mirascope.core.openai import openai_call
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def format_book(title: str, author: str) -> str:
|
|
40
|
-
return f"{title} by {author}"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
@openai_call("gpt-4o-mini", tools=[format_book])
|
|
44
|
-
def recommend_book(genre: str) -> str:
|
|
45
|
-
return f"Recommend a {genre} book"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
response = recommend_book("fantasy")
|
|
49
|
-
if tool := response.tool: # returns an `OpenAITool` instance
|
|
50
|
-
print(tool.call())
|
|
51
|
-
```
|
|
52
|
-
"""
|
|
53
|
-
|
|
54
|
-
__provider__ = "openai"
|
|
55
|
-
__tool_config_type__ = OpenAIToolConfig
|
|
56
|
-
|
|
57
|
-
tool_call: SkipJsonSchema[ChatCompletionMessageToolCall]
|
|
58
|
-
|
|
59
|
-
@classmethod
|
|
60
|
-
def tool_schema(cls) -> ChatCompletionToolParam:
|
|
61
|
-
"""Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
|
|
62
|
-
|
|
63
|
-
Example:
|
|
64
|
-
```python
|
|
65
|
-
from mirascope.core.openai import OpenAITool
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def format_book(title: str, author: str) -> str:
|
|
69
|
-
return f"{title} by {author}"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
tool_type = OpenAITool.type_from_fn(format_book)
|
|
73
|
-
print(tool_type.tool_schema()) # prints the OpenAI-specific tool schema
|
|
74
|
-
```
|
|
75
|
-
"""
|
|
76
|
-
fn = FunctionDefinition(name=cls._name(), description=cls._description())
|
|
77
|
-
schema_generator = GenerateJsonSchemaNoTitles
|
|
78
|
-
if cls.tool_config.get("strict", False):
|
|
79
|
-
fn["strict"] = True
|
|
80
|
-
schema_generator = GenerateOpenAIStrictToolJsonSchema
|
|
81
|
-
model_schema = cls.model_json_schema(schema_generator=schema_generator)
|
|
82
|
-
if model_schema["properties"]:
|
|
83
|
-
fn["parameters"] = model_schema
|
|
84
|
-
return ChatCompletionToolParam(function=fn, type="function")
|
|
85
|
-
|
|
86
|
-
@classmethod
|
|
87
|
-
def from_tool_call(
|
|
88
|
-
cls, tool_call: ChatCompletionMessageToolCall, allow_partial: bool = False
|
|
89
|
-
) -> OpenAITool:
|
|
90
|
-
"""Constructs an `OpenAITool` instance from a `tool_call`.
|
|
91
|
-
|
|
92
|
-
Args:
|
|
93
|
-
tool_call: The OpenAI tool call from which to construct this tool instance.
|
|
94
|
-
allow_partial: Whether to allow partial JSON data.
|
|
95
|
-
"""
|
|
96
|
-
model_json = {"tool_call": tool_call.model_dump()}
|
|
97
|
-
if args := tool_call.function.arguments:
|
|
98
|
-
model_json |= cls._dict_from_json(args, allow_partial)
|
|
99
|
-
if allow_partial:
|
|
100
|
-
return partial(cls, {"tool_call", "delta"}).model_validate(model_json)
|
|
101
|
-
return cls.model_validate(model_json)
|
mirascope/core/py.typed
DELETED
|
File without changes
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"""The Mirascope Vertex Module."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
import warnings
|
|
5
|
-
from typing import TypeAlias
|
|
6
|
-
|
|
7
|
-
from google.cloud.aiplatform_v1beta1.types import FunctionResponse
|
|
8
|
-
from vertexai.generative_models import Content
|
|
9
|
-
|
|
10
|
-
from ..base import BaseMessageParam
|
|
11
|
-
from ._call import vertex_call
|
|
12
|
-
from ._call import vertex_call as call
|
|
13
|
-
from .call_params import VertexCallParams
|
|
14
|
-
from .call_response import VertexCallResponse
|
|
15
|
-
from .call_response_chunk import VertexCallResponseChunk
|
|
16
|
-
from .dynamic_config import VertexDynamicConfig
|
|
17
|
-
from .stream import VertexStream
|
|
18
|
-
from .tool import VertexTool
|
|
19
|
-
|
|
20
|
-
VertexMessageParam: TypeAlias = Content | FunctionResponse | BaseMessageParam
|
|
21
|
-
|
|
22
|
-
warnings.warn(
|
|
23
|
-
inspect.cleandoc("""
|
|
24
|
-
The `mirascope.core.gemini` module is deprecated and will be removed in a future release.
|
|
25
|
-
Please use the `mirascope.core.google` module instead.
|
|
26
|
-
|
|
27
|
-
You can use Vertex AI by setting a custom `client` or environment variables.
|
|
28
|
-
See these docs for reference:
|
|
29
|
-
- Google AI SDK Custom Client: https://googleapis.github.io/python-genai/#create-a-client
|
|
30
|
-
- Mirascope Google Custom Client: https://mirascope.com/learn/calls/#__tabbed_39_5
|
|
31
|
-
"""),
|
|
32
|
-
category=DeprecationWarning,
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
__all__ = [
|
|
36
|
-
"VertexCallParams",
|
|
37
|
-
"VertexCallResponse",
|
|
38
|
-
"VertexCallResponseChunk",
|
|
39
|
-
"VertexDynamicConfig",
|
|
40
|
-
"VertexMessageParam",
|
|
41
|
-
"VertexStream",
|
|
42
|
-
"VertexTool",
|
|
43
|
-
"call",
|
|
44
|
-
"vertex_call",
|
|
45
|
-
]
|
mirascope/core/vertex/_call.py
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"""The `vertex_call` decorator for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from ..base import call_factory
|
|
4
|
-
from ._utils import get_json_output, handle_stream, handle_stream_async, setup_call
|
|
5
|
-
from .call_params import VertexCallParams
|
|
6
|
-
from .call_response import VertexCallResponse
|
|
7
|
-
from .call_response_chunk import VertexCallResponseChunk
|
|
8
|
-
from .stream import VertexStream
|
|
9
|
-
from .tool import VertexTool
|
|
10
|
-
|
|
11
|
-
vertex_call = call_factory(
|
|
12
|
-
TCallResponse=VertexCallResponse,
|
|
13
|
-
TCallResponseChunk=VertexCallResponseChunk,
|
|
14
|
-
TStream=VertexStream,
|
|
15
|
-
TToolType=VertexTool,
|
|
16
|
-
default_call_params=VertexCallParams(),
|
|
17
|
-
setup_call=setup_call,
|
|
18
|
-
get_json_output=get_json_output,
|
|
19
|
-
handle_stream=handle_stream, # pyright: ignore [reportArgumentType]
|
|
20
|
-
handle_stream_async=handle_stream_async, # pyright: ignore [reportArgumentType]
|
|
21
|
-
)
|
|
22
|
-
"""A decorator for calling the Vertex API with a typed function.
|
|
23
|
-
|
|
24
|
-
usage docs: learn/calls.md
|
|
25
|
-
|
|
26
|
-
This decorator is used to wrap a typed function that calls the Vertex API. It parses
|
|
27
|
-
the prompt template of the wrapped function as the messages array and templates the
|
|
28
|
-
input arguments for the function into each message's template.
|
|
29
|
-
|
|
30
|
-
Example:
|
|
31
|
-
|
|
32
|
-
```python
|
|
33
|
-
from mirascope.core import prompt_template
|
|
34
|
-
from mirascope.core.vertex import vertex_call
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@vertex_call("gemini-1.5-flash")
|
|
38
|
-
def recommend_book(genre: str) -> str:
|
|
39
|
-
return f"Recommend a {genre} book"
|
|
40
|
-
|
|
41
|
-
response = recommend_book("fantasy")
|
|
42
|
-
print(response.content)
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Args:
|
|
46
|
-
model (str): The Vertex model to use in the API call.
|
|
47
|
-
stream (bool): Whether to stream the response from the API call.
|
|
48
|
-
tools (list[BaseTool | Callable]): The tools to use in the Vertex API call.
|
|
49
|
-
response_model (BaseModel | BaseType): The response model into which the response
|
|
50
|
-
should be structured.
|
|
51
|
-
output_parser (Callable[[VertexCallResponse | ResponseModelT], Any]): A function
|
|
52
|
-
for parsing the call response whose value will be returned in place of the
|
|
53
|
-
original call response.
|
|
54
|
-
json_modem (bool): Whether to use JSON Mode.
|
|
55
|
-
client (object): An optional custom client to use in place of the default client.
|
|
56
|
-
call_params (VertexCallParams): The `VertexCallParams` call parameters to use in the
|
|
57
|
-
API call.
|
|
58
|
-
|
|
59
|
-
Returns:
|
|
60
|
-
decorator (Callable): The decorator for turning a typed function into a Vertex API
|
|
61
|
-
call.
|
|
62
|
-
"""
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"""This module contains the type definition for the Vertex call keyword arguments."""
|
|
2
|
-
|
|
3
|
-
from collections.abc import Sequence
|
|
4
|
-
|
|
5
|
-
from vertexai.generative_models import Content, Tool
|
|
6
|
-
|
|
7
|
-
from ..base import BaseCallKwargs
|
|
8
|
-
from .call_params import VertexCallParams
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class VertexCallKwargs(VertexCallParams, BaseCallKwargs[Tool]):
|
|
12
|
-
contents: Sequence[Content]
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"""Vertex utilities for decorator factories."""
|
|
2
|
-
|
|
3
|
-
from ._convert_message_params import convert_message_params
|
|
4
|
-
from ._get_json_output import get_json_output
|
|
5
|
-
from ._handle_stream import handle_stream, handle_stream_async
|
|
6
|
-
from ._setup_call import setup_call
|
|
7
|
-
|
|
8
|
-
__all__ = [
|
|
9
|
-
"convert_message_params",
|
|
10
|
-
"get_json_output",
|
|
11
|
-
"handle_stream",
|
|
12
|
-
"handle_stream_async",
|
|
13
|
-
"setup_call",
|
|
14
|
-
]
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from typing import cast
|
|
2
|
-
|
|
3
|
-
from vertexai.generative_models import GenerationConfig
|
|
4
|
-
|
|
5
|
-
from ...base.call_params import CommonCallParams
|
|
6
|
-
from ..call_params import VertexCallParams
|
|
7
|
-
|
|
8
|
-
VERTEX_PARAM_MAPPING = {
|
|
9
|
-
"temperature": "temperature",
|
|
10
|
-
"max_tokens": "max_output_tokens",
|
|
11
|
-
"top_p": "top_p",
|
|
12
|
-
"stop": "stop_sequences",
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def convert_common_call_params(common_params: CommonCallParams) -> VertexCallParams:
|
|
17
|
-
"""Convert CommonCallParams to Vertex parameters."""
|
|
18
|
-
generation_config = {}
|
|
19
|
-
|
|
20
|
-
for key, value in common_params.items():
|
|
21
|
-
if key not in VERTEX_PARAM_MAPPING or value is None:
|
|
22
|
-
continue
|
|
23
|
-
|
|
24
|
-
if key == "stop":
|
|
25
|
-
generation_config["stop_sequences"] = (
|
|
26
|
-
[value] if isinstance(value, str) else value
|
|
27
|
-
)
|
|
28
|
-
else:
|
|
29
|
-
generation_config[VERTEX_PARAM_MAPPING[key]] = value
|
|
30
|
-
|
|
31
|
-
if not generation_config:
|
|
32
|
-
return cast(VertexCallParams, {})
|
|
33
|
-
|
|
34
|
-
return cast(
|
|
35
|
-
VertexCallParams,
|
|
36
|
-
{"generation_config": cast(GenerationConfig, generation_config)},
|
|
37
|
-
)
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
from mirascope.core.base._utils._convert_provider_finish_reason_to_finish_reason import (
|
|
2
|
-
FinishReasonMappingValue,
|
|
3
|
-
_convert_finish_reasons_to_common_finish_reasons_from_mapping,
|
|
4
|
-
)
|
|
5
|
-
from mirascope.core.base.types import FinishReason
|
|
6
|
-
|
|
7
|
-
_FinishReasonMapping: dict[str, FinishReasonMappingValue] = {
|
|
8
|
-
"FINISH_REASON_UNSPECIFIED": "stop",
|
|
9
|
-
"STOP": "stop",
|
|
10
|
-
"MAX_TOKENS": "length",
|
|
11
|
-
"SAFETY": "content_filter",
|
|
12
|
-
"RECITATION": "stop",
|
|
13
|
-
"OTHER": "stop",
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def _convert_finish_reasons_to_common_finish_reasons(
|
|
18
|
-
finish_reasons: list[str],
|
|
19
|
-
) -> list[FinishReason] | None:
|
|
20
|
-
"""Provider-agnostic finish reasons."""
|
|
21
|
-
return _convert_finish_reasons_to_common_finish_reasons_from_mapping(
|
|
22
|
-
finish_reasons, _FinishReasonMapping
|
|
23
|
-
)
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"""Utility for converting `BaseMessageParam` to `Content`"""
|
|
2
|
-
|
|
3
|
-
import base64
|
|
4
|
-
import io
|
|
5
|
-
|
|
6
|
-
import PIL.Image
|
|
7
|
-
from google.cloud.aiplatform_v1beta1.types import content as gapic_content_types
|
|
8
|
-
from google.cloud.aiplatform_v1beta1.types import tool as gapic_tool_types
|
|
9
|
-
from vertexai.generative_models import Content, Image, Part
|
|
10
|
-
|
|
11
|
-
from ...base import BaseMessageParam
|
|
12
|
-
from ...base._utils import get_audio_type
|
|
13
|
-
from ...base._utils._parse_content_template import _load_media
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def convert_message_params(
|
|
17
|
-
message_params: list[BaseMessageParam | Content],
|
|
18
|
-
) -> list[Content]:
|
|
19
|
-
converted_message_params = []
|
|
20
|
-
for message_param in message_params:
|
|
21
|
-
if isinstance(message_param, Content):
|
|
22
|
-
converted_message_params.append(message_param)
|
|
23
|
-
elif (role := message_param.role) == "system":
|
|
24
|
-
content = message_param.content
|
|
25
|
-
if not isinstance(content, str):
|
|
26
|
-
raise ValueError(
|
|
27
|
-
"System message content must be a single text string."
|
|
28
|
-
) # pragma: no cover
|
|
29
|
-
converted_message_params += [
|
|
30
|
-
Content(
|
|
31
|
-
role="system",
|
|
32
|
-
parts=[
|
|
33
|
-
Part.from_text(content) if isinstance(content, str) else content
|
|
34
|
-
],
|
|
35
|
-
),
|
|
36
|
-
]
|
|
37
|
-
elif isinstance((content := message_param.content), str):
|
|
38
|
-
converted_message_params.append(
|
|
39
|
-
Content(role="user", parts=[Part.from_text(content)])
|
|
40
|
-
)
|
|
41
|
-
else:
|
|
42
|
-
converted_content: list[Part] = []
|
|
43
|
-
for part in content:
|
|
44
|
-
if part.type == "text":
|
|
45
|
-
converted_content.append(Part.from_text(part.text))
|
|
46
|
-
elif part.type == "image":
|
|
47
|
-
if part.media_type not in [
|
|
48
|
-
"image/jpeg",
|
|
49
|
-
"image/png",
|
|
50
|
-
"image/webp",
|
|
51
|
-
"image/heic",
|
|
52
|
-
"image/heif",
|
|
53
|
-
]:
|
|
54
|
-
raise ValueError(
|
|
55
|
-
f"Unsupported image media type: {part.media_type}. "
|
|
56
|
-
"Vertex currently only supports JPEG, PNG, WebP, HEIC, "
|
|
57
|
-
"and HEIF images."
|
|
58
|
-
)
|
|
59
|
-
image = Image.from_bytes(part.image)
|
|
60
|
-
converted_content.append(Part.from_image(image))
|
|
61
|
-
elif part.type == "image_url":
|
|
62
|
-
# Should download the image to determine the media type
|
|
63
|
-
image = PIL.Image.open(io.BytesIO(_load_media(part.url)))
|
|
64
|
-
media_type = (
|
|
65
|
-
PIL.Image.MIME[image.format]
|
|
66
|
-
if image.format
|
|
67
|
-
else "image/unknown"
|
|
68
|
-
)
|
|
69
|
-
if media_type not in [
|
|
70
|
-
"image/jpeg",
|
|
71
|
-
"image/png",
|
|
72
|
-
"image/webp",
|
|
73
|
-
"image/heic",
|
|
74
|
-
"image/heif",
|
|
75
|
-
]:
|
|
76
|
-
raise ValueError(
|
|
77
|
-
f"Unsupported image media type: {media_type}. "
|
|
78
|
-
"Gemini currently only supports JPEG, PNG, WebP, HEIC, "
|
|
79
|
-
"and HEIF images."
|
|
80
|
-
)
|
|
81
|
-
converted_content.append(
|
|
82
|
-
Part.from_uri(part.url, mime_type=media_type)
|
|
83
|
-
)
|
|
84
|
-
elif part.type == "audio":
|
|
85
|
-
if part.media_type not in [
|
|
86
|
-
"audio/wav",
|
|
87
|
-
"audio/mp3",
|
|
88
|
-
"audio/aiff",
|
|
89
|
-
"audio/aac",
|
|
90
|
-
"audio/ogg",
|
|
91
|
-
"audio/flac",
|
|
92
|
-
]:
|
|
93
|
-
raise ValueError(
|
|
94
|
-
f"Unsupported audio media type: {part.media_type}. "
|
|
95
|
-
"Vertex currently only supports WAV, MP3, AIFF, AAC, OGG, "
|
|
96
|
-
"and FLAC audio file types."
|
|
97
|
-
)
|
|
98
|
-
converted_content.append(
|
|
99
|
-
Part.from_data(
|
|
100
|
-
mime_type=part.media_type,
|
|
101
|
-
data=part.audio
|
|
102
|
-
if isinstance(part.audio, bytes)
|
|
103
|
-
else base64.b64decode(part.audio),
|
|
104
|
-
)
|
|
105
|
-
)
|
|
106
|
-
elif part.type == "audio_url":
|
|
107
|
-
# Should download the audio to determine the media type
|
|
108
|
-
audio = _load_media(part.url)
|
|
109
|
-
audio_type = f"audio/{get_audio_type(audio)}"
|
|
110
|
-
if audio_type not in [
|
|
111
|
-
"audio/wav",
|
|
112
|
-
"audio/mp3",
|
|
113
|
-
"audio/aiff",
|
|
114
|
-
"audio/aac",
|
|
115
|
-
"audio/ogg",
|
|
116
|
-
"audio/flac",
|
|
117
|
-
]:
|
|
118
|
-
raise ValueError(
|
|
119
|
-
f"Unsupported audio media type: {audio_type}. "
|
|
120
|
-
"Gemini currently only supports WAV, MP3, AIFF, AAC, OGG, "
|
|
121
|
-
"and FLAC audio file types."
|
|
122
|
-
)
|
|
123
|
-
converted_content.append(
|
|
124
|
-
Part.from_uri(part.url, mime_type=audio_type)
|
|
125
|
-
)
|
|
126
|
-
elif part.type == "tool_call":
|
|
127
|
-
if converted_content:
|
|
128
|
-
converted_message_params.append(
|
|
129
|
-
Content(role=role, parts=converted_content)
|
|
130
|
-
)
|
|
131
|
-
converted_content = []
|
|
132
|
-
raw_gapic_part = gapic_content_types.Part(
|
|
133
|
-
function_call=gapic_tool_types.FunctionCall(
|
|
134
|
-
name=part.name, args=part.args
|
|
135
|
-
)
|
|
136
|
-
)
|
|
137
|
-
converted_message_params.append(
|
|
138
|
-
Content(
|
|
139
|
-
role=role,
|
|
140
|
-
parts=[Part._from_gapic(raw_gapic_part)],
|
|
141
|
-
)
|
|
142
|
-
)
|
|
143
|
-
elif part.type == "tool_result":
|
|
144
|
-
if converted_content:
|
|
145
|
-
converted_message_params.append(
|
|
146
|
-
Content(role=role, parts=converted_content)
|
|
147
|
-
)
|
|
148
|
-
converted_content = []
|
|
149
|
-
converted_message_params.append(
|
|
150
|
-
Content(
|
|
151
|
-
role=role,
|
|
152
|
-
parts=[
|
|
153
|
-
Part.from_function_response(
|
|
154
|
-
name=part.name,
|
|
155
|
-
response={
|
|
156
|
-
"content": {"result": part.content},
|
|
157
|
-
},
|
|
158
|
-
)
|
|
159
|
-
],
|
|
160
|
-
)
|
|
161
|
-
)
|
|
162
|
-
else:
|
|
163
|
-
raise ValueError(
|
|
164
|
-
"Vertex currently only supports text, image, and audio parts. "
|
|
165
|
-
f"Part provided: {part.type}"
|
|
166
|
-
)
|
|
167
|
-
if converted_content:
|
|
168
|
-
converted_message_params.append(
|
|
169
|
-
Content(role=role, parts=converted_content)
|
|
170
|
-
)
|
|
171
|
-
return converted_message_params
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"""Get JSON output from a Vertex response."""
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
|
|
5
|
-
from proto.marshal.collections import RepeatedComposite
|
|
6
|
-
|
|
7
|
-
from ..call_response import VertexCallResponse
|
|
8
|
-
from ..call_response_chunk import VertexCallResponseChunk
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def get_json_output(
|
|
12
|
-
response: VertexCallResponse | VertexCallResponseChunk, json_mode: bool
|
|
13
|
-
) -> str:
|
|
14
|
-
"""Extracts the JSON output from a Vertex response."""
|
|
15
|
-
if isinstance(response, VertexCallResponse):
|
|
16
|
-
if json_mode and (content := response.content):
|
|
17
|
-
json_start = content.index("{")
|
|
18
|
-
json_end = content.rfind("}")
|
|
19
|
-
return content[json_start : json_end + 1]
|
|
20
|
-
elif tool_calls := [
|
|
21
|
-
part.function_call
|
|
22
|
-
for candidate in response.response.candidates
|
|
23
|
-
for part in candidate.content.parts
|
|
24
|
-
if part.function_call.args
|
|
25
|
-
]:
|
|
26
|
-
return json.dumps(
|
|
27
|
-
{
|
|
28
|
-
k: v if not isinstance(v, RepeatedComposite) else list(v)
|
|
29
|
-
for k, v in tool_calls[0].args.items()
|
|
30
|
-
}
|
|
31
|
-
)
|
|
32
|
-
else:
|
|
33
|
-
raise ValueError("No tool call or JSON object found in response.")
|
|
34
|
-
elif not json_mode:
|
|
35
|
-
raise ValueError("Vertex only supports structured streaming in json mode.")
|
|
36
|
-
return response.content
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"""Handles streaming content and tools from the Vertex API."""
|
|
2
|
-
|
|
3
|
-
from collections.abc import AsyncGenerator, Generator
|
|
4
|
-
|
|
5
|
-
from vertexai.generative_models import GenerationResponse
|
|
6
|
-
|
|
7
|
-
from ..call_response_chunk import VertexCallResponseChunk
|
|
8
|
-
from ..tool import VertexTool
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def handle_stream(
|
|
12
|
-
stream: Generator[GenerationResponse, None, None],
|
|
13
|
-
tool_types: list[type[VertexTool]] | None = None,
|
|
14
|
-
) -> Generator[tuple[VertexCallResponseChunk, None], None, None]:
|
|
15
|
-
"""Iterator over the stream and constructs tools as they are streamed.
|
|
16
|
-
|
|
17
|
-
Note: vertex does not currently support streaming tools.
|
|
18
|
-
"""
|
|
19
|
-
for chunk in stream:
|
|
20
|
-
yield VertexCallResponseChunk(chunk=chunk), None
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
async def handle_stream_async(
|
|
24
|
-
stream: AsyncGenerator[GenerationResponse, None],
|
|
25
|
-
tool_types: list[type[VertexTool]] | None = None,
|
|
26
|
-
) -> AsyncGenerator[tuple[VertexCallResponseChunk, None], None]:
|
|
27
|
-
"""
|
|
28
|
-
Async iterator over the stream and constructs tools as they are streamed.
|
|
29
|
-
|
|
30
|
-
Note: vertex does not currently support streaming tools.
|
|
31
|
-
"""
|
|
32
|
-
async for chunk in stream:
|
|
33
|
-
yield VertexCallResponseChunk(chunk=chunk), None
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
from typing import cast
|
|
2
|
-
|
|
3
|
-
from vertexai.generative_models import Content
|
|
4
|
-
|
|
5
|
-
from mirascope.core import BaseMessageParam
|
|
6
|
-
from mirascope.core.base import DocumentPart, ImagePart, TextPart
|
|
7
|
-
from mirascope.core.base._utils._base_message_param_converter import (
|
|
8
|
-
BaseMessageParamConverter,
|
|
9
|
-
)
|
|
10
|
-
from mirascope.core.base.message_param import ImageURLPart, ToolCallPart, ToolResultPart
|
|
11
|
-
from mirascope.core.vertex._utils import convert_message_params
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def _is_image_mime(mime_type: str) -> bool:
|
|
15
|
-
return mime_type in ["image/jpeg", "image/png", "image/gif", "image/webp"]
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def _to_image_part(mime_type: str, data: bytes) -> ImagePart:
|
|
19
|
-
if not _is_image_mime(mime_type):
|
|
20
|
-
raise ValueError(
|
|
21
|
-
f"Unsupported image media type: {mime_type}. "
|
|
22
|
-
"Expected one of: image/jpeg, image/png, image/gif, image/webp."
|
|
23
|
-
)
|
|
24
|
-
return ImagePart(type="image", media_type=mime_type, image=data, detail=None)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def _to_document_part(mime_type: str, data: bytes) -> DocumentPart:
|
|
28
|
-
if mime_type != "application/pdf":
|
|
29
|
-
raise ValueError(
|
|
30
|
-
f"Unsupported document media type: {mime_type}. "
|
|
31
|
-
"Only application/pdf is supported."
|
|
32
|
-
)
|
|
33
|
-
return DocumentPart(type="document", media_type=mime_type, document=data)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class VertexMessageParamConverter(BaseMessageParamConverter):
|
|
37
|
-
"""Converts between Vertex `Content` and Mirascope `BaseMessageParam`."""
|
|
38
|
-
|
|
39
|
-
@staticmethod
|
|
40
|
-
def to_provider(message_params: list[BaseMessageParam]) -> list[Content]:
|
|
41
|
-
"""
|
|
42
|
-
Convert from Mirascope `BaseMessageParam` to Vertex `Content`.
|
|
43
|
-
"""
|
|
44
|
-
return convert_message_params(
|
|
45
|
-
cast(list[BaseMessageParam | Content], message_params)
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
@staticmethod
|
|
49
|
-
def from_provider(message_params: list[Content]) -> list[BaseMessageParam]:
|
|
50
|
-
"""
|
|
51
|
-
Convert from Vertex's `Content` to Mirascope `BaseMessageParam`.
|
|
52
|
-
"""
|
|
53
|
-
converted = []
|
|
54
|
-
for message_param in message_params:
|
|
55
|
-
role: str = (
|
|
56
|
-
"assistant" if message_param.role == "model" else message_param.role
|
|
57
|
-
)
|
|
58
|
-
contents = []
|
|
59
|
-
has_tool_call = False
|
|
60
|
-
for part in message_param.parts:
|
|
61
|
-
if part.function_response:
|
|
62
|
-
converted.append(
|
|
63
|
-
BaseMessageParam(
|
|
64
|
-
role=message_param.role,
|
|
65
|
-
content=[
|
|
66
|
-
ToolResultPart(
|
|
67
|
-
type="tool_result",
|
|
68
|
-
name=part.function_response.name,
|
|
69
|
-
content=part.function_response.response["result"], # pyright: ignore [reportReturnType, reportArgumentType]
|
|
70
|
-
id=None,
|
|
71
|
-
is_error=False,
|
|
72
|
-
)
|
|
73
|
-
],
|
|
74
|
-
)
|
|
75
|
-
)
|
|
76
|
-
elif part.inline_data:
|
|
77
|
-
blob = part.inline_data
|
|
78
|
-
mime = blob.mime_type
|
|
79
|
-
data = blob.data
|
|
80
|
-
if _is_image_mime(mime):
|
|
81
|
-
contents.append(_to_image_part(mime, data))
|
|
82
|
-
elif mime == "application/pdf":
|
|
83
|
-
contents.append(_to_document_part(mime, data))
|
|
84
|
-
else:
|
|
85
|
-
raise ValueError(
|
|
86
|
-
f"Unsupported inline_data mime type: {mime}. Cannot convert to BaseMessageParam."
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
elif part.file_data:
|
|
90
|
-
if _is_image_mime(part.file_data.mime_type):
|
|
91
|
-
contents.append(
|
|
92
|
-
ImageURLPart(
|
|
93
|
-
type="image_url",
|
|
94
|
-
url=part.file_data.file_uri,
|
|
95
|
-
detail=None,
|
|
96
|
-
)
|
|
97
|
-
)
|
|
98
|
-
else:
|
|
99
|
-
raise ValueError(
|
|
100
|
-
f"FileData.file_uri is not support: {part.file_data}. Cannot convert to BaseMessageParam."
|
|
101
|
-
)
|
|
102
|
-
elif part.function_call:
|
|
103
|
-
converted.append(
|
|
104
|
-
BaseMessageParam(
|
|
105
|
-
role=role,
|
|
106
|
-
content=[
|
|
107
|
-
ToolCallPart(
|
|
108
|
-
type="tool_call",
|
|
109
|
-
name=part.function_call.name,
|
|
110
|
-
args=dict(part.function_call.args),
|
|
111
|
-
)
|
|
112
|
-
],
|
|
113
|
-
)
|
|
114
|
-
)
|
|
115
|
-
elif part.text:
|
|
116
|
-
contents.append(TextPart(type="text", text=part.text))
|
|
117
|
-
|
|
118
|
-
else: # pragma: no cover
|
|
119
|
-
raise ValueError(
|
|
120
|
-
"Part does not contain any supported content (text, image, or document)."
|
|
121
|
-
)
|
|
122
|
-
|
|
123
|
-
if len(contents) == 1 and isinstance(contents[0], TextPart):
|
|
124
|
-
converted.append(BaseMessageParam(role=role, content=contents[0].text))
|
|
125
|
-
else:
|
|
126
|
-
if contents:
|
|
127
|
-
converted.append(
|
|
128
|
-
BaseMessageParam(
|
|
129
|
-
role="tool" if has_tool_call else role, content=contents
|
|
130
|
-
)
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
return converted
|