mirascope 2.0.0__py3-none-any.whl → 2.0.0a0__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 +2 -11
- mirascope/graphs/__init__.py +22 -0
- mirascope/graphs/finite_state_machine.py +625 -0
- mirascope/llm/__init__.py +16 -101
- mirascope/llm/agents/__init__.py +15 -0
- mirascope/llm/agents/agent.py +97 -0
- mirascope/llm/agents/agent_template.py +45 -0
- mirascope/llm/agents/decorator.py +176 -0
- mirascope/llm/calls/__init__.py +1 -2
- mirascope/llm/calls/base_call.py +33 -0
- mirascope/llm/calls/calls.py +58 -84
- mirascope/llm/calls/decorator.py +120 -140
- mirascope/llm/clients/__init__.py +34 -0
- mirascope/llm/clients/anthropic/__init__.py +11 -0
- mirascope/llm/{providers/openai/completions → clients/anthropic}/_utils/__init__.py +0 -2
- mirascope/llm/{providers → clients}/anthropic/_utils/decode.py +22 -66
- mirascope/llm/clients/anthropic/_utils/encode.py +243 -0
- mirascope/llm/clients/anthropic/clients.py +819 -0
- mirascope/llm/clients/anthropic/model_ids.py +8 -0
- mirascope/llm/{providers → clients}/base/__init__.py +5 -4
- mirascope/llm/{providers → clients}/base/_utils.py +17 -78
- mirascope/llm/{providers/base/base_provider.py → clients/base/client.py} +145 -468
- mirascope/llm/{models → clients/base}/params.py +37 -16
- mirascope/llm/clients/google/__init__.py +6 -0
- mirascope/llm/{providers/openai/responses → clients/google}/_utils/__init__.py +0 -2
- mirascope/llm/{providers → clients}/google/_utils/decode.py +22 -98
- mirascope/llm/{providers → clients}/google/_utils/encode.py +46 -168
- mirascope/llm/clients/google/clients.py +853 -0
- mirascope/llm/clients/google/model_ids.py +15 -0
- mirascope/llm/clients/openai/__init__.py +25 -0
- mirascope/llm/clients/openai/completions/__init__.py +9 -0
- mirascope/llm/{providers/google → clients/openai/completions}/_utils/__init__.py +0 -4
- mirascope/llm/{providers → clients}/openai/completions/_utils/decode.py +9 -74
- mirascope/llm/{providers → clients}/openai/completions/_utils/encode.py +52 -70
- mirascope/llm/clients/openai/completions/_utils/model_features.py +81 -0
- mirascope/llm/clients/openai/completions/clients.py +833 -0
- mirascope/llm/clients/openai/completions/model_ids.py +8 -0
- mirascope/llm/clients/openai/responses/__init__.py +9 -0
- mirascope/llm/clients/openai/responses/_utils/__init__.py +13 -0
- mirascope/llm/{providers → clients}/openai/responses/_utils/decode.py +14 -80
- mirascope/llm/{providers → clients}/openai/responses/_utils/encode.py +41 -92
- mirascope/llm/clients/openai/responses/_utils/model_features.py +87 -0
- mirascope/llm/clients/openai/responses/clients.py +832 -0
- mirascope/llm/clients/openai/responses/model_ids.py +8 -0
- mirascope/llm/clients/openai/shared/__init__.py +7 -0
- mirascope/llm/clients/openai/shared/_utils.py +55 -0
- mirascope/llm/clients/providers.py +175 -0
- mirascope/llm/content/__init__.py +2 -3
- mirascope/llm/content/tool_call.py +0 -6
- mirascope/llm/content/tool_output.py +5 -22
- mirascope/llm/context/_utils.py +6 -19
- mirascope/llm/exceptions.py +43 -298
- mirascope/llm/formatting/__init__.py +2 -19
- mirascope/llm/formatting/_utils.py +74 -0
- mirascope/llm/formatting/format.py +30 -219
- mirascope/llm/formatting/from_call_args.py +2 -2
- mirascope/llm/formatting/partial.py +7 -80
- mirascope/llm/formatting/types.py +64 -21
- mirascope/llm/mcp/__init__.py +2 -2
- mirascope/llm/mcp/client.py +118 -0
- mirascope/llm/messages/__init__.py +0 -3
- mirascope/llm/messages/message.py +5 -13
- mirascope/llm/models/__init__.py +2 -7
- mirascope/llm/models/models.py +139 -315
- mirascope/llm/prompts/__init__.py +12 -13
- mirascope/llm/prompts/_utils.py +43 -14
- mirascope/llm/prompts/decorator.py +204 -144
- mirascope/llm/prompts/protocols.py +59 -25
- mirascope/llm/responses/__init__.py +1 -9
- mirascope/llm/responses/_utils.py +12 -102
- mirascope/llm/responses/base_response.py +6 -18
- mirascope/llm/responses/base_stream_response.py +50 -173
- mirascope/llm/responses/finish_reason.py +0 -1
- mirascope/llm/responses/response.py +13 -34
- mirascope/llm/responses/root_response.py +29 -100
- mirascope/llm/responses/stream_response.py +31 -40
- mirascope/llm/tools/__init__.py +2 -9
- mirascope/llm/tools/_utils.py +3 -12
- mirascope/llm/tools/decorator.py +16 -25
- mirascope/llm/tools/protocols.py +4 -4
- mirascope/llm/tools/tool_schema.py +19 -87
- mirascope/llm/tools/toolkit.py +27 -35
- mirascope/llm/tools/tools.py +41 -135
- {mirascope-2.0.0.dist-info → mirascope-2.0.0a0.dist-info}/METADATA +9 -95
- mirascope-2.0.0a0.dist-info/RECORD +101 -0
- {mirascope-2.0.0.dist-info → mirascope-2.0.0a0.dist-info}/WHEEL +1 -1
- {mirascope-2.0.0.dist-info → mirascope-2.0.0a0.dist-info}/licenses/LICENSE +1 -1
- mirascope/_stubs.py +0 -363
- mirascope/api/__init__.py +0 -14
- mirascope/api/_generated/README.md +0 -207
- mirascope/api/_generated/__init__.py +0 -440
- mirascope/api/_generated/annotations/__init__.py +0 -33
- mirascope/api/_generated/annotations/client.py +0 -506
- mirascope/api/_generated/annotations/raw_client.py +0 -1414
- mirascope/api/_generated/annotations/types/__init__.py +0 -31
- mirascope/api/_generated/annotations/types/annotations_create_request_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_create_response.py +0 -48
- mirascope/api/_generated/annotations/types/annotations_create_response_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_get_response.py +0 -48
- mirascope/api/_generated/annotations/types/annotations_get_response_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_list_request_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_list_response.py +0 -21
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +0 -50
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_update_request_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_update_response.py +0 -48
- mirascope/api/_generated/annotations/types/annotations_update_response_label.py +0 -5
- mirascope/api/_generated/api_keys/__init__.py +0 -17
- mirascope/api/_generated/api_keys/client.py +0 -530
- mirascope/api/_generated/api_keys/raw_client.py +0 -1236
- mirascope/api/_generated/api_keys/types/__init__.py +0 -15
- mirascope/api/_generated/api_keys/types/api_keys_create_response.py +0 -28
- mirascope/api/_generated/api_keys/types/api_keys_get_response.py +0 -27
- mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +0 -40
- mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +0 -27
- mirascope/api/_generated/client.py +0 -211
- mirascope/api/_generated/core/__init__.py +0 -52
- mirascope/api/_generated/core/api_error.py +0 -23
- mirascope/api/_generated/core/client_wrapper.py +0 -46
- mirascope/api/_generated/core/datetime_utils.py +0 -28
- mirascope/api/_generated/core/file.py +0 -67
- mirascope/api/_generated/core/force_multipart.py +0 -16
- mirascope/api/_generated/core/http_client.py +0 -543
- mirascope/api/_generated/core/http_response.py +0 -55
- mirascope/api/_generated/core/jsonable_encoder.py +0 -100
- mirascope/api/_generated/core/pydantic_utilities.py +0 -255
- mirascope/api/_generated/core/query_encoder.py +0 -58
- mirascope/api/_generated/core/remove_none_from_dict.py +0 -11
- mirascope/api/_generated/core/request_options.py +0 -35
- mirascope/api/_generated/core/serialization.py +0 -276
- mirascope/api/_generated/docs/__init__.py +0 -4
- mirascope/api/_generated/docs/client.py +0 -91
- mirascope/api/_generated/docs/raw_client.py +0 -178
- mirascope/api/_generated/environment.py +0 -9
- mirascope/api/_generated/environments/__init__.py +0 -23
- mirascope/api/_generated/environments/client.py +0 -649
- mirascope/api/_generated/environments/raw_client.py +0 -1567
- mirascope/api/_generated/environments/types/__init__.py +0 -25
- mirascope/api/_generated/environments/types/environments_create_response.py +0 -24
- mirascope/api/_generated/environments/types/environments_get_analytics_response.py +0 -60
- mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +0 -24
- mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +0 -22
- mirascope/api/_generated/environments/types/environments_get_response.py +0 -24
- mirascope/api/_generated/environments/types/environments_list_response_item.py +0 -24
- mirascope/api/_generated/environments/types/environments_update_response.py +0 -24
- mirascope/api/_generated/errors/__init__.py +0 -25
- mirascope/api/_generated/errors/bad_request_error.py +0 -14
- mirascope/api/_generated/errors/conflict_error.py +0 -14
- mirascope/api/_generated/errors/forbidden_error.py +0 -11
- mirascope/api/_generated/errors/internal_server_error.py +0 -10
- mirascope/api/_generated/errors/not_found_error.py +0 -11
- mirascope/api/_generated/errors/payment_required_error.py +0 -15
- mirascope/api/_generated/errors/service_unavailable_error.py +0 -14
- mirascope/api/_generated/errors/too_many_requests_error.py +0 -15
- mirascope/api/_generated/errors/unauthorized_error.py +0 -11
- mirascope/api/_generated/functions/__init__.py +0 -39
- mirascope/api/_generated/functions/client.py +0 -647
- mirascope/api/_generated/functions/raw_client.py +0 -1890
- mirascope/api/_generated/functions/types/__init__.py +0 -53
- mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +0 -20
- mirascope/api/_generated/functions/types/functions_create_response.py +0 -37
- mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +0 -20
- mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +0 -39
- mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +0 -20
- mirascope/api/_generated/functions/types/functions_get_by_env_response.py +0 -53
- mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +0 -22
- mirascope/api/_generated/functions/types/functions_get_response.py +0 -37
- mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +0 -20
- mirascope/api/_generated/functions/types/functions_list_by_env_response.py +0 -25
- mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +0 -56
- mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +0 -22
- mirascope/api/_generated/functions/types/functions_list_response.py +0 -21
- mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +0 -41
- mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +0 -20
- mirascope/api/_generated/health/__init__.py +0 -7
- mirascope/api/_generated/health/client.py +0 -92
- mirascope/api/_generated/health/raw_client.py +0 -175
- mirascope/api/_generated/health/types/__init__.py +0 -8
- mirascope/api/_generated/health/types/health_check_response.py +0 -22
- mirascope/api/_generated/health/types/health_check_response_status.py +0 -5
- mirascope/api/_generated/organization_invitations/__init__.py +0 -33
- mirascope/api/_generated/organization_invitations/client.py +0 -546
- mirascope/api/_generated/organization_invitations/raw_client.py +0 -1519
- mirascope/api/_generated/organization_invitations/types/__init__.py +0 -53
- mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +0 -34
- mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +0 -48
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +0 -48
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +0 -48
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +0 -7
- mirascope/api/_generated/organization_memberships/__init__.py +0 -19
- mirascope/api/_generated/organization_memberships/client.py +0 -302
- mirascope/api/_generated/organization_memberships/raw_client.py +0 -736
- mirascope/api/_generated/organization_memberships/types/__init__.py +0 -27
- mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +0 -33
- mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +0 -7
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +0 -7
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +0 -31
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +0 -7
- mirascope/api/_generated/organizations/__init__.py +0 -51
- mirascope/api/_generated/organizations/client.py +0 -869
- mirascope/api/_generated/organizations/raw_client.py +0 -2593
- mirascope/api/_generated/organizations/types/__init__.py +0 -71
- mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +0 -24
- mirascope/api/_generated/organizations/types/organizations_create_response.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_create_response_role.py +0 -5
- mirascope/api/_generated/organizations/types/organizations_get_response.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_get_response_role.py +0 -5
- mirascope/api/_generated/organizations/types/organizations_list_response_item.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +0 -5
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +0 -47
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +0 -33
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +0 -24
- mirascope/api/_generated/organizations/types/organizations_subscription_response.py +0 -53
- mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +0 -34
- mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_update_response.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_update_response_role.py +0 -5
- mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +0 -35
- mirascope/api/_generated/project_memberships/__init__.py +0 -25
- mirascope/api/_generated/project_memberships/client.py +0 -437
- mirascope/api/_generated/project_memberships/raw_client.py +0 -1039
- mirascope/api/_generated/project_memberships/types/__init__.py +0 -29
- mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +0 -7
- mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +0 -35
- mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +0 -7
- mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +0 -33
- mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +0 -7
- mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +0 -7
- mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +0 -35
- mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +0 -7
- mirascope/api/_generated/projects/__init__.py +0 -7
- mirascope/api/_generated/projects/client.py +0 -428
- mirascope/api/_generated/projects/raw_client.py +0 -1302
- mirascope/api/_generated/projects/types/__init__.py +0 -10
- mirascope/api/_generated/projects/types/projects_create_response.py +0 -25
- mirascope/api/_generated/projects/types/projects_get_response.py +0 -25
- mirascope/api/_generated/projects/types/projects_list_response_item.py +0 -25
- mirascope/api/_generated/projects/types/projects_update_response.py +0 -25
- mirascope/api/_generated/reference.md +0 -4915
- mirascope/api/_generated/tags/__init__.py +0 -19
- mirascope/api/_generated/tags/client.py +0 -504
- mirascope/api/_generated/tags/raw_client.py +0 -1288
- mirascope/api/_generated/tags/types/__init__.py +0 -17
- mirascope/api/_generated/tags/types/tags_create_response.py +0 -41
- mirascope/api/_generated/tags/types/tags_get_response.py +0 -41
- mirascope/api/_generated/tags/types/tags_list_response.py +0 -23
- mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +0 -41
- mirascope/api/_generated/tags/types/tags_update_response.py +0 -41
- mirascope/api/_generated/token_cost/__init__.py +0 -7
- mirascope/api/_generated/token_cost/client.py +0 -160
- mirascope/api/_generated/token_cost/raw_client.py +0 -264
- mirascope/api/_generated/token_cost/types/__init__.py +0 -8
- mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +0 -54
- mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +0 -52
- mirascope/api/_generated/traces/__init__.py +0 -97
- mirascope/api/_generated/traces/client.py +0 -1103
- mirascope/api/_generated/traces/raw_client.py +0 -2322
- mirascope/api/_generated/traces/types/__init__.py +0 -155
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +0 -29
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +0 -27
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +0 -23
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +0 -38
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +0 -19
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +0 -22
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +0 -20
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +0 -29
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +0 -31
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +0 -23
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +0 -38
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +0 -19
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +0 -22
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +0 -22
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +0 -48
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +0 -23
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +0 -38
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +0 -19
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +0 -24
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +0 -22
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +0 -20
- mirascope/api/_generated/traces/types/traces_create_response.py +0 -24
- mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +0 -22
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +0 -60
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +0 -24
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +0 -22
- mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +0 -33
- mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +0 -88
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +0 -33
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +0 -88
- mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +0 -25
- mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +0 -44
- mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +0 -26
- mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_by_env_response.py +0 -26
- mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +0 -50
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +0 -26
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +0 -5
- mirascope/api/_generated/traces/types/traces_search_response.py +0 -26
- mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +0 -50
- mirascope/api/_generated/types/__init__.py +0 -85
- mirascope/api/_generated/types/already_exists_error.py +0 -22
- mirascope/api/_generated/types/already_exists_error_tag.py +0 -5
- mirascope/api/_generated/types/bad_request_error_body.py +0 -50
- mirascope/api/_generated/types/click_house_error.py +0 -22
- mirascope/api/_generated/types/database_error.py +0 -22
- mirascope/api/_generated/types/database_error_tag.py +0 -5
- mirascope/api/_generated/types/date.py +0 -3
- mirascope/api/_generated/types/http_api_decode_error.py +0 -27
- mirascope/api/_generated/types/http_api_decode_error_tag.py +0 -5
- mirascope/api/_generated/types/immutable_resource_error.py +0 -22
- mirascope/api/_generated/types/internal_server_error_body.py +0 -49
- mirascope/api/_generated/types/issue.py +0 -38
- mirascope/api/_generated/types/issue_tag.py +0 -10
- mirascope/api/_generated/types/not_found_error_body.py +0 -22
- mirascope/api/_generated/types/not_found_error_tag.py +0 -5
- mirascope/api/_generated/types/number_from_string.py +0 -3
- mirascope/api/_generated/types/permission_denied_error.py +0 -22
- mirascope/api/_generated/types/permission_denied_error_tag.py +0 -5
- mirascope/api/_generated/types/plan_limit_exceeded_error.py +0 -32
- mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +0 -7
- mirascope/api/_generated/types/pricing_unavailable_error.py +0 -23
- mirascope/api/_generated/types/property_key.py +0 -7
- mirascope/api/_generated/types/property_key_key.py +0 -25
- mirascope/api/_generated/types/property_key_key_tag.py +0 -5
- mirascope/api/_generated/types/rate_limit_error.py +0 -31
- mirascope/api/_generated/types/rate_limit_error_tag.py +0 -5
- mirascope/api/_generated/types/service_unavailable_error_body.py +0 -24
- mirascope/api/_generated/types/service_unavailable_error_tag.py +0 -7
- mirascope/api/_generated/types/stripe_error.py +0 -20
- mirascope/api/_generated/types/subscription_past_due_error.py +0 -31
- mirascope/api/_generated/types/subscription_past_due_error_tag.py +0 -7
- mirascope/api/_generated/types/unauthorized_error_body.py +0 -21
- mirascope/api/_generated/types/unauthorized_error_tag.py +0 -5
- mirascope/api/client.py +0 -255
- mirascope/api/settings.py +0 -99
- mirascope/llm/formatting/output_parser.py +0 -178
- mirascope/llm/formatting/primitives.py +0 -192
- mirascope/llm/mcp/mcp_client.py +0 -130
- mirascope/llm/messages/_utils.py +0 -34
- mirascope/llm/models/thinking_config.py +0 -61
- mirascope/llm/prompts/prompts.py +0 -487
- mirascope/llm/providers/__init__.py +0 -62
- mirascope/llm/providers/anthropic/__init__.py +0 -11
- mirascope/llm/providers/anthropic/_utils/__init__.py +0 -27
- mirascope/llm/providers/anthropic/_utils/beta_decode.py +0 -282
- mirascope/llm/providers/anthropic/_utils/beta_encode.py +0 -266
- mirascope/llm/providers/anthropic/_utils/encode.py +0 -418
- mirascope/llm/providers/anthropic/_utils/errors.py +0 -46
- mirascope/llm/providers/anthropic/beta_provider.py +0 -374
- mirascope/llm/providers/anthropic/model_id.py +0 -23
- mirascope/llm/providers/anthropic/model_info.py +0 -87
- mirascope/llm/providers/anthropic/provider.py +0 -479
- mirascope/llm/providers/google/__init__.py +0 -6
- mirascope/llm/providers/google/_utils/errors.py +0 -50
- mirascope/llm/providers/google/model_id.py +0 -22
- mirascope/llm/providers/google/model_info.py +0 -63
- mirascope/llm/providers/google/provider.py +0 -492
- mirascope/llm/providers/mirascope/__init__.py +0 -5
- mirascope/llm/providers/mirascope/_utils.py +0 -73
- mirascope/llm/providers/mirascope/provider.py +0 -349
- mirascope/llm/providers/mlx/__init__.py +0 -9
- mirascope/llm/providers/mlx/_utils.py +0 -141
- mirascope/llm/providers/mlx/encoding/__init__.py +0 -8
- mirascope/llm/providers/mlx/encoding/base.py +0 -72
- mirascope/llm/providers/mlx/encoding/transformers.py +0 -150
- mirascope/llm/providers/mlx/mlx.py +0 -254
- mirascope/llm/providers/mlx/model_id.py +0 -17
- mirascope/llm/providers/mlx/provider.py +0 -452
- mirascope/llm/providers/model_id.py +0 -16
- mirascope/llm/providers/ollama/__init__.py +0 -7
- mirascope/llm/providers/ollama/provider.py +0 -71
- mirascope/llm/providers/openai/__init__.py +0 -15
- mirascope/llm/providers/openai/_utils/__init__.py +0 -5
- mirascope/llm/providers/openai/_utils/errors.py +0 -46
- mirascope/llm/providers/openai/completions/__init__.py +0 -7
- mirascope/llm/providers/openai/completions/base_provider.py +0 -542
- mirascope/llm/providers/openai/completions/provider.py +0 -22
- mirascope/llm/providers/openai/model_id.py +0 -31
- mirascope/llm/providers/openai/model_info.py +0 -303
- mirascope/llm/providers/openai/provider.py +0 -441
- mirascope/llm/providers/openai/responses/__init__.py +0 -5
- mirascope/llm/providers/openai/responses/provider.py +0 -513
- mirascope/llm/providers/provider_id.py +0 -24
- mirascope/llm/providers/provider_registry.py +0 -299
- mirascope/llm/providers/together/__init__.py +0 -7
- mirascope/llm/providers/together/provider.py +0 -40
- mirascope/llm/responses/usage.py +0 -95
- mirascope/ops/__init__.py +0 -111
- mirascope/ops/_internal/__init__.py +0 -5
- mirascope/ops/_internal/closure.py +0 -1169
- mirascope/ops/_internal/configuration.py +0 -177
- mirascope/ops/_internal/context.py +0 -76
- mirascope/ops/_internal/exporters/__init__.py +0 -26
- mirascope/ops/_internal/exporters/exporters.py +0 -395
- mirascope/ops/_internal/exporters/processors.py +0 -104
- mirascope/ops/_internal/exporters/types.py +0 -165
- mirascope/ops/_internal/exporters/utils.py +0 -29
- mirascope/ops/_internal/instrumentation/__init__.py +0 -8
- mirascope/ops/_internal/instrumentation/llm/__init__.py +0 -8
- mirascope/ops/_internal/instrumentation/llm/common.py +0 -530
- mirascope/ops/_internal/instrumentation/llm/cost.py +0 -190
- mirascope/ops/_internal/instrumentation/llm/encode.py +0 -238
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +0 -38
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +0 -31
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +0 -38
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +0 -18
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +0 -100
- mirascope/ops/_internal/instrumentation/llm/llm.py +0 -161
- mirascope/ops/_internal/instrumentation/llm/model.py +0 -1798
- mirascope/ops/_internal/instrumentation/llm/response.py +0 -521
- mirascope/ops/_internal/instrumentation/llm/serialize.py +0 -300
- mirascope/ops/_internal/propagation.py +0 -198
- mirascope/ops/_internal/protocols.py +0 -133
- mirascope/ops/_internal/session.py +0 -139
- mirascope/ops/_internal/spans.py +0 -232
- mirascope/ops/_internal/traced_calls.py +0 -375
- mirascope/ops/_internal/traced_functions.py +0 -523
- mirascope/ops/_internal/tracing.py +0 -353
- mirascope/ops/_internal/types.py +0 -13
- mirascope/ops/_internal/utils.py +0 -123
- mirascope/ops/_internal/versioned_calls.py +0 -512
- mirascope/ops/_internal/versioned_functions.py +0 -357
- mirascope/ops/_internal/versioning.py +0 -303
- mirascope/ops/exceptions.py +0 -21
- mirascope-2.0.0.dist-info/RECORD +0 -423
- /mirascope/llm/{providers → clients}/base/kwargs.py +0 -0
- /mirascope/llm/{providers → clients}/google/message.py +0 -0
|
@@ -1,353 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from collections.abc import Sequence
|
|
4
|
-
from dataclasses import dataclass, field
|
|
5
|
-
from typing import (
|
|
6
|
-
TYPE_CHECKING,
|
|
7
|
-
overload,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
from ...llm.calls import AsyncCall, AsyncContextCall, Call, ContextCall
|
|
11
|
-
from ...llm.context import DepsT
|
|
12
|
-
from .protocols import (
|
|
13
|
-
AsyncFunction,
|
|
14
|
-
AsyncSpanFunction,
|
|
15
|
-
SyncFunction,
|
|
16
|
-
SyncSpanFunction,
|
|
17
|
-
fn_is_async,
|
|
18
|
-
fn_wants_span,
|
|
19
|
-
)
|
|
20
|
-
from .traced_calls import (
|
|
21
|
-
TracedAsyncCall,
|
|
22
|
-
TracedAsyncContextCall,
|
|
23
|
-
TracedCall,
|
|
24
|
-
TracedContextCall,
|
|
25
|
-
is_call_type,
|
|
26
|
-
wrap_call,
|
|
27
|
-
)
|
|
28
|
-
from .traced_functions import (
|
|
29
|
-
AsyncTracedFunction,
|
|
30
|
-
AsyncTracedSpanFunction,
|
|
31
|
-
TracedFunction,
|
|
32
|
-
TracedSpanFunction,
|
|
33
|
-
)
|
|
34
|
-
from .types import P, R
|
|
35
|
-
|
|
36
|
-
if TYPE_CHECKING:
|
|
37
|
-
from ...llm.formatting import FormattableT
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
@dataclass(kw_only=True)
|
|
41
|
-
class TraceDecorator:
|
|
42
|
-
"""Decorator implementation for adding tracing capabilities to functions."""
|
|
43
|
-
|
|
44
|
-
tags: tuple[str, ...] = ()
|
|
45
|
-
"""Tags to be associated with traced function calls."""
|
|
46
|
-
|
|
47
|
-
metadata: dict[str, str] = field(default_factory=dict)
|
|
48
|
-
"""Arbitrary key-value pairs for additional metadata."""
|
|
49
|
-
|
|
50
|
-
# IMPORTANT: The order of these overloads matters for type inference.
|
|
51
|
-
# Call type overloads come first, then span function overloads, then regular functions.
|
|
52
|
-
@overload
|
|
53
|
-
def __call__( # pyright: ignore[reportOverlappingOverload]
|
|
54
|
-
self,
|
|
55
|
-
fn: AsyncContextCall[P, DepsT, FormattableT],
|
|
56
|
-
) -> TracedAsyncContextCall[P, DepsT, FormattableT]:
|
|
57
|
-
"""Overload for applying decorator to an AsyncContextCall."""
|
|
58
|
-
...
|
|
59
|
-
|
|
60
|
-
@overload
|
|
61
|
-
def __call__(
|
|
62
|
-
self,
|
|
63
|
-
fn: ContextCall[P, DepsT, FormattableT],
|
|
64
|
-
) -> TracedContextCall[P, DepsT, FormattableT]:
|
|
65
|
-
"""Overload for applying decorator to a ContextCall."""
|
|
66
|
-
...
|
|
67
|
-
|
|
68
|
-
@overload
|
|
69
|
-
def __call__(
|
|
70
|
-
self,
|
|
71
|
-
fn: AsyncCall[P, FormattableT],
|
|
72
|
-
) -> TracedAsyncCall[P, FormattableT]:
|
|
73
|
-
"""Overload for applying decorator to an AsyncCall."""
|
|
74
|
-
...
|
|
75
|
-
|
|
76
|
-
@overload
|
|
77
|
-
def __call__(
|
|
78
|
-
self,
|
|
79
|
-
fn: Call[P, FormattableT],
|
|
80
|
-
) -> TracedCall[P, FormattableT]:
|
|
81
|
-
"""Overload for applying decorator to a Call."""
|
|
82
|
-
...
|
|
83
|
-
|
|
84
|
-
@overload
|
|
85
|
-
def __call__( # pyright: ignore[reportOverlappingOverload]
|
|
86
|
-
self,
|
|
87
|
-
fn: AsyncSpanFunction[P, R],
|
|
88
|
-
) -> AsyncTracedSpanFunction[P, R]:
|
|
89
|
-
"""Overload for applying decorator to an async function with span injection."""
|
|
90
|
-
...
|
|
91
|
-
|
|
92
|
-
@overload
|
|
93
|
-
def __call__(
|
|
94
|
-
self,
|
|
95
|
-
fn: SyncSpanFunction[P, R],
|
|
96
|
-
) -> TracedSpanFunction[P, R]:
|
|
97
|
-
"""Overload for applying decorator to a sync function with span injection."""
|
|
98
|
-
...
|
|
99
|
-
|
|
100
|
-
@overload
|
|
101
|
-
def __call__(
|
|
102
|
-
self,
|
|
103
|
-
fn: AsyncFunction[P, R],
|
|
104
|
-
) -> AsyncTracedFunction[P, R]:
|
|
105
|
-
"""Overload for applying decorator to an async function."""
|
|
106
|
-
...
|
|
107
|
-
|
|
108
|
-
@overload
|
|
109
|
-
def __call__(
|
|
110
|
-
self,
|
|
111
|
-
fn: SyncFunction[P, R],
|
|
112
|
-
) -> TracedFunction[P, R]:
|
|
113
|
-
"""Overload for applying decorator to a sync function."""
|
|
114
|
-
...
|
|
115
|
-
|
|
116
|
-
def __call__( # pyright: ignore[reportGeneralTypeIssues]
|
|
117
|
-
self,
|
|
118
|
-
fn: (
|
|
119
|
-
AsyncContextCall[P, DepsT, FormattableT]
|
|
120
|
-
| ContextCall[P, DepsT, FormattableT]
|
|
121
|
-
| AsyncCall[P, FormattableT]
|
|
122
|
-
| Call[P, FormattableT]
|
|
123
|
-
| AsyncSpanFunction[P, R]
|
|
124
|
-
| SyncSpanFunction[P, R]
|
|
125
|
-
| AsyncFunction[P, R]
|
|
126
|
-
| SyncFunction[P, R]
|
|
127
|
-
),
|
|
128
|
-
) -> (
|
|
129
|
-
TracedAsyncContextCall[P, DepsT, FormattableT]
|
|
130
|
-
| TracedContextCall[P, DepsT, FormattableT]
|
|
131
|
-
| TracedAsyncCall[P, FormattableT]
|
|
132
|
-
| TracedCall[P, FormattableT]
|
|
133
|
-
| AsyncTracedSpanFunction[P, R]
|
|
134
|
-
| TracedSpanFunction[P, R]
|
|
135
|
-
| AsyncTracedFunction[P, R]
|
|
136
|
-
| TracedFunction[P, R]
|
|
137
|
-
):
|
|
138
|
-
"""Applies the decorator to the given function or Call object."""
|
|
139
|
-
if is_call_type(fn):
|
|
140
|
-
return wrap_call(fn=fn, tags=self.tags, metadata=self.metadata)
|
|
141
|
-
elif fn_wants_span(fn):
|
|
142
|
-
if fn_is_async(fn):
|
|
143
|
-
return AsyncTracedSpanFunction(
|
|
144
|
-
fn=fn, tags=self.tags, metadata=self.metadata
|
|
145
|
-
)
|
|
146
|
-
else:
|
|
147
|
-
return TracedSpanFunction(fn=fn, tags=self.tags, metadata=self.metadata)
|
|
148
|
-
elif fn_is_async(fn):
|
|
149
|
-
return AsyncTracedFunction(fn=fn, tags=self.tags, metadata=self.metadata)
|
|
150
|
-
else:
|
|
151
|
-
return TracedFunction(fn=fn, tags=self.tags, metadata=self.metadata)
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
@overload
|
|
155
|
-
def trace(
|
|
156
|
-
__fn: None = None,
|
|
157
|
-
*,
|
|
158
|
-
tags: list[str] | None = None,
|
|
159
|
-
metadata: dict[str, str] | None = None,
|
|
160
|
-
) -> TraceDecorator:
|
|
161
|
-
"""Overload for providing kwargs before decorating (e.g. tags)."""
|
|
162
|
-
...
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
@overload
|
|
166
|
-
def trace( # pyright: ignore[reportOverlappingOverload]
|
|
167
|
-
__fn: AsyncContextCall[P, DepsT, FormattableT],
|
|
168
|
-
*,
|
|
169
|
-
tags: None = None,
|
|
170
|
-
metadata: None = None,
|
|
171
|
-
) -> TracedAsyncContextCall[P, DepsT, FormattableT]:
|
|
172
|
-
"""Overload for directly decorating an AsyncContextCall."""
|
|
173
|
-
...
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
@overload
|
|
177
|
-
def trace(
|
|
178
|
-
__fn: ContextCall[P, DepsT, FormattableT],
|
|
179
|
-
*,
|
|
180
|
-
tags: None = None,
|
|
181
|
-
metadata: None = None,
|
|
182
|
-
) -> TracedContextCall[P, DepsT, FormattableT]:
|
|
183
|
-
"""Overload for directly decorating a ContextCall."""
|
|
184
|
-
...
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
@overload
|
|
188
|
-
def trace(
|
|
189
|
-
__fn: AsyncCall[P, FormattableT],
|
|
190
|
-
*,
|
|
191
|
-
tags: None = None,
|
|
192
|
-
metadata: None = None,
|
|
193
|
-
) -> TracedAsyncCall[P, FormattableT]:
|
|
194
|
-
"""Overload for directly decorating an AsyncCall."""
|
|
195
|
-
...
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
@overload
|
|
199
|
-
def trace(
|
|
200
|
-
__fn: Call[P, FormattableT],
|
|
201
|
-
*,
|
|
202
|
-
tags: None = None,
|
|
203
|
-
metadata: None = None,
|
|
204
|
-
) -> TracedCall[P, FormattableT]:
|
|
205
|
-
"""Overload for directly decorating a Call."""
|
|
206
|
-
...
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
@overload
|
|
210
|
-
def trace( # pyright: ignore[reportOverlappingOverload]
|
|
211
|
-
__fn: AsyncSpanFunction[P, R],
|
|
212
|
-
*,
|
|
213
|
-
tags: None = None,
|
|
214
|
-
metadata: None = None,
|
|
215
|
-
) -> AsyncTracedSpanFunction[P, R]:
|
|
216
|
-
"""Overload for directly decorating an async function with span injection."""
|
|
217
|
-
...
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
@overload
|
|
221
|
-
def trace(
|
|
222
|
-
__fn: SyncSpanFunction[P, R],
|
|
223
|
-
*,
|
|
224
|
-
tags: None = None,
|
|
225
|
-
metadata: None = None,
|
|
226
|
-
) -> TracedSpanFunction[P, R]:
|
|
227
|
-
"""Overload for directly decorating a sync function with span injection."""
|
|
228
|
-
...
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
@overload
|
|
232
|
-
def trace(
|
|
233
|
-
__fn: AsyncFunction[P, R],
|
|
234
|
-
*,
|
|
235
|
-
tags: None = None,
|
|
236
|
-
metadata: None = None,
|
|
237
|
-
) -> AsyncTracedFunction[P, R]:
|
|
238
|
-
"""Overload for directly (no argument) decorating an asynchronous function"""
|
|
239
|
-
...
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
@overload
|
|
243
|
-
def trace(
|
|
244
|
-
__fn: SyncFunction[P, R],
|
|
245
|
-
*,
|
|
246
|
-
tags: None = None,
|
|
247
|
-
metadata: None = None,
|
|
248
|
-
) -> TracedFunction[P, R]:
|
|
249
|
-
"""Overload for directly (no argument) decorating a synchronous function"""
|
|
250
|
-
...
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
def trace( # pyright: ignore[reportGeneralTypeIssues]
|
|
254
|
-
__fn: (
|
|
255
|
-
AsyncContextCall[P, DepsT, FormattableT]
|
|
256
|
-
| ContextCall[P, DepsT, FormattableT]
|
|
257
|
-
| AsyncCall[P, FormattableT]
|
|
258
|
-
| Call[P, FormattableT]
|
|
259
|
-
| AsyncSpanFunction[P, R]
|
|
260
|
-
| SyncSpanFunction[P, R]
|
|
261
|
-
| AsyncFunction[P, R]
|
|
262
|
-
| SyncFunction[P, R]
|
|
263
|
-
| None
|
|
264
|
-
) = None,
|
|
265
|
-
*,
|
|
266
|
-
tags: Sequence[str] | None = None,
|
|
267
|
-
metadata: dict[str, str] | None = None,
|
|
268
|
-
) -> (
|
|
269
|
-
TracedAsyncContextCall[P, DepsT, FormattableT]
|
|
270
|
-
| TracedContextCall[P, DepsT, FormattableT]
|
|
271
|
-
| TracedAsyncCall[P, FormattableT]
|
|
272
|
-
| TracedCall[P, FormattableT]
|
|
273
|
-
| AsyncTracedSpanFunction[P, R]
|
|
274
|
-
| TracedSpanFunction[P, R]
|
|
275
|
-
| AsyncTracedFunction[P, R]
|
|
276
|
-
| TracedFunction[P, R]
|
|
277
|
-
| TraceDecorator
|
|
278
|
-
):
|
|
279
|
-
"""Decorator for adding tracing capabilities to functions and LLM calls.
|
|
280
|
-
|
|
281
|
-
Creates a wrapper that enables distributed tracing, performance monitoring,
|
|
282
|
-
and execution tracking for decorated functions. When called, the decorated
|
|
283
|
-
function returns a Trace containing both the result and span info.
|
|
284
|
-
|
|
285
|
-
When decorating an @llm.call function, returns a TracedCall that wraps both
|
|
286
|
-
the call and stream methods with tracing capabilities.
|
|
287
|
-
|
|
288
|
-
If the decorated function has `trace_ctx: Span` as its first parameter,
|
|
289
|
-
the span will be injected automatically and callers should NOT pass it.
|
|
290
|
-
|
|
291
|
-
Args:
|
|
292
|
-
__fn: The function or Call object to decorate.
|
|
293
|
-
tags: Optional list of string tags to associate with traced executions.
|
|
294
|
-
metadata: Arbitrary key-value pairs for additional metadata.
|
|
295
|
-
|
|
296
|
-
Returns:
|
|
297
|
-
A decorator that wraps functions with tracing capabilities.
|
|
298
|
-
|
|
299
|
-
Example:
|
|
300
|
-
```python
|
|
301
|
-
@ops.trace
|
|
302
|
-
def process_data(data: dict) -> dict:
|
|
303
|
-
return {"processed": data}
|
|
304
|
-
|
|
305
|
-
traced_result = process_data({"key": "value"})
|
|
306
|
-
print(traced_result.result) # {"processed": {"key": "value"}}
|
|
307
|
-
print(traced_result.span_id) # Access span ID
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
Example:
|
|
311
|
-
```python
|
|
312
|
-
@ops.trace
|
|
313
|
-
@llm.call("gpt-4o-mini")
|
|
314
|
-
def recommend_book(genre: str):
|
|
315
|
-
return f"Recommend a {genre} book"
|
|
316
|
-
|
|
317
|
-
# Returns Response directly (execution is still traced)
|
|
318
|
-
response = recommend_book("fantasy")
|
|
319
|
-
print(response.content)
|
|
320
|
-
|
|
321
|
-
# Use .wrapped() to get Trace[Response] with span info
|
|
322
|
-
trace = recommend_book.wrapped("fantasy")
|
|
323
|
-
print(trace.result.content)
|
|
324
|
-
print(trace.span_id)
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
Example:
|
|
328
|
-
```python
|
|
329
|
-
@ops.trace
|
|
330
|
-
def my_fn(trace_ctx: Span, arg: str) -> str:
|
|
331
|
-
trace_ctx.info(f"Processing: {arg}")
|
|
332
|
-
return arg.upper()
|
|
333
|
-
|
|
334
|
-
# Call without trace_ctx - it's injected automatically
|
|
335
|
-
result = my_fn("hello") # Returns "HELLO"
|
|
336
|
-
```
|
|
337
|
-
"""
|
|
338
|
-
tags = tuple(sorted(set(tags or [])))
|
|
339
|
-
metadata = metadata or {}
|
|
340
|
-
if __fn is None:
|
|
341
|
-
return TraceDecorator(tags=tags, metadata=metadata)
|
|
342
|
-
|
|
343
|
-
if is_call_type(__fn):
|
|
344
|
-
return wrap_call(fn=__fn, tags=tags, metadata=metadata)
|
|
345
|
-
elif fn_wants_span(__fn):
|
|
346
|
-
if fn_is_async(__fn):
|
|
347
|
-
return AsyncTracedSpanFunction(fn=__fn, tags=tags, metadata=metadata)
|
|
348
|
-
else:
|
|
349
|
-
return TracedSpanFunction(fn=__fn, tags=tags, metadata=metadata)
|
|
350
|
-
elif fn_is_async(__fn):
|
|
351
|
-
return AsyncTracedFunction(fn=__fn, tags=tags, metadata=metadata)
|
|
352
|
-
else:
|
|
353
|
-
return TracedFunction(fn=__fn, tags=tags, metadata=metadata)
|
mirascope/ops/_internal/types.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"""Type definitions for Mirascope tracing and capabilities."""
|
|
2
|
-
|
|
3
|
-
from collections.abc import Mapping, Sequence
|
|
4
|
-
from typing import ParamSpec, TypeAlias
|
|
5
|
-
from typing_extensions import TypeVar
|
|
6
|
-
|
|
7
|
-
P = ParamSpec("P")
|
|
8
|
-
R = TypeVar("R", infer_variance=True)
|
|
9
|
-
|
|
10
|
-
Jsonable: TypeAlias = (
|
|
11
|
-
None | str | int | float | bool | Sequence["Jsonable"] | Mapping[str, "Jsonable"]
|
|
12
|
-
)
|
|
13
|
-
"""Simple type alias for JSON-serializable types."""
|
mirascope/ops/_internal/utils.py
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"""Internal utility functions for the Mirascope."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
from collections.abc import Callable
|
|
5
|
-
from typing import Any, TypeAlias
|
|
6
|
-
|
|
7
|
-
import orjson
|
|
8
|
-
|
|
9
|
-
from .protocols import P, fn_wants_span
|
|
10
|
-
|
|
11
|
-
ORJSON_OPTS = (
|
|
12
|
-
orjson.OPT_NON_STR_KEYS
|
|
13
|
-
| orjson.OPT_NAIVE_UTC
|
|
14
|
-
| orjson.OPT_SERIALIZE_NUMPY
|
|
15
|
-
| orjson.OPT_SERIALIZE_DATACLASS
|
|
16
|
-
| orjson.OPT_SERIALIZE_UUID
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
PrimitiveType: TypeAlias = str | int | float | bool
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def json_dumps(obj: Any) -> str: # noqa: ANN401
|
|
23
|
-
"""Serialize Python objects to JSON using orjson."""
|
|
24
|
-
# json should be utf-8 encoded, json key should be str
|
|
25
|
-
return orjson.dumps(obj, option=ORJSON_OPTS).decode("utf-8")
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def _is_call_method(fn: Callable[..., Any]) -> bool:
|
|
29
|
-
"""Check if fn is a bound method of a Call object (e.g., Call.call or Call.stream)."""
|
|
30
|
-
return (
|
|
31
|
-
hasattr(fn, "__self__") and hasattr(fn.__self__, "prompt") # pyright: ignore[reportFunctionMemberAccess]
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def get_original_fn(fn: Callable[..., Any]) -> Callable[..., Any]:
|
|
36
|
-
"""Get the original function from a Call method or return fn as-is.
|
|
37
|
-
|
|
38
|
-
When fn is a bound method of a Call object (e.g., Call.call or Call.stream),
|
|
39
|
-
returns the original decorated function from prompt.fn. Otherwise returns fn.
|
|
40
|
-
"""
|
|
41
|
-
if _is_call_method(fn):
|
|
42
|
-
prompt = fn.__self__.prompt # pyright: ignore[reportFunctionMemberAccess]
|
|
43
|
-
if hasattr(prompt, "fn"):
|
|
44
|
-
return prompt.fn
|
|
45
|
-
return fn
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def get_qualified_name(fn: Callable[..., Any]) -> str:
|
|
49
|
-
"""Return the simplified qualified name of a function.
|
|
50
|
-
|
|
51
|
-
If the function is a bound method of a Call object (e.g., Call.call or Call.stream),
|
|
52
|
-
returns the qualified name of the original decorated function from prompt.fn,
|
|
53
|
-
suffixed with the method name (e.g., "recommend.call" or "recommend.stream").
|
|
54
|
-
|
|
55
|
-
If the function is defined locally, return the name after '<locals>.'; otherwise,
|
|
56
|
-
return the last non-empty part after splitting by '.'.
|
|
57
|
-
"""
|
|
58
|
-
# Check if this is a Call method and capture the method name
|
|
59
|
-
method_suffix = f".{fn.__name__}" if _is_call_method(fn) else ""
|
|
60
|
-
|
|
61
|
-
fn = get_original_fn(fn)
|
|
62
|
-
qualified_name = fn.__qualname__
|
|
63
|
-
if "<locals>." in qualified_name:
|
|
64
|
-
base_name = qualified_name.split("<locals>.")[-1]
|
|
65
|
-
else:
|
|
66
|
-
parts = [part for part in qualified_name.split(".") if part]
|
|
67
|
-
base_name = parts[-1] if parts else qualified_name
|
|
68
|
-
|
|
69
|
-
return f"{base_name}{method_suffix}"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def extract_arguments(
|
|
73
|
-
fn: Callable[P, Any],
|
|
74
|
-
*args: P.args,
|
|
75
|
-
**kwargs: P.kwargs,
|
|
76
|
-
) -> tuple[dict[str, str], dict[str, Any]]:
|
|
77
|
-
"""Returns a tuple of (arg_types, arg_values) dictionaries from function call.
|
|
78
|
-
|
|
79
|
-
If the function is a Call method (e.g., Call.call), uses the original
|
|
80
|
-
decorated function's signature to get proper parameter names and types.
|
|
81
|
-
|
|
82
|
-
If the function has `trace_ctx: Span` as first parameter (detected via
|
|
83
|
-
fn_wants_span), that parameter is skipped since it's injected by the
|
|
84
|
-
decorator and shouldn't be recorded in span attributes.
|
|
85
|
-
"""
|
|
86
|
-
# Use original function signature for Call methods
|
|
87
|
-
fn = get_original_fn(fn)
|
|
88
|
-
signature = inspect.signature(fn)
|
|
89
|
-
|
|
90
|
-
# If function wants span injection, skip the first parameter
|
|
91
|
-
if fn_wants_span(fn):
|
|
92
|
-
params = list(signature.parameters.values())
|
|
93
|
-
if params:
|
|
94
|
-
remaining_params = params[1:]
|
|
95
|
-
signature = signature.replace(parameters=remaining_params)
|
|
96
|
-
|
|
97
|
-
bound_arguments = signature.bind(*args, **kwargs)
|
|
98
|
-
bound_arguments.apply_defaults()
|
|
99
|
-
|
|
100
|
-
arg_types: dict[str, str] = {}
|
|
101
|
-
arg_values: dict[str, Any] = {}
|
|
102
|
-
|
|
103
|
-
for param_name, param_value in bound_arguments.arguments.items():
|
|
104
|
-
parameter = signature.parameters[param_name]
|
|
105
|
-
if parameter.annotation != inspect.Parameter.empty:
|
|
106
|
-
if hasattr(parameter.annotation, "__name__"):
|
|
107
|
-
type_str = parameter.annotation.__name__
|
|
108
|
-
else:
|
|
109
|
-
type_str = str(parameter.annotation)
|
|
110
|
-
arg_types[param_name] = type_str
|
|
111
|
-
else:
|
|
112
|
-
arg_types[param_name] = type(param_value).__name__
|
|
113
|
-
|
|
114
|
-
if isinstance(param_value, PrimitiveType) or param_value is None:
|
|
115
|
-
arg_values[param_name] = param_value
|
|
116
|
-
else:
|
|
117
|
-
try:
|
|
118
|
-
json_dumps(param_value)
|
|
119
|
-
arg_values[param_name] = param_value
|
|
120
|
-
except (TypeError, ValueError):
|
|
121
|
-
arg_values[param_name] = repr(param_value)
|
|
122
|
-
|
|
123
|
-
return arg_types, arg_values
|