mirascope 2.0.0__py3-none-any.whl → 2.0.0a1__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 +15 -96
- 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/_missing_import_stubs.py +47 -0
- mirascope/llm/clients/anthropic/__init__.py +25 -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 +20 -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 +28 -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 +26 -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.0a1.dist-info}/METADATA +13 -90
- mirascope-2.0.0a1.dist-info/RECORD +102 -0
- {mirascope-2.0.0.dist-info → mirascope-2.0.0a1.dist-info}/WHEEL +1 -1
- {mirascope-2.0.0.dist-info → mirascope-2.0.0a1.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
|
@@ -18,14 +18,11 @@ from ..tools import (
|
|
|
18
18
|
Tool,
|
|
19
19
|
Toolkit,
|
|
20
20
|
)
|
|
21
|
-
from ..types import Jsonable
|
|
22
21
|
from .base_response import BaseResponse
|
|
23
22
|
from .finish_reason import FinishReason
|
|
24
|
-
from .usage import Usage
|
|
25
23
|
|
|
26
24
|
if TYPE_CHECKING:
|
|
27
|
-
from ..
|
|
28
|
-
from ..providers import ModelId, ProviderId
|
|
25
|
+
from ..clients import ModelId, Params, Provider
|
|
29
26
|
|
|
30
27
|
|
|
31
28
|
class Response(BaseResponse[Toolkit, FormattableT]):
|
|
@@ -35,34 +32,30 @@ class Response(BaseResponse[Toolkit, FormattableT]):
|
|
|
35
32
|
self,
|
|
36
33
|
*,
|
|
37
34
|
raw: Any, # noqa: ANN401
|
|
38
|
-
|
|
35
|
+
provider: "Provider",
|
|
39
36
|
model_id: "ModelId",
|
|
40
|
-
provider_model_name: str,
|
|
41
37
|
params: "Params",
|
|
42
38
|
tools: Sequence[Tool] | Toolkit | None = None,
|
|
43
39
|
format: Format[FormattableT] | None = None,
|
|
44
40
|
input_messages: Sequence[Message],
|
|
45
41
|
assistant_message: AssistantMessage,
|
|
46
42
|
finish_reason: FinishReason | None,
|
|
47
|
-
usage: Usage | None,
|
|
48
43
|
) -> None:
|
|
49
44
|
"""Initialize a `Response`."""
|
|
50
45
|
toolkit = tools if isinstance(tools, Toolkit) else Toolkit(tools=tools)
|
|
51
46
|
super().__init__(
|
|
52
47
|
raw=raw,
|
|
53
|
-
|
|
48
|
+
provider=provider,
|
|
54
49
|
model_id=model_id,
|
|
55
|
-
provider_model_name=provider_model_name,
|
|
56
50
|
params=params,
|
|
57
51
|
toolkit=toolkit,
|
|
58
52
|
format=format,
|
|
59
53
|
input_messages=input_messages,
|
|
60
54
|
assistant_message=assistant_message,
|
|
61
55
|
finish_reason=finish_reason,
|
|
62
|
-
usage=usage,
|
|
63
56
|
)
|
|
64
57
|
|
|
65
|
-
def execute_tools(self) -> Sequence[ToolOutput
|
|
58
|
+
def execute_tools(self) -> Sequence[ToolOutput]:
|
|
66
59
|
"""Execute and return all of the tool calls in the response.
|
|
67
60
|
|
|
68
61
|
Returns:
|
|
@@ -108,16 +101,14 @@ class AsyncResponse(BaseResponse[AsyncToolkit, FormattableT]):
|
|
|
108
101
|
self,
|
|
109
102
|
*,
|
|
110
103
|
raw: Any, # noqa: ANN401
|
|
111
|
-
|
|
104
|
+
provider: "Provider",
|
|
112
105
|
model_id: "ModelId",
|
|
113
|
-
provider_model_name: str,
|
|
114
106
|
params: "Params",
|
|
115
107
|
tools: Sequence[AsyncTool] | AsyncToolkit | None = None,
|
|
116
108
|
format: Format[FormattableT] | None = None,
|
|
117
109
|
input_messages: Sequence[Message],
|
|
118
110
|
assistant_message: AssistantMessage,
|
|
119
111
|
finish_reason: FinishReason | None,
|
|
120
|
-
usage: Usage | None,
|
|
121
112
|
) -> None:
|
|
122
113
|
"""Initialize an `AsyncResponse`."""
|
|
123
114
|
toolkit = (
|
|
@@ -125,19 +116,17 @@ class AsyncResponse(BaseResponse[AsyncToolkit, FormattableT]):
|
|
|
125
116
|
)
|
|
126
117
|
super().__init__(
|
|
127
118
|
raw=raw,
|
|
128
|
-
|
|
119
|
+
provider=provider,
|
|
129
120
|
model_id=model_id,
|
|
130
|
-
provider_model_name=provider_model_name,
|
|
131
121
|
params=params,
|
|
132
122
|
toolkit=toolkit,
|
|
133
123
|
format=format,
|
|
134
124
|
input_messages=input_messages,
|
|
135
125
|
assistant_message=assistant_message,
|
|
136
126
|
finish_reason=finish_reason,
|
|
137
|
-
usage=usage,
|
|
138
127
|
)
|
|
139
128
|
|
|
140
|
-
async def execute_tools(self) -> Sequence[ToolOutput
|
|
129
|
+
async def execute_tools(self) -> Sequence[ToolOutput]:
|
|
141
130
|
"""Execute and return all of the tool calls in the response.
|
|
142
131
|
|
|
143
132
|
Returns:
|
|
@@ -190,9 +179,8 @@ class ContextResponse(
|
|
|
190
179
|
self,
|
|
191
180
|
*,
|
|
192
181
|
raw: Any, # noqa: ANN401
|
|
193
|
-
|
|
182
|
+
provider: "Provider",
|
|
194
183
|
model_id: "ModelId",
|
|
195
|
-
provider_model_name: str,
|
|
196
184
|
params: "Params",
|
|
197
185
|
tools: Sequence[Tool | ContextTool[DepsT]]
|
|
198
186
|
| ContextToolkit[DepsT]
|
|
@@ -201,7 +189,6 @@ class ContextResponse(
|
|
|
201
189
|
input_messages: Sequence[Message],
|
|
202
190
|
assistant_message: AssistantMessage,
|
|
203
191
|
finish_reason: FinishReason | None,
|
|
204
|
-
usage: Usage | None,
|
|
205
192
|
) -> None:
|
|
206
193
|
"""Initialize a `ContextResponse`."""
|
|
207
194
|
toolkit = (
|
|
@@ -209,19 +196,17 @@ class ContextResponse(
|
|
|
209
196
|
)
|
|
210
197
|
super().__init__(
|
|
211
198
|
raw=raw,
|
|
212
|
-
|
|
199
|
+
provider=provider,
|
|
213
200
|
model_id=model_id,
|
|
214
|
-
provider_model_name=provider_model_name,
|
|
215
201
|
params=params,
|
|
216
202
|
toolkit=toolkit,
|
|
217
203
|
format=format,
|
|
218
204
|
input_messages=input_messages,
|
|
219
205
|
assistant_message=assistant_message,
|
|
220
206
|
finish_reason=finish_reason,
|
|
221
|
-
usage=usage,
|
|
222
207
|
)
|
|
223
208
|
|
|
224
|
-
def execute_tools(self, ctx: Context[DepsT]) -> Sequence[ToolOutput
|
|
209
|
+
def execute_tools(self, ctx: Context[DepsT]) -> Sequence[ToolOutput]:
|
|
225
210
|
"""Execute and return all of the tool calls in the response.
|
|
226
211
|
|
|
227
212
|
Args:
|
|
@@ -280,9 +265,8 @@ class AsyncContextResponse(
|
|
|
280
265
|
self,
|
|
281
266
|
*,
|
|
282
267
|
raw: Any, # noqa: ANN401
|
|
283
|
-
|
|
268
|
+
provider: "Provider",
|
|
284
269
|
model_id: "ModelId",
|
|
285
|
-
provider_model_name: str,
|
|
286
270
|
params: "Params",
|
|
287
271
|
tools: Sequence[AsyncTool | AsyncContextTool[DepsT]]
|
|
288
272
|
| AsyncContextToolkit[DepsT]
|
|
@@ -291,7 +275,6 @@ class AsyncContextResponse(
|
|
|
291
275
|
input_messages: Sequence[Message],
|
|
292
276
|
assistant_message: AssistantMessage,
|
|
293
277
|
finish_reason: FinishReason | None,
|
|
294
|
-
usage: Usage | None,
|
|
295
278
|
) -> None:
|
|
296
279
|
"""Initialize an `AsyncContextResponse`."""
|
|
297
280
|
toolkit = (
|
|
@@ -301,21 +284,17 @@ class AsyncContextResponse(
|
|
|
301
284
|
)
|
|
302
285
|
super().__init__(
|
|
303
286
|
raw=raw,
|
|
304
|
-
|
|
287
|
+
provider=provider,
|
|
305
288
|
model_id=model_id,
|
|
306
|
-
provider_model_name=provider_model_name,
|
|
307
289
|
params=params,
|
|
308
290
|
toolkit=toolkit,
|
|
309
291
|
format=format,
|
|
310
292
|
input_messages=input_messages,
|
|
311
293
|
assistant_message=assistant_message,
|
|
312
294
|
finish_reason=finish_reason,
|
|
313
|
-
usage=usage,
|
|
314
295
|
)
|
|
315
296
|
|
|
316
|
-
async def execute_tools(
|
|
317
|
-
self, ctx: Context[DepsT]
|
|
318
|
-
) -> Sequence[ToolOutput[Jsonable]]:
|
|
297
|
+
async def execute_tools(self, ctx: Context[DepsT]) -> Sequence[ToolOutput]:
|
|
319
298
|
"""Execute and return all of the tool calls in the response.
|
|
320
299
|
|
|
321
300
|
Args:
|
|
@@ -3,29 +3,18 @@
|
|
|
3
3
|
from abc import ABC
|
|
4
4
|
from collections.abc import Sequence
|
|
5
5
|
from types import NoneType
|
|
6
|
-
from typing import TYPE_CHECKING, Any, Generic, Literal,
|
|
6
|
+
from typing import TYPE_CHECKING, Any, Generic, Literal, overload
|
|
7
7
|
|
|
8
8
|
from ..content import AssistantContentPart, Text, Thought, ToolCall
|
|
9
|
-
from ..
|
|
10
|
-
from ..formatting import (
|
|
11
|
-
Format,
|
|
12
|
-
FormattableT,
|
|
13
|
-
Partial,
|
|
14
|
-
create_wrapper_model,
|
|
15
|
-
is_output_parser,
|
|
16
|
-
is_primitive_type,
|
|
17
|
-
)
|
|
9
|
+
from ..formatting import Format, FormattableT, Partial
|
|
18
10
|
from ..messages import Message
|
|
19
11
|
from ..tools import ToolkitT
|
|
20
12
|
from . import _utils
|
|
21
13
|
from .finish_reason import FinishReason
|
|
22
|
-
from .usage import Usage
|
|
23
14
|
|
|
24
15
|
if TYPE_CHECKING:
|
|
25
|
-
from ..
|
|
26
|
-
from ..
|
|
27
|
-
|
|
28
|
-
AnyResponse: TypeAlias = "RootResponse[Any, Any]"
|
|
16
|
+
from ..clients import ModelId, Params, Provider
|
|
17
|
+
from ..models import Model
|
|
29
18
|
|
|
30
19
|
|
|
31
20
|
class RootResponse(Generic[ToolkitT, FormattableT], ABC):
|
|
@@ -34,7 +23,7 @@ class RootResponse(Generic[ToolkitT, FormattableT], ABC):
|
|
|
34
23
|
raw: Any
|
|
35
24
|
"""The raw response from the LLM."""
|
|
36
25
|
|
|
37
|
-
|
|
26
|
+
provider: "Provider"
|
|
38
27
|
"""The provider that generated this response."""
|
|
39
28
|
|
|
40
29
|
model_id: "ModelId"
|
|
@@ -66,15 +55,12 @@ class RootResponse(Generic[ToolkitT, FormattableT], ABC):
|
|
|
66
55
|
"""
|
|
67
56
|
finish_reason: FinishReason | None
|
|
68
57
|
"""The reason why the LLM finished generating a response, if set.
|
|
69
|
-
|
|
58
|
+
|
|
70
59
|
`finish_reason` is only set if the response did not finish generating normally,
|
|
71
60
|
e.g. `FinishReason.MAX_TOKENS` if the model ran out of tokens before completing.
|
|
72
61
|
When the response generates normally, `response.finish_reason` will be `None`.
|
|
73
62
|
"""
|
|
74
63
|
|
|
75
|
-
usage: Usage | None
|
|
76
|
-
"""Token usage statistics for this response, if available."""
|
|
77
|
-
|
|
78
64
|
format: Format[FormattableT] | None
|
|
79
65
|
"""The `Format` describing the structured response format, if available."""
|
|
80
66
|
|
|
@@ -117,96 +103,29 @@ class RootResponse(Generic[ToolkitT, FormattableT], ABC):
|
|
|
117
103
|
) -> FormattableT | Partial[FormattableT] | None:
|
|
118
104
|
"""Format the response according to the response format parser.
|
|
119
105
|
|
|
120
|
-
Args:
|
|
121
|
-
partial: If True, parse incomplete JSON as Partial model. Only works with
|
|
122
|
-
streaming responses that have accumulated JSON. Returns None if JSON
|
|
123
|
-
is not yet available or cannot be parsed.
|
|
124
|
-
|
|
125
|
-
Supports:
|
|
126
|
-
- Pydantic BaseModel types (JSON schema validation)
|
|
127
|
-
- Primitive types (automatically unwrapped from wrapper model)
|
|
128
|
-
- Custom OutputParsers (custom parsing logic)
|
|
129
|
-
- Partial parsing during streaming (when partial=True)
|
|
130
|
-
|
|
131
106
|
Returns:
|
|
132
|
-
The formatted response object of type FormatT.
|
|
133
|
-
the model instance. For primitive types, returns the unwrapped value (e.g.,
|
|
134
|
-
a string, list, dict, etc.). For OutputParsers, returns whatever the parser
|
|
135
|
-
returns. When partial=True, returns None if JSON is incomplete or unparsable.
|
|
107
|
+
The formatted response object of type FormatT.
|
|
136
108
|
|
|
137
109
|
Raises:
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
any exception from a custom OutputParser).
|
|
110
|
+
json.JSONDecodeError: If the response's textual content can't be parsed as
|
|
111
|
+
JSON.
|
|
112
|
+
pydantic.ValidationError: If the response's content fails validation for the
|
|
113
|
+
format type.
|
|
143
114
|
"""
|
|
144
115
|
if self.format is None:
|
|
145
116
|
return None
|
|
146
117
|
|
|
147
118
|
formattable = self.format.formattable
|
|
148
|
-
|
|
149
|
-
if is_output_parser(formattable):
|
|
150
|
-
if partial:
|
|
151
|
-
raise NotImplementedError(
|
|
152
|
-
"parse(partial=True) not supported with OutputParser. "
|
|
153
|
-
"Use BaseModel or primitive types."
|
|
154
|
-
)
|
|
155
|
-
try:
|
|
156
|
-
return formattable(self)
|
|
157
|
-
except Exception as e:
|
|
158
|
-
raise ParseError(
|
|
159
|
-
f"OutputParser failed: {e}",
|
|
160
|
-
original_exception=e,
|
|
161
|
-
) from e
|
|
162
|
-
|
|
163
|
-
if formattable is None or formattable is NoneType: # pyright: ignore[reportUnnecessaryComparison]
|
|
164
|
-
# note: pyright claims the None comparison is unnecessary, but removing it
|
|
165
|
-
# introduces type errors.
|
|
119
|
+
if formattable is None or formattable is NoneType:
|
|
166
120
|
return None # pragma: no cover
|
|
167
121
|
|
|
168
|
-
text = self.text("")
|
|
169
|
-
|
|
170
122
|
if partial:
|
|
171
|
-
|
|
172
|
-
else:
|
|
173
|
-
try:
|
|
174
|
-
json_text = _utils.extract_serialized_json(text)
|
|
175
|
-
if is_primitive_type(formattable):
|
|
176
|
-
wrapper_model = create_wrapper_model(formattable)
|
|
177
|
-
wrapper_instance = wrapper_model.model_validate_json(json_text)
|
|
178
|
-
return wrapper_instance.output
|
|
179
|
-
|
|
180
|
-
return formattable.model_validate_json(json_text)
|
|
181
|
-
except Exception as e:
|
|
182
|
-
raise ParseError(
|
|
183
|
-
f"Failed to parse response: {e}",
|
|
184
|
-
original_exception=e,
|
|
185
|
-
) from e
|
|
186
|
-
|
|
187
|
-
def text(self, sep: str = "\n") -> str:
|
|
188
|
-
"""Return all text content from this response as a single string.
|
|
189
|
-
|
|
190
|
-
Joins the text from all `Text` parts in the response content using the
|
|
191
|
-
specified separator.
|
|
192
|
-
|
|
193
|
-
Args:
|
|
194
|
-
sep: The separator to use when joining multiple text parts.
|
|
195
|
-
Defaults to newline ("\\n").
|
|
123
|
+
raise NotImplementedError
|
|
196
124
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
Example:
|
|
202
|
-
>>> response.text() # Join with newlines (default)
|
|
203
|
-
'Hello\\nWorld'
|
|
204
|
-
>>> response.text(sep=" ") # Join with spaces
|
|
205
|
-
'Hello World'
|
|
206
|
-
>>> response.text(sep="") # Concatenate directly
|
|
207
|
-
'HelloWorld'
|
|
208
|
-
"""
|
|
209
|
-
return sep.join(text.text for text in self.texts)
|
|
125
|
+
text = "".join(text.text for text in self.texts)
|
|
126
|
+
json_text = _utils.extract_serialized_json(text)
|
|
127
|
+
|
|
128
|
+
return formattable.model_validate_json(json_text)
|
|
210
129
|
|
|
211
130
|
def pretty(self) -> str:
|
|
212
131
|
"""Return a string representation of all response content.
|
|
@@ -222,6 +141,9 @@ class RootResponse(Generic[ToolkitT, FormattableT], ABC):
|
|
|
222
141
|
|
|
223
142
|
I am going to use the calculator and answer your question for you!
|
|
224
143
|
"""
|
|
144
|
+
if not self.content:
|
|
145
|
+
return "**[No Content]**"
|
|
146
|
+
|
|
225
147
|
pretty_parts: list[str] = []
|
|
226
148
|
for part in self.content:
|
|
227
149
|
if isinstance(part, Text):
|
|
@@ -243,6 +165,13 @@ class RootResponse(Generic[ToolkitT, FormattableT], ABC):
|
|
|
243
165
|
@property
|
|
244
166
|
def model(self) -> "Model":
|
|
245
167
|
"""A `Model` with parameters matching this response."""
|
|
246
|
-
from ..models import
|
|
168
|
+
from ..models import Model, get_model_from_context
|
|
169
|
+
|
|
170
|
+
if context_model := get_model_from_context():
|
|
171
|
+
return context_model
|
|
247
172
|
|
|
248
|
-
return
|
|
173
|
+
return Model(
|
|
174
|
+
provider=self.provider,
|
|
175
|
+
model_id=self.model_id,
|
|
176
|
+
**self.params,
|
|
177
|
+
)
|
|
@@ -18,7 +18,6 @@ from ..tools import (
|
|
|
18
18
|
Tool,
|
|
19
19
|
Toolkit,
|
|
20
20
|
)
|
|
21
|
-
from ..types import Jsonable
|
|
22
21
|
from .base_stream_response import (
|
|
23
22
|
AsyncChunkIterator,
|
|
24
23
|
BaseAsyncStreamResponse,
|
|
@@ -27,8 +26,7 @@ from .base_stream_response import (
|
|
|
27
26
|
)
|
|
28
27
|
|
|
29
28
|
if TYPE_CHECKING:
|
|
30
|
-
from ..
|
|
31
|
-
from ..providers import ModelId, ProviderId
|
|
29
|
+
from ..clients import ModelId, Params, Provider
|
|
32
30
|
|
|
33
31
|
|
|
34
32
|
class StreamResponse(BaseSyncStreamResponse[Toolkit, FormattableT]):
|
|
@@ -78,25 +76,25 @@ class StreamResponse(BaseSyncStreamResponse[Toolkit, FormattableT]):
|
|
|
78
76
|
from mirascope import llm
|
|
79
77
|
|
|
80
78
|
@llm.call(
|
|
81
|
-
|
|
82
|
-
model_id="
|
|
79
|
+
provider="openai:completions",
|
|
80
|
+
model_id="gpt-4o-mini",
|
|
83
81
|
)
|
|
84
82
|
def answer_question(question: str) -> str:
|
|
85
83
|
return f"Answer this question: {question}"
|
|
86
84
|
|
|
87
85
|
stream_response = answer_question.stream("What is the capital of France?")
|
|
88
86
|
|
|
89
|
-
for chunk in stream_response.
|
|
87
|
+
for chunk in stream_response.pretty_stream():
|
|
90
88
|
print(chunk, end="", flush=True)
|
|
89
|
+
print()
|
|
91
90
|
```
|
|
92
91
|
"""
|
|
93
92
|
|
|
94
93
|
def __init__(
|
|
95
94
|
self,
|
|
96
95
|
*,
|
|
97
|
-
|
|
96
|
+
provider: "Provider",
|
|
98
97
|
model_id: "ModelId",
|
|
99
|
-
provider_model_name: str,
|
|
100
98
|
params: "Params",
|
|
101
99
|
tools: Sequence[Tool] | Toolkit | None = None,
|
|
102
100
|
format: Format[FormattableT] | None = None,
|
|
@@ -106,9 +104,8 @@ class StreamResponse(BaseSyncStreamResponse[Toolkit, FormattableT]):
|
|
|
106
104
|
"""Initialize a `StreamResponse`."""
|
|
107
105
|
toolkit = tools if isinstance(tools, Toolkit) else Toolkit(tools=tools)
|
|
108
106
|
super().__init__(
|
|
109
|
-
|
|
107
|
+
provider=provider,
|
|
110
108
|
model_id=model_id,
|
|
111
|
-
provider_model_name=provider_model_name,
|
|
112
109
|
params=params,
|
|
113
110
|
toolkit=toolkit,
|
|
114
111
|
format=format,
|
|
@@ -116,7 +113,7 @@ class StreamResponse(BaseSyncStreamResponse[Toolkit, FormattableT]):
|
|
|
116
113
|
chunk_iterator=chunk_iterator,
|
|
117
114
|
)
|
|
118
115
|
|
|
119
|
-
def execute_tools(self) -> Sequence[ToolOutput
|
|
116
|
+
def execute_tools(self) -> Sequence[ToolOutput]:
|
|
120
117
|
"""Execute and return all of the tool calls in the response.
|
|
121
118
|
|
|
122
119
|
Returns:
|
|
@@ -204,25 +201,25 @@ class AsyncStreamResponse(BaseAsyncStreamResponse[AsyncToolkit, FormattableT]):
|
|
|
204
201
|
from mirascope import llm
|
|
205
202
|
|
|
206
203
|
@llm.call(
|
|
207
|
-
|
|
208
|
-
model_id="
|
|
204
|
+
provider="openai:completions",
|
|
205
|
+
model_id="gpt-4o-mini",
|
|
209
206
|
)
|
|
210
207
|
async def answer_question(question: str) -> str:
|
|
211
208
|
return f"Answer this question: {question}"
|
|
212
209
|
|
|
213
210
|
stream_response = await answer_question.stream("What is the capital of France?")
|
|
214
211
|
|
|
215
|
-
async for chunk in stream_response.
|
|
212
|
+
async for chunk in stream_response.pretty_stream():
|
|
216
213
|
print(chunk, end="", flush=True)
|
|
214
|
+
print()
|
|
217
215
|
```
|
|
218
216
|
"""
|
|
219
217
|
|
|
220
218
|
def __init__(
|
|
221
219
|
self,
|
|
222
220
|
*,
|
|
223
|
-
|
|
221
|
+
provider: "Provider",
|
|
224
222
|
model_id: "ModelId",
|
|
225
|
-
provider_model_name: str,
|
|
226
223
|
params: "Params",
|
|
227
224
|
tools: Sequence[AsyncTool] | AsyncToolkit | None = None,
|
|
228
225
|
format: Format[FormattableT] | None = None,
|
|
@@ -234,9 +231,8 @@ class AsyncStreamResponse(BaseAsyncStreamResponse[AsyncToolkit, FormattableT]):
|
|
|
234
231
|
tools if isinstance(tools, AsyncToolkit) else AsyncToolkit(tools=tools)
|
|
235
232
|
)
|
|
236
233
|
super().__init__(
|
|
237
|
-
|
|
234
|
+
provider=provider,
|
|
238
235
|
model_id=model_id,
|
|
239
|
-
provider_model_name=provider_model_name,
|
|
240
236
|
params=params,
|
|
241
237
|
toolkit=toolkit,
|
|
242
238
|
format=format,
|
|
@@ -244,7 +240,7 @@ class AsyncStreamResponse(BaseAsyncStreamResponse[AsyncToolkit, FormattableT]):
|
|
|
244
240
|
chunk_iterator=chunk_iterator,
|
|
245
241
|
)
|
|
246
242
|
|
|
247
|
-
async def execute_tools(self) -> Sequence[ToolOutput
|
|
243
|
+
async def execute_tools(self) -> Sequence[ToolOutput]:
|
|
248
244
|
"""Execute and return all of the tool calls in the response.
|
|
249
245
|
|
|
250
246
|
Returns:
|
|
@@ -289,8 +285,7 @@ class AsyncStreamResponse(BaseAsyncStreamResponse[AsyncToolkit, FormattableT]):
|
|
|
289
285
|
|
|
290
286
|
|
|
291
287
|
class ContextStreamResponse(
|
|
292
|
-
BaseSyncStreamResponse[ContextToolkit[DepsT
|
|
293
|
-
Generic[DepsT, FormattableT],
|
|
288
|
+
BaseSyncStreamResponse[ContextToolkit, FormattableT], Generic[DepsT, FormattableT]
|
|
294
289
|
):
|
|
295
290
|
"""A `ContextStreamResponse` wraps response content from the LLM with a streaming interface.
|
|
296
291
|
|
|
@@ -338,8 +333,8 @@ class ContextStreamResponse(
|
|
|
338
333
|
from mirascope import llm
|
|
339
334
|
|
|
340
335
|
@llm.call(
|
|
341
|
-
|
|
342
|
-
model_id="
|
|
336
|
+
provider="openai:completions",
|
|
337
|
+
model_id="gpt-4o-mini",
|
|
343
338
|
)
|
|
344
339
|
def answer_question(ctx: llm.Context, question: str) -> str:
|
|
345
340
|
return f"Answer this question: {question}"
|
|
@@ -347,17 +342,17 @@ class ContextStreamResponse(
|
|
|
347
342
|
ctx = llm.Context()
|
|
348
343
|
stream_response = answer_question.stream(ctx, "What is the capital of France?")
|
|
349
344
|
|
|
350
|
-
for chunk in stream_response.
|
|
345
|
+
for chunk in stream_response.pretty_stream():
|
|
351
346
|
print(chunk, end="", flush=True)
|
|
347
|
+
print()
|
|
352
348
|
```
|
|
353
349
|
"""
|
|
354
350
|
|
|
355
351
|
def __init__(
|
|
356
352
|
self,
|
|
357
353
|
*,
|
|
358
|
-
|
|
354
|
+
provider: "Provider",
|
|
359
355
|
model_id: "ModelId",
|
|
360
|
-
provider_model_name: str,
|
|
361
356
|
params: "Params",
|
|
362
357
|
tools: Sequence[Tool | ContextTool[DepsT]]
|
|
363
358
|
| ContextToolkit[DepsT]
|
|
@@ -371,9 +366,8 @@ class ContextStreamResponse(
|
|
|
371
366
|
tools if isinstance(tools, ContextToolkit) else ContextToolkit(tools=tools)
|
|
372
367
|
)
|
|
373
368
|
super().__init__(
|
|
374
|
-
|
|
369
|
+
provider=provider,
|
|
375
370
|
model_id=model_id,
|
|
376
|
-
provider_model_name=provider_model_name,
|
|
377
371
|
params=params,
|
|
378
372
|
toolkit=toolkit,
|
|
379
373
|
format=format,
|
|
@@ -381,7 +375,7 @@ class ContextStreamResponse(
|
|
|
381
375
|
chunk_iterator=chunk_iterator,
|
|
382
376
|
)
|
|
383
377
|
|
|
384
|
-
def execute_tools(self, ctx: Context[DepsT]) -> Sequence[ToolOutput
|
|
378
|
+
def execute_tools(self, ctx: Context[DepsT]) -> Sequence[ToolOutput]:
|
|
385
379
|
"""Execute and return all of the tool calls in the response.
|
|
386
380
|
|
|
387
381
|
Args:
|
|
@@ -432,7 +426,7 @@ class ContextStreamResponse(
|
|
|
432
426
|
|
|
433
427
|
|
|
434
428
|
class AsyncContextStreamResponse(
|
|
435
|
-
BaseAsyncStreamResponse[AsyncContextToolkit
|
|
429
|
+
BaseAsyncStreamResponse[AsyncContextToolkit, FormattableT],
|
|
436
430
|
Generic[DepsT, FormattableT],
|
|
437
431
|
):
|
|
438
432
|
"""An `AsyncContextStreamResponse` wraps response content from the LLM with a streaming interface.
|
|
@@ -481,8 +475,8 @@ class AsyncContextStreamResponse(
|
|
|
481
475
|
from mirascope import llm
|
|
482
476
|
|
|
483
477
|
@llm.call(
|
|
484
|
-
|
|
485
|
-
model_id="
|
|
478
|
+
provider="openai:completions",
|
|
479
|
+
model_id="gpt-4o-mini",
|
|
486
480
|
)
|
|
487
481
|
async def answer_question(ctx: llm.Context, question: str) -> str:
|
|
488
482
|
return f"Answer this question: {question}"
|
|
@@ -490,17 +484,17 @@ class AsyncContextStreamResponse(
|
|
|
490
484
|
ctx = llm.Context()
|
|
491
485
|
stream_response = await answer_question.stream(ctx, "What is the capital of France?")
|
|
492
486
|
|
|
493
|
-
async for chunk in stream_response.
|
|
487
|
+
async for chunk in stream_response.pretty_stream():
|
|
494
488
|
print(chunk, end="", flush=True)
|
|
489
|
+
print()
|
|
495
490
|
```
|
|
496
491
|
"""
|
|
497
492
|
|
|
498
493
|
def __init__(
|
|
499
494
|
self,
|
|
500
495
|
*,
|
|
501
|
-
|
|
496
|
+
provider: "Provider",
|
|
502
497
|
model_id: "ModelId",
|
|
503
|
-
provider_model_name: str,
|
|
504
498
|
params: "Params",
|
|
505
499
|
tools: Sequence[AsyncTool | AsyncContextTool[DepsT]]
|
|
506
500
|
| AsyncContextToolkit[DepsT]
|
|
@@ -516,9 +510,8 @@ class AsyncContextStreamResponse(
|
|
|
516
510
|
else AsyncContextToolkit(tools=tools)
|
|
517
511
|
)
|
|
518
512
|
super().__init__(
|
|
519
|
-
|
|
513
|
+
provider=provider,
|
|
520
514
|
model_id=model_id,
|
|
521
|
-
provider_model_name=provider_model_name,
|
|
522
515
|
params=params,
|
|
523
516
|
toolkit=toolkit,
|
|
524
517
|
format=format,
|
|
@@ -526,9 +519,7 @@ class AsyncContextStreamResponse(
|
|
|
526
519
|
chunk_iterator=chunk_iterator,
|
|
527
520
|
)
|
|
528
521
|
|
|
529
|
-
async def execute_tools(
|
|
530
|
-
self, ctx: Context[DepsT]
|
|
531
|
-
) -> Sequence[ToolOutput[Jsonable]]:
|
|
522
|
+
async def execute_tools(self, ctx: Context[DepsT]) -> Sequence[ToolOutput]:
|
|
532
523
|
"""Execute and return all of the tool calls in the response.
|
|
533
524
|
|
|
534
525
|
Args:
|
mirascope/llm/tools/__init__.py
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"""The Tools module for LLMs."""
|
|
2
2
|
|
|
3
|
+
from . import protocols
|
|
3
4
|
from .decorator import ToolDecorator, tool
|
|
4
|
-
from .protocols import AsyncContextToolFn, AsyncToolFn, ContextToolFn, ToolFn
|
|
5
5
|
from .tool_schema import (
|
|
6
6
|
FORMAT_TOOL_NAME,
|
|
7
|
-
AnyToolFn,
|
|
8
|
-
AnyToolSchema,
|
|
9
7
|
ToolParameterSchema,
|
|
10
8
|
ToolSchema,
|
|
11
9
|
ToolSchemaT,
|
|
@@ -22,26 +20,21 @@ from .tools import AsyncContextTool, AsyncTool, ContextTool, Tool, ToolT
|
|
|
22
20
|
|
|
23
21
|
__all__ = [
|
|
24
22
|
"FORMAT_TOOL_NAME",
|
|
25
|
-
"AnyToolFn",
|
|
26
|
-
"AnyToolSchema",
|
|
27
23
|
"AsyncContextTool",
|
|
28
|
-
"AsyncContextToolFn",
|
|
29
24
|
"AsyncContextToolkit",
|
|
30
25
|
"AsyncTool",
|
|
31
|
-
"AsyncToolFn",
|
|
32
26
|
"AsyncToolkit",
|
|
33
27
|
"BaseToolkit",
|
|
34
28
|
"ContextTool",
|
|
35
|
-
"ContextToolFn",
|
|
36
29
|
"ContextToolkit",
|
|
37
30
|
"Tool",
|
|
38
31
|
"ToolDecorator",
|
|
39
|
-
"ToolFn",
|
|
40
32
|
"ToolParameterSchema",
|
|
41
33
|
"ToolSchema",
|
|
42
34
|
"ToolSchemaT",
|
|
43
35
|
"ToolT",
|
|
44
36
|
"Toolkit",
|
|
45
37
|
"ToolkitT",
|
|
38
|
+
"protocols",
|
|
46
39
|
"tool",
|
|
47
40
|
]
|
mirascope/llm/tools/_utils.py
CHANGED
|
@@ -9,10 +9,7 @@ from .protocols import AsyncContextToolFn, AsyncToolFn, ContextToolFn, ToolFn
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def is_context_tool_fn(
|
|
12
|
-
fn: ContextToolFn
|
|
13
|
-
| AsyncContextToolFn[DepsT, P, JsonableCovariantT]
|
|
14
|
-
| ToolFn[P, JsonableCovariantT]
|
|
15
|
-
| AsyncToolFn[P, JsonableCovariantT],
|
|
12
|
+
fn: ToolFn | AsyncToolFn | ContextToolFn | AsyncContextToolFn,
|
|
16
13
|
) -> TypeIs[
|
|
17
14
|
ContextToolFn[DepsT, P, JsonableCovariantT]
|
|
18
15
|
| AsyncContextToolFn[DepsT, P, JsonableCovariantT]
|
|
@@ -22,13 +19,7 @@ def is_context_tool_fn(
|
|
|
22
19
|
|
|
23
20
|
|
|
24
21
|
def is_async_tool_fn(
|
|
25
|
-
fn: ContextToolFn
|
|
26
|
-
|
|
27
|
-
| ToolFn[P, JsonableCovariantT]
|
|
28
|
-
| AsyncToolFn[P, JsonableCovariantT],
|
|
29
|
-
) -> TypeIs[
|
|
30
|
-
AsyncContextToolFn[DepsT, P, JsonableCovariantT]
|
|
31
|
-
| AsyncToolFn[P, JsonableCovariantT]
|
|
32
|
-
]:
|
|
22
|
+
fn: ToolFn | AsyncToolFn | ContextToolFn | AsyncContextToolFn,
|
|
23
|
+
) -> TypeIs[AsyncToolFn | AsyncContextToolFn]:
|
|
33
24
|
"""Type guard to check if a function is an async tool function."""
|
|
34
25
|
return inspect.iscoroutinefunction(fn)
|