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,452 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from collections.abc import Sequence
|
|
4
|
-
from functools import cache, lru_cache
|
|
5
|
-
from typing import TYPE_CHECKING, cast
|
|
6
|
-
from typing_extensions import Unpack
|
|
7
|
-
|
|
8
|
-
import mlx.nn as nn
|
|
9
|
-
from mlx_lm import load as mlx_load
|
|
10
|
-
from transformers import PreTrainedTokenizer
|
|
11
|
-
|
|
12
|
-
from ...context import Context, DepsT
|
|
13
|
-
from ...formatting import Format, FormattableT, OutputParser
|
|
14
|
-
from ...messages import Message
|
|
15
|
-
from ...responses import (
|
|
16
|
-
AsyncContextResponse,
|
|
17
|
-
AsyncContextStreamResponse,
|
|
18
|
-
AsyncResponse,
|
|
19
|
-
AsyncStreamResponse,
|
|
20
|
-
ContextResponse,
|
|
21
|
-
ContextStreamResponse,
|
|
22
|
-
Response,
|
|
23
|
-
StreamResponse,
|
|
24
|
-
)
|
|
25
|
-
from ...tools import (
|
|
26
|
-
AsyncContextTool,
|
|
27
|
-
AsyncContextToolkit,
|
|
28
|
-
AsyncTool,
|
|
29
|
-
AsyncToolkit,
|
|
30
|
-
ContextTool,
|
|
31
|
-
ContextToolkit,
|
|
32
|
-
Tool,
|
|
33
|
-
Toolkit,
|
|
34
|
-
)
|
|
35
|
-
from ..base import BaseProvider
|
|
36
|
-
from . import _utils
|
|
37
|
-
from .encoding import TransformersEncoder
|
|
38
|
-
from .mlx import MLX
|
|
39
|
-
from .model_id import MLXModelId
|
|
40
|
-
|
|
41
|
-
if TYPE_CHECKING:
|
|
42
|
-
from ...models import Params
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@cache
|
|
46
|
-
def _mlx_client_singleton() -> MLXProvider:
|
|
47
|
-
"""Get or create the singleton MLX client instance."""
|
|
48
|
-
return MLXProvider()
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def client() -> MLXProvider:
|
|
52
|
-
"""Get the MLX client singleton instance."""
|
|
53
|
-
return _mlx_client_singleton()
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
@lru_cache(maxsize=16)
|
|
57
|
-
def _get_mlx(model_id: MLXModelId) -> MLX:
|
|
58
|
-
model, tokenizer = cast(tuple[nn.Module, PreTrainedTokenizer], mlx_load(model_id))
|
|
59
|
-
encoder = TransformersEncoder(tokenizer)
|
|
60
|
-
return MLX(
|
|
61
|
-
model_id,
|
|
62
|
-
model,
|
|
63
|
-
tokenizer,
|
|
64
|
-
encoder,
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
class MLXProvider(BaseProvider[None]):
|
|
69
|
-
"""Client for interacting with MLX language models.
|
|
70
|
-
|
|
71
|
-
This client provides methods for generating responses from MLX models,
|
|
72
|
-
supporting both synchronous and asynchronous operations, as well as
|
|
73
|
-
streaming responses.
|
|
74
|
-
"""
|
|
75
|
-
|
|
76
|
-
id = "mlx"
|
|
77
|
-
default_scope = "mlx-community/"
|
|
78
|
-
error_map = _utils.MLX_ERROR_MAP
|
|
79
|
-
|
|
80
|
-
def get_error_status(self, e: Exception) -> int | None:
|
|
81
|
-
"""Extract HTTP status code from MLX exception.
|
|
82
|
-
|
|
83
|
-
MLX/HuggingFace Hub exceptions don't have status codes.
|
|
84
|
-
"""
|
|
85
|
-
return None
|
|
86
|
-
|
|
87
|
-
def _call(
|
|
88
|
-
self,
|
|
89
|
-
*,
|
|
90
|
-
model_id: MLXModelId,
|
|
91
|
-
messages: Sequence[Message],
|
|
92
|
-
tools: Sequence[Tool] | Toolkit | None = None,
|
|
93
|
-
format: type[FormattableT]
|
|
94
|
-
| Format[FormattableT]
|
|
95
|
-
| OutputParser[FormattableT]
|
|
96
|
-
| None = None,
|
|
97
|
-
**params: Unpack[Params],
|
|
98
|
-
) -> Response | Response[FormattableT]:
|
|
99
|
-
"""Generate an `llm.Response` using MLX model.
|
|
100
|
-
|
|
101
|
-
Args:
|
|
102
|
-
model_id: Model identifier to use.
|
|
103
|
-
messages: Messages to send to the LLM.
|
|
104
|
-
tools: Optional tools that the model may invoke.
|
|
105
|
-
format: Optional response format specifier.
|
|
106
|
-
**params: Additional parameters to configure output (e.g. temperature). See `llm.Params`.
|
|
107
|
-
|
|
108
|
-
Returns:
|
|
109
|
-
An `llm.Response` object containing the LLM-generated content.
|
|
110
|
-
"""
|
|
111
|
-
mlx = _get_mlx(model_id)
|
|
112
|
-
|
|
113
|
-
input_messages, format, assistant_message, response = mlx.generate(
|
|
114
|
-
messages, tools, format, params
|
|
115
|
-
)
|
|
116
|
-
|
|
117
|
-
return Response(
|
|
118
|
-
raw=response,
|
|
119
|
-
provider_id="mlx",
|
|
120
|
-
model_id=model_id,
|
|
121
|
-
provider_model_name=model_id,
|
|
122
|
-
params=params,
|
|
123
|
-
tools=tools,
|
|
124
|
-
input_messages=input_messages,
|
|
125
|
-
assistant_message=assistant_message,
|
|
126
|
-
finish_reason=_utils.extract_finish_reason(response),
|
|
127
|
-
usage=_utils.extract_usage(response),
|
|
128
|
-
format=format,
|
|
129
|
-
)
|
|
130
|
-
|
|
131
|
-
def _context_call(
|
|
132
|
-
self,
|
|
133
|
-
*,
|
|
134
|
-
ctx: Context[DepsT],
|
|
135
|
-
model_id: MLXModelId,
|
|
136
|
-
messages: Sequence[Message],
|
|
137
|
-
tools: Sequence[Tool | ContextTool[DepsT]]
|
|
138
|
-
| ContextToolkit[DepsT]
|
|
139
|
-
| None = None,
|
|
140
|
-
format: type[FormattableT]
|
|
141
|
-
| Format[FormattableT]
|
|
142
|
-
| OutputParser[FormattableT]
|
|
143
|
-
| None = None,
|
|
144
|
-
**params: Unpack[Params],
|
|
145
|
-
) -> ContextResponse[DepsT, None] | ContextResponse[DepsT, FormattableT]:
|
|
146
|
-
"""Generate an `llm.ContextResponse` using MLX model.
|
|
147
|
-
|
|
148
|
-
Args:
|
|
149
|
-
ctx: Context object with dependencies for tools.
|
|
150
|
-
model_id: Model identifier to use.
|
|
151
|
-
messages: Messages to send to the LLM.
|
|
152
|
-
tools: Optional tools that the model may invoke.
|
|
153
|
-
format: Optional response format specifier.
|
|
154
|
-
**params: Additional parameters to configure output (e.g. temperature). See `llm.Params`.
|
|
155
|
-
|
|
156
|
-
Returns:
|
|
157
|
-
An `llm.ContextResponse` object containing the LLM-generated content.
|
|
158
|
-
"""
|
|
159
|
-
mlx = _get_mlx(model_id)
|
|
160
|
-
|
|
161
|
-
input_messages, format, assistant_message, response = mlx.generate(
|
|
162
|
-
messages, tools, format, params
|
|
163
|
-
)
|
|
164
|
-
|
|
165
|
-
return ContextResponse(
|
|
166
|
-
raw=response,
|
|
167
|
-
provider_id="mlx",
|
|
168
|
-
model_id=model_id,
|
|
169
|
-
provider_model_name=model_id,
|
|
170
|
-
params=params,
|
|
171
|
-
tools=tools,
|
|
172
|
-
input_messages=input_messages,
|
|
173
|
-
assistant_message=assistant_message,
|
|
174
|
-
finish_reason=_utils.extract_finish_reason(response),
|
|
175
|
-
usage=_utils.extract_usage(response),
|
|
176
|
-
format=format,
|
|
177
|
-
)
|
|
178
|
-
|
|
179
|
-
async def _call_async(
|
|
180
|
-
self,
|
|
181
|
-
*,
|
|
182
|
-
model_id: MLXModelId,
|
|
183
|
-
messages: Sequence[Message],
|
|
184
|
-
tools: Sequence[AsyncTool] | AsyncToolkit | None = None,
|
|
185
|
-
format: type[FormattableT]
|
|
186
|
-
| Format[FormattableT]
|
|
187
|
-
| OutputParser[FormattableT]
|
|
188
|
-
| None = None,
|
|
189
|
-
**params: Unpack[Params],
|
|
190
|
-
) -> AsyncResponse | AsyncResponse[FormattableT]:
|
|
191
|
-
"""Generate an `llm.AsyncResponse` using MLX model by asynchronously calloing
|
|
192
|
-
`asycio.to_thread`.
|
|
193
|
-
|
|
194
|
-
Args:
|
|
195
|
-
model_id: Model identifier to use.
|
|
196
|
-
messages: Messages to send to the LLM.
|
|
197
|
-
tools: Optional tools that the model may invoke.
|
|
198
|
-
format: Optional response format specifier.
|
|
199
|
-
**params: Additional parameters to configure output (e.g. temperature). See `llm.Params`.
|
|
200
|
-
|
|
201
|
-
Returns:
|
|
202
|
-
An `llm.AsyncResponse` object containing the LLM-generated content.
|
|
203
|
-
"""
|
|
204
|
-
mlx = _get_mlx(model_id)
|
|
205
|
-
|
|
206
|
-
(
|
|
207
|
-
input_messages,
|
|
208
|
-
format,
|
|
209
|
-
assistant_message,
|
|
210
|
-
response,
|
|
211
|
-
) = await mlx.generate_async(messages, tools, format, params)
|
|
212
|
-
|
|
213
|
-
return AsyncResponse(
|
|
214
|
-
raw=response,
|
|
215
|
-
provider_id="mlx",
|
|
216
|
-
model_id=model_id,
|
|
217
|
-
provider_model_name=model_id,
|
|
218
|
-
params=params,
|
|
219
|
-
tools=tools,
|
|
220
|
-
input_messages=input_messages,
|
|
221
|
-
assistant_message=assistant_message,
|
|
222
|
-
finish_reason=_utils.extract_finish_reason(response),
|
|
223
|
-
usage=_utils.extract_usage(response),
|
|
224
|
-
format=format,
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
async def _context_call_async(
|
|
228
|
-
self,
|
|
229
|
-
*,
|
|
230
|
-
ctx: Context[DepsT],
|
|
231
|
-
model_id: MLXModelId,
|
|
232
|
-
messages: Sequence[Message],
|
|
233
|
-
tools: Sequence[AsyncTool | AsyncContextTool[DepsT]]
|
|
234
|
-
| AsyncContextToolkit[DepsT]
|
|
235
|
-
| None = None,
|
|
236
|
-
format: type[FormattableT]
|
|
237
|
-
| Format[FormattableT]
|
|
238
|
-
| OutputParser[FormattableT]
|
|
239
|
-
| None = None,
|
|
240
|
-
**params: Unpack[Params],
|
|
241
|
-
) -> AsyncContextResponse[DepsT, None] | AsyncContextResponse[DepsT, FormattableT]:
|
|
242
|
-
"""Generate an `llm.AsyncResponse` using MLX model by asynchronously calloing
|
|
243
|
-
`asycio.to_thread`.
|
|
244
|
-
|
|
245
|
-
Args:
|
|
246
|
-
ctx: Context object with dependencies for tools.
|
|
247
|
-
model_id: Model identifier to use.
|
|
248
|
-
messages: Messages to send to the LLM.
|
|
249
|
-
tools: Optional tools that the model may invoke.
|
|
250
|
-
format: Optional response format specifier.
|
|
251
|
-
**params: Additional parameters to configure output (e.g. temperature). See `llm.Params`.
|
|
252
|
-
|
|
253
|
-
Returns:
|
|
254
|
-
An `llm.AsyncContextResponse` object containing the LLM-generated content.
|
|
255
|
-
"""
|
|
256
|
-
mlx = _get_mlx(model_id)
|
|
257
|
-
|
|
258
|
-
(
|
|
259
|
-
input_messages,
|
|
260
|
-
format,
|
|
261
|
-
assistant_message,
|
|
262
|
-
response,
|
|
263
|
-
) = await mlx.generate_async(messages, tools, format, params)
|
|
264
|
-
|
|
265
|
-
return AsyncContextResponse(
|
|
266
|
-
raw=response,
|
|
267
|
-
provider_id="mlx",
|
|
268
|
-
model_id=model_id,
|
|
269
|
-
provider_model_name=model_id,
|
|
270
|
-
params=params,
|
|
271
|
-
tools=tools,
|
|
272
|
-
input_messages=input_messages,
|
|
273
|
-
assistant_message=assistant_message,
|
|
274
|
-
finish_reason=_utils.extract_finish_reason(response),
|
|
275
|
-
usage=_utils.extract_usage(response),
|
|
276
|
-
format=format,
|
|
277
|
-
)
|
|
278
|
-
|
|
279
|
-
def _stream(
|
|
280
|
-
self,
|
|
281
|
-
*,
|
|
282
|
-
model_id: MLXModelId,
|
|
283
|
-
messages: Sequence[Message],
|
|
284
|
-
tools: Sequence[Tool] | Toolkit | None = None,
|
|
285
|
-
format: type[FormattableT]
|
|
286
|
-
| Format[FormattableT]
|
|
287
|
-
| OutputParser[FormattableT]
|
|
288
|
-
| None = None,
|
|
289
|
-
**params: Unpack[Params],
|
|
290
|
-
) -> StreamResponse | StreamResponse[FormattableT]:
|
|
291
|
-
"""Generate an `llm.StreamResponse` by synchronously streaming from MLX model output.
|
|
292
|
-
|
|
293
|
-
Args:
|
|
294
|
-
model_id: Model identifier to use.
|
|
295
|
-
messages: Messages to send to the LLM.
|
|
296
|
-
tools: Optional tools that the model may invoke.
|
|
297
|
-
format: Optional response format specifier.
|
|
298
|
-
**params: Additional parameters to configure output (e.g. temperature). See `llm.Params`.
|
|
299
|
-
|
|
300
|
-
Returns:
|
|
301
|
-
An `llm.StreamResponse` object for iterating over the LLM-generated content.
|
|
302
|
-
"""
|
|
303
|
-
mlx = _get_mlx(model_id)
|
|
304
|
-
|
|
305
|
-
input_messages, format, chunk_iterator = mlx.stream(
|
|
306
|
-
messages, tools, format, params
|
|
307
|
-
)
|
|
308
|
-
|
|
309
|
-
return StreamResponse(
|
|
310
|
-
provider_id="mlx",
|
|
311
|
-
model_id=model_id,
|
|
312
|
-
provider_model_name=model_id,
|
|
313
|
-
params=params,
|
|
314
|
-
tools=tools,
|
|
315
|
-
input_messages=input_messages,
|
|
316
|
-
chunk_iterator=chunk_iterator,
|
|
317
|
-
format=format,
|
|
318
|
-
)
|
|
319
|
-
|
|
320
|
-
def _context_stream(
|
|
321
|
-
self,
|
|
322
|
-
*,
|
|
323
|
-
ctx: Context[DepsT],
|
|
324
|
-
model_id: MLXModelId,
|
|
325
|
-
messages: Sequence[Message],
|
|
326
|
-
tools: Sequence[Tool | ContextTool[DepsT]]
|
|
327
|
-
| ContextToolkit[DepsT]
|
|
328
|
-
| None = None,
|
|
329
|
-
format: type[FormattableT]
|
|
330
|
-
| Format[FormattableT]
|
|
331
|
-
| OutputParser[FormattableT]
|
|
332
|
-
| None = None,
|
|
333
|
-
**params: Unpack[Params],
|
|
334
|
-
) -> ContextStreamResponse[DepsT] | ContextStreamResponse[DepsT, FormattableT]:
|
|
335
|
-
"""Generate an `llm.ContextStreamResponse` by synchronously streaming from MLX model output.
|
|
336
|
-
|
|
337
|
-
Args:
|
|
338
|
-
ctx: Context object with dependencies for tools.
|
|
339
|
-
model_id: Model identifier to use.
|
|
340
|
-
messages: Messages to send to the LLM.
|
|
341
|
-
tools: Optional tools that the model may invoke.
|
|
342
|
-
format: Optional response format specifier.
|
|
343
|
-
**params: Additional parameters to configure output (e.g. temperature). See `llm.Params`.
|
|
344
|
-
|
|
345
|
-
Returns:
|
|
346
|
-
An `llm.ContextStreamResponse` object for iterating over the LLM-generated content.
|
|
347
|
-
"""
|
|
348
|
-
mlx = _get_mlx(model_id)
|
|
349
|
-
|
|
350
|
-
input_messages, format, chunk_iterator = mlx.stream(
|
|
351
|
-
messages, tools, format, params
|
|
352
|
-
)
|
|
353
|
-
|
|
354
|
-
return ContextStreamResponse(
|
|
355
|
-
provider_id="mlx",
|
|
356
|
-
model_id=model_id,
|
|
357
|
-
provider_model_name=model_id,
|
|
358
|
-
params=params,
|
|
359
|
-
tools=tools,
|
|
360
|
-
input_messages=input_messages,
|
|
361
|
-
chunk_iterator=chunk_iterator,
|
|
362
|
-
format=format,
|
|
363
|
-
)
|
|
364
|
-
|
|
365
|
-
async def _stream_async(
|
|
366
|
-
self,
|
|
367
|
-
*,
|
|
368
|
-
model_id: MLXModelId,
|
|
369
|
-
messages: Sequence[Message],
|
|
370
|
-
tools: Sequence[AsyncTool] | AsyncToolkit | None = None,
|
|
371
|
-
format: type[FormattableT]
|
|
372
|
-
| Format[FormattableT]
|
|
373
|
-
| OutputParser[FormattableT]
|
|
374
|
-
| None = None,
|
|
375
|
-
**params: Unpack[Params],
|
|
376
|
-
) -> AsyncStreamResponse | AsyncStreamResponse[FormattableT]:
|
|
377
|
-
"""Generate an `llm.AsyncStreamResponse` by asynchronously streaming from MLX model output.
|
|
378
|
-
|
|
379
|
-
Args:
|
|
380
|
-
model_id: Model identifier to use.
|
|
381
|
-
messages: Messages to send to the LLM.
|
|
382
|
-
tools: Optional tools that the model may invoke.
|
|
383
|
-
format: Optional response format specifier.
|
|
384
|
-
**params: Additional parameters to configure output (e.g. temperature). See `llm.Params`.
|
|
385
|
-
|
|
386
|
-
Returns:
|
|
387
|
-
An `llm.AsyncStreamResponse` object for asynchronously iterating over the LLM-generated content.
|
|
388
|
-
"""
|
|
389
|
-
mlx = _get_mlx(model_id)
|
|
390
|
-
|
|
391
|
-
input_messages, format, chunk_iterator = await mlx.stream_async(
|
|
392
|
-
messages, tools, format, params
|
|
393
|
-
)
|
|
394
|
-
|
|
395
|
-
return AsyncStreamResponse(
|
|
396
|
-
provider_id="mlx",
|
|
397
|
-
model_id=model_id,
|
|
398
|
-
provider_model_name=model_id,
|
|
399
|
-
params=params,
|
|
400
|
-
tools=tools,
|
|
401
|
-
input_messages=input_messages,
|
|
402
|
-
chunk_iterator=chunk_iterator,
|
|
403
|
-
format=format,
|
|
404
|
-
)
|
|
405
|
-
|
|
406
|
-
async def _context_stream_async(
|
|
407
|
-
self,
|
|
408
|
-
*,
|
|
409
|
-
ctx: Context[DepsT],
|
|
410
|
-
model_id: MLXModelId,
|
|
411
|
-
messages: Sequence[Message],
|
|
412
|
-
tools: Sequence[AsyncTool | AsyncContextTool[DepsT]]
|
|
413
|
-
| AsyncContextToolkit[DepsT]
|
|
414
|
-
| None = None,
|
|
415
|
-
format: type[FormattableT]
|
|
416
|
-
| Format[FormattableT]
|
|
417
|
-
| OutputParser[FormattableT]
|
|
418
|
-
| None = None,
|
|
419
|
-
**params: Unpack[Params],
|
|
420
|
-
) -> (
|
|
421
|
-
AsyncContextStreamResponse[DepsT]
|
|
422
|
-
| AsyncContextStreamResponse[DepsT, FormattableT]
|
|
423
|
-
):
|
|
424
|
-
"""Generate an `llm.AsyncContextStreamResponse` by asynchronously streaming from MLX model output.
|
|
425
|
-
|
|
426
|
-
Args:
|
|
427
|
-
ctx: Context object with dependencies for tools.
|
|
428
|
-
model_id: Model identifier to use.
|
|
429
|
-
messages: Messages to send to the LLM.
|
|
430
|
-
tools: Optional tools that the model may invoke.
|
|
431
|
-
format: Optional response format specifier.
|
|
432
|
-
**params: Additional parameters to configure output (e.g. temperature). See `llm.Params`.
|
|
433
|
-
|
|
434
|
-
Returns:
|
|
435
|
-
An `llm.AsyncContextStreamResponse` object for asynchronously iterating over the LLM-generated content.
|
|
436
|
-
"""
|
|
437
|
-
mlx = _get_mlx(model_id)
|
|
438
|
-
|
|
439
|
-
input_messages, format, chunk_iterator = await mlx.stream_async(
|
|
440
|
-
messages, tools, format, params
|
|
441
|
-
)
|
|
442
|
-
|
|
443
|
-
return AsyncContextStreamResponse(
|
|
444
|
-
provider_id="mlx",
|
|
445
|
-
model_id=model_id,
|
|
446
|
-
provider_model_name=model_id,
|
|
447
|
-
params=params,
|
|
448
|
-
tools=tools,
|
|
449
|
-
input_messages=input_messages,
|
|
450
|
-
chunk_iterator=chunk_iterator,
|
|
451
|
-
format=format,
|
|
452
|
-
)
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
from typing import TypeAlias
|
|
2
|
-
|
|
3
|
-
from .anthropic import (
|
|
4
|
-
AnthropicModelId,
|
|
5
|
-
)
|
|
6
|
-
from .google import (
|
|
7
|
-
GoogleModelId,
|
|
8
|
-
)
|
|
9
|
-
from .mlx import (
|
|
10
|
-
MLXModelId,
|
|
11
|
-
)
|
|
12
|
-
from .openai import (
|
|
13
|
-
OpenAIModelId,
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
ModelId: TypeAlias = AnthropicModelId | GoogleModelId | OpenAIModelId | MLXModelId | str
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"""Ollama provider implementation."""
|
|
2
|
-
|
|
3
|
-
import os
|
|
4
|
-
from typing import ClassVar
|
|
5
|
-
|
|
6
|
-
from openai import AsyncOpenAI, OpenAI
|
|
7
|
-
|
|
8
|
-
from ..openai.completions.base_provider import BaseOpenAICompletionsProvider
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class OllamaProvider(BaseOpenAICompletionsProvider):
|
|
12
|
-
"""Provider for Ollama's OpenAI-compatible API.
|
|
13
|
-
|
|
14
|
-
Inherits from BaseOpenAICompletionsProvider with Ollama-specific configuration:
|
|
15
|
-
- Uses Ollama's local API endpoint (default: http://localhost:11434/v1/)
|
|
16
|
-
- API key is not required (Ollama ignores API keys)
|
|
17
|
-
- Supports OLLAMA_BASE_URL environment variable
|
|
18
|
-
|
|
19
|
-
Usage:
|
|
20
|
-
Register the provider with model ID prefixes you want to use:
|
|
21
|
-
|
|
22
|
-
```python
|
|
23
|
-
import llm
|
|
24
|
-
|
|
25
|
-
# Register for ollama models
|
|
26
|
-
llm.register_provider("ollama", "ollama/")
|
|
27
|
-
|
|
28
|
-
# Now you can use ollama models directly
|
|
29
|
-
@llm.call("ollama/llama2")
|
|
30
|
-
def my_prompt():
|
|
31
|
-
return [llm.messages.user("Hello!")]
|
|
32
|
-
```
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
id: ClassVar[str] = "ollama"
|
|
36
|
-
default_scope: ClassVar[str | list[str]] = "ollama/"
|
|
37
|
-
default_base_url: ClassVar[str | None] = "http://localhost:11434/v1/"
|
|
38
|
-
api_key_env_var: ClassVar[str] = "OLLAMA_API_KEY"
|
|
39
|
-
api_key_required: ClassVar[bool] = False
|
|
40
|
-
provider_name: ClassVar[str | None] = "Ollama"
|
|
41
|
-
|
|
42
|
-
def __init__(
|
|
43
|
-
self,
|
|
44
|
-
*,
|
|
45
|
-
api_key: str | None = None,
|
|
46
|
-
base_url: str | None = None,
|
|
47
|
-
) -> None:
|
|
48
|
-
"""Initialize the Ollama provider.
|
|
49
|
-
|
|
50
|
-
Args:
|
|
51
|
-
api_key: API key (optional). Defaults to OLLAMA_API_KEY env var or 'ollama'.
|
|
52
|
-
base_url: Custom base URL. Defaults to OLLAMA_BASE_URL env var
|
|
53
|
-
or http://localhost:11434/v1/.
|
|
54
|
-
"""
|
|
55
|
-
resolved_api_key = api_key or os.environ.get(self.api_key_env_var) or "ollama"
|
|
56
|
-
resolved_base_url = (
|
|
57
|
-
base_url or os.environ.get("OLLAMA_BASE_URL") or self.default_base_url
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
self.client = OpenAI(
|
|
61
|
-
api_key=resolved_api_key,
|
|
62
|
-
base_url=resolved_base_url,
|
|
63
|
-
)
|
|
64
|
-
self.async_client = AsyncOpenAI(
|
|
65
|
-
api_key=resolved_api_key,
|
|
66
|
-
base_url=resolved_base_url,
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
def _model_name(self, model_id: str) -> str:
|
|
70
|
-
"""Strip 'ollama/' prefix from model ID for Ollama API."""
|
|
71
|
-
return model_id.removeprefix("ollama/")
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"""OpenAI client implementation."""
|
|
2
|
-
|
|
3
|
-
from .completions.base_provider import BaseOpenAICompletionsProvider
|
|
4
|
-
from .completions.provider import OpenAICompletionsProvider
|
|
5
|
-
from .model_id import OpenAIModelId
|
|
6
|
-
from .provider import OpenAIProvider
|
|
7
|
-
from .responses.provider import OpenAIResponsesProvider
|
|
8
|
-
|
|
9
|
-
__all__ = [
|
|
10
|
-
"BaseOpenAICompletionsProvider",
|
|
11
|
-
"OpenAICompletionsProvider",
|
|
12
|
-
"OpenAIModelId",
|
|
13
|
-
"OpenAIProvider",
|
|
14
|
-
"OpenAIResponsesProvider",
|
|
15
|
-
]
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"""OpenAI error handling utilities."""
|
|
2
|
-
|
|
3
|
-
from openai import (
|
|
4
|
-
APIConnectionError as OpenAIAPIConnectionError,
|
|
5
|
-
APIResponseValidationError as OpenAIAPIResponseValidationError,
|
|
6
|
-
APITimeoutError as OpenAIAPITimeoutError,
|
|
7
|
-
AuthenticationError as OpenAIAuthenticationError,
|
|
8
|
-
BadRequestError as OpenAIBadRequestError,
|
|
9
|
-
ConflictError as OpenAIConflictError,
|
|
10
|
-
InternalServerError as OpenAIInternalServerError,
|
|
11
|
-
NotFoundError as OpenAINotFoundError,
|
|
12
|
-
OpenAIError,
|
|
13
|
-
PermissionDeniedError as OpenAIPermissionDeniedError,
|
|
14
|
-
RateLimitError as OpenAIRateLimitError,
|
|
15
|
-
UnprocessableEntityError as OpenAIUnprocessableEntityError,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
from ....exceptions import (
|
|
19
|
-
AuthenticationError,
|
|
20
|
-
BadRequestError,
|
|
21
|
-
ConnectionError,
|
|
22
|
-
NotFoundError,
|
|
23
|
-
PermissionError,
|
|
24
|
-
ProviderError,
|
|
25
|
-
RateLimitError,
|
|
26
|
-
ResponseValidationError,
|
|
27
|
-
ServerError,
|
|
28
|
-
TimeoutError,
|
|
29
|
-
)
|
|
30
|
-
from ...base import ProviderErrorMap
|
|
31
|
-
|
|
32
|
-
# Shared error mapping used by OpenAI Responses and Completions providers
|
|
33
|
-
OPENAI_ERROR_MAP: ProviderErrorMap = {
|
|
34
|
-
OpenAIAuthenticationError: AuthenticationError,
|
|
35
|
-
OpenAIPermissionDeniedError: PermissionError,
|
|
36
|
-
OpenAINotFoundError: NotFoundError,
|
|
37
|
-
OpenAIBadRequestError: BadRequestError,
|
|
38
|
-
OpenAIUnprocessableEntityError: BadRequestError,
|
|
39
|
-
OpenAIConflictError: BadRequestError,
|
|
40
|
-
OpenAIRateLimitError: RateLimitError,
|
|
41
|
-
OpenAIInternalServerError: ServerError,
|
|
42
|
-
OpenAIAPITimeoutError: TimeoutError,
|
|
43
|
-
OpenAIAPIConnectionError: ConnectionError,
|
|
44
|
-
OpenAIAPIResponseValidationError: ResponseValidationError,
|
|
45
|
-
OpenAIError: ProviderError, # Catch-all for unknown OpenAI errors
|
|
46
|
-
}
|