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
mirascope/llm/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""The `llm` module for writing provider-agnostic LLM Generations.
|
|
2
2
|
|
|
3
3
|
This module provides a unified interface for interacting with different LLM providers,
|
|
4
4
|
including messages, tools, response formatting, and streaming. It allows you to write
|
|
@@ -12,13 +12,13 @@ from contextlib import suppress
|
|
|
12
12
|
|
|
13
13
|
from . import (
|
|
14
14
|
calls,
|
|
15
|
+
clients,
|
|
15
16
|
content,
|
|
16
17
|
exceptions,
|
|
17
18
|
formatting,
|
|
18
19
|
messages,
|
|
19
20
|
models,
|
|
20
21
|
prompts,
|
|
21
|
-
providers,
|
|
22
22
|
responses,
|
|
23
23
|
tools,
|
|
24
24
|
types,
|
|
@@ -26,7 +26,8 @@ from . import (
|
|
|
26
26
|
|
|
27
27
|
with suppress(ImportError):
|
|
28
28
|
from . import mcp
|
|
29
|
-
from .calls import
|
|
29
|
+
from .calls import call
|
|
30
|
+
from .clients import ModelId, Params, Provider, client, get_client
|
|
30
31
|
from .content import (
|
|
31
32
|
AssistantContentChunk,
|
|
32
33
|
AssistantContentPart,
|
|
@@ -51,37 +52,23 @@ from .content import (
|
|
|
51
52
|
URLImageSource,
|
|
52
53
|
UserContentPart,
|
|
53
54
|
)
|
|
54
|
-
from .context import Context
|
|
55
|
+
from .context import Context
|
|
55
56
|
from .exceptions import (
|
|
56
57
|
APIError,
|
|
57
58
|
AuthenticationError,
|
|
58
59
|
BadRequestError,
|
|
59
60
|
ConnectionError,
|
|
60
|
-
Error,
|
|
61
61
|
FeatureNotSupportedError,
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
FormattingModeNotSupportedError,
|
|
63
|
+
MirascopeError,
|
|
64
64
|
NotFoundError,
|
|
65
|
-
ParseError,
|
|
66
65
|
PermissionError,
|
|
67
|
-
ProviderError,
|
|
68
66
|
RateLimitError,
|
|
69
|
-
ResponseValidationError,
|
|
70
67
|
ServerError,
|
|
71
68
|
TimeoutError,
|
|
72
|
-
ToolError,
|
|
73
|
-
ToolExecutionError,
|
|
74
69
|
ToolNotFoundError,
|
|
75
70
|
)
|
|
76
|
-
from .formatting import
|
|
77
|
-
Format,
|
|
78
|
-
FormattableT,
|
|
79
|
-
FormattingMode,
|
|
80
|
-
OutputParser,
|
|
81
|
-
Partial,
|
|
82
|
-
format,
|
|
83
|
-
output_parser,
|
|
84
|
-
)
|
|
71
|
+
from .formatting import Format, FormattingMode, Partial, format
|
|
85
72
|
from .messages import (
|
|
86
73
|
AssistantContent,
|
|
87
74
|
AssistantMessage,
|
|
@@ -91,32 +78,9 @@ from .messages import (
|
|
|
91
78
|
UserContent,
|
|
92
79
|
UserMessage,
|
|
93
80
|
)
|
|
94
|
-
from .models import
|
|
95
|
-
|
|
96
|
-
Params,
|
|
97
|
-
ThinkingConfig,
|
|
98
|
-
ThinkingLevel,
|
|
99
|
-
model,
|
|
100
|
-
model_from_context,
|
|
101
|
-
use_model,
|
|
102
|
-
)
|
|
103
|
-
from .prompts import (
|
|
104
|
-
AsyncContextPrompt,
|
|
105
|
-
AsyncPrompt,
|
|
106
|
-
ContextPrompt,
|
|
107
|
-
Prompt,
|
|
108
|
-
PromptDecorator,
|
|
109
|
-
prompt,
|
|
110
|
-
)
|
|
111
|
-
from .providers import (
|
|
112
|
-
ModelId,
|
|
113
|
-
Provider,
|
|
114
|
-
ProviderId,
|
|
115
|
-
register_provider,
|
|
116
|
-
reset_provider_registry,
|
|
117
|
-
)
|
|
81
|
+
from .models import Model, model, use_model
|
|
82
|
+
from .prompts import prompt
|
|
118
83
|
from .responses import (
|
|
119
|
-
AnyResponse,
|
|
120
84
|
AsyncChunkIterator,
|
|
121
85
|
AsyncContextResponse,
|
|
122
86
|
AsyncContextStreamResponse,
|
|
@@ -132,52 +96,36 @@ from .responses import (
|
|
|
132
96
|
FinishReason,
|
|
133
97
|
RawMessageChunk,
|
|
134
98
|
Response,
|
|
135
|
-
RootResponse,
|
|
136
99
|
Stream,
|
|
137
100
|
StreamResponse,
|
|
138
101
|
StreamResponseChunk,
|
|
139
102
|
TextStream,
|
|
140
103
|
ThoughtStream,
|
|
141
104
|
ToolCallStream,
|
|
142
|
-
Usage,
|
|
143
|
-
UsageDeltaChunk,
|
|
144
105
|
)
|
|
145
106
|
from .tools import (
|
|
146
|
-
AnyToolFn,
|
|
147
|
-
AnyToolSchema,
|
|
148
107
|
AsyncContextTool,
|
|
149
108
|
AsyncContextToolkit,
|
|
150
109
|
AsyncTool,
|
|
151
110
|
AsyncToolkit,
|
|
152
|
-
BaseToolkit,
|
|
153
111
|
ContextTool,
|
|
154
112
|
ContextToolkit,
|
|
155
113
|
Tool,
|
|
156
114
|
Toolkit,
|
|
157
|
-
ToolkitT,
|
|
158
|
-
ToolSchema,
|
|
159
115
|
tool,
|
|
160
116
|
)
|
|
161
|
-
from .types import Jsonable
|
|
162
117
|
|
|
163
118
|
__all__ = [
|
|
164
119
|
"APIError",
|
|
165
|
-
"AnyResponse",
|
|
166
|
-
"AnyToolFn",
|
|
167
|
-
"AnyToolSchema",
|
|
168
120
|
"AssistantContent",
|
|
169
121
|
"AssistantContentChunk",
|
|
170
122
|
"AssistantContentPart",
|
|
171
123
|
"AssistantMessage",
|
|
172
|
-
"AsyncCall",
|
|
173
124
|
"AsyncChunkIterator",
|
|
174
|
-
"AsyncContextCall",
|
|
175
|
-
"AsyncContextPrompt",
|
|
176
125
|
"AsyncContextResponse",
|
|
177
126
|
"AsyncContextStreamResponse",
|
|
178
127
|
"AsyncContextTool",
|
|
179
128
|
"AsyncContextToolkit",
|
|
180
|
-
"AsyncPrompt",
|
|
181
129
|
"AsyncResponse",
|
|
182
130
|
"AsyncStream",
|
|
183
131
|
"AsyncStreamResponse",
|
|
@@ -191,49 +139,30 @@ __all__ = [
|
|
|
191
139
|
"BadRequestError",
|
|
192
140
|
"Base64AudioSource",
|
|
193
141
|
"Base64ImageSource",
|
|
194
|
-
"BaseToolkit",
|
|
195
|
-
"Call",
|
|
196
|
-
"CallDecorator",
|
|
197
142
|
"ChunkIterator",
|
|
198
143
|
"ConnectionError",
|
|
199
144
|
"Context",
|
|
200
|
-
"ContextCall",
|
|
201
|
-
"ContextPrompt",
|
|
202
145
|
"ContextResponse",
|
|
203
146
|
"ContextStreamResponse",
|
|
204
147
|
"ContextTool",
|
|
205
148
|
"ContextToolkit",
|
|
206
|
-
"DepsT",
|
|
207
149
|
"Document",
|
|
208
|
-
"Error",
|
|
209
150
|
"FeatureNotSupportedError",
|
|
210
151
|
"FinishReason",
|
|
211
152
|
"Format",
|
|
212
|
-
"FormattableT",
|
|
213
153
|
"FormattingMode",
|
|
154
|
+
"FormattingModeNotSupportedError",
|
|
214
155
|
"Image",
|
|
215
|
-
"Jsonable",
|
|
216
156
|
"Message",
|
|
217
|
-
"
|
|
157
|
+
"MirascopeError",
|
|
218
158
|
"Model",
|
|
219
|
-
"ModelId",
|
|
220
|
-
"NoRegisteredProviderError",
|
|
221
159
|
"NotFoundError",
|
|
222
|
-
"OutputParser",
|
|
223
160
|
"Params",
|
|
224
|
-
"ParseError",
|
|
225
161
|
"Partial",
|
|
226
162
|
"PermissionError",
|
|
227
|
-
"Prompt",
|
|
228
|
-
"PromptDecorator",
|
|
229
|
-
"Provider",
|
|
230
|
-
"ProviderError",
|
|
231
|
-
"ProviderId",
|
|
232
163
|
"RateLimitError",
|
|
233
164
|
"RawMessageChunk",
|
|
234
165
|
"Response",
|
|
235
|
-
"ResponseValidationError",
|
|
236
|
-
"RootResponse",
|
|
237
166
|
"ServerError",
|
|
238
167
|
"Stream",
|
|
239
168
|
"StreamResponse",
|
|
@@ -245,8 +174,6 @@ __all__ = [
|
|
|
245
174
|
"TextEndChunk",
|
|
246
175
|
"TextStartChunk",
|
|
247
176
|
"TextStream",
|
|
248
|
-
"ThinkingConfig",
|
|
249
|
-
"ThinkingLevel",
|
|
250
177
|
"Thought",
|
|
251
178
|
"ThoughtChunk",
|
|
252
179
|
"ThoughtEndChunk",
|
|
@@ -259,36 +186,28 @@ __all__ = [
|
|
|
259
186
|
"ToolCallEndChunk",
|
|
260
187
|
"ToolCallStartChunk",
|
|
261
188
|
"ToolCallStream",
|
|
262
|
-
"ToolError",
|
|
263
|
-
"ToolExecutionError",
|
|
264
189
|
"ToolNotFoundError",
|
|
265
190
|
"ToolOutput",
|
|
266
|
-
"ToolSchema",
|
|
267
191
|
"Toolkit",
|
|
268
|
-
"ToolkitT",
|
|
269
192
|
"URLImageSource",
|
|
270
|
-
"Usage",
|
|
271
|
-
"UsageDeltaChunk",
|
|
272
193
|
"UserContent",
|
|
273
194
|
"UserContentPart",
|
|
274
195
|
"UserMessage",
|
|
275
196
|
"call",
|
|
276
197
|
"calls",
|
|
198
|
+
"client",
|
|
199
|
+
"clients",
|
|
277
200
|
"content",
|
|
278
201
|
"exceptions",
|
|
279
202
|
"format",
|
|
280
203
|
"formatting",
|
|
204
|
+
"get_client",
|
|
281
205
|
"mcp",
|
|
282
206
|
"messages",
|
|
283
207
|
"model",
|
|
284
|
-
"model_from_context",
|
|
285
208
|
"models",
|
|
286
|
-
"output_parser",
|
|
287
209
|
"prompt",
|
|
288
210
|
"prompts",
|
|
289
|
-
"providers",
|
|
290
|
-
"register_provider",
|
|
291
|
-
"reset_provider_registry",
|
|
292
211
|
"responses",
|
|
293
212
|
"tool",
|
|
294
213
|
"tools",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""The Agents module for creating and managing LLM agents."""
|
|
2
|
+
|
|
3
|
+
from .agent import Agent, AsyncAgent, BaseAgent
|
|
4
|
+
from .agent_template import AgentTemplate, AsyncAgentTemplate
|
|
5
|
+
from .decorator import AgentDecorator, agent
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"Agent",
|
|
9
|
+
"AgentDecorator",
|
|
10
|
+
"AgentTemplate",
|
|
11
|
+
"AsyncAgent",
|
|
12
|
+
"AsyncAgentTemplate",
|
|
13
|
+
"BaseAgent",
|
|
14
|
+
"agent",
|
|
15
|
+
]
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""The `Agent` class for LLM agents."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC
|
|
4
|
+
from collections.abc import Sequence
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Generic
|
|
7
|
+
|
|
8
|
+
from ..context import Context, DepsT
|
|
9
|
+
from ..formatting import FormattableT
|
|
10
|
+
from ..messages import UserContent
|
|
11
|
+
from ..models import Model
|
|
12
|
+
from ..responses import AsyncResponse, AsyncStreamResponse, Response, StreamResponse
|
|
13
|
+
from ..tools import AsyncContextTool, AsyncTool, ContextTool, Tool
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class BaseAgent(Generic[DepsT, FormattableT], ABC):
|
|
18
|
+
"""Agent class for generating responses using LLMs with tools."""
|
|
19
|
+
|
|
20
|
+
ctx: Context[DepsT]
|
|
21
|
+
"""The context for the agent, such as the history of messages."""
|
|
22
|
+
|
|
23
|
+
format: type[FormattableT] | None
|
|
24
|
+
"""The response format for the generated response."""
|
|
25
|
+
|
|
26
|
+
model: Model
|
|
27
|
+
"""The default model the agent will use if not specified through context."""
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class Agent(BaseAgent[DepsT, FormattableT]):
|
|
32
|
+
"""Agent class for generating responses using LLMs with tools."""
|
|
33
|
+
|
|
34
|
+
tools: Sequence[Tool | ContextTool[DepsT]] | None
|
|
35
|
+
"""The tools available to the agent, if any."""
|
|
36
|
+
|
|
37
|
+
def __call__(
|
|
38
|
+
self,
|
|
39
|
+
content: UserContent,
|
|
40
|
+
*,
|
|
41
|
+
ctx: Context[DepsT] | None = None,
|
|
42
|
+
) -> Response[FormattableT]:
|
|
43
|
+
"""Generates a response by running the agent loop."""
|
|
44
|
+
raise NotImplementedError()
|
|
45
|
+
|
|
46
|
+
def call(
|
|
47
|
+
self,
|
|
48
|
+
content: UserContent,
|
|
49
|
+
*,
|
|
50
|
+
ctx: Context[DepsT] | None = None,
|
|
51
|
+
) -> Response[FormattableT]:
|
|
52
|
+
"""Generates a response by running the agent loop."""
|
|
53
|
+
raise NotImplementedError()
|
|
54
|
+
|
|
55
|
+
def stream(
|
|
56
|
+
self,
|
|
57
|
+
content: UserContent,
|
|
58
|
+
*,
|
|
59
|
+
ctx: Context[DepsT] | None = None,
|
|
60
|
+
) -> StreamResponse[FormattableT]:
|
|
61
|
+
"""Streams the response generated by running the agent loop."""
|
|
62
|
+
raise NotImplementedError()
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@dataclass
|
|
66
|
+
class AsyncAgent(BaseAgent[DepsT, FormattableT]):
|
|
67
|
+
"""Asynchronous agent class for generating responses using LLMs with tools."""
|
|
68
|
+
|
|
69
|
+
tools: Sequence[AsyncTool | AsyncContextTool[DepsT]] | None
|
|
70
|
+
"""The tools available to the agent, if any."""
|
|
71
|
+
|
|
72
|
+
async def __call__(
|
|
73
|
+
self,
|
|
74
|
+
content: UserContent,
|
|
75
|
+
*,
|
|
76
|
+
ctx: Context[DepsT] | None = None,
|
|
77
|
+
) -> AsyncResponse[FormattableT]:
|
|
78
|
+
"""Generates a response by running the agent loop asynchronously."""
|
|
79
|
+
raise NotImplementedError()
|
|
80
|
+
|
|
81
|
+
async def call(
|
|
82
|
+
self,
|
|
83
|
+
content: UserContent,
|
|
84
|
+
*,
|
|
85
|
+
ctx: Context[DepsT] | None = None,
|
|
86
|
+
) -> AsyncResponse[FormattableT]:
|
|
87
|
+
"""Generates a response by running the agent loop asynchronously."""
|
|
88
|
+
raise NotImplementedError()
|
|
89
|
+
|
|
90
|
+
async def stream(
|
|
91
|
+
self,
|
|
92
|
+
content: UserContent,
|
|
93
|
+
*,
|
|
94
|
+
ctx: Context[DepsT] | None = None,
|
|
95
|
+
) -> AsyncStreamResponse[FormattableT]:
|
|
96
|
+
"""Streams the response generated by running the agent loop asynchronously."""
|
|
97
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from typing import Generic, overload
|
|
2
|
+
|
|
3
|
+
from ..context import DepsT
|
|
4
|
+
from ..formatting import FormattableT
|
|
5
|
+
from .agent import Agent, AsyncAgent
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AgentTemplate(Generic[DepsT, FormattableT]):
|
|
9
|
+
@overload
|
|
10
|
+
def __call__(
|
|
11
|
+
self: "AgentTemplate[None, FormattableT]",
|
|
12
|
+
) -> Agent[None, FormattableT]:
|
|
13
|
+
"""Create an Agent with no deps"""
|
|
14
|
+
|
|
15
|
+
@overload
|
|
16
|
+
def __call__(
|
|
17
|
+
self: "AgentTemplate[DepsT, FormattableT]", deps: DepsT
|
|
18
|
+
) -> Agent[DepsT, FormattableT]:
|
|
19
|
+
"""Create an Agent with deps"""
|
|
20
|
+
|
|
21
|
+
def __call__(
|
|
22
|
+
self: "AgentTemplate[None, FormattableT] | AgentTemplate[DepsT, FormattableT]",
|
|
23
|
+
deps: DepsT | None = None,
|
|
24
|
+
) -> Agent[None, FormattableT] | Agent[DepsT, FormattableT]:
|
|
25
|
+
raise NotImplementedError()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class AsyncAgentTemplate(Generic[DepsT, FormattableT]):
|
|
29
|
+
@overload
|
|
30
|
+
async def __call__(
|
|
31
|
+
self: "AsyncAgentTemplate[None, FormattableT]",
|
|
32
|
+
) -> AsyncAgent[None, FormattableT]:
|
|
33
|
+
"""Create an AsyncAgent with no deps"""
|
|
34
|
+
|
|
35
|
+
@overload
|
|
36
|
+
async def __call__(
|
|
37
|
+
self: "AsyncAgentTemplate[DepsT, FormattableT]", deps: DepsT
|
|
38
|
+
) -> AsyncAgent[DepsT, FormattableT]:
|
|
39
|
+
"""Create an AsyncAgent with deps"""
|
|
40
|
+
|
|
41
|
+
async def __call__(
|
|
42
|
+
self: "AsyncAgentTemplate[None, FormattableT] | AsyncAgentTemplate[DepsT, FormattableT]",
|
|
43
|
+
deps: DepsT | None = None,
|
|
44
|
+
) -> AsyncAgent[None, FormattableT] | AsyncAgent[DepsT, FormattableT]:
|
|
45
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"""The `llm.agent` decorator for turning a function into an agent."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Literal, Protocol, overload
|
|
6
|
+
from typing_extensions import TypeVar, Unpack
|
|
7
|
+
|
|
8
|
+
from ..tools import AsyncContextTool, AsyncTool, ContextTool, Tool
|
|
9
|
+
from .agent_template import AgentTemplate, AsyncAgentTemplate
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from ..clients import (
|
|
13
|
+
AnthropicClient,
|
|
14
|
+
AnthropicModelId,
|
|
15
|
+
BaseClient,
|
|
16
|
+
GoogleClient,
|
|
17
|
+
GoogleModelId,
|
|
18
|
+
ModelId,
|
|
19
|
+
OpenAICompletionsClient,
|
|
20
|
+
OpenAICompletionsModelId,
|
|
21
|
+
Params,
|
|
22
|
+
Provider,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
from ..context import Context, DepsT
|
|
26
|
+
from ..formatting import FormattableT
|
|
27
|
+
from ..types import P
|
|
28
|
+
|
|
29
|
+
AgentToolT = TypeVar(
|
|
30
|
+
"AgentToolT",
|
|
31
|
+
bound="Tool | AsyncTool | ContextTool[Any] | AsyncContextTool[Any] | None",
|
|
32
|
+
covariant=True,
|
|
33
|
+
default=None,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class SystemPrompt(Protocol[P]):
|
|
38
|
+
"""Protocol for a prompt template function that returns a system prompt as a string (no context)."""
|
|
39
|
+
|
|
40
|
+
def __call__(self) -> str: ...
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ContextSystemPrompt(Protocol[P, DepsT]):
|
|
44
|
+
"""Protocol for a prompt template function that returns a system prompt as a string (with context)."""
|
|
45
|
+
|
|
46
|
+
def __call__(self, ctx: Context[DepsT]) -> str: ...
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class AsyncSystemPrompt(Protocol[P]):
|
|
50
|
+
"""Protocol for an async prompt template function that returns a system prompt as a string (no context)."""
|
|
51
|
+
|
|
52
|
+
async def __call__(self) -> str: ...
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class AsyncContextSystemPrompt(Protocol[P, DepsT]):
|
|
56
|
+
"""Protocol for an async prompt template function that returns a system prompt as a string (with context)."""
|
|
57
|
+
|
|
58
|
+
async def __call__(self, ctx: Context[DepsT]) -> str: ...
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class AgentDecorator(Protocol[P, AgentToolT, FormattableT]):
|
|
62
|
+
"""Protocol for the `agent` decorator."""
|
|
63
|
+
|
|
64
|
+
@overload
|
|
65
|
+
def __call__(
|
|
66
|
+
self: AgentDecorator[
|
|
67
|
+
P,
|
|
68
|
+
None | Tool | ContextTool[DepsT],
|
|
69
|
+
FormattableT,
|
|
70
|
+
],
|
|
71
|
+
fn: SystemPrompt[P] | ContextSystemPrompt[P, DepsT],
|
|
72
|
+
) -> AgentTemplate[DepsT, FormattableT]:
|
|
73
|
+
"""Decorator for creating a sync agent."""
|
|
74
|
+
...
|
|
75
|
+
|
|
76
|
+
@overload
|
|
77
|
+
def __call__(
|
|
78
|
+
self: AgentDecorator[
|
|
79
|
+
P,
|
|
80
|
+
None | AsyncTool | AsyncContextTool[DepsT],
|
|
81
|
+
FormattableT,
|
|
82
|
+
],
|
|
83
|
+
fn: AsyncSystemPrompt[P] | AsyncContextSystemPrompt[P, DepsT],
|
|
84
|
+
) -> AsyncAgentTemplate[DepsT, FormattableT]:
|
|
85
|
+
"""Decorator for creating an async agent."""
|
|
86
|
+
...
|
|
87
|
+
|
|
88
|
+
def __call__(
|
|
89
|
+
self,
|
|
90
|
+
fn: SystemPrompt[P]
|
|
91
|
+
| ContextSystemPrompt[P, DepsT]
|
|
92
|
+
| AsyncSystemPrompt[P]
|
|
93
|
+
| AsyncContextSystemPrompt[P, DepsT],
|
|
94
|
+
) -> AgentTemplate[DepsT, FormattableT] | AsyncAgentTemplate[DepsT, FormattableT]:
|
|
95
|
+
"""Decorator for creating an agent."""
|
|
96
|
+
raise NotImplementedError()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@overload
|
|
100
|
+
def agent(
|
|
101
|
+
*,
|
|
102
|
+
provider: Literal["anthropic"],
|
|
103
|
+
model_id: AnthropicModelId,
|
|
104
|
+
tools: list[AgentToolT] | None = None,
|
|
105
|
+
format: type[FormattableT] | None = None,
|
|
106
|
+
client: AnthropicClient | None = None,
|
|
107
|
+
**params: Unpack[Params],
|
|
108
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
109
|
+
"""Decorator for creating an Anthropic agent."""
|
|
110
|
+
...
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@overload
|
|
114
|
+
def agent(
|
|
115
|
+
*,
|
|
116
|
+
provider: Literal["google"],
|
|
117
|
+
model_id: GoogleModelId,
|
|
118
|
+
tools: list[AgentToolT] | None = None,
|
|
119
|
+
format: type[FormattableT] | None = None,
|
|
120
|
+
client: GoogleClient | None = None,
|
|
121
|
+
**params: Unpack[Params],
|
|
122
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
123
|
+
"""Decorator for creating a Google agent."""
|
|
124
|
+
...
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@overload
|
|
128
|
+
def agent(
|
|
129
|
+
*,
|
|
130
|
+
provider: Literal["openai:completions"],
|
|
131
|
+
model_id: OpenAICompletionsModelId,
|
|
132
|
+
tools: list[AgentToolT] | None = None,
|
|
133
|
+
format: type[FormattableT] | None = None,
|
|
134
|
+
client: OpenAICompletionsClient | None = None,
|
|
135
|
+
**params: Unpack[Params],
|
|
136
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
137
|
+
"""Decorator for creating an OpenAI agent."""
|
|
138
|
+
...
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@overload
|
|
142
|
+
def agent(
|
|
143
|
+
*,
|
|
144
|
+
provider: Provider,
|
|
145
|
+
model_id: ModelId,
|
|
146
|
+
tools: list[AgentToolT] | None = None,
|
|
147
|
+
format: type[FormattableT] | None = None,
|
|
148
|
+
client: None = None,
|
|
149
|
+
**params: Unpack[Params],
|
|
150
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
151
|
+
"""Decorator for creating an agent using any registered model."""
|
|
152
|
+
...
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def agent(
|
|
156
|
+
*,
|
|
157
|
+
provider: Provider,
|
|
158
|
+
model_id: ModelId,
|
|
159
|
+
tools: list[AgentToolT] | None = None,
|
|
160
|
+
format: type[FormattableT] | None = None,
|
|
161
|
+
client: BaseClient | None = None,
|
|
162
|
+
**params: Unpack[Params],
|
|
163
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
164
|
+
"""Decorator for creating an agent or structured agent.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
model_id: The model to use for the agent.
|
|
168
|
+
tools: The tools available to the agent.
|
|
169
|
+
format: The response format type for the agent.
|
|
170
|
+
client: The client to use for the agent.
|
|
171
|
+
**params: Additional parameters for the model.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
An of `AgentDecorator`.
|
|
175
|
+
"""
|
|
176
|
+
raise NotImplementedError()
|
mirascope/llm/calls/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""The `llm.calls` module."""
|
|
2
2
|
|
|
3
|
-
from .calls import AsyncCall, AsyncContextCall, Call,
|
|
3
|
+
from .calls import AsyncCall, AsyncContextCall, Call, ContextCall
|
|
4
4
|
from .decorator import (
|
|
5
5
|
CallDecorator,
|
|
6
6
|
call,
|
|
@@ -11,7 +11,6 @@ __all__ = [
|
|
|
11
11
|
"AsyncContextCall",
|
|
12
12
|
"Call",
|
|
13
13
|
"CallDecorator",
|
|
14
|
-
"CallT",
|
|
15
14
|
"ContextCall",
|
|
16
15
|
"call",
|
|
17
16
|
]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""The `BaseCall` class for LLM calls."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import Generic
|
|
6
|
+
|
|
7
|
+
from ..formatting import Format, FormattableT
|
|
8
|
+
from ..models import Model, get_model_from_context
|
|
9
|
+
from ..prompts import PromptT
|
|
10
|
+
from ..tools import ToolkitT
|
|
11
|
+
from ..types import P
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class BaseCall(Generic[P, PromptT, ToolkitT, FormattableT], ABC):
|
|
16
|
+
"""A base class for generating responses using LLMs."""
|
|
17
|
+
|
|
18
|
+
default_model: Model
|
|
19
|
+
"""The default model that will be used if no model is set in context."""
|
|
20
|
+
|
|
21
|
+
toolkit: ToolkitT
|
|
22
|
+
"""The toolkit containing this call's tools."""
|
|
23
|
+
|
|
24
|
+
format: type[FormattableT] | Format[FormattableT] | None
|
|
25
|
+
"""The response format for the generated response."""
|
|
26
|
+
|
|
27
|
+
fn: PromptT
|
|
28
|
+
"""The Prompt function that generates the Prompt."""
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def model(self) -> Model:
|
|
32
|
+
"""The model used for generating responses. May be overwritten via `with llm.model(...)."""
|
|
33
|
+
return get_model_from_context() or self.default_model
|