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
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import io
|
|
2
|
-
from collections.abc import Iterable, Sequence
|
|
3
|
-
from dataclasses import dataclass
|
|
4
|
-
from typing import Literal, cast
|
|
5
|
-
from typing_extensions import TypedDict
|
|
6
|
-
|
|
7
|
-
from mlx_lm.generate import GenerationResponse
|
|
8
|
-
from transformers import PreTrainedTokenizer
|
|
9
|
-
|
|
10
|
-
from ....content import ContentPart, TextChunk, TextEndChunk, TextStartChunk
|
|
11
|
-
from ....formatting import Format, FormattableT, OutputParser
|
|
12
|
-
from ....messages import AssistantContent, Message
|
|
13
|
-
from ....responses import (
|
|
14
|
-
ChunkIterator,
|
|
15
|
-
FinishReasonChunk,
|
|
16
|
-
RawStreamEventChunk,
|
|
17
|
-
UsageDeltaChunk,
|
|
18
|
-
)
|
|
19
|
-
from ....tools import AnyToolSchema, BaseToolkit
|
|
20
|
-
from .. import _utils
|
|
21
|
-
from .base import BaseEncoder, TokenIds
|
|
22
|
-
|
|
23
|
-
HFRole = Literal["system", "user", "assistant"] | str
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class TransformersMessage(TypedDict):
|
|
27
|
-
"""Message in Transformers format."""
|
|
28
|
-
|
|
29
|
-
role: HFRole
|
|
30
|
-
content: str
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def _encode_content(content: Sequence[ContentPart]) -> str:
|
|
34
|
-
"""Encode content parts into a string.
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
content: The sequence of content parts to encode.
|
|
38
|
-
|
|
39
|
-
Returns:
|
|
40
|
-
The encoded content as a string.
|
|
41
|
-
|
|
42
|
-
Raises:
|
|
43
|
-
NotImplementedError: If content contains non-text parts.
|
|
44
|
-
"""
|
|
45
|
-
if len(content) == 1 and content[0].type == "text":
|
|
46
|
-
return content[0].text
|
|
47
|
-
|
|
48
|
-
raise NotImplementedError("Only text content is supported in this example.")
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def _encode_message(message: Message) -> TransformersMessage:
|
|
52
|
-
"""Encode a Mirascope message into Transformers format.
|
|
53
|
-
|
|
54
|
-
Args:
|
|
55
|
-
message: The message to encode.
|
|
56
|
-
|
|
57
|
-
Returns:
|
|
58
|
-
The encoded message in Transformers format.
|
|
59
|
-
|
|
60
|
-
Raises:
|
|
61
|
-
ValueError: If the message role is not supported.
|
|
62
|
-
"""
|
|
63
|
-
if message.role == "system":
|
|
64
|
-
return TransformersMessage(role="system", content=message.content.text)
|
|
65
|
-
elif message.role == "assistant" or message.role == "user":
|
|
66
|
-
return TransformersMessage(
|
|
67
|
-
role=message.role, content=_encode_content(message.content)
|
|
68
|
-
)
|
|
69
|
-
else:
|
|
70
|
-
raise ValueError(f"Unsupported message type: {type(message)}")
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
@dataclass(frozen=True)
|
|
74
|
-
class TransformersEncoder(BaseEncoder):
|
|
75
|
-
"""Encoder for Transformers models."""
|
|
76
|
-
|
|
77
|
-
tokenizer: PreTrainedTokenizer
|
|
78
|
-
"""The tokenizer to use for encoding."""
|
|
79
|
-
|
|
80
|
-
def encode_request(
|
|
81
|
-
self,
|
|
82
|
-
messages: Sequence[Message],
|
|
83
|
-
tools: Sequence[AnyToolSchema] | BaseToolkit[AnyToolSchema] | None,
|
|
84
|
-
format: type[FormattableT]
|
|
85
|
-
| Format[FormattableT]
|
|
86
|
-
| OutputParser[FormattableT]
|
|
87
|
-
| None,
|
|
88
|
-
) -> tuple[Sequence[Message], Format[FormattableT] | None, TokenIds]:
|
|
89
|
-
"""Encode a request into a format suitable for the model."""
|
|
90
|
-
tool_schemas = tools.tools if isinstance(tools, BaseToolkit) else tools or []
|
|
91
|
-
if len(tool_schemas) > 0:
|
|
92
|
-
raise NotImplementedError("Tool usage is not supported.")
|
|
93
|
-
if format is not None:
|
|
94
|
-
raise NotImplementedError("Formatting is not supported.")
|
|
95
|
-
|
|
96
|
-
hf_messages: list[TransformersMessage] = [
|
|
97
|
-
_encode_message(msg) for msg in messages
|
|
98
|
-
]
|
|
99
|
-
prompt_text = cast(
|
|
100
|
-
str,
|
|
101
|
-
self.tokenizer.apply_chat_template( # pyright: ignore[reportUnknownMemberType]
|
|
102
|
-
cast(list[dict[str, str]], hf_messages),
|
|
103
|
-
tokenize=False,
|
|
104
|
-
add_generation_prompt=True,
|
|
105
|
-
),
|
|
106
|
-
)
|
|
107
|
-
return (
|
|
108
|
-
messages,
|
|
109
|
-
format,
|
|
110
|
-
self.tokenizer.encode(prompt_text, add_special_tokens=False), # pyright: ignore[reportUnknownMemberType]
|
|
111
|
-
)
|
|
112
|
-
|
|
113
|
-
def decode_response(
|
|
114
|
-
self, stream: Iterable[GenerationResponse]
|
|
115
|
-
) -> tuple[AssistantContent, GenerationResponse | None]:
|
|
116
|
-
"""Decode a response into a format suitable for the model."""
|
|
117
|
-
with io.StringIO() as buffer:
|
|
118
|
-
last_response: GenerationResponse | None = None
|
|
119
|
-
for response in stream:
|
|
120
|
-
buffer.write(response.text)
|
|
121
|
-
last_response = response
|
|
122
|
-
|
|
123
|
-
return buffer.getvalue(), last_response
|
|
124
|
-
|
|
125
|
-
def decode_stream(self, stream: Iterable[GenerationResponse]) -> ChunkIterator:
|
|
126
|
-
"""Decode a stream of responses into a format suitable for the model."""
|
|
127
|
-
yield TextStartChunk()
|
|
128
|
-
|
|
129
|
-
response: GenerationResponse | None = None
|
|
130
|
-
for response in stream:
|
|
131
|
-
yield RawStreamEventChunk(raw_stream_event=response)
|
|
132
|
-
yield TextChunk(delta=response.text)
|
|
133
|
-
|
|
134
|
-
assert response is not None
|
|
135
|
-
finish_reason = _utils.extract_finish_reason(response)
|
|
136
|
-
if finish_reason is not None:
|
|
137
|
-
yield FinishReasonChunk(finish_reason=finish_reason)
|
|
138
|
-
else:
|
|
139
|
-
yield TextEndChunk()
|
|
140
|
-
|
|
141
|
-
# Emit usage delta if available
|
|
142
|
-
usage = _utils.extract_usage(response)
|
|
143
|
-
if usage:
|
|
144
|
-
yield UsageDeltaChunk(
|
|
145
|
-
input_tokens=usage.input_tokens,
|
|
146
|
-
output_tokens=usage.output_tokens,
|
|
147
|
-
cache_read_tokens=usage.cache_read_tokens,
|
|
148
|
-
cache_write_tokens=usage.cache_write_tokens,
|
|
149
|
-
reasoning_tokens=usage.reasoning_tokens,
|
|
150
|
-
)
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import asyncio
|
|
4
|
-
import threading
|
|
5
|
-
from collections.abc import Iterable, Sequence
|
|
6
|
-
from dataclasses import dataclass, field
|
|
7
|
-
from typing import TYPE_CHECKING
|
|
8
|
-
from typing_extensions import Unpack
|
|
9
|
-
|
|
10
|
-
import mlx.core as mx
|
|
11
|
-
import mlx.nn as nn
|
|
12
|
-
from mlx_lm import stream_generate # type: ignore[reportPrivateImportUsage]
|
|
13
|
-
from mlx_lm.generate import GenerationResponse
|
|
14
|
-
from transformers import PreTrainedTokenizer
|
|
15
|
-
|
|
16
|
-
from ...formatting import Format, FormattableT, OutputParser
|
|
17
|
-
from ...messages import AssistantMessage, Message, assistant
|
|
18
|
-
from ...responses import AsyncChunkIterator, ChunkIterator, StreamResponseChunk
|
|
19
|
-
from ...tools import AnyToolSchema, BaseToolkit
|
|
20
|
-
from . import _utils
|
|
21
|
-
from .encoding import BaseEncoder, TokenIds
|
|
22
|
-
from .model_id import MLXModelId
|
|
23
|
-
|
|
24
|
-
if TYPE_CHECKING:
|
|
25
|
-
from ...models import Params
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def _consume_sync_stream_into_queue(
|
|
29
|
-
generation_stream: ChunkIterator,
|
|
30
|
-
loop: asyncio.AbstractEventLoop,
|
|
31
|
-
queue: asyncio.Queue[StreamResponseChunk | Exception | None],
|
|
32
|
-
) -> None:
|
|
33
|
-
"""Consume a synchronous stream and put chunks into an async queue.
|
|
34
|
-
|
|
35
|
-
Args:
|
|
36
|
-
sync_stream: The synchronous chunk iterator to consume.
|
|
37
|
-
loop: The event loop for scheduling queue operations.
|
|
38
|
-
queue: The async queue to put chunks into.
|
|
39
|
-
"""
|
|
40
|
-
try:
|
|
41
|
-
for response in generation_stream:
|
|
42
|
-
asyncio.run_coroutine_threadsafe(queue.put(response), loop)
|
|
43
|
-
except Exception as e:
|
|
44
|
-
asyncio.run_coroutine_threadsafe(queue.put(e), loop)
|
|
45
|
-
|
|
46
|
-
asyncio.run_coroutine_threadsafe(queue.put(None), loop)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
@dataclass(frozen=True)
|
|
50
|
-
class MLX:
|
|
51
|
-
"""MLX model wrapper for synchronous and asynchronous generation.
|
|
52
|
-
|
|
53
|
-
Args:
|
|
54
|
-
model_id: The MLX model identifier.
|
|
55
|
-
model: The underlying MLX model.
|
|
56
|
-
tokenizer: The tokenizer for the model.
|
|
57
|
-
encoder: The encoder for prompts and responses.
|
|
58
|
-
"""
|
|
59
|
-
|
|
60
|
-
model_id: MLXModelId
|
|
61
|
-
"""The MLX model identifier."""
|
|
62
|
-
|
|
63
|
-
model: nn.Module
|
|
64
|
-
"""The underlying MLX model."""
|
|
65
|
-
|
|
66
|
-
tokenizer: PreTrainedTokenizer
|
|
67
|
-
"""The tokenizer for the model."""
|
|
68
|
-
|
|
69
|
-
encoder: BaseEncoder
|
|
70
|
-
"""The encoder for prompts and responses."""
|
|
71
|
-
|
|
72
|
-
_lock: threading.Lock = field(default_factory=threading.Lock)
|
|
73
|
-
"""The lock for thread-safety."""
|
|
74
|
-
|
|
75
|
-
def _stream_generate(
|
|
76
|
-
self,
|
|
77
|
-
prompt: TokenIds,
|
|
78
|
-
seed: int | None,
|
|
79
|
-
**kwargs: Unpack[_utils.StreamGenerateKwargs],
|
|
80
|
-
) -> Iterable[GenerationResponse]:
|
|
81
|
-
"""Generator that streams generation responses.
|
|
82
|
-
|
|
83
|
-
Using this generator instead of calling stream_generate directly ensures
|
|
84
|
-
thread-safety when using the model in a multi-threaded context.
|
|
85
|
-
"""
|
|
86
|
-
with self._lock:
|
|
87
|
-
if seed is not None:
|
|
88
|
-
mx.random.seed(seed)
|
|
89
|
-
|
|
90
|
-
return stream_generate(
|
|
91
|
-
self.model,
|
|
92
|
-
self.tokenizer,
|
|
93
|
-
prompt,
|
|
94
|
-
**kwargs,
|
|
95
|
-
)
|
|
96
|
-
|
|
97
|
-
async def _stream_generate_async(
|
|
98
|
-
self,
|
|
99
|
-
prompt: TokenIds,
|
|
100
|
-
seed: int | None,
|
|
101
|
-
**kwargs: Unpack[_utils.StreamGenerateKwargs],
|
|
102
|
-
) -> AsyncChunkIterator:
|
|
103
|
-
"""Async generator that streams generation responses.
|
|
104
|
-
|
|
105
|
-
Note that, while stream_generate returns an iterable of GenerationResponse,
|
|
106
|
-
here we return an `AsyncChunkIterator`, in order to avoid having to implement
|
|
107
|
-
both synchronous and asynchronous versions of BaseEncoder.decode_stream.
|
|
108
|
-
This makes sense as in this case, there is nothing to gain from consuming the
|
|
109
|
-
generation asyncnronously.
|
|
110
|
-
"""
|
|
111
|
-
loop = asyncio.get_running_loop()
|
|
112
|
-
generation_queue: asyncio.Queue[StreamResponseChunk | Exception | None] = (
|
|
113
|
-
asyncio.Queue()
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
sync_stream = self.encoder.decode_stream(
|
|
117
|
-
self._stream_generate(
|
|
118
|
-
prompt,
|
|
119
|
-
seed,
|
|
120
|
-
**kwargs,
|
|
121
|
-
)
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
consume_task = asyncio.create_task(
|
|
125
|
-
asyncio.to_thread(
|
|
126
|
-
_consume_sync_stream_into_queue, sync_stream, loop, generation_queue
|
|
127
|
-
),
|
|
128
|
-
)
|
|
129
|
-
while item := await generation_queue.get():
|
|
130
|
-
if isinstance(item, Exception):
|
|
131
|
-
raise item
|
|
132
|
-
|
|
133
|
-
yield item
|
|
134
|
-
|
|
135
|
-
await consume_task
|
|
136
|
-
|
|
137
|
-
def stream(
|
|
138
|
-
self,
|
|
139
|
-
messages: Sequence[Message],
|
|
140
|
-
tools: Sequence[AnyToolSchema] | BaseToolkit[AnyToolSchema] | None,
|
|
141
|
-
format: type[FormattableT]
|
|
142
|
-
| Format[FormattableT]
|
|
143
|
-
| OutputParser[FormattableT]
|
|
144
|
-
| None,
|
|
145
|
-
params: Params,
|
|
146
|
-
) -> tuple[Sequence[Message], Format[FormattableT] | None, ChunkIterator]:
|
|
147
|
-
"""Stream response chunks synchronously.
|
|
148
|
-
|
|
149
|
-
Args:
|
|
150
|
-
messages: The input messages.
|
|
151
|
-
tools: Optional tools for the model.
|
|
152
|
-
format: Optional response format.
|
|
153
|
-
|
|
154
|
-
Returns:
|
|
155
|
-
Tuple of messages, format, and chunk iterator.
|
|
156
|
-
"""
|
|
157
|
-
messages, format, prompt = self.encoder.encode_request(messages, tools, format)
|
|
158
|
-
seed, kwargs = _utils.encode_params(params)
|
|
159
|
-
|
|
160
|
-
stream = self._stream_generate(prompt, seed, **kwargs)
|
|
161
|
-
return messages, format, self.encoder.decode_stream(stream)
|
|
162
|
-
|
|
163
|
-
async def stream_async(
|
|
164
|
-
self,
|
|
165
|
-
messages: Sequence[Message],
|
|
166
|
-
tools: Sequence[AnyToolSchema] | BaseToolkit[AnyToolSchema] | None,
|
|
167
|
-
format: type[FormattableT]
|
|
168
|
-
| Format[FormattableT]
|
|
169
|
-
| OutputParser[FormattableT]
|
|
170
|
-
| None,
|
|
171
|
-
params: Params,
|
|
172
|
-
) -> tuple[Sequence[Message], Format[FormattableT] | None, AsyncChunkIterator]:
|
|
173
|
-
"""Stream response chunks asynchronously.
|
|
174
|
-
|
|
175
|
-
Args:
|
|
176
|
-
messages: The input messages.
|
|
177
|
-
tools: Optional tools for the model.
|
|
178
|
-
format: Optional response format.
|
|
179
|
-
Returns:
|
|
180
|
-
Tuple of messages, format, and async chunk iterator.
|
|
181
|
-
"""
|
|
182
|
-
messages, format, prompt = await asyncio.to_thread(
|
|
183
|
-
self.encoder.encode_request, messages, tools, format
|
|
184
|
-
)
|
|
185
|
-
seed, kwargs = _utils.encode_params(params)
|
|
186
|
-
|
|
187
|
-
chunk_iterator = self._stream_generate_async(prompt, seed, **kwargs)
|
|
188
|
-
return messages, format, chunk_iterator
|
|
189
|
-
|
|
190
|
-
def generate(
|
|
191
|
-
self,
|
|
192
|
-
messages: Sequence[Message],
|
|
193
|
-
tools: Sequence[AnyToolSchema] | BaseToolkit[AnyToolSchema] | None,
|
|
194
|
-
format: type[FormattableT]
|
|
195
|
-
| Format[FormattableT]
|
|
196
|
-
| OutputParser[FormattableT]
|
|
197
|
-
| None,
|
|
198
|
-
params: Params,
|
|
199
|
-
) -> tuple[
|
|
200
|
-
Sequence[Message],
|
|
201
|
-
Format[FormattableT] | None,
|
|
202
|
-
AssistantMessage,
|
|
203
|
-
GenerationResponse | None,
|
|
204
|
-
]:
|
|
205
|
-
"""Generate a response synchronously.
|
|
206
|
-
|
|
207
|
-
Args:
|
|
208
|
-
messages: The input messages.
|
|
209
|
-
tools: Optional tools for the model.
|
|
210
|
-
format: Optional response format.
|
|
211
|
-
params: Generation parameters.
|
|
212
|
-
Returns:
|
|
213
|
-
Tuple of messages, format, assistant message, and last generation response.
|
|
214
|
-
"""
|
|
215
|
-
messages, format, prompt = self.encoder.encode_request(messages, tools, format)
|
|
216
|
-
seed, kwargs = _utils.encode_params(params)
|
|
217
|
-
|
|
218
|
-
stream = self._stream_generate(prompt, seed, **kwargs)
|
|
219
|
-
assistant_content, last_response = self.encoder.decode_response(stream)
|
|
220
|
-
assistant_message = assistant(
|
|
221
|
-
content=assistant_content,
|
|
222
|
-
model_id=self.model_id,
|
|
223
|
-
provider_id="mlx",
|
|
224
|
-
raw_message=None,
|
|
225
|
-
name=None,
|
|
226
|
-
)
|
|
227
|
-
return messages, format, assistant_message, last_response
|
|
228
|
-
|
|
229
|
-
async def generate_async(
|
|
230
|
-
self,
|
|
231
|
-
messages: Sequence[Message],
|
|
232
|
-
tools: Sequence[AnyToolSchema] | BaseToolkit[AnyToolSchema] | None,
|
|
233
|
-
format: type[FormattableT]
|
|
234
|
-
| Format[FormattableT]
|
|
235
|
-
| OutputParser[FormattableT]
|
|
236
|
-
| None,
|
|
237
|
-
params: Params,
|
|
238
|
-
) -> tuple[
|
|
239
|
-
Sequence[Message],
|
|
240
|
-
Format[FormattableT] | None,
|
|
241
|
-
AssistantMessage,
|
|
242
|
-
GenerationResponse | None,
|
|
243
|
-
]:
|
|
244
|
-
"""Generate a response asynchronously.
|
|
245
|
-
|
|
246
|
-
Args:
|
|
247
|
-
messages: The input messages.
|
|
248
|
-
tools: Optional tools for the model.
|
|
249
|
-
format: Optional response format.
|
|
250
|
-
params: Generation parameters.
|
|
251
|
-
Returns:
|
|
252
|
-
Tuple of messages, format, assistant message, and last generation response.
|
|
253
|
-
"""
|
|
254
|
-
return await asyncio.to_thread(self.generate, messages, tools, format, params)
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
from typing import TypeAlias
|
|
2
|
-
|
|
3
|
-
# TODO: Add more explicit literals
|
|
4
|
-
# TODO: Ensure automatic model downloads are supported.
|
|
5
|
-
# TODO: Ensure instructions are clear for examples that run as copied
|
|
6
|
-
MLXModelId: TypeAlias = str
|
|
7
|
-
"""The identifier of the MLX model to be loaded by the MLX client.
|
|
8
|
-
|
|
9
|
-
An MLX model identifier might be a local path to a model's file, or a huggingface
|
|
10
|
-
repository such as:
|
|
11
|
-
- "mlx-community/Qwen3-8B-4bit-DWQ-053125"
|
|
12
|
-
- "mlx-community/gpt-oss-20b-MXFP4-Q8"
|
|
13
|
-
|
|
14
|
-
For more details, see:
|
|
15
|
-
- https://github.com/ml-explore/mlx-lm/?tab=readme-ov-file#supported-models
|
|
16
|
-
- https://huggingface.co/mlx-community
|
|
17
|
-
"""
|