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
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""Shared utils for all OpenAI clients."""
|
|
2
|
+
|
|
3
|
+
MODELS_WITHOUT_JSON_SCHEMA_SUPPORT = {
|
|
4
|
+
"chatgpt-4o-latest",
|
|
5
|
+
"gpt-3.5-turbo",
|
|
6
|
+
"gpt-3.5-turbo-0125",
|
|
7
|
+
"gpt-3.5-turbo-1106",
|
|
8
|
+
"gpt-3.5-turbo-16k",
|
|
9
|
+
"gpt-4",
|
|
10
|
+
"gpt-4-0125-preview",
|
|
11
|
+
"gpt-4-0613",
|
|
12
|
+
"gpt-4-1106-preview",
|
|
13
|
+
"gpt-4-turbo",
|
|
14
|
+
"gpt-4-turbo-2024-04-09",
|
|
15
|
+
"gpt-4-turbo-preview",
|
|
16
|
+
"gpt-4o-2024-05-13",
|
|
17
|
+
"gpt-4o-audio-preview",
|
|
18
|
+
"gpt-4o-audio-preview-2024-10-01",
|
|
19
|
+
"gpt-4o-audio-preview-2024-12-17",
|
|
20
|
+
"gpt-4o-audio-preview-2025-06-03",
|
|
21
|
+
"gpt-4o-mini-audio-preview",
|
|
22
|
+
"gpt-4o-mini-audio-preview-2024-12-17",
|
|
23
|
+
"gpt-5-chat-latest",
|
|
24
|
+
"o1-mini",
|
|
25
|
+
"o1-mini-2024-09-12",
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
MODELS_WITHOUT_JSON_OBJECT_SUPPORT = {
|
|
29
|
+
"gpt-4",
|
|
30
|
+
"gpt-4-0613",
|
|
31
|
+
"gpt-4o-audio-preview",
|
|
32
|
+
"gpt-4o-audio-preview-2024-10-01",
|
|
33
|
+
"gpt-4o-audio-preview-2024-12-17",
|
|
34
|
+
"gpt-4o-audio-preview-2025-06-03",
|
|
35
|
+
"gpt-4o-mini-audio-preview",
|
|
36
|
+
"gpt-4o-mini-audio-preview-2024-12-17",
|
|
37
|
+
"gpt-4o-mini-search-preview",
|
|
38
|
+
"gpt-4o-mini-search-preview-2025-03-11",
|
|
39
|
+
"gpt-4o-search-preview",
|
|
40
|
+
"gpt-4o-search-preview-2025-03-11",
|
|
41
|
+
"o1-mini",
|
|
42
|
+
"o1-mini-2024-09-12",
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _ensure_additional_properties_false(obj: object) -> None:
|
|
47
|
+
"""Recursively adds additionalProperties = False to a schema, required by OpenAI API."""
|
|
48
|
+
if isinstance(obj, dict):
|
|
49
|
+
if obj.get("type") == "object" and "additionalProperties" not in obj:
|
|
50
|
+
obj["additionalProperties"] = False
|
|
51
|
+
for value in obj.values():
|
|
52
|
+
_ensure_additional_properties_false(value)
|
|
53
|
+
elif isinstance(obj, list):
|
|
54
|
+
for item in obj:
|
|
55
|
+
_ensure_additional_properties_false(item)
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
from typing import Literal, TypeAlias, get_args, overload
|
|
2
|
+
|
|
3
|
+
from .anthropic import (
|
|
4
|
+
AnthropicClient,
|
|
5
|
+
AnthropicModelId,
|
|
6
|
+
client as anthropic_client,
|
|
7
|
+
get_client as get_anthropic_client,
|
|
8
|
+
)
|
|
9
|
+
from .google import (
|
|
10
|
+
GoogleClient,
|
|
11
|
+
GoogleModelId,
|
|
12
|
+
client as google_client,
|
|
13
|
+
get_client as get_google_client,
|
|
14
|
+
)
|
|
15
|
+
from .openai import (
|
|
16
|
+
OpenAICompletionsClient,
|
|
17
|
+
OpenAICompletionsModelId,
|
|
18
|
+
OpenAIResponsesClient,
|
|
19
|
+
OpenAIResponsesModelId,
|
|
20
|
+
completions_client as openai_completions_client,
|
|
21
|
+
get_completions_client as get_openai_completions_client,
|
|
22
|
+
get_responses_client as get_openai_responses_client,
|
|
23
|
+
responses_client as openai_responses_client,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
Provider: TypeAlias = Literal[
|
|
27
|
+
"anthropic",
|
|
28
|
+
"google",
|
|
29
|
+
"openai:completions", # OpenAICompletionsClient
|
|
30
|
+
"openai:responses", # OpenAIResponsesClient
|
|
31
|
+
"openai", # Alias for "openai:responses"
|
|
32
|
+
]
|
|
33
|
+
PROVIDERS = get_args(Provider)
|
|
34
|
+
|
|
35
|
+
ModelId: TypeAlias = (
|
|
36
|
+
AnthropicModelId
|
|
37
|
+
| GoogleModelId
|
|
38
|
+
| OpenAIResponsesModelId
|
|
39
|
+
| OpenAICompletionsModelId
|
|
40
|
+
| str
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@overload
|
|
45
|
+
def get_client(provider: Literal["anthropic"]) -> AnthropicClient:
|
|
46
|
+
"""Get an Anthropic client instance."""
|
|
47
|
+
...
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@overload
|
|
51
|
+
def get_client(provider: Literal["google"]) -> GoogleClient:
|
|
52
|
+
"""Get a Google client instance."""
|
|
53
|
+
...
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@overload
|
|
57
|
+
def get_client(provider: Literal["openai:completions"]) -> OpenAICompletionsClient:
|
|
58
|
+
"""Get an OpenAI client instance."""
|
|
59
|
+
...
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@overload
|
|
63
|
+
def get_client(
|
|
64
|
+
provider: Literal["openai:responses", "openai"],
|
|
65
|
+
) -> OpenAIResponsesClient:
|
|
66
|
+
"""Get an OpenAI responses client instance."""
|
|
67
|
+
...
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def get_client(
|
|
71
|
+
provider: Provider,
|
|
72
|
+
) -> AnthropicClient | GoogleClient | OpenAICompletionsClient | OpenAIResponsesClient:
|
|
73
|
+
"""Get a client instance for the specified provider.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
provider: The provider name ("openai:completions", "anthropic", or "google").
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
A client instance for the specified provider. The specific client type
|
|
80
|
+
depends on the provider:
|
|
81
|
+
- "openai:completions" returns `OpenAICompletionsClient` (ChatCompletion API)
|
|
82
|
+
- "openai:responses" returns `OpenAIResponsesClient` (Responses API)
|
|
83
|
+
- "anthropic" returns `AnthropicClient`
|
|
84
|
+
- "google" returns `GoogleClient`
|
|
85
|
+
|
|
86
|
+
Multiple calls to get_client will return the same Client rather than constructing
|
|
87
|
+
new ones.
|
|
88
|
+
|
|
89
|
+
Raises:
|
|
90
|
+
ValueError: If the provider is not supported.
|
|
91
|
+
"""
|
|
92
|
+
match provider:
|
|
93
|
+
case "anthropic":
|
|
94
|
+
return get_anthropic_client()
|
|
95
|
+
case "google":
|
|
96
|
+
return get_google_client()
|
|
97
|
+
case "openai:completions":
|
|
98
|
+
return get_openai_completions_client()
|
|
99
|
+
case "openai:responses" | "openai":
|
|
100
|
+
return get_openai_responses_client()
|
|
101
|
+
case _:
|
|
102
|
+
raise ValueError(f"Unknown provider: {provider}")
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
@overload
|
|
106
|
+
def client(
|
|
107
|
+
provider: Literal["openai:completions"],
|
|
108
|
+
*,
|
|
109
|
+
api_key: str | None = None,
|
|
110
|
+
base_url: str | None = None,
|
|
111
|
+
) -> OpenAICompletionsClient:
|
|
112
|
+
"""Create a cached OpenAI chat completions client with the given parameters."""
|
|
113
|
+
...
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
@overload
|
|
117
|
+
def client(
|
|
118
|
+
provider: Literal["openai:responses", "openai"],
|
|
119
|
+
*,
|
|
120
|
+
api_key: str | None = None,
|
|
121
|
+
base_url: str | None = None,
|
|
122
|
+
) -> OpenAIResponsesClient:
|
|
123
|
+
"""Create a cached OpenAI responses client with the given parameters."""
|
|
124
|
+
...
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@overload
|
|
128
|
+
def client(
|
|
129
|
+
provider: Literal["anthropic"],
|
|
130
|
+
*,
|
|
131
|
+
api_key: str | None = None,
|
|
132
|
+
base_url: str | None = None,
|
|
133
|
+
) -> AnthropicClient:
|
|
134
|
+
"""Create a cached Anthropic client with the given parameters."""
|
|
135
|
+
...
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
@overload
|
|
139
|
+
def client(
|
|
140
|
+
provider: Literal["google"],
|
|
141
|
+
*,
|
|
142
|
+
api_key: str | None = None,
|
|
143
|
+
base_url: str | None = None,
|
|
144
|
+
) -> GoogleClient:
|
|
145
|
+
"""Create a cached Google client with the given parameters."""
|
|
146
|
+
...
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def client(
|
|
150
|
+
provider: Provider, *, api_key: str | None = None, base_url: str | None = None
|
|
151
|
+
) -> AnthropicClient | GoogleClient | OpenAICompletionsClient | OpenAIResponsesClient:
|
|
152
|
+
"""Create a cached client instance for the specified provider.
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
provider: The provider name ("openai:completions", "anthropic", or "google").
|
|
156
|
+
api_key: API key for authentication. If None, uses provider-specific env var.
|
|
157
|
+
base_url: Base URL for the API. If None, uses provider-specific env var.
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
A cached client instance for the specified provider with the given parameters.
|
|
161
|
+
|
|
162
|
+
Raises:
|
|
163
|
+
ValueError: If the provider is not supported.
|
|
164
|
+
"""
|
|
165
|
+
match provider:
|
|
166
|
+
case "anthropic":
|
|
167
|
+
return anthropic_client(api_key=api_key, base_url=base_url)
|
|
168
|
+
case "google":
|
|
169
|
+
return google_client(api_key=api_key, base_url=base_url)
|
|
170
|
+
case "openai:completions":
|
|
171
|
+
return openai_completions_client(api_key=api_key, base_url=base_url)
|
|
172
|
+
case "openai:responses" | "openai":
|
|
173
|
+
return openai_responses_client(api_key=api_key, base_url=base_url)
|
|
174
|
+
case _: # pragma: no cover
|
|
175
|
+
raise ValueError(f"Unknown provider: {provider}")
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
from typing import TypeAlias
|
|
4
4
|
|
|
5
|
-
from ..types import Jsonable
|
|
6
5
|
from .audio import Audio, Base64AudioSource
|
|
7
6
|
from .document import (
|
|
8
7
|
Base64DocumentSource,
|
|
@@ -17,11 +16,11 @@ from .tool_call import ToolCall, ToolCallChunk, ToolCallEndChunk, ToolCallStartC
|
|
|
17
16
|
from .tool_output import ToolOutput
|
|
18
17
|
|
|
19
18
|
ContentPart: TypeAlias = (
|
|
20
|
-
Text | Image | Audio | Document | ToolOutput
|
|
19
|
+
Text | Image | Audio | Document | ToolOutput | ToolCall | Thought
|
|
21
20
|
)
|
|
22
21
|
"""Content parts that may be included in a Message."""
|
|
23
22
|
|
|
24
|
-
UserContentPart: TypeAlias = Text | Image | Audio | Document | ToolOutput
|
|
23
|
+
UserContentPart: TypeAlias = Text | Image | Audio | Document | ToolOutput
|
|
25
24
|
"""Content parts that can be included in a UserMessage."""
|
|
26
25
|
|
|
27
26
|
AssistantContentPart: TypeAlias = Text | ToolCall | Thought
|
|
@@ -49,9 +49,6 @@ class ToolCallChunk:
|
|
|
49
49
|
content_type: Literal["tool_call"] = "tool_call"
|
|
50
50
|
"""The type of content reconstructed by this chunk."""
|
|
51
51
|
|
|
52
|
-
id: str
|
|
53
|
-
"""A unique identifier for this tool call."""
|
|
54
|
-
|
|
55
52
|
delta: str
|
|
56
53
|
"""The incremental json args added in this chunk."""
|
|
57
54
|
|
|
@@ -64,6 +61,3 @@ class ToolCallEndChunk:
|
|
|
64
61
|
|
|
65
62
|
content_type: Literal["tool_call"] = "tool_call"
|
|
66
63
|
"""The type of content reconstructed by this chunk."""
|
|
67
|
-
|
|
68
|
-
id: str
|
|
69
|
-
"""A unique identifier for this tool call."""
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"""The `ToolOutput` content class."""
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Generic, Literal
|
|
4
|
+
from typing import Generic, Literal
|
|
5
5
|
|
|
6
|
-
from ..
|
|
7
|
-
from ..types import JsonableCovariantT
|
|
6
|
+
from ..types import JsonableT
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
@dataclass(kw_only=True)
|
|
11
|
-
class ToolOutput(Generic[
|
|
10
|
+
class ToolOutput(Generic[JsonableT]):
|
|
12
11
|
"""Tool output content for a message.
|
|
13
12
|
|
|
14
13
|
Represents the output from a tool call. This is part of a user message's
|
|
@@ -23,21 +22,5 @@ class ToolOutput(Generic[JsonableCovariantT]):
|
|
|
23
22
|
name: str
|
|
24
23
|
"""The name of the tool that created this output."""
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
"""The
|
|
28
|
-
|
|
29
|
-
If the tool executed successfully, this will be the tool output.
|
|
30
|
-
If the tool errored, this will be the error message, as a string.
|
|
31
|
-
|
|
32
|
-
In either case, the result should be passed back to the LLM (so it can
|
|
33
|
-
either process the output, or re-try with awareness of the error.)
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
error: ToolError | None = None
|
|
37
|
-
"""The error from calling the tool, if any."""
|
|
38
|
-
|
|
39
|
-
@property
|
|
40
|
-
def output(self) -> JsonableCovariantT:
|
|
41
|
-
if self.error is not None:
|
|
42
|
-
raise self.error
|
|
43
|
-
return cast(JsonableCovariantT, self.result)
|
|
25
|
+
value: JsonableT
|
|
26
|
+
"""The output value from the tool call."""
|
mirascope/llm/context/_utils.py
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import inspect
|
|
2
|
-
import typing
|
|
3
2
|
from collections.abc import Callable
|
|
4
|
-
from typing import
|
|
3
|
+
from typing import get_origin
|
|
5
4
|
|
|
6
5
|
from .context import Context
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
def first_param_is_context(fn: Callable
|
|
8
|
+
def first_param_is_context(fn: Callable) -> bool:
|
|
10
9
|
"""Returns whether the first argument to a function is `ctx: Context`.
|
|
11
10
|
|
|
12
11
|
Also returns true if the first argument is a subclass of `Context`.
|
|
@@ -22,20 +21,8 @@ def first_param_is_context(fn: Callable[..., Any]) -> bool:
|
|
|
22
21
|
else:
|
|
23
22
|
first_param = params[0]
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
try:
|
|
29
|
-
hints = typing.get_type_hints(fn)
|
|
30
|
-
annotation = hints.get(first_param.name)
|
|
31
|
-
except (NameError, AttributeError, TypeError):
|
|
32
|
-
annotation = first_param.annotation
|
|
33
|
-
|
|
34
|
-
if annotation is None or annotation is inspect.Parameter.empty:
|
|
35
|
-
return False
|
|
36
|
-
|
|
37
|
-
type_is_context = get_origin(annotation) is Context
|
|
38
|
-
subclass_of_context = isinstance(annotation, type) and issubclass(
|
|
39
|
-
annotation, Context
|
|
24
|
+
type_is_context = get_origin(first_param.annotation) is Context
|
|
25
|
+
subclass_of_context = isinstance(first_param.annotation, type) and issubclass(
|
|
26
|
+
first_param.annotation, Context
|
|
40
27
|
)
|
|
41
|
-
return type_is_context or subclass_of_context
|
|
28
|
+
return first_param.name == "ctx" and (type_is_context or subclass_of_context)
|