mirascope 2.0.0a5__py3-none-any.whl → 2.0.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 +10 -1
- mirascope/_stubs.py +363 -0
- mirascope/api/__init__.py +8 -0
- mirascope/api/_generated/__init__.py +285 -2
- 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 +12 -2
- mirascope/api/_generated/api_keys/client.py +77 -0
- mirascope/api/_generated/api_keys/raw_client.py +422 -39
- mirascope/api/_generated/api_keys/types/__init__.py +7 -1
- mirascope/api/_generated/api_keys/types/api_keys_create_response.py +4 -12
- mirascope/api/_generated/api_keys/types/api_keys_get_response.py +4 -12
- 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 +4 -12
- mirascope/api/_generated/client.py +42 -0
- mirascope/api/_generated/core/client_wrapper.py +2 -14
- mirascope/api/_generated/core/datetime_utils.py +1 -3
- mirascope/api/_generated/core/file.py +2 -5
- mirascope/api/_generated/core/http_client.py +36 -112
- mirascope/api/_generated/core/jsonable_encoder.py +1 -3
- mirascope/api/_generated/core/pydantic_utilities.py +19 -74
- mirascope/api/_generated/core/query_encoder.py +1 -3
- mirascope/api/_generated/core/serialization.py +4 -10
- mirascope/api/_generated/docs/client.py +2 -6
- mirascope/api/_generated/docs/raw_client.py +51 -5
- mirascope/api/_generated/environment.py +3 -3
- mirascope/api/_generated/environments/__init__.py +6 -0
- mirascope/api/_generated/environments/client.py +117 -0
- mirascope/api/_generated/environments/raw_client.py +530 -51
- mirascope/api/_generated/environments/types/__init__.py +10 -0
- mirascope/api/_generated/environments/types/environments_create_response.py +1 -3
- 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 +1 -3
- mirascope/api/_generated/environments/types/environments_list_response_item.py +1 -3
- mirascope/api/_generated/environments/types/environments_update_response.py +1 -3
- mirascope/api/_generated/errors/__init__.py +8 -0
- mirascope/api/_generated/errors/bad_request_error.py +1 -2
- mirascope/api/_generated/errors/conflict_error.py +1 -2
- mirascope/api/_generated/errors/forbidden_error.py +1 -5
- mirascope/api/_generated/errors/internal_server_error.py +1 -6
- mirascope/api/_generated/errors/not_found_error.py +1 -5
- 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/client.py +2 -6
- mirascope/api/_generated/health/raw_client.py +51 -5
- mirascope/api/_generated/health/types/health_check_response.py +1 -3
- 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 +26 -0
- mirascope/api/_generated/organizations/client.py +465 -0
- mirascope/api/_generated/organizations/raw_client.py +1799 -108
- mirascope/api/_generated/organizations/types/__init__.py +48 -0
- mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +24 -0
- mirascope/api/_generated/organizations/types/organizations_create_response.py +4 -3
- mirascope/api/_generated/organizations/types/organizations_create_response_role.py +1 -3
- mirascope/api/_generated/organizations/types/organizations_get_response.py +4 -3
- mirascope/api/_generated/organizations/types/organizations_get_response_role.py +1 -3
- mirascope/api/_generated/organizations/types/organizations_list_response_item.py +4 -3
- mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +1 -3
- 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 +4 -3
- mirascope/api/_generated/organizations/types/organizations_update_response_role.py +1 -3
- 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 +2 -12
- mirascope/api/_generated/projects/client.py +17 -71
- mirascope/api/_generated/projects/raw_client.py +295 -51
- mirascope/api/_generated/projects/types/__init__.py +1 -6
- mirascope/api/_generated/projects/types/projects_create_response.py +3 -9
- mirascope/api/_generated/projects/types/projects_get_response.py +3 -9
- mirascope/api/_generated/projects/types/projects_list_response_item.py +3 -9
- mirascope/api/_generated/projects/types/projects_update_response.py +3 -9
- mirascope/api/_generated/reference.md +3619 -182
- 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 +42 -0
- mirascope/api/_generated/traces/client.py +941 -0
- mirascope/api/_generated/traces/raw_client.py +2177 -23
- mirascope/api/_generated/traces/types/__init__.py +60 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +4 -11
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +1 -3
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +8 -24
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +3 -9
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +3 -9
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +4 -8
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +8 -24
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +3 -9
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +1 -3
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +6 -18
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +3 -9
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +8 -24
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +1 -3
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +2 -6
- mirascope/api/_generated/traces/types/traces_create_response.py +2 -5
- mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +3 -9
- 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 +48 -0
- mirascope/api/_generated/types/already_exists_error.py +1 -3
- 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 +1 -3
- mirascope/api/_generated/types/date.py +3 -0
- mirascope/api/_generated/types/http_api_decode_error.py +1 -3
- 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 +1 -3
- mirascope/api/_generated/types/issue_tag.py +1 -8
- mirascope/api/_generated/types/not_found_error_body.py +1 -3
- mirascope/api/_generated/types/number_from_string.py +3 -0
- mirascope/api/_generated/types/permission_denied_error.py +1 -3
- mirascope/api/_generated/types/permission_denied_error_tag.py +1 -3
- 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_key.py +1 -3
- 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/settings.py +19 -1
- mirascope/llm/__init__.py +55 -8
- mirascope/llm/calls/__init__.py +2 -1
- mirascope/llm/calls/calls.py +3 -1
- mirascope/llm/calls/decorator.py +21 -7
- mirascope/llm/content/tool_call.py +6 -0
- mirascope/llm/content/tool_output.py +22 -5
- mirascope/llm/exceptions.py +284 -71
- mirascope/llm/formatting/__init__.py +19 -2
- mirascope/llm/formatting/format.py +219 -30
- mirascope/llm/formatting/output_parser.py +178 -0
- mirascope/llm/formatting/partial.py +80 -7
- mirascope/llm/formatting/primitives.py +192 -0
- mirascope/llm/formatting/types.py +21 -64
- mirascope/llm/mcp/__init__.py +2 -2
- mirascope/llm/mcp/mcp_client.py +130 -0
- mirascope/llm/messages/__init__.py +3 -0
- mirascope/llm/messages/_utils.py +34 -0
- mirascope/llm/models/__init__.py +5 -0
- mirascope/llm/models/models.py +137 -69
- mirascope/llm/{providers/base → models}/params.py +16 -37
- mirascope/llm/models/thinking_config.py +61 -0
- mirascope/llm/prompts/_utils.py +0 -32
- mirascope/llm/prompts/decorator.py +16 -5
- mirascope/llm/prompts/prompts.py +131 -68
- mirascope/llm/providers/__init__.py +18 -2
- mirascope/llm/providers/anthropic/__init__.py +3 -21
- mirascope/llm/providers/anthropic/_utils/__init__.py +2 -0
- mirascope/llm/providers/anthropic/_utils/beta_decode.py +22 -11
- mirascope/llm/providers/anthropic/_utils/beta_encode.py +75 -25
- mirascope/llm/providers/anthropic/_utils/decode.py +22 -11
- mirascope/llm/providers/anthropic/_utils/encode.py +82 -20
- mirascope/llm/providers/anthropic/_utils/errors.py +2 -2
- mirascope/llm/providers/anthropic/beta_provider.py +64 -18
- mirascope/llm/providers/anthropic/provider.py +91 -33
- mirascope/llm/providers/base/__init__.py +0 -2
- mirascope/llm/providers/base/_utils.py +55 -11
- mirascope/llm/providers/base/base_provider.py +116 -37
- mirascope/llm/providers/google/__init__.py +2 -17
- mirascope/llm/providers/google/_utils/__init__.py +2 -0
- mirascope/llm/providers/google/_utils/decode.py +37 -15
- mirascope/llm/providers/google/_utils/encode.py +127 -19
- mirascope/llm/providers/google/_utils/errors.py +3 -2
- mirascope/llm/providers/google/model_info.py +1 -0
- mirascope/llm/providers/google/provider.py +68 -19
- 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 +2 -17
- mirascope/llm/providers/mlx/_utils.py +8 -3
- mirascope/llm/providers/mlx/encoding/base.py +5 -2
- mirascope/llm/providers/mlx/encoding/transformers.py +5 -2
- mirascope/llm/providers/mlx/mlx.py +23 -6
- mirascope/llm/providers/mlx/provider.py +42 -13
- mirascope/llm/providers/ollama/__init__.py +1 -13
- mirascope/llm/providers/openai/_utils/errors.py +2 -2
- mirascope/llm/providers/openai/completions/__init__.py +2 -20
- mirascope/llm/providers/openai/completions/_utils/decode.py +14 -3
- mirascope/llm/providers/openai/completions/_utils/encode.py +35 -28
- mirascope/llm/providers/openai/completions/base_provider.py +40 -11
- mirascope/llm/providers/openai/provider.py +40 -10
- mirascope/llm/providers/openai/responses/__init__.py +1 -17
- mirascope/llm/providers/openai/responses/_utils/__init__.py +2 -0
- mirascope/llm/providers/openai/responses/_utils/decode.py +21 -8
- mirascope/llm/providers/openai/responses/_utils/encode.py +59 -19
- mirascope/llm/providers/openai/responses/provider.py +56 -18
- mirascope/llm/providers/provider_id.py +1 -0
- mirascope/llm/providers/provider_registry.py +96 -19
- mirascope/llm/providers/together/__init__.py +1 -13
- mirascope/llm/responses/__init__.py +6 -1
- mirascope/llm/responses/_utils.py +102 -12
- mirascope/llm/responses/base_response.py +5 -2
- mirascope/llm/responses/base_stream_response.py +139 -45
- mirascope/llm/responses/response.py +2 -1
- mirascope/llm/responses/root_response.py +89 -17
- mirascope/llm/responses/stream_response.py +6 -9
- mirascope/llm/tools/decorator.py +17 -8
- mirascope/llm/tools/tool_schema.py +43 -10
- mirascope/llm/tools/toolkit.py +35 -27
- mirascope/llm/tools/tools.py +123 -30
- mirascope/ops/__init__.py +64 -109
- mirascope/ops/_internal/configuration.py +82 -31
- mirascope/ops/_internal/exporters/exporters.py +64 -11
- 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 +1 -1
- mirascope/ops/_internal/instrumentation/llm/llm.py +116 -1243
- 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/protocols.py +83 -1
- mirascope/ops/_internal/traced_calls.py +4 -0
- mirascope/ops/_internal/traced_functions.py +141 -12
- mirascope/ops/_internal/tracing.py +78 -1
- mirascope/ops/_internal/utils.py +52 -4
- mirascope/ops/_internal/versioned_functions.py +54 -43
- {mirascope-2.0.0a5.dist-info → mirascope-2.0.1.dist-info}/METADATA +14 -13
- mirascope-2.0.1.dist-info/RECORD +423 -0
- {mirascope-2.0.0a5.dist-info → mirascope-2.0.1.dist-info}/licenses/LICENSE +1 -1
- mirascope/llm/formatting/_utils.py +0 -78
- mirascope/llm/mcp/client.py +0 -118
- mirascope/llm/providers/_missing_import_stubs.py +0 -49
- mirascope-2.0.0a5.dist-info/RECORD +0 -265
- {mirascope-2.0.0a5.dist-info → mirascope-2.0.1.dist-info}/WHEEL +0 -0
|
@@ -3,21 +3,7 @@
|
|
|
3
3
|
# nopycln: file
|
|
4
4
|
import datetime as dt
|
|
5
5
|
from collections import defaultdict
|
|
6
|
-
from typing import
|
|
7
|
-
Any,
|
|
8
|
-
Callable,
|
|
9
|
-
ClassVar,
|
|
10
|
-
Dict,
|
|
11
|
-
List,
|
|
12
|
-
Mapping,
|
|
13
|
-
Optional,
|
|
14
|
-
Set,
|
|
15
|
-
Tuple,
|
|
16
|
-
Type,
|
|
17
|
-
TypeVar,
|
|
18
|
-
Union,
|
|
19
|
-
cast,
|
|
20
|
-
)
|
|
6
|
+
from typing import Any, Callable, ClassVar, Dict, List, Mapping, Optional, Set, Tuple, Type, TypeVar, Union, cast
|
|
21
7
|
|
|
22
8
|
import pydantic
|
|
23
9
|
|
|
@@ -51,18 +37,14 @@ Model = TypeVar("Model", bound=pydantic.BaseModel)
|
|
|
51
37
|
|
|
52
38
|
|
|
53
39
|
def parse_obj_as(type_: Type[T], object_: Any) -> T:
|
|
54
|
-
dealiased_object = convert_and_respect_annotation_metadata(
|
|
55
|
-
object_=object_, annotation=type_, direction="read"
|
|
56
|
-
)
|
|
40
|
+
dealiased_object = convert_and_respect_annotation_metadata(object_=object_, annotation=type_, direction="read")
|
|
57
41
|
if IS_PYDANTIC_V2:
|
|
58
42
|
adapter = pydantic.TypeAdapter(type_) # type: ignore[attr-defined]
|
|
59
43
|
return adapter.validate_python(dealiased_object)
|
|
60
44
|
return pydantic.parse_obj_as(type_, dealiased_object)
|
|
61
45
|
|
|
62
46
|
|
|
63
|
-
def to_jsonable_with_fallback(
|
|
64
|
-
obj: Any, fallback_serializer: Callable[[Any], Any]
|
|
65
|
-
) -> Any:
|
|
47
|
+
def to_jsonable_with_fallback(obj: Any, fallback_serializer: Callable[[Any], Any]) -> Any:
|
|
66
48
|
if IS_PYDANTIC_V2:
|
|
67
49
|
from pydantic_core import to_jsonable_python
|
|
68
50
|
|
|
@@ -78,14 +60,9 @@ class UniversalBaseModel(pydantic.BaseModel):
|
|
|
78
60
|
)
|
|
79
61
|
|
|
80
62
|
@pydantic.model_serializer(mode="wrap", when_used="json") # type: ignore[attr-defined]
|
|
81
|
-
def serialize_model(
|
|
82
|
-
self, handler: pydantic.SerializerFunctionWrapHandler
|
|
83
|
-
) -> Any: # type: ignore[name-defined]
|
|
63
|
+
def serialize_model(self, handler: pydantic.SerializerFunctionWrapHandler) -> Any: # type: ignore[name-defined]
|
|
84
64
|
serialized = handler(self)
|
|
85
|
-
data = {
|
|
86
|
-
k: serialize_datetime(v) if isinstance(v, dt.datetime) else v
|
|
87
|
-
for k, v in serialized.items()
|
|
88
|
-
}
|
|
65
|
+
data = {k: serialize_datetime(v) if isinstance(v, dt.datetime) else v for k, v in serialized.items()}
|
|
89
66
|
return data
|
|
90
67
|
|
|
91
68
|
else:
|
|
@@ -95,21 +72,13 @@ class UniversalBaseModel(pydantic.BaseModel):
|
|
|
95
72
|
json_encoders = {dt.datetime: serialize_datetime}
|
|
96
73
|
|
|
97
74
|
@classmethod
|
|
98
|
-
def model_construct(
|
|
99
|
-
|
|
100
|
-
) -> "Model":
|
|
101
|
-
dealiased_object = convert_and_respect_annotation_metadata(
|
|
102
|
-
object_=values, annotation=cls, direction="read"
|
|
103
|
-
)
|
|
75
|
+
def model_construct(cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any) -> "Model":
|
|
76
|
+
dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read")
|
|
104
77
|
return cls.construct(_fields_set, **dealiased_object)
|
|
105
78
|
|
|
106
79
|
@classmethod
|
|
107
|
-
def construct(
|
|
108
|
-
|
|
109
|
-
) -> "Model":
|
|
110
|
-
dealiased_object = convert_and_respect_annotation_metadata(
|
|
111
|
-
object_=values, annotation=cls, direction="read"
|
|
112
|
-
)
|
|
80
|
+
def construct(cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any) -> "Model":
|
|
81
|
+
dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read")
|
|
113
82
|
if IS_PYDANTIC_V2:
|
|
114
83
|
return super().model_construct(_fields_set, **dealiased_object) # type: ignore[misc]
|
|
115
84
|
return super().construct(_fields_set, **dealiased_object)
|
|
@@ -163,9 +132,7 @@ class UniversalBaseModel(pydantic.BaseModel):
|
|
|
163
132
|
# If the default values are non-null act like they've been set
|
|
164
133
|
# This effectively allows exclude_unset to work like exclude_none where
|
|
165
134
|
# the latter passes through intentionally set none values.
|
|
166
|
-
if default is not None or (
|
|
167
|
-
"exclude_unset" in kwargs and not kwargs["exclude_unset"]
|
|
168
|
-
):
|
|
135
|
+
if default is not None or ("exclude_unset" in kwargs and not kwargs["exclude_unset"]):
|
|
169
136
|
_fields_set.add(name)
|
|
170
137
|
|
|
171
138
|
if default is not None:
|
|
@@ -178,35 +145,25 @@ class UniversalBaseModel(pydantic.BaseModel):
|
|
|
178
145
|
**kwargs,
|
|
179
146
|
}
|
|
180
147
|
|
|
181
|
-
dict_dump = super().dict(
|
|
182
|
-
**kwargs_with_defaults_exclude_unset_include_fields
|
|
183
|
-
)
|
|
148
|
+
dict_dump = super().dict(**kwargs_with_defaults_exclude_unset_include_fields)
|
|
184
149
|
|
|
185
|
-
return convert_and_respect_annotation_metadata(
|
|
186
|
-
object_=dict_dump, annotation=self.__class__, direction="write"
|
|
187
|
-
)
|
|
150
|
+
return convert_and_respect_annotation_metadata(object_=dict_dump, annotation=self.__class__, direction="write")
|
|
188
151
|
|
|
189
152
|
|
|
190
|
-
def _union_list_of_pydantic_dicts(
|
|
191
|
-
source: List[Any], destination: List[Any]
|
|
192
|
-
) -> List[Any]:
|
|
153
|
+
def _union_list_of_pydantic_dicts(source: List[Any], destination: List[Any]) -> List[Any]:
|
|
193
154
|
converted_list: List[Any] = []
|
|
194
155
|
for i, item in enumerate(source):
|
|
195
156
|
destination_value = destination[i]
|
|
196
157
|
if isinstance(item, dict):
|
|
197
158
|
converted_list.append(deep_union_pydantic_dicts(item, destination_value))
|
|
198
159
|
elif isinstance(item, list):
|
|
199
|
-
converted_list.append(
|
|
200
|
-
_union_list_of_pydantic_dicts(item, destination_value)
|
|
201
|
-
)
|
|
160
|
+
converted_list.append(_union_list_of_pydantic_dicts(item, destination_value))
|
|
202
161
|
else:
|
|
203
162
|
converted_list.append(item)
|
|
204
163
|
return converted_list
|
|
205
164
|
|
|
206
165
|
|
|
207
|
-
def deep_union_pydantic_dicts(
|
|
208
|
-
source: Dict[str, Any], destination: Dict[str, Any]
|
|
209
|
-
) -> Dict[str, Any]:
|
|
166
|
+
def deep_union_pydantic_dicts(source: Dict[str, Any], destination: Dict[str, Any]) -> Dict[str, Any]:
|
|
210
167
|
for key, value in source.items():
|
|
211
168
|
node = destination.setdefault(key, {})
|
|
212
169
|
if isinstance(value, dict):
|
|
@@ -233,9 +190,7 @@ else:
|
|
|
233
190
|
|
|
234
191
|
|
|
235
192
|
def encode_by_type(o: Any) -> Any:
|
|
236
|
-
encoders_by_class_tuples: Dict[Callable[[Any], Any], Tuple[Any, ...]] = defaultdict(
|
|
237
|
-
tuple
|
|
238
|
-
)
|
|
193
|
+
encoders_by_class_tuples: Dict[Callable[[Any], Any], Tuple[Any, ...]] = defaultdict(tuple)
|
|
239
194
|
for type_, encoder in encoders_by_type.items():
|
|
240
195
|
encoders_by_class_tuples[encoder] += (type_,)
|
|
241
196
|
|
|
@@ -262,26 +217,16 @@ def universal_root_validator(
|
|
|
262
217
|
) -> Callable[[AnyCallable], AnyCallable]:
|
|
263
218
|
def decorator(func: AnyCallable) -> AnyCallable:
|
|
264
219
|
if IS_PYDANTIC_V2:
|
|
265
|
-
return cast(
|
|
266
|
-
AnyCallable,
|
|
267
|
-
pydantic.model_validator(mode="before" if pre else "after")(func),
|
|
268
|
-
) # type: ignore[attr-defined]
|
|
220
|
+
return cast(AnyCallable, pydantic.model_validator(mode="before" if pre else "after")(func)) # type: ignore[attr-defined]
|
|
269
221
|
return cast(AnyCallable, pydantic.root_validator(pre=pre)(func)) # type: ignore[call-overload]
|
|
270
222
|
|
|
271
223
|
return decorator
|
|
272
224
|
|
|
273
225
|
|
|
274
|
-
def universal_field_validator(
|
|
275
|
-
field_name: str, pre: bool = False
|
|
276
|
-
) -> Callable[[AnyCallable], AnyCallable]:
|
|
226
|
+
def universal_field_validator(field_name: str, pre: bool = False) -> Callable[[AnyCallable], AnyCallable]:
|
|
277
227
|
def decorator(func: AnyCallable) -> AnyCallable:
|
|
278
228
|
if IS_PYDANTIC_V2:
|
|
279
|
-
return cast(
|
|
280
|
-
AnyCallable,
|
|
281
|
-
pydantic.field_validator(field_name, mode="before" if pre else "after")(
|
|
282
|
-
func
|
|
283
|
-
),
|
|
284
|
-
) # type: ignore[attr-defined]
|
|
229
|
+
return cast(AnyCallable, pydantic.field_validator(field_name, mode="before" if pre else "after")(func)) # type: ignore[attr-defined]
|
|
285
230
|
return cast(AnyCallable, pydantic.validator(field_name, pre=pre)(func))
|
|
286
231
|
|
|
287
232
|
return decorator
|
|
@@ -6,9 +6,7 @@ import pydantic
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
# Flattens dicts to be of the form {"key[subkey][subkey2]": value} where value is not a dict
|
|
9
|
-
def traverse_query_dict(
|
|
10
|
-
dict_flat: Dict[str, Any], key_prefix: Optional[str] = None
|
|
11
|
-
) -> List[Tuple[str, Any]]:
|
|
9
|
+
def traverse_query_dict(dict_flat: Dict[str, Any], key_prefix: Optional[str] = None) -> List[Tuple[str, Any]]:
|
|
12
10
|
result = []
|
|
13
11
|
for k, v in dict_flat.items():
|
|
14
12
|
key = f"{key_prefix}[{k}]" if key_prefix is not None else k
|
|
@@ -67,9 +67,7 @@ def convert_and_respect_annotation_metadata(
|
|
|
67
67
|
):
|
|
68
68
|
return _convert_mapping(object_, clean_type, direction)
|
|
69
69
|
# TypedDicts
|
|
70
|
-
if typing_extensions.is_typeddict(clean_type) and isinstance(
|
|
71
|
-
object_, typing.Mapping
|
|
72
|
-
):
|
|
70
|
+
if typing_extensions.is_typeddict(clean_type) and isinstance(object_, typing.Mapping):
|
|
73
71
|
return _convert_mapping(object_, clean_type, direction)
|
|
74
72
|
|
|
75
73
|
if (
|
|
@@ -163,9 +161,7 @@ def _convert_mapping(
|
|
|
163
161
|
) -> typing.Mapping[str, object]:
|
|
164
162
|
converted_object: typing.Dict[str, object] = {}
|
|
165
163
|
try:
|
|
166
|
-
annotations = typing_extensions.get_type_hints(
|
|
167
|
-
expected_type, include_extras=True
|
|
168
|
-
)
|
|
164
|
+
annotations = typing_extensions.get_type_hints(expected_type, include_extras=True)
|
|
169
165
|
except NameError:
|
|
170
166
|
# The TypedDict contains a circular reference, so
|
|
171
167
|
# we use the __annotations__ attribute directly.
|
|
@@ -189,10 +185,8 @@ def _convert_mapping(
|
|
|
189
185
|
object_=value, annotation=type_, direction=direction
|
|
190
186
|
)
|
|
191
187
|
else:
|
|
192
|
-
converted_object[
|
|
193
|
-
|
|
194
|
-
] = convert_and_respect_annotation_metadata(
|
|
195
|
-
object_=value, annotation=type_, direction=direction
|
|
188
|
+
converted_object[_alias_key(key, type_, direction, aliases_to_field_names)] = (
|
|
189
|
+
convert_and_respect_annotation_metadata(object_=value, annotation=type_, direction=direction)
|
|
196
190
|
)
|
|
197
191
|
return converted_object
|
|
198
192
|
|
|
@@ -22,9 +22,7 @@ class DocsClient:
|
|
|
22
22
|
"""
|
|
23
23
|
return self._raw_client
|
|
24
24
|
|
|
25
|
-
def openapi(
|
|
26
|
-
self, *, request_options: typing.Optional[RequestOptions] = None
|
|
27
|
-
) -> typing.Optional[typing.Any]:
|
|
25
|
+
def openapi(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Optional[typing.Any]:
|
|
28
26
|
"""
|
|
29
27
|
Parameters
|
|
30
28
|
----------
|
|
@@ -62,9 +60,7 @@ class AsyncDocsClient:
|
|
|
62
60
|
"""
|
|
63
61
|
return self._raw_client
|
|
64
62
|
|
|
65
|
-
async def openapi(
|
|
66
|
-
self, *, request_options: typing.Optional[RequestOptions] = None
|
|
67
|
-
) -> typing.Optional[typing.Any]:
|
|
63
|
+
async def openapi(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Optional[typing.Any]:
|
|
68
64
|
"""
|
|
69
65
|
Parameters
|
|
70
66
|
----------
|
|
@@ -9,7 +9,9 @@ from ..core.http_response import AsyncHttpResponse, HttpResponse
|
|
|
9
9
|
from ..core.pydantic_utilities import parse_obj_as
|
|
10
10
|
from ..core.request_options import RequestOptions
|
|
11
11
|
from ..errors.bad_request_error import BadRequestError
|
|
12
|
-
from ..
|
|
12
|
+
from ..errors.service_unavailable_error import ServiceUnavailableError
|
|
13
|
+
from ..errors.too_many_requests_error import TooManyRequestsError
|
|
14
|
+
from ..types.rate_limit_error import RateLimitError
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
class RawDocsClient:
|
|
@@ -51,9 +53,31 @@ class RawDocsClient:
|
|
|
51
53
|
raise BadRequestError(
|
|
52
54
|
headers=dict(_response.headers),
|
|
53
55
|
body=typing.cast(
|
|
54
|
-
|
|
56
|
+
typing.Optional[typing.Any],
|
|
55
57
|
parse_obj_as(
|
|
56
|
-
type_=
|
|
58
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
59
|
+
object_=_response.json(),
|
|
60
|
+
),
|
|
61
|
+
),
|
|
62
|
+
)
|
|
63
|
+
if _response.status_code == 429:
|
|
64
|
+
raise TooManyRequestsError(
|
|
65
|
+
headers=dict(_response.headers),
|
|
66
|
+
body=typing.cast(
|
|
67
|
+
RateLimitError,
|
|
68
|
+
parse_obj_as(
|
|
69
|
+
type_=RateLimitError, # type: ignore
|
|
70
|
+
object_=_response.json(),
|
|
71
|
+
),
|
|
72
|
+
),
|
|
73
|
+
)
|
|
74
|
+
if _response.status_code == 503:
|
|
75
|
+
raise ServiceUnavailableError(
|
|
76
|
+
headers=dict(_response.headers),
|
|
77
|
+
body=typing.cast(
|
|
78
|
+
typing.Optional[typing.Any],
|
|
79
|
+
parse_obj_as(
|
|
80
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
57
81
|
object_=_response.json(),
|
|
58
82
|
),
|
|
59
83
|
),
|
|
@@ -111,9 +135,31 @@ class AsyncRawDocsClient:
|
|
|
111
135
|
raise BadRequestError(
|
|
112
136
|
headers=dict(_response.headers),
|
|
113
137
|
body=typing.cast(
|
|
114
|
-
|
|
138
|
+
typing.Optional[typing.Any],
|
|
139
|
+
parse_obj_as(
|
|
140
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
141
|
+
object_=_response.json(),
|
|
142
|
+
),
|
|
143
|
+
),
|
|
144
|
+
)
|
|
145
|
+
if _response.status_code == 429:
|
|
146
|
+
raise TooManyRequestsError(
|
|
147
|
+
headers=dict(_response.headers),
|
|
148
|
+
body=typing.cast(
|
|
149
|
+
RateLimitError,
|
|
150
|
+
parse_obj_as(
|
|
151
|
+
type_=RateLimitError, # type: ignore
|
|
152
|
+
object_=_response.json(),
|
|
153
|
+
),
|
|
154
|
+
),
|
|
155
|
+
)
|
|
156
|
+
if _response.status_code == 503:
|
|
157
|
+
raise ServiceUnavailableError(
|
|
158
|
+
headers=dict(_response.headers),
|
|
159
|
+
body=typing.cast(
|
|
160
|
+
typing.Optional[typing.Any],
|
|
115
161
|
parse_obj_as(
|
|
116
|
-
type_=
|
|
162
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
117
163
|
object_=_response.json(),
|
|
118
164
|
),
|
|
119
165
|
),
|
|
@@ -4,6 +4,6 @@ import enum
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class MirascopeEnvironment(enum.Enum):
|
|
7
|
-
PRODUCTION = "https://
|
|
8
|
-
STAGING = "https://staging.mirascope.com/api/
|
|
9
|
-
LOCAL = "http://localhost:3000/api/
|
|
7
|
+
PRODUCTION = "https://mirascope.com/api/v2"
|
|
8
|
+
STAGING = "https://staging.mirascope.com/api/v2"
|
|
9
|
+
LOCAL = "http://localhost:3000/api/v2"
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
from .types import (
|
|
6
6
|
EnvironmentsCreateResponse,
|
|
7
|
+
EnvironmentsGetAnalyticsResponse,
|
|
8
|
+
EnvironmentsGetAnalyticsResponseTopFunctionsItem,
|
|
9
|
+
EnvironmentsGetAnalyticsResponseTopModelsItem,
|
|
7
10
|
EnvironmentsGetResponse,
|
|
8
11
|
EnvironmentsListResponseItem,
|
|
9
12
|
EnvironmentsUpdateResponse,
|
|
@@ -11,6 +14,9 @@ from .types import (
|
|
|
11
14
|
|
|
12
15
|
__all__ = [
|
|
13
16
|
"EnvironmentsCreateResponse",
|
|
17
|
+
"EnvironmentsGetAnalyticsResponse",
|
|
18
|
+
"EnvironmentsGetAnalyticsResponseTopFunctionsItem",
|
|
19
|
+
"EnvironmentsGetAnalyticsResponseTopModelsItem",
|
|
14
20
|
"EnvironmentsGetResponse",
|
|
15
21
|
"EnvironmentsListResponseItem",
|
|
16
22
|
"EnvironmentsUpdateResponse",
|
|
@@ -6,6 +6,7 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
|
6
6
|
from ..core.request_options import RequestOptions
|
|
7
7
|
from .raw_client import AsyncRawEnvironmentsClient, RawEnvironmentsClient
|
|
8
8
|
from .types.environments_create_response import EnvironmentsCreateResponse
|
|
9
|
+
from .types.environments_get_analytics_response import EnvironmentsGetAnalyticsResponse
|
|
9
10
|
from .types.environments_get_response import EnvironmentsGetResponse
|
|
10
11
|
from .types.environments_list_response_item import EnvironmentsListResponseItem
|
|
11
12
|
from .types.environments_update_response import EnvironmentsUpdateResponse
|
|
@@ -252,6 +253,60 @@ class EnvironmentsClient:
|
|
|
252
253
|
)
|
|
253
254
|
return _response.data
|
|
254
255
|
|
|
256
|
+
def getanalytics(
|
|
257
|
+
self,
|
|
258
|
+
organization_id: str,
|
|
259
|
+
project_id: str,
|
|
260
|
+
environment_id: str,
|
|
261
|
+
*,
|
|
262
|
+
start_time: str,
|
|
263
|
+
end_time: str,
|
|
264
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
265
|
+
) -> EnvironmentsGetAnalyticsResponse:
|
|
266
|
+
"""
|
|
267
|
+
Parameters
|
|
268
|
+
----------
|
|
269
|
+
organization_id : str
|
|
270
|
+
|
|
271
|
+
project_id : str
|
|
272
|
+
|
|
273
|
+
environment_id : str
|
|
274
|
+
|
|
275
|
+
start_time : str
|
|
276
|
+
|
|
277
|
+
end_time : str
|
|
278
|
+
|
|
279
|
+
request_options : typing.Optional[RequestOptions]
|
|
280
|
+
Request-specific configuration.
|
|
281
|
+
|
|
282
|
+
Returns
|
|
283
|
+
-------
|
|
284
|
+
EnvironmentsGetAnalyticsResponse
|
|
285
|
+
Success
|
|
286
|
+
|
|
287
|
+
Examples
|
|
288
|
+
--------
|
|
289
|
+
from mirascope.api._generated import Mirascope
|
|
290
|
+
|
|
291
|
+
client = Mirascope()
|
|
292
|
+
client.environments.getanalytics(
|
|
293
|
+
organization_id="organizationId",
|
|
294
|
+
project_id="projectId",
|
|
295
|
+
environment_id="environmentId",
|
|
296
|
+
start_time="startTime",
|
|
297
|
+
end_time="endTime",
|
|
298
|
+
)
|
|
299
|
+
"""
|
|
300
|
+
_response = self._raw_client.getanalytics(
|
|
301
|
+
organization_id,
|
|
302
|
+
project_id,
|
|
303
|
+
environment_id,
|
|
304
|
+
start_time=start_time,
|
|
305
|
+
end_time=end_time,
|
|
306
|
+
request_options=request_options,
|
|
307
|
+
)
|
|
308
|
+
return _response.data
|
|
309
|
+
|
|
255
310
|
|
|
256
311
|
class AsyncEnvironmentsClient:
|
|
257
312
|
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
@@ -530,3 +585,65 @@ class AsyncEnvironmentsClient:
|
|
|
530
585
|
organization_id, project_id, environment_id, request_options=request_options
|
|
531
586
|
)
|
|
532
587
|
return _response.data
|
|
588
|
+
|
|
589
|
+
async def getanalytics(
|
|
590
|
+
self,
|
|
591
|
+
organization_id: str,
|
|
592
|
+
project_id: str,
|
|
593
|
+
environment_id: str,
|
|
594
|
+
*,
|
|
595
|
+
start_time: str,
|
|
596
|
+
end_time: str,
|
|
597
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
598
|
+
) -> EnvironmentsGetAnalyticsResponse:
|
|
599
|
+
"""
|
|
600
|
+
Parameters
|
|
601
|
+
----------
|
|
602
|
+
organization_id : str
|
|
603
|
+
|
|
604
|
+
project_id : str
|
|
605
|
+
|
|
606
|
+
environment_id : str
|
|
607
|
+
|
|
608
|
+
start_time : str
|
|
609
|
+
|
|
610
|
+
end_time : str
|
|
611
|
+
|
|
612
|
+
request_options : typing.Optional[RequestOptions]
|
|
613
|
+
Request-specific configuration.
|
|
614
|
+
|
|
615
|
+
Returns
|
|
616
|
+
-------
|
|
617
|
+
EnvironmentsGetAnalyticsResponse
|
|
618
|
+
Success
|
|
619
|
+
|
|
620
|
+
Examples
|
|
621
|
+
--------
|
|
622
|
+
import asyncio
|
|
623
|
+
|
|
624
|
+
from mirascope.api._generated import AsyncMirascope
|
|
625
|
+
|
|
626
|
+
client = AsyncMirascope()
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
async def main() -> None:
|
|
630
|
+
await client.environments.getanalytics(
|
|
631
|
+
organization_id="organizationId",
|
|
632
|
+
project_id="projectId",
|
|
633
|
+
environment_id="environmentId",
|
|
634
|
+
start_time="startTime",
|
|
635
|
+
end_time="endTime",
|
|
636
|
+
)
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
asyncio.run(main())
|
|
640
|
+
"""
|
|
641
|
+
_response = await self._raw_client.getanalytics(
|
|
642
|
+
organization_id,
|
|
643
|
+
project_id,
|
|
644
|
+
environment_id,
|
|
645
|
+
start_time=start_time,
|
|
646
|
+
end_time=end_time,
|
|
647
|
+
request_options=request_options,
|
|
648
|
+
)
|
|
649
|
+
return _response.data
|