mirascope 1.25.6__py3-none-any.whl → 2.0.0__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 -52
- mirascope/_stubs.py +363 -0
- mirascope/api/__init__.py +14 -0
- mirascope/api/_generated/README.md +207 -0
- mirascope/api/_generated/__init__.py +440 -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 +25 -0
- mirascope/api/_generated/project_memberships/client.py +437 -0
- mirascope/api/_generated/project_memberships/raw_client.py +1039 -0
- mirascope/api/_generated/project_memberships/types/__init__.py +29 -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_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 +4915 -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 +290 -15
- mirascope/llm/calls/__init__.py +17 -0
- mirascope/llm/calls/calls.py +341 -0
- mirascope/llm/calls/decorator.py +275 -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 +293 -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 +66 -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 +1419 -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 +226 -0
- mirascope/llm/prompts/prompts.py +487 -0
- mirascope/llm/prompts/protocols.py +65 -0
- mirascope/llm/providers/__init__.py +62 -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 +282 -0
- mirascope/llm/providers/anthropic/_utils/beta_encode.py +266 -0
- mirascope/llm/providers/anthropic/_utils/decode.py +288 -0
- mirascope/llm/providers/anthropic/_utils/encode.py +418 -0
- mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
- mirascope/llm/providers/anthropic/beta_provider.py +374 -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 +479 -0
- mirascope/llm/providers/base/__init__.py +14 -0
- mirascope/llm/providers/base/_utils.py +253 -0
- mirascope/llm/providers/base/base_provider.py +1579 -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 +307 -0
- mirascope/llm/providers/google/_utils/encode.py +401 -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 +492 -0
- mirascope/llm/providers/mirascope/__init__.py +5 -0
- mirascope/llm/providers/mirascope/_utils.py +73 -0
- mirascope/llm/providers/mirascope/provider.py +349 -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 +72 -0
- mirascope/llm/providers/mlx/encoding/transformers.py +150 -0
- mirascope/llm/providers/mlx/mlx.py +254 -0
- mirascope/llm/providers/mlx/model_id.py +17 -0
- mirascope/llm/providers/mlx/provider.py +452 -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 +15 -0
- mirascope/llm/providers/openai/completions/_utils/decode.py +252 -0
- mirascope/llm/providers/openai/completions/_utils/encode.py +376 -0
- mirascope/llm/providers/openai/completions/base_provider.py +542 -0
- mirascope/llm/providers/openai/completions/provider.py +22 -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 +441 -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 +260 -0
- mirascope/llm/providers/openai/responses/_utils/encode.py +384 -0
- mirascope/llm/providers/openai/responses/provider.py +513 -0
- mirascope/llm/providers/provider_id.py +24 -0
- mirascope/llm/providers/provider_registry.py +299 -0
- mirascope/llm/providers/together/__init__.py +7 -0
- mirascope/llm/providers/together/provider.py +40 -0
- mirascope/llm/responses/__init__.py +65 -0
- mirascope/llm/responses/_utils.py +146 -0
- mirascope/llm/responses/base_response.py +103 -0
- mirascope/llm/responses/base_stream_response.py +820 -0
- mirascope/llm/responses/finish_reason.py +28 -0
- mirascope/llm/responses/response.py +366 -0
- mirascope/llm/responses/root_response.py +248 -0
- mirascope/llm/responses/stream_response.py +581 -0
- mirascope/llm/responses/streams.py +363 -0
- mirascope/llm/responses/usage.py +95 -0
- mirascope/llm/tools/__init__.py +47 -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/tool_schema.py +314 -0
- mirascope/llm/tools/toolkit.py +160 -0
- mirascope/llm/tools/tools.py +263 -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 +111 -0
- mirascope/ops/_internal/__init__.py +5 -0
- mirascope/ops/_internal/closure.py +1169 -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 +395 -0
- mirascope/ops/_internal/exporters/processors.py +104 -0
- mirascope/ops/_internal/exporters/types.py +165 -0
- mirascope/ops/_internal/exporters/utils.py +29 -0
- mirascope/ops/_internal/instrumentation/__init__.py +8 -0
- mirascope/ops/_internal/instrumentation/llm/__init__.py +8 -0
- mirascope/ops/_internal/instrumentation/llm/common.py +530 -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 +1798 -0
- mirascope/ops/_internal/instrumentation/llm/response.py +521 -0
- mirascope/ops/_internal/instrumentation/llm/serialize.py +300 -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 +375 -0
- mirascope/ops/_internal/traced_functions.py +523 -0
- mirascope/ops/_internal/tracing.py +353 -0
- mirascope/ops/_internal/types.py +13 -0
- mirascope/ops/_internal/utils.py +123 -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.0.0.dist-info/METADATA +203 -0
- mirascope-2.0.0.dist-info/RECORD +423 -0
- {mirascope-1.25.6.dist-info → mirascope-2.0.0.dist-info}/WHEEL +1 -1
- {mirascope-1.25.6.dist-info → mirascope-2.0.0.dist-info}/licenses/LICENSE +1 -1
- 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 -62
- mirascope/beta/rag/chroma/vectorstores.py +0 -121
- 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 -109
- 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/_thinking.py +0 -70
- 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 -146
- mirascope/core/anthropic/call_params.py +0 -44
- mirascope/core/anthropic/call_response.py +0 -226
- mirascope/core/anthropic/call_response_chunk.py +0 -152
- mirascope/core/anthropic/dynamic_config.py +0 -40
- mirascope/core/anthropic/py.typed +0 -0
- mirascope/core/anthropic/stream.py +0 -204
- 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 -86
- 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 -178
- 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 -24
- 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 -323
- 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 -338
- 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 -175
- mirascope/core/base/messages.py +0 -116
- 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 -214
- 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 -172
- mirascope/core/bedrock/_utils/_setup_call.py +0 -258
- mirascope/core/bedrock/call_params.py +0 -38
- mirascope/core/bedrock/call_response.py +0 -248
- 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 -100
- 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 -297
- mirascope/core/google/_utils/_get_json_output.py +0 -37
- mirascope/core/google/_utils/_handle_stream.py +0 -58
- mirascope/core/google/_utils/_message_param_converter.py +0 -200
- mirascope/core/google/_utils/_setup_call.py +0 -201
- mirascope/core/google/_utils/_validate_media_type.py +0 -58
- mirascope/core/google/call_params.py +0 -22
- mirascope/core/google/call_response.py +0 -255
- mirascope/core/google/call_response_chunk.py +0 -135
- mirascope/core/google/dynamic_config.py +0 -26
- mirascope/core/google/stream.py +0 -199
- 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 -164
- 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 -81
- 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 -148
- 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 -92
- 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 -158
- 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 -288
- 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 -131
- 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.25.6.dist-info/METADATA +0 -169
- mirascope-1.25.6.dist-info/RECORD +0 -378
|
@@ -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
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
"""This module contains the setup_call function, which is used to set up the"""
|
|
2
|
-
|
|
3
|
-
from collections.abc import AsyncIterable, Awaitable, Callable, Iterable
|
|
4
|
-
from typing import Any, cast, overload
|
|
5
|
-
|
|
6
|
-
from google.cloud.aiplatform_v1beta1.types import FunctionCallingConfig
|
|
7
|
-
from pydantic import BaseModel
|
|
8
|
-
from vertexai.generative_models import (
|
|
9
|
-
Content,
|
|
10
|
-
GenerationConfig,
|
|
11
|
-
GenerationResponse,
|
|
12
|
-
GenerativeModel,
|
|
13
|
-
Part,
|
|
14
|
-
ToolConfig,
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
from ...base import BaseMessageParam, BaseTool, _utils
|
|
18
|
-
from ...base._utils import (
|
|
19
|
-
AsyncCreateFn,
|
|
20
|
-
CreateFn,
|
|
21
|
-
fn_is_async,
|
|
22
|
-
get_async_create_fn,
|
|
23
|
-
get_create_fn,
|
|
24
|
-
)
|
|
25
|
-
from ...base.call_params import CommonCallParams
|
|
26
|
-
from ...base.stream_config import StreamConfig
|
|
27
|
-
from .._call_kwargs import VertexCallKwargs
|
|
28
|
-
from ..call_params import VertexCallParams
|
|
29
|
-
from ..dynamic_config import VertexDynamicConfig
|
|
30
|
-
from ..tool import VertexTool
|
|
31
|
-
from ._convert_common_call_params import convert_common_call_params
|
|
32
|
-
from ._convert_message_params import convert_message_params
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@overload
|
|
36
|
-
def setup_call(
|
|
37
|
-
*,
|
|
38
|
-
model: str,
|
|
39
|
-
client: GenerativeModel | None,
|
|
40
|
-
fn: Callable[..., Awaitable[VertexDynamicConfig]],
|
|
41
|
-
fn_args: dict[str, Any],
|
|
42
|
-
dynamic_config: VertexDynamicConfig,
|
|
43
|
-
tools: list[type[BaseTool] | Callable] | None,
|
|
44
|
-
json_mode: bool,
|
|
45
|
-
call_params: VertexCallParams | CommonCallParams,
|
|
46
|
-
response_model: type[BaseModel] | None,
|
|
47
|
-
stream: bool | StreamConfig,
|
|
48
|
-
) -> tuple[
|
|
49
|
-
AsyncCreateFn[GenerationResponse, AsyncIterable[GenerationResponse]],
|
|
50
|
-
str | None,
|
|
51
|
-
list[Content],
|
|
52
|
-
list[type[VertexTool]] | None,
|
|
53
|
-
VertexCallKwargs,
|
|
54
|
-
]: ...
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
@overload
|
|
58
|
-
def setup_call(
|
|
59
|
-
*,
|
|
60
|
-
model: str,
|
|
61
|
-
client: GenerativeModel | None,
|
|
62
|
-
fn: Callable[..., VertexDynamicConfig],
|
|
63
|
-
fn_args: dict[str, Any],
|
|
64
|
-
dynamic_config: VertexDynamicConfig,
|
|
65
|
-
tools: list[type[BaseTool] | Callable] | None,
|
|
66
|
-
json_mode: bool,
|
|
67
|
-
call_params: VertexCallParams | CommonCallParams,
|
|
68
|
-
response_model: type[BaseModel] | None,
|
|
69
|
-
stream: bool | StreamConfig,
|
|
70
|
-
) -> tuple[
|
|
71
|
-
CreateFn[GenerationResponse, Iterable[GenerationResponse]],
|
|
72
|
-
str | None,
|
|
73
|
-
list[Content],
|
|
74
|
-
list[type[VertexTool]] | None,
|
|
75
|
-
VertexCallKwargs,
|
|
76
|
-
]: ...
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def setup_call(
|
|
80
|
-
*,
|
|
81
|
-
model: str,
|
|
82
|
-
client: GenerativeModel | None,
|
|
83
|
-
fn: Callable[..., VertexDynamicConfig | Awaitable[VertexDynamicConfig]],
|
|
84
|
-
fn_args: dict[str, Any],
|
|
85
|
-
dynamic_config: VertexDynamicConfig,
|
|
86
|
-
tools: list[type[BaseTool] | Callable] | None,
|
|
87
|
-
json_mode: bool,
|
|
88
|
-
call_params: VertexCallParams | CommonCallParams,
|
|
89
|
-
response_model: type[BaseModel] | None,
|
|
90
|
-
stream: bool | StreamConfig,
|
|
91
|
-
) -> tuple[
|
|
92
|
-
CreateFn[GenerationResponse, Iterable[GenerationResponse]]
|
|
93
|
-
| AsyncCreateFn[GenerationResponse, AsyncIterable[GenerationResponse]],
|
|
94
|
-
str | None,
|
|
95
|
-
list[Content],
|
|
96
|
-
list[type[VertexTool]] | None,
|
|
97
|
-
VertexCallKwargs,
|
|
98
|
-
]:
|
|
99
|
-
prompt_template, messages, tool_types, base_call_kwargs = _utils.setup_call(
|
|
100
|
-
fn,
|
|
101
|
-
fn_args,
|
|
102
|
-
dynamic_config,
|
|
103
|
-
tools,
|
|
104
|
-
VertexTool,
|
|
105
|
-
call_params,
|
|
106
|
-
convert_common_call_params,
|
|
107
|
-
)
|
|
108
|
-
call_kwargs = cast(VertexCallKwargs, base_call_kwargs)
|
|
109
|
-
messages = cast(list[BaseMessageParam | Content], messages)
|
|
110
|
-
messages = convert_message_params(messages)
|
|
111
|
-
|
|
112
|
-
if json_mode:
|
|
113
|
-
generation_config = call_kwargs.get(
|
|
114
|
-
"generation_config",
|
|
115
|
-
GenerationConfig(response_mime_type="application/json")
|
|
116
|
-
if not tools
|
|
117
|
-
else GenerationConfig(),
|
|
118
|
-
)
|
|
119
|
-
call_kwargs["generation_config"] = generation_config
|
|
120
|
-
messages[-1] = Content(
|
|
121
|
-
role="user",
|
|
122
|
-
parts=messages[-1].parts
|
|
123
|
-
+ [Part.from_text(_utils.json_mode_content(response_model))],
|
|
124
|
-
)
|
|
125
|
-
elif response_model:
|
|
126
|
-
assert tool_types, "At least one tool must be provided for extraction."
|
|
127
|
-
call_kwargs.pop("tool_config", None)
|
|
128
|
-
tool_config = ToolConfig(
|
|
129
|
-
function_calling_config=ToolConfig.FunctionCallingConfig(
|
|
130
|
-
mode=FunctionCallingConfig.Mode.ANY,
|
|
131
|
-
allowed_function_names=[tool_types[0]._name()],
|
|
132
|
-
)
|
|
133
|
-
)
|
|
134
|
-
call_kwargs["tool_config"] = tool_config
|
|
135
|
-
|
|
136
|
-
if client is None:
|
|
137
|
-
client = GenerativeModel(model_name=model)
|
|
138
|
-
|
|
139
|
-
if messages and messages[0].role == "system":
|
|
140
|
-
system_instruction = client._system_instruction
|
|
141
|
-
if not isinstance(system_instruction, list):
|
|
142
|
-
system_instruction = [system_instruction] if system_instruction else []
|
|
143
|
-
system_instruction.extend(messages.pop(0).parts)
|
|
144
|
-
client._system_instruction = system_instruction
|
|
145
|
-
|
|
146
|
-
call_kwargs |= {"contents": messages}
|
|
147
|
-
|
|
148
|
-
create = (
|
|
149
|
-
cast(
|
|
150
|
-
AsyncCreateFn[GenerationResponse, AsyncIterable[GenerationResponse]],
|
|
151
|
-
get_async_create_fn(client.generate_content_async),
|
|
152
|
-
)
|
|
153
|
-
if fn_is_async(fn)
|
|
154
|
-
else cast(
|
|
155
|
-
CreateFn[GenerationResponse, Iterable[GenerationResponse]],
|
|
156
|
-
get_create_fn(client.generate_content),
|
|
157
|
-
)
|
|
158
|
-
)
|
|
159
|
-
|
|
160
|
-
return create, prompt_template, messages, tool_types, call_kwargs
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"""usage docs: learn/calls.md#provider-specific-parameters"""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from typing_extensions import NotRequired
|
|
6
|
-
from vertexai.generative_models import GenerationConfig, SafetySetting, ToolConfig
|
|
7
|
-
|
|
8
|
-
from ..base import BaseCallParams
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class VertexCallParams(BaseCallParams):
|
|
12
|
-
"""The parameters to use when calling the Vertex API.
|
|
13
|
-
|
|
14
|
-
[Vertex API Reference](https://cloud.google.com/python/docs/reference/aiplatform/latest)
|
|
15
|
-
|
|
16
|
-
Attributes:
|
|
17
|
-
generation_config: ...
|
|
18
|
-
safety_settings: ...
|
|
19
|
-
tool_config: ...
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
generation_config: NotRequired[GenerationConfig]
|
|
23
|
-
safety_settings: NotRequired[SafetySetting]
|
|
24
|
-
tool_config: NotRequired[ToolConfig]
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
"""This module contains the `VertexCallResponse` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/calls.md#handling-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from collections.abc import Sequence
|
|
7
|
-
from functools import cached_property
|
|
8
|
-
|
|
9
|
-
from google.cloud.aiplatform_v1beta1.types import GenerateContentResponse
|
|
10
|
-
from pydantic import computed_field
|
|
11
|
-
from vertexai.generative_models import Content, GenerationResponse, Part, Tool
|
|
12
|
-
|
|
13
|
-
from .. import BaseMessageParam
|
|
14
|
-
from ..base import BaseCallResponse, transform_tool_outputs
|
|
15
|
-
from ..base.types import CostMetadata, FinishReason
|
|
16
|
-
from ._utils._convert_finish_reason_to_common_finish_reasons import (
|
|
17
|
-
_convert_finish_reasons_to_common_finish_reasons,
|
|
18
|
-
)
|
|
19
|
-
from ._utils._message_param_converter import VertexMessageParamConverter
|
|
20
|
-
from .call_params import VertexCallParams
|
|
21
|
-
from .dynamic_config import VertexDynamicConfig
|
|
22
|
-
from .tool import VertexTool
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class VertexCallResponse(
|
|
26
|
-
BaseCallResponse[
|
|
27
|
-
GenerationResponse,
|
|
28
|
-
VertexTool,
|
|
29
|
-
Tool,
|
|
30
|
-
VertexDynamicConfig,
|
|
31
|
-
Content,
|
|
32
|
-
VertexCallParams,
|
|
33
|
-
Content,
|
|
34
|
-
VertexMessageParamConverter,
|
|
35
|
-
]
|
|
36
|
-
):
|
|
37
|
-
"""A convenience wrapper around the Vertex AI `GenerateContentResponse`.
|
|
38
|
-
|
|
39
|
-
When calling the Vertex AI API using a function decorated with `vertex_call`, the
|
|
40
|
-
response will be a `VertexCallResponse` instance with properties that allow for
|
|
41
|
-
more convenient access to commonly used attributes.
|
|
42
|
-
|
|
43
|
-
Example:
|
|
44
|
-
|
|
45
|
-
```python
|
|
46
|
-
from mirascope.core import prompt_template
|
|
47
|
-
from mirascope.core.vertex import vertex_call
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
@vertex_call("gemini-1.5-flash")
|
|
51
|
-
def recommend_book(genre: str) -> str:
|
|
52
|
-
return f"Recommend a {genre} book"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
response = recommend_book("fantasy") # response is an `VertexCallResponse` instance
|
|
56
|
-
print(response.content)
|
|
57
|
-
```
|
|
58
|
-
"""
|
|
59
|
-
|
|
60
|
-
_message_converter: type[VertexMessageParamConverter] = VertexMessageParamConverter
|
|
61
|
-
|
|
62
|
-
_provider = "vertex"
|
|
63
|
-
|
|
64
|
-
@computed_field
|
|
65
|
-
@property
|
|
66
|
-
def content(self) -> str:
|
|
67
|
-
"""Returns the contained string content for the 0th choice."""
|
|
68
|
-
return self.response.candidates[0].content.parts[0].text
|
|
69
|
-
|
|
70
|
-
@computed_field
|
|
71
|
-
@property
|
|
72
|
-
def finish_reasons(self) -> list[str]:
|
|
73
|
-
"""Returns the finish reasons of the response."""
|
|
74
|
-
finish_reasons = [
|
|
75
|
-
"FINISH_REASON_UNSPECIFIED",
|
|
76
|
-
"STOP",
|
|
77
|
-
"MAX_TOKENS",
|
|
78
|
-
"SAFETY",
|
|
79
|
-
"RECITATION",
|
|
80
|
-
"OTHER",
|
|
81
|
-
]
|
|
82
|
-
|
|
83
|
-
return [
|
|
84
|
-
finish_reasons[candidate.finish_reason]
|
|
85
|
-
for candidate in self.response.candidates
|
|
86
|
-
]
|
|
87
|
-
|
|
88
|
-
@computed_field
|
|
89
|
-
@property
|
|
90
|
-
def model(self) -> str:
|
|
91
|
-
"""Returns the model name.
|
|
92
|
-
|
|
93
|
-
vertex does not return model, so we return the model provided by
|
|
94
|
-
the user.
|
|
95
|
-
"""
|
|
96
|
-
return self._model
|
|
97
|
-
|
|
98
|
-
@computed_field
|
|
99
|
-
@property
|
|
100
|
-
def id(self) -> str | None:
|
|
101
|
-
"""Returns the id of the response.
|
|
102
|
-
|
|
103
|
-
vertex does not return an id
|
|
104
|
-
"""
|
|
105
|
-
return None
|
|
106
|
-
|
|
107
|
-
@property
|
|
108
|
-
def usage(self) -> GenerateContentResponse.UsageMetadata:
|
|
109
|
-
"""Returns the usage of the chat completion."""
|
|
110
|
-
return self.response.usage_metadata
|
|
111
|
-
|
|
112
|
-
@computed_field
|
|
113
|
-
@property
|
|
114
|
-
def input_tokens(self) -> int:
|
|
115
|
-
"""Returns the number of input tokens."""
|
|
116
|
-
return self.usage.prompt_token_count
|
|
117
|
-
|
|
118
|
-
@computed_field
|
|
119
|
-
@property
|
|
120
|
-
def cached_tokens(self) -> int:
|
|
121
|
-
"""Returns the number of cached tokens."""
|
|
122
|
-
return 0
|
|
123
|
-
|
|
124
|
-
@computed_field
|
|
125
|
-
@property
|
|
126
|
-
def output_tokens(self) -> int:
|
|
127
|
-
"""Returns the number of output tokens."""
|
|
128
|
-
return self.usage.candidates_token_count
|
|
129
|
-
|
|
130
|
-
@computed_field
|
|
131
|
-
@cached_property
|
|
132
|
-
def message_param(self) -> Content:
|
|
133
|
-
"""Returns the models's response as a message parameter."""
|
|
134
|
-
return Content(role="model", parts=self.response.candidates[0].content.parts)
|
|
135
|
-
|
|
136
|
-
@cached_property
|
|
137
|
-
def tools(self) -> list[VertexTool] | None:
|
|
138
|
-
"""Returns the list of tools for the 0th candidate's 0th content part."""
|
|
139
|
-
if self.tool_types is None:
|
|
140
|
-
return None
|
|
141
|
-
|
|
142
|
-
extracted_tools = []
|
|
143
|
-
for part in self.response.candidates[0].content.parts:
|
|
144
|
-
tool_call = part.function_call
|
|
145
|
-
for tool_type in self.tool_types:
|
|
146
|
-
if tool_call.name == tool_type._name():
|
|
147
|
-
extracted_tools.append(tool_type.from_tool_call(tool_call))
|
|
148
|
-
break
|
|
149
|
-
|
|
150
|
-
return extracted_tools
|
|
151
|
-
|
|
152
|
-
@cached_property
|
|
153
|
-
def tool(self) -> VertexTool | None:
|
|
154
|
-
"""Returns the 0th tool for the 0th candidate's 0th content part.
|
|
155
|
-
|
|
156
|
-
Raises:
|
|
157
|
-
ValidationError: if the tool call doesn't match the tool's schema.
|
|
158
|
-
"""
|
|
159
|
-
tools = self.tools
|
|
160
|
-
if tools:
|
|
161
|
-
return tools[0]
|
|
162
|
-
return None
|
|
163
|
-
|
|
164
|
-
@classmethod
|
|
165
|
-
@transform_tool_outputs
|
|
166
|
-
def tool_message_params(
|
|
167
|
-
cls, tools_and_outputs: Sequence[tuple[VertexTool, str]]
|
|
168
|
-
) -> list[Content]:
|
|
169
|
-
"""Returns the tool message parameters for tool call results.
|
|
170
|
-
|
|
171
|
-
Args:
|
|
172
|
-
tools_and_outputs: The sequence of tools and their outputs from which the tool
|
|
173
|
-
message parameters should be constructed.
|
|
174
|
-
|
|
175
|
-
Returns:
|
|
176
|
-
The list of constructed `Content` from the tool responses.
|
|
177
|
-
"""
|
|
178
|
-
return [
|
|
179
|
-
Content(
|
|
180
|
-
role="user",
|
|
181
|
-
parts=[
|
|
182
|
-
Part.from_function_response(
|
|
183
|
-
name=tool._name(), response={"result": output}
|
|
184
|
-
)
|
|
185
|
-
for tool, output in tools_and_outputs
|
|
186
|
-
],
|
|
187
|
-
)
|
|
188
|
-
]
|
|
189
|
-
|
|
190
|
-
@property
|
|
191
|
-
def common_finish_reasons(self) -> list[FinishReason] | None:
|
|
192
|
-
return _convert_finish_reasons_to_common_finish_reasons(self.finish_reasons)
|
|
193
|
-
|
|
194
|
-
@property
|
|
195
|
-
def common_message_param(self) -> BaseMessageParam:
|
|
196
|
-
return VertexMessageParamConverter.from_provider([self.message_param])[0]
|
|
197
|
-
|
|
198
|
-
@property
|
|
199
|
-
def common_user_message_param(self) -> BaseMessageParam | None:
|
|
200
|
-
if not self.user_message_param:
|
|
201
|
-
return None
|
|
202
|
-
return VertexMessageParamConverter.from_provider([self.user_message_param])[0]
|
|
203
|
-
|
|
204
|
-
@property
|
|
205
|
-
def cost_metadata(self) -> CostMetadata:
|
|
206
|
-
return super().cost_metadata
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"""This module contains the `VertexCallResponseChunk` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md#handling-streamed-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from vertexai.generative_models import FinishReason, GenerationResponse
|
|
7
|
-
|
|
8
|
-
from ..base import BaseCallResponseChunk, types
|
|
9
|
-
from ..base.types import CostMetadata
|
|
10
|
-
from ._utils._convert_finish_reason_to_common_finish_reasons import (
|
|
11
|
-
_convert_finish_reasons_to_common_finish_reasons,
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class VertexCallResponseChunk(
|
|
16
|
-
BaseCallResponseChunk[GenerationResponse, FinishReason] # , Candidate.FinishReason]
|
|
17
|
-
):
|
|
18
|
-
"""A convenience wrapper around the Vertex AI streamed response chunks.
|
|
19
|
-
|
|
20
|
-
When calling the Vertex AI API using a function decorated with `vertex_call` and
|
|
21
|
-
`stream` set to `True`, the stream will contain `VertexCallResponseChunk` instances
|
|
22
|
-
with properties that allow for more convenient access to commonly used attributes.
|
|
23
|
-
|
|
24
|
-
Example:
|
|
25
|
-
|
|
26
|
-
```python
|
|
27
|
-
from mirascope.core import prompt_template
|
|
28
|
-
from mirascope.core.vertex import vertex_call
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@vertex_call("gemini-1.5-flash", stream=True)
|
|
32
|
-
def recommend_book(genre: str) -> str:
|
|
33
|
-
return f"Recommend a {genre} book"
|
|
34
|
-
|
|
35
|
-
stream = recommend_book("fantasy") # response is an `VertexStream`
|
|
36
|
-
for chunk, _ in stream:
|
|
37
|
-
print(chunk.content, end="", flush=True)
|
|
38
|
-
```
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
@property
|
|
42
|
-
def content(self) -> str:
|
|
43
|
-
"""Returns the chunk content for the 0th choice."""
|
|
44
|
-
return self.chunk.candidates[0].content.parts[0].text
|
|
45
|
-
|
|
46
|
-
@property
|
|
47
|
-
def finish_reasons(self) -> list[FinishReason]:
|
|
48
|
-
"""Returns the finish reasons of the response."""
|
|
49
|
-
return [candidate.finish_reason for candidate in self.chunk.candidates]
|
|
50
|
-
|
|
51
|
-
@property
|
|
52
|
-
def model(self) -> None:
|
|
53
|
-
"""Returns the model name.
|
|
54
|
-
|
|
55
|
-
vertex does not return model, so we return None
|
|
56
|
-
"""
|
|
57
|
-
return None
|
|
58
|
-
|
|
59
|
-
@property
|
|
60
|
-
def id(self) -> str | None:
|
|
61
|
-
"""Returns the id of the response.
|
|
62
|
-
|
|
63
|
-
vertex does not return an id
|
|
64
|
-
"""
|
|
65
|
-
return None
|
|
66
|
-
|
|
67
|
-
@property
|
|
68
|
-
def usage(self) -> None:
|
|
69
|
-
"""Returns the usage of the chat completion.
|
|
70
|
-
|
|
71
|
-
vertex does not have Usage, so we return None
|
|
72
|
-
"""
|
|
73
|
-
return None
|
|
74
|
-
|
|
75
|
-
@property
|
|
76
|
-
def input_tokens(self) -> None:
|
|
77
|
-
"""Returns the number of input tokens."""
|
|
78
|
-
return None
|
|
79
|
-
|
|
80
|
-
@property
|
|
81
|
-
def cached_tokens(self) -> None:
|
|
82
|
-
"""Returns the number of cached tokens."""
|
|
83
|
-
return None
|
|
84
|
-
|
|
85
|
-
@property
|
|
86
|
-
def output_tokens(self) -> None:
|
|
87
|
-
"""Returns the number of output tokens."""
|
|
88
|
-
return None
|
|
89
|
-
|
|
90
|
-
@property
|
|
91
|
-
def cost_metadata(self) -> CostMetadata:
|
|
92
|
-
"""Returns the cost metadata."""
|
|
93
|
-
return super().cost_metadata
|
|
94
|
-
|
|
95
|
-
@property
|
|
96
|
-
def common_finish_reasons(self) -> list[types.FinishReason] | None:
|
|
97
|
-
return _convert_finish_reasons_to_common_finish_reasons(
|
|
98
|
-
[finish_reason.name for finish_reason in self.finish_reasons]
|
|
99
|
-
)
|